diff --git a/.gitignore b/.gitignore index 462b8ac..fe1a300 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1 @@ frysk-0.4.tar.bz2 -clog -*.rpm -frysk-0.4 -results.* diff --git a/Makefile b/Makefile deleted file mode 100644 index d4762db..0000000 --- a/Makefile +++ /dev/null @@ -1,139 +0,0 @@ -# Make mock usable. The only standard target is mockbuild which -# doesn't do what you typically want. - -# Somewhat superseeded by fedpkg - -BRANCH := $(shell fedpkg switch-branch | sed -n -e 's/ f/ /' -e 's/main/rawhide/' -e 's/^\* //p') -SPEC_FILE = $(shell fedpkg gimmespec) - -# VERREL is very slow -VERREL := $(shell fedpkg verrel) -VERREL_WORDS := $(shell fedpkg verrel | sed -e 's/^\(.*\)\-\([^-]*\)\.\([^.]*\)$$/\1 \2 \3/') -DIST = $(word 1, $(VERREL_WORDS)) -SPEC_VERSION = $(word 2, $(VERREL_WORDS)) -SPEC_RELEASE = $(word 3, $(VERREL_WORDS)) -SPEC_SOURCES = $(shell awk '{print $$2}' sources) - -# Order that dependent libraries need to be built and installed. - -comma := , -empty := -space := $(empty) $(empty) - -ORDER = \ - glib-java \ - cairo-java \ - libgtk-java \ - libgconf-java \ - libvte-java libgnome-java \ - libglade-java \ - frysk - -MOCKCFG = fedora-$(BRANCH)-x86_64 -#MOCKCFG = jvanek-java11-fedora-rawhide-x86_64 -MOCK_WORDS := $(subst -, , $(MOCKCFG)) -MOCK_OS := $(word 1,$(MOCK_WORDS)) -MOCK_RELEASE := $(word 2,$(MOCK_WORDS)) -MOCK_ARCH := $(word 3,$(MOCK_WORDS)) -MOCK_RESULTS := results.$(MOCKCFG) - -ARCH := $(if $(findstring i386,$(MOCK_ARCH)),i686,$(MOCK_ARCH)) - -# --offline? -NO_CLEAN := --no-clean --no-cleanup-after -MOCK := /usr/bin/mock $(MOCKARGS) -r $(MOCKCFG) --resultdir=$(MOCK_RESULTS) - -SOURCES = *.spec *.patch $(SPEC_SOURCES) - -SRPM = $(VERREL).src.rpm -RPM = $(VERREL).$(ARCH).rpm - -help: - @echo "targets" - @echo "" - @echo " init: Initialize the $(MOCKCFG) chroot (if needed)" - @echo " build: Build, logs in $(MOCK_RESULTS)" - @echo " deploy: Build/Deploy $(ARCH) package" - @echo " useful: Install some missing applications" - @echo " shell: Start a shell in the chroot" - @echo "" - @echo " clean: Purge the $(ARCH) chroot tree" - @echo " scrub: Completely purge the chroot tree, yum, everything" - @echo "" - @echo " update: Run yum update in the chroot" - @echo " orphanskill: Kill any stray processes from the build" - @echo " installdeps: Install dependencies for this package" - @echo " lint: runs lint over the rpm" - @echo " install MOCKARGS=...: install ... into chroot" - @echo "" - @echo " scratch: Do a scratch build of the SRPM in bodhi" - @echo "" - @echo "Use MOCKARGS= for extra arguments" -.PHONY:: help - -init: - $(MOCK) -q --chroot pwd \ - || $(MOCK) --init -.PHONY:: init - -mock build $(MOCK_RESULTS)/$(RPM): init $(SOURCES) - rm -f $(MOCK_RESULTS)/*.src.rpm - $(MOCK) $(NO_CLEAN) --buildsrpm --spec $(SPEC_FILE) --sources $(PWD) - $(MOCK) $(NO_CLEAN) --rebuild $(MOCK_RESULTS)/*.src.rpm -.PHONY:: build - -# rpmspec -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}\n' $(SPEC_FILE) -deploy: $(MOCK_RESULTS)/$(RPM) - $(MOCK) -q --chroot 'rm -f /tmp/*.rpm' - for rpm in $(MOCK_RESULTS)/*.rpm ; do \ - case $$rpm in \ - *.src.rpm | *-debuginfo-* ) ;; \ - * ) $(MOCK) -q --copyin $$rpm /tmp ;; \ - esac ; \ - done - $(MOCK) -q --chroot "rpm -Uvh --force /tmp/*.rpm" -.PHONY:: deploy - -$(SPEC_SOURCES): - fedpkg sources - -world gnome: - set -e ; \ - for d in $(ORDER) ; do \ - pushd ../$$d ; \ - $(MAKE) -f $(PWD)/Makefile deploy ; \ - popd ; \ - done -.PHONY:: world - -usable useful: init - $(MOCK) install vi less strace emacs git nss-devel libevent-devel unbound-devel bison libcurl-devel pam-devel libselinux-devel libseccomp-devel systemd-devel libcap-ng-devel ldns-devel -.PHONY:: usable useful - -clog prep: - fedpkg $@ -.PHONY:: clog prep - -lint: - fedpkg lint -.PHONY:: lint - -scratch: $(SRPM) - fedpkg scratch-build --srpm $(SRPM) -.PHONY:: scratch - -srpm: $(SRPM) -.PHONY:: srpm -$(SRPM): $(SOURCES) - fedpkg srpm - -clean: - $(MOCK) --$@ $(ARGS) $(PACKAGE) - rm -rf $(MOCK_RESULTS) -.PHONY:: clean - -scrub: - $(MOCK) --$@=all $(ARGS) -shell install update remove orphanskill copyin copyout: - $(MOCK) --$@ $(ARGS) $(PACKAGE) -.PHONY:: shell install update remove orphanskill scrub copyin copyout diff --git a/README b/README index d31ebf6..0776576 100644 --- a/README +++ b/README @@ -1,54 +1,3 @@ -This week's URLs: - - The build system: - https://koji.fedoraproject.org/koji/packageinfo?packageID=100 - to login see: - https://fedoraproject.org/wiki/Infrastructure/Kerberos?rd=Infrastructure_kerberos_authentication - i.e., - kinit @FEDORAPROJECT.ORG - klist -A - - The account system, login here first? - https://admin.fedoraproject.org - - The FRYSK package and who is maintaining it: - https://src.fedoraproject.org/rpms/frysk - - Pushing updates (seems to have replaced admin.): - https://bodhi.fedoraproject.org/ - -Fixing Fedora so it can do local and remote builds: - -- install fedora-packager - -For a local native build: - - $ fedpkg compile - -To do a scratch build in the build system: - - $ fedpkg srpm - $ fedpkg scratch-build --srpm BLAH.src.rpm - -If you get this: - - $ fedpkg scratch-build ... - Could not execute scratch_build: [('SSL routines', 'SSL3_READ_BYTES', 'sslv3 alert certificate expired'), ('SSL routines', 'SSL3_READ_BYTES', 'ssl handshake failure')] - -try this: - - $ fedora-cert - Certificate has expired, getting a new one - FAS Password: - -To build in a local chroot aka mock, start with: - - gmake help - - - - - Updating the frysk rpm in Fedora (by Sami) Before doing this make sure you have a fedora account and that your diff --git a/frysk-0.4-49-elf-newehdr-null.patch b/frysk-0.4-49-elf-newehdr-null.patch deleted file mode 100644 index 37e0eba..0000000 --- a/frysk-0.4-49-elf-newehdr-null.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/frysk-sys/lib/dwfl/jni/Elf.cxx b/frysk-sys/lib/dwfl/jni/Elf.cxx -index c22fa58ee..92f19417b 100644 ---- a/frysk-sys/lib/dwfl/jni/Elf.cxx -+++ b/frysk-sys/lib/dwfl/jni/Elf.cxx -@@ -174,7 +174,7 @@ lib::dwfl::Elf::elf_newehdr(jnixx::env env, jint wordSize) { - runtimeException(env, "Bad parameter to elf_newehdr (word size %d)", - wordSize); - } -- if (::gelf_newehdr(elf, elfClass) < 0) -+ if (::gelf_newehdr(elf, elfClass) == NULL) - throw_last_elf_error(env); - } - diff --git a/frysk-0.4-50-autoconf-2-70-fixes.patch b/frysk-0.4-50-autoconf-2-70-fixes.patch deleted file mode 100644 index a9ed3f0..0000000 --- a/frysk-0.4-50-autoconf-2-70-fixes.patch +++ /dev/null @@ -1,119 +0,0 @@ -diff --git a/frysk-common/frysk-common.ac b/frysk-common/frysk-common.ac -index c9a2be863..7e0bbb0d0 100644 ---- a/frysk-common/frysk-common.ac -+++ b/frysk-common/frysk-common.ac -@@ -89,13 +89,13 @@ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/$lib/frysk/pkgconfig - - # Check for XMLLINT - AC_CHECK_PROGS([XMLLINT], [xmllint], [no]) --test $XMLLINT = no && AC_ERROR([no xmllint program found]) -+test $XMLLINT = no && AC_MSG_ERROR([no xmllint program found]) - AC_CHECK_PROGS([XMLCATALOG], [xmlcatalog], [no]) --test $XMLCATALOG = no && AC_ERROR([no xmlcatalog program found]) -+test $XMLCATALOG = no && AC_MSG_ERROR([no xmlcatalog program found]) - - # Check for uudecode - AC_CHECK_PROGS([UUDECODE], [uudecode], [no]) --test $UUDECODE = no && AC_ERROR([no uudecode program found, please install sharutils package]) -+test $UUDECODE = no && AC_MSG_ERROR([no uudecode program found, please install sharutils package]) - - FRYSK_USE_LIBUNWIND - -diff --git a/frysk-core/configure.ac b/frysk-core/configure.ac -index 69fc220b3..d0fe07c3a 100644 ---- a/frysk-core/configure.ac -+++ b/frysk-core/configure.ac -@@ -37,7 +37,7 @@ - # version and license this file solely under the GPL without - # exception. - --AC_PREREQ(2.59) -+AC_PREREQ([2.69]) - - sinclude(common/version.ac) - AC_INIT(frysk, [FRYSK_VERSION]) -diff --git a/frysk-gtk/configure.ac b/frysk-gtk/configure.ac -index aaa123f82..55c592ebf 100644 ---- a/frysk-gtk/configure.ac -+++ b/frysk-gtk/configure.ac -@@ -36,7 +36,7 @@ - # version and license this file solely under the GPL without - # exception. - --AC_PREREQ(2.59) -+AC_PREREQ([2.69]) - - sinclude(common/version.ac) - AC_INIT(frysk, [FRYSK_VERSION]) -diff --git a/frysk-gui/configure.ac b/frysk-gui/configure.ac -index 9a274c68b..ec5950d2a 100644 ---- a/frysk-gui/configure.ac -+++ b/frysk-gui/configure.ac -@@ -36,7 +36,7 @@ - # version and license this file solely under the GPL without - # exception. - --AC_PREREQ(2.59) -+AC_PREREQ([2.69]) - - sinclude(common/version.ac) - AC_INIT(frysk, [FRYSK_VERSION]) -diff --git a/frysk-imports/configure.ac b/frysk-imports/configure.ac -index b9a6c32c3..e65f4c433 100644 ---- a/frysk-imports/configure.ac -+++ b/frysk-imports/configure.ac -@@ -37,7 +37,7 @@ - # version and license this file solely under the GPL without - # exception. - --AC_PREREQ(2.59) -+AC_PREREQ([2.69]) - - sinclude(common/version.ac) - AC_INIT(frysk, [FRYSK_VERSION]) -diff --git a/frysk-imports/libunwind/configure.ac b/frysk-imports/libunwind/configure.ac -index 7fa2e4bcf..37c9072a0 100644 ---- a/frysk-imports/libunwind/configure.ac -+++ b/frysk-imports/libunwind/configure.ac -@@ -57,7 +57,6 @@ esac - CHECK_ATOMIC_OPS - - dnl Checks for header files. --AC_HEADER_STDC - AC_CHECK_HEADERS(asm/ptrace_offsets.h endian.h sys/endian.h execinfo.h \ - ia64intrin.h sys/uc_access.h unistd.h signal.h sys/types.h \ - sys/procfs.h sys/ptrace.h byteswap.h elf.h sys/elf.h link.h sys/link.h) -diff --git a/frysk-sys/configure.ac b/frysk-sys/configure.ac -index 6a1e0cad8..4f838439d 100644 ---- a/frysk-sys/configure.ac -+++ b/frysk-sys/configure.ac -@@ -36,7 +36,7 @@ - # version and license this file solely under the GPL without - # exception. - --AC_PREREQ(2.59) -+AC_PREREQ([2.69]) - - sinclude(common/version.ac) - AC_INIT(frysk, [FRYSK_VERSION]) -diff --git a/frysk-top/configure.ac b/frysk-top/configure.ac -index f57136a56..ee68665d3 100644 ---- a/frysk-top/configure.ac -+++ b/frysk-top/configure.ac -@@ -36,14 +36,14 @@ - # version and license this file solely under the GPL without - # exception. - --AC_PREREQ(2.59) -+AC_PREREQ([2.69]) - - sinclude(common/version.ac) - AC_INIT(frysk,defn([FRYSK_VERSION])) - m4_include([common/frysk-common.ac]) - - AC_ARG_ENABLE(gnome, --AC_HELP_STRING( -+AS_HELP_STRING( - [--enable-gnome], - [enable gnome user interface (default no)]), - [enable_gnome=$enableval], diff --git a/frysk-0.4-51-debugedit-path.patch b/frysk-0.4-51-debugedit-path.patch deleted file mode 100644 index 08833c6..0000000 --- a/frysk-0.4-51-debugedit-path.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- frysk-0.4/frysk-core/Makefile.am.orig 2021-08-05 14:51:10.741080868 -0400 -+++ frysk-0.4/frysk-core/Makefile.am 2021-08-05 14:51:29.595873910 -0400 -@@ -225,8 +225,8 @@ - (cd $@/usr/src/debug; \ - $(COMPILE) funit-bubblesort.c -fpic -shared -o ../../lib/libbubble.so -g; \ - $(COMPILE) funit-quicksort.c -L ../../lib -lbubble -g -o ../../bin/funit-quicksort -DNO_MAIN) -- /usr/lib/rpm/debugedit -b $(abspath $@) -d / $@/usr/bin/funit-quicksort -- /usr/lib/rpm/debugedit -b $(abspath $@) -d / $@/usr/lib/libbubble.so -+ debugedit -b $(abspath $@) -d / $@/usr/bin/funit-quicksort -+ debugedit -b $(abspath $@) -d / $@/usr/lib/libbubble.so - eu-strip --remove-comment -f $@/usr/lib/debug/usr/bin/funit-quicksort.debug $@/usr/bin/funit-quicksort; \ - eu-strip --remove-comment -f $@/usr/lib/debug/usr/lib/funit-bubblesort.debug $@/usr/lib/libbubble.so; - diff --git a/frysk-0.4-52-libunwind-tests.patch b/frysk-0.4-52-libunwind-tests.patch deleted file mode 100644 index 5adf6d2..0000000 --- a/frysk-0.4-52-libunwind-tests.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/frysk-imports/libunwind/Makefile.am b/frysk-imports/libunwind/Makefile.am -index 6a3ed9e78..d0a23a569 100644 ---- frysk-0.4/frysk-imports/libunwind/Makefile.am.orig -+++ frysk-0.4/frysk-imports/libunwind/Makefile.am -@@ -42,7 +42,7 @@ endif - - nodist_include_HEADERS = include/libunwind-common.h - --SUBDIRS = src tests -+SUBDIRS = src - - if CONFIG_DOCS - SUBDIRS += doc diff --git a/frysk-0.4-53-no-new-integer.patch b/frysk-0.4-53-no-new-integer.patch deleted file mode 100644 index 480d58d..0000000 --- a/frysk-0.4-53-no-new-integer.patch +++ /dev/null @@ -1,1622 +0,0 @@ -diff --git a/frysk-common/antlr-warnings.awk b/frysk-common/antlr-warnings.awk -index 6656fb721..fcd01131e 100644 ---- a/frysk-common/antlr-warnings.awk -+++ b/frysk-common/antlr-warnings.awk -@@ -106,6 +106,16 @@ function sed_comment(code) { - return "s," code ",// " code "," - } - -+# warning: [removal] Integer(int) in Integer has been deprecated and marked for removal -+prob ~ /Integer.int. in Integer has been deprecated/ { -+ sed = "s,new Integer(,Integer.valueOf(," -+} -+ -+# warning: [removal] Long(long) in Long has been deprecated and marked for removal -+prob ~ /Long.long. in Long has been deprecated/ { -+ sed = "s,new Long(,Long.valueOf(," -+} -+ - prob ~ /Unnecessary semicolon/ || prob ~ /An empty declaration is a deprecated feature/ { - if (code ~ /};/) { - sed = "s,};,} // ;," -diff --git a/frysk-core/frysk/bindir/fstack.java b/frysk-core/frysk/bindir/fstack.java -index a945fcaa7..18ddad26f 100644 ---- a/frysk-core/frysk/bindir/fstack.java -+++ b/frysk-core/frysk/bindir/fstack.java -@@ -88,7 +88,7 @@ public final class fstack { - - TreeMap sortedTasks = new TreeMap(); - for (int i=0; i>> operand1)); -+ stack.addFirst(Long.valueOf(operand2 >>> operand1)); - break; - - case DwOp.SHRA_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long(operand2 >> operand1)); -+ stack.addFirst(Long.valueOf(operand2 >> operand1)); - break; - - case DwOp.XOR_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long(operand1 ^ operand2)); -+ stack.addFirst(Long.valueOf(operand1 ^ operand2)); - break; - - case DwOp.NEG_: - operand1 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long(0-operand1)); -+ stack.addFirst(Long.valueOf(0-operand1)); - break; - - case DwOp.NOT_: - operand1 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long(~operand1)); -+ stack.addFirst(Long.valueOf(~operand1)); - break; - - // Control flow operations - case DwOp.LE_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long((operand2 <= operand1)? 1:0)); -+ stack.addFirst(Long.valueOf((operand2 <= operand1)? 1:0)); - break; - - case DwOp.GE_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long((operand2 >= operand1)? 1:0)); -+ stack.addFirst(Long.valueOf((operand2 >= operand1)? 1:0)); - break; - - case DwOp.EQ_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long((operand2 == operand1)? 1:0)); -+ stack.addFirst(Long.valueOf((operand2 == operand1)? 1:0)); - break; - - case DwOp.LT_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long((operand2 < operand1)? 1:0)); -+ stack.addFirst(Long.valueOf((operand2 < operand1)? 1:0)); - break; - - case DwOp.GT_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long((operand2 > operand1)? 1:0)); -+ stack.addFirst(Long.valueOf((operand2 > operand1)? 1:0)); - break; - - case DwOp.NE_: - operand1 = ((Long)stack.removeFirst()).longValue(); - operand2 = ((Long)stack.removeFirst()).longValue(); -- stack.addFirst(new Long((operand2 != operand1)? 1:0)); -+ stack.addFirst(Long.valueOf((operand2 != operand1)? 1:0)); - break; - - //Special Operations -diff --git a/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java b/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java -index c803bdcdd..d705aeb3f 100644 ---- a/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java -+++ b/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java -@@ -325,13 +325,13 @@ public class TestDebugInfoStackTrace - DebugInfoFrame frame = DebugInfoStackFactory.createDebugInfoStackTrace(myTask); - - if (frame.getLine() == SourceLocation.UNKNOWN) { -- this.lineMap.put(myTask, new Integer(0)); -+ this.lineMap.put(myTask, Integer.valueOf(0)); - steppingEngine.stepLine(myTask.getProc().getTasks()); - return; - } - - SourceLocation line = frame.getLine(); -- this.lineMap.put(myTask, new Integer(line.getLine())); -+ this.lineMap.put(myTask, Integer.valueOf(line.getLine())); - steppingEngine.stepLine(myTask.getProc().getTasks()); - } - -@@ -514,7 +514,7 @@ public class TestDebugInfoStackTrace - line = sFrame.getLine(); - lineNum = line.getLine(); - } -- this.lineMap.put(myTask, new Integer(lineNum)); -+ this.lineMap.put(myTask, Integer.valueOf(lineNum)); - if (this.testState == PUSH) - this.testState = PUSH_GO; - else if (this.testState == POP) -@@ -529,7 +529,7 @@ public class TestDebugInfoStackTrace - if (this.testState != PUSH_STEPPING && this.testState != POP_STEPPING) - { - int prev = ((Integer) this.lineMap.get(myTask)).intValue(); -- this.lineMap.put(myTask, new Integer(line.getLine())); -+ this.lineMap.put(myTask, Integer.valueOf(line.getLine())); - - if (this.testState == PUSH_GO) - { -diff --git a/frysk-core/frysk/debuginfo/TypeFactory.java b/frysk-core/frysk/debuginfo/TypeFactory.java -index 26bcb3162..5d833cced 100644 ---- a/frysk-core/frysk/debuginfo/TypeFactory.java -+++ b/frysk-core/frysk/debuginfo/TypeFactory.java -@@ -115,7 +115,7 @@ public class TypeFactory { - ArrayList dims = new ArrayList(); - while (subrange != null) { - int arrDim = subrange.getAttrConstant(DwAt.UPPER_BOUND); -- dims.add(new Integer(arrDim)); -+ dims.add(Integer.valueOf(arrDim)); - subrange = subrange.getSibling(); - elementCount *= arrDim + 1; - } -@@ -254,7 +254,7 @@ public class TypeFactory { - else - type = new GccStructOrClassType(name, getByteSize(classDie)); - -- dieHash.put(new Long(classDie.getOffset()), type); -+ dieHash.put(Long.valueOf(classDie.getOffset()), type); - addMembers(classDie, type); - - return type; -@@ -272,7 +272,7 @@ public class TypeFactory { - dumpDie("classDie=", classDie); - - ClassType classType = new ClassType(name, getByteSize(classDie)); -- dieHash.put(new Long(classDie.getOffset()), classType); -+ dieHash.put(Long.valueOf(classDie.getOffset()), classType); - addMembers(classDie, classType); - return classType; - } -@@ -320,7 +320,7 @@ public class TypeFactory { - dumpDie("unionDie=", classDie); - - UnionType classType = new UnionType(name, getByteSize(classDie)); -- dieHash.put(new Long(classDie.getOffset()), classType); -+ dieHash.put(Long.valueOf(classDie.getOffset()), classType); - - for (DwarfDie member = classDie.getChild(); - member != null; -@@ -434,14 +434,14 @@ public class TypeFactory { - } else - type = typeDie; - -- Type mappedType = (Type) dieHash.get(new Long(type.getOffset())); -+ Type mappedType = (Type) dieHash.get(Long.valueOf(type.getOffset())); - if (mappedType != null) - return mappedType; -- else if (dieHash.containsKey(new Long(type.getOffset()))) { -+ else if (dieHash.containsKey(Long.valueOf(type.getOffset()))) { - // This is a self reference -- return (Type)dieHash.get(new Long(type.getOffset())); -+ return (Type)dieHash.get(Long.valueOf(type.getOffset())); - } -- dieHash.put(new Long(type.getOffset()), null); -+ dieHash.put(Long.valueOf(type.getOffset()), null); - Type returnType = null; - - switch (type.getTag().hashCode()) { -@@ -536,7 +536,7 @@ public class TypeFactory { - } - - if (returnType != null) { -- dieHash.put(new Long(type.getOffset()), returnType); -+ dieHash.put(Long.valueOf(type.getOffset()), returnType); - return returnType; - } else - return new UnknownType(typeDie.getName()); -diff --git a/frysk-core/frysk/expr/FQIdentifier.java b/frysk-core/frysk/expr/FQIdentifier.java -index 8a58dd4fc..3611276af 100644 ---- a/frysk-core/frysk/expr/FQIdentifier.java -+++ b/frysk-core/frysk/expr/FQIdentifier.java -@@ -88,14 +88,14 @@ public class FQIdentifier { - if (tok.threadId == null || tok.frameNumber == null) - throw new AssertionError("Either I need a pid, a tid, AND a " + - "frame number, or neither of them."); -- this.processId = new Long(Long.parseLong(tok.processId, 10)); -- this.threadId = new Long(Long.parseLong(tok.threadId, 10)); -- this.frameNumber = new Long(Long.parseLong(tok.frameNumber, 10)); -+ this.processId = Long.valueOf(Long.parseLong(tok.processId, 10)); -+ this.threadId = Long.valueOf(Long.parseLong(tok.threadId, 10)); -+ this.frameNumber = Long.valueOf(Long.parseLong(tok.frameNumber, 10)); - } else - this.processId = this.threadId = this.frameNumber = null; - - if (tok.line != null) -- this.line = new Long(Long.parseLong(tok.line, 10)); -+ this.line = Long.valueOf(Long.parseLong(tok.line, 10)); - else - this.line = null; - -diff --git a/frysk-core/frysk/expr/TestbedSymTab.java b/frysk-core/frysk/expr/TestbedSymTab.java -index b89051d6a..b1747185a 100644 ---- a/frysk-core/frysk/expr/TestbedSymTab.java -+++ b/frysk-core/frysk/expr/TestbedSymTab.java -@@ -78,7 +78,7 @@ public class TestbedSymTab implements ExprSymTab { - - private static ArrayList dims() { - final ArrayList a = new ArrayList(); -- a.add(new Integer(3)); -+ a.add(Integer.valueOf(3)); - return a; - } - private Type arrayType = new ArrayType(StandardTypes.INT32B_T, 12, dims()); -diff --git a/frysk-core/frysk/ftrace/FtraceController.java b/frysk-core/frysk/ftrace/FtraceController.java -index b22655079..31e542baa 100644 ---- a/frysk-core/frysk/ftrace/FtraceController.java -+++ b/frysk-core/frysk/ftrace/FtraceController.java -@@ -227,7 +227,7 @@ public class FtraceController - for (Iterator it = rules.iterator(); it.hasNext(); ) { - final AddrRule rule = (AddrRule)it.next(); - final List candidate = new ArrayList(1); -- candidate.add(new Long(rule.addr)); -+ candidate.add(Long.valueOf(rule.addr)); - - fine.log("Considering addr rule", rule); - -diff --git a/frysk-core/frysk/ftrace/IA32Arch.java b/frysk-core/frysk/ftrace/IA32Arch.java -index 21e4aa0ec..4181a1faa 100644 ---- a/frysk-core/frysk/ftrace/IA32Arch.java -+++ b/frysk-core/frysk/ftrace/IA32Arch.java -@@ -83,7 +83,7 @@ public class IA32Arch implements Arch { - */ - Object[] ret = new Object[6]; - for (int i = 0; i < ret.length; ++i) { -- ret[i] = new Integer(memBuf.getInt(esp)); -+ ret[i] = Integer.valueOf(memBuf.getInt(esp)); - esp += 4; - } - return ret; -@@ -91,6 +91,6 @@ public class IA32Arch implements Arch { - } - - public Object getReturnValue(Task task) { -- return new Long(task.getRegister(IA32Registers.EAX)); -+ return Long.valueOf(task.getRegister(IA32Registers.EAX)); - } - } -diff --git a/frysk-core/frysk/ftrace/MappingGuard.java b/frysk-core/frysk/ftrace/MappingGuard.java -index 1cef4c7cc..12e961adc 100644 ---- a/frysk-core/frysk/ftrace/MappingGuard.java -+++ b/frysk-core/frysk/ftrace/MappingGuard.java -@@ -90,7 +90,7 @@ class MappingGuard - if (v == 0) - observers.remove(observer); - else -- observers.put(observer, new Integer(v)); -+ observers.put(observer, Integer.valueOf(v)); - - // XXX: again, probably too early for the last observer - // which was requestDeleted. -@@ -101,9 +101,9 @@ class MappingGuard - public synchronized void addObserver(MappingObserver observer) { - Integer i = (Integer)observers.get(observer); - if (i == null) -- i = new Integer(1); -+ i = Integer.valueOf(1); - else -- i = new Integer(i.intValue() + 1); -+ i = Integer.valueOf(i.intValue() + 1); - observers.put(observer, i); - - -diff --git a/frysk-core/frysk/ftrace/TaskTracer.java b/frysk-core/frysk/ftrace/TaskTracer.java -index 9a654ec97..139c5d449 100644 ---- a/frysk-core/frysk/ftrace/TaskTracer.java -+++ b/frysk-core/frysk/ftrace/TaskTracer.java -@@ -201,7 +201,7 @@ class TaskTracer - // been hit. - if (symbolList.isEmpty()) { - fine.log("Removing leave breakpoint."); -- functionReturnObservers.remove(new Long(address)); -+ functionReturnObservers.remove(Long.valueOf(address)); - task.requestDeleteCodeObserver(this, address); - - // Take time to retract -@@ -311,7 +311,7 @@ class TaskTracer - ftrace.reporter.eventEntry(task, tracePoint, "call", - eventName, arch.getCallArguments(task)); - -- Long retAddressL = new Long(retAddress); -+ Long retAddressL = Long.valueOf(retAddress); - FunctionReturnObserver retObserver - = (FunctionReturnObserver)functionReturnObservers.get(retAddressL); - if (retObserver == null) { -@@ -368,7 +368,7 @@ class TaskTracer - - private Long getAddress(DwflSymbol sym, PLTEntry entry) { - long addr = entry != null ? entry.getAddress() : sym.getAddress(); -- Long addrL = new Long(addr); -+ Long addrL = Long.valueOf(addr); - return addrL; - } - -diff --git a/frysk-core/frysk/ftrace/X8664Arch.java b/frysk-core/frysk/ftrace/X8664Arch.java -index 05f267caf..da8c69d26 100644 ---- a/frysk-core/frysk/ftrace/X8664Arch.java -+++ b/frysk-core/frysk/ftrace/X8664Arch.java -@@ -72,10 +72,10 @@ public class X8664Arch implements Arch { - case 5: reg = X8664Registers.R9; break; - default: - long address = task.getRegister(X8664Registers.RSP) + 8 * (i - 5); -- return new Long(memBuf.getLong(address)); -+ return Long.valueOf(memBuf.getLong(address)); - } - -- return new Long(task.getRegister(reg)); -+ return Long.valueOf(task.getRegister(reg)); - } - - public Object[] getCallArguments(Task task) { -@@ -86,6 +86,6 @@ public class X8664Arch implements Arch { - } - - public Object getReturnValue(Task task) { -- return new Long(task.getRegister(X8664Registers.RAX)); -+ return Long.valueOf(task.getRegister(X8664Registers.RAX)); - } - } -diff --git a/frysk-core/frysk/hpd/AllPTSet.java b/frysk-core/frysk/hpd/AllPTSet.java -index 5af83567a..ee1e08c64 100644 ---- a/frysk-core/frysk/hpd/AllPTSet.java -+++ b/frysk-core/frysk/hpd/AllPTSet.java -@@ -371,15 +371,15 @@ class AllPTSet implements PTSet - tempSet = (ArrayList)taskSets.get(procP); - } - -- if (!proctasks.containsKey(new Integer(procP))) // if this process hasn't been added yet -+ if (!proctasks.containsKey(Integer.valueOf(procP))) // if this process hasn't been added yet - { - //create a new ProcTasks for this process - tempPT = new ProcTasks(new ProcData( getProc(procP), procP )); -- proctasks.put( new Integer(procP), tempPT); -+ proctasks.put( Integer.valueOf(procP), tempPT); - } - else - { -- tempPT = (ProcTasks) proctasks.get(new Integer(procP)); -+ tempPT = (ProcTasks) proctasks.get(Integer.valueOf(procP)); - } - - tempPT.addTaskData(new TaskData( (Task)tempSet.get(taskP), taskP, procP )); -@@ -435,15 +435,15 @@ class AllPTSet implements PTSet - tempSet = (ArrayList)taskSets.get(procP); - } - -- if (!proctasks.containsKey(new Integer(procP))) // if this process hasn't been added yet -+ if (!proctasks.containsKey(Integer.valueOf(procP))) // if this process hasn't been added yet - { - //create a new ProcTasks for this process - tempPT = new ProcTasks(new ProcData( getProc(procP), procP )); -- proctasks.put( new Integer(procP), tempPT); -+ proctasks.put( Integer.valueOf(procP), tempPT); - } - else - { -- tempPT = (ProcTasks) proctasks.get(new Integer(procP)); -+ tempPT = (ProcTasks) proctasks.get(Integer.valueOf(procP)); - } - - tempPT.addTaskData(new TaskData( (Task)tempSet.get(taskP), taskP, procP )); -diff --git a/frysk-core/frysk/hpd/CoreCommand.java b/frysk-core/frysk/hpd/CoreCommand.java -index 514545984..1123d3b84 100644 ---- a/frysk-core/frysk/hpd/CoreCommand.java -+++ b/frysk-core/frysk/hpd/CoreCommand.java -@@ -138,8 +138,8 @@ public class CoreCommand extends ParameterizedCommand { - } - // Finally, done. - synchronized (cli) { -- cli.coreProcs.put(new Integer(procID), coreProc); -- cli.ptsetParams.put(new Integer(procID), coreProc.getCmdLine()); -+ cli.coreProcs.put(Integer.valueOf(procID), coreProc); -+ cli.ptsetParams.put(Integer.valueOf(procID), coreProc.getCmdLine()); - } - cli.outWriter.println("Attached to core file: " - + coreProc.getHost().getName()); -diff --git a/frysk-core/frysk/hpd/DbgVariables.java b/frysk-core/frysk/hpd/DbgVariables.java -index 4b3dda94e..da4c08625 100644 ---- a/frysk-core/frysk/hpd/DbgVariables.java -+++ b/frysk-core/frysk/hpd/DbgVariables.java -@@ -109,10 +109,10 @@ public class DbgVariables { - vars.put("EVENT_INTERRUPT", new Value(VARTYPE_CUSTOM, "ON", new String[] {"ON", "OFF"})); - vars.put("VERBOSE", new Value(VARTYPE_CUSTOM, "WARN", new String[] {"WARN", "ERR", "ALL"})); - vars.put("ERROR_CHECKS", new Value(VARTYPE_CUSTOM, "NORMAL", new String[] {"NORMAL", "MIN", "MAX"})); -- vars.put("MAX_PROMPT", new Value(VARTYPE_INT, new Integer(40))); -- vars.put("MAX_HISTORY", new Value(VARTYPE_INT, new Integer(20))); -- vars.put("MAX_LEVELS", new Value(VARTYPE_INT, new Integer(20))); -- vars.put("MAX_LIST", new Value(VARTYPE_INT, new Integer(20))); -+ vars.put("MAX_PROMPT", new Value(VARTYPE_INT, Integer.valueOf(40))); -+ vars.put("MAX_HISTORY", new Value(VARTYPE_INT, Integer.valueOf(20))); -+ vars.put("MAX_LEVELS", new Value(VARTYPE_INT, Integer.valueOf(20))); -+ vars.put("MAX_LIST", new Value(VARTYPE_INT, Integer.valueOf(20))); - vars.put("PROMPT", new Value(VARTYPE_STRING, "(frysk) ")); - vars.put("SOURCE_PATH", new Value(VARTYPE_STRING, "")); - vars.put("EXECUTABLE_PATH", new Value(VARTYPE_STRING, "./:" + System.getenv("PATH"))); -diff --git a/frysk-core/frysk/hpd/InfoArgsCommand.java b/frysk-core/frysk/hpd/InfoArgsCommand.java -index 33d99a76c..24fb66fca 100644 ---- a/frysk-core/frysk/hpd/InfoArgsCommand.java -+++ b/frysk-core/frysk/hpd/InfoArgsCommand.java -@@ -57,7 +57,7 @@ class InfoArgsCommand extends ParameterizedCommand { - td.printHeader(cli.outWriter); - int parentID = td.getParentID(); - String[] args = (String[]) cli.ptsetParams -- .get(new Integer(parentID)); -+ .get(Integer.valueOf(parentID)); - cli.outWriter.println("The args list for: " + args[0] + - " is....."); - if (args.length > 1) -diff --git a/frysk-core/frysk/hpd/KillCommand.java b/frysk-core/frysk/hpd/KillCommand.java -index e9debcd81..54c9367ae 100644 ---- a/frysk-core/frysk/hpd/KillCommand.java -+++ b/frysk-core/frysk/hpd/KillCommand.java -@@ -151,7 +151,7 @@ public class KillCommand extends ParameterizedCommand { - + " that was created from " + proc.getExeFile().getSysRootedPath(), - Message.TYPE_NORMAL); - // Save the procs we are killing so we can re-load them later -- saveProcs.put(new Integer(taskData.getParentID()), proc.getExeFile()); -+ saveProcs.put(Integer.valueOf(taskData.getParentID()), proc.getExeFile()); - procPID = proc.getPid(); - // Now, call the Proc object to kill off the executable(s) - proc.requestKill(); -@@ -199,7 +199,7 @@ public class KillCommand extends ParameterizedCommand { - Proc taskProc = taskData.getTask().getProc(); - procId = taskProc.getPid(); - if (taskProc == proc && tempId != procId) { -- saveProcs.put(new Integer(taskData.getParentID()), proc.getExeFile()); -+ saveProcs.put(Integer.valueOf(taskData.getParentID()), proc.getExeFile()); - cli.addMessage("Killing process " + proc.getPid() - + " that was created from " + proc.getExeFile().getSysRootedPath(), - Message.TYPE_NORMAL); -diff --git a/frysk-core/frysk/hpd/LoadCommand.java b/frysk-core/frysk/hpd/LoadCommand.java -index 63535fc6c..ad6a1c1e4 100644 ---- a/frysk-core/frysk/hpd/LoadCommand.java -+++ b/frysk-core/frysk/hpd/LoadCommand.java -@@ -134,7 +134,7 @@ public class LoadCommand extends ParameterizedCommand { - cli.idManager.manageProc(exeProc, procID); - - if (params.length == 1) -- params = (String []) cli.ptsetParams.get(new Integer(procID)); -+ params = (String []) cli.ptsetParams.get(Integer.valueOf(procID)); - - Iterator foo = cli.targetset.getTasks(); - while (foo.hasNext()) { -@@ -148,15 +148,15 @@ public class LoadCommand extends ParameterizedCommand { - } - - synchronized (cli) { -- cli.loadedProcs.put(new Integer(procID), -+ cli.loadedProcs.put(Integer.valueOf(procID), - exeProc.getExeFile().getSysRootedPath()); - if (params != null) { - params[0] = exeProc.getExeFile().getSysRootedPath(); -- cli.ptsetParams.put(new Integer(procID), params); -+ cli.ptsetParams.put(Integer.valueOf(procID), params); - } - else { - String[] command = { exeProc.getExeFile().getSysRootedPath() }; -- cli.ptsetParams.put(new Integer(procID), command); -+ cli.ptsetParams.put(Integer.valueOf(procID), command); - } - } - -diff --git a/frysk-core/frysk/hpd/ProcTasks.java b/frysk-core/frysk/hpd/ProcTasks.java -index f1f73ca23..add151ca4 100644 ---- a/frysk-core/frysk/hpd/ProcTasks.java -+++ b/frysk-core/frysk/hpd/ProcTasks.java -@@ -76,7 +76,7 @@ class ProcTasks - if (temp.getParentID() == proc.getID()) - { - //task id -> task -- tasks.put(new Integer(temp.getID()), temp); -+ tasks.put(Integer.valueOf(temp.getID()), temp); - } - else - throw new IllegalArgumentException("ProcTasks was passed" + -@@ -86,7 +86,7 @@ class ProcTasks - - public boolean containsTask(int taskID) - { -- return tasks.containsKey(new Integer(taskID)); -+ return tasks.containsKey(Integer.valueOf(taskID)); - } - - public ProcData getProcData() -@@ -108,7 +108,7 @@ class ProcTasks - if (task.getParentID() == proc.getID()) - { - //task id -> task -- tasks.put(new Integer(task.getID()), task); -+ tasks.put(Integer.valueOf(task.getID()), task); - } - else - throw new IllegalArgumentException("ProcTasks was passed Task not from this instance's process."); -diff --git a/frysk-core/frysk/hpd/StartRun.java b/frysk-core/frysk/hpd/StartRun.java -index a7b0e4bd7..e7c411d7d 100644 ---- a/frysk-core/frysk/hpd/StartRun.java -+++ b/frysk-core/frysk/hpd/StartRun.java -@@ -143,7 +143,7 @@ abstract class StartRun extends ParameterizedCommand { - while (foo.hasNext()) { - taskData = (TaskData) foo.next(); - int parentID = taskData.getParentID(); -- String command = (String) cli.loadedProcs.get(new Integer(parentID)); -+ String command = (String) cli.loadedProcs.get(Integer.valueOf(parentID)); - run(cli, cmd, command, runToBreak, - taskData.getParentID()); - counter++; -@@ -160,7 +160,7 @@ abstract class StartRun extends ParameterizedCommand { - TaskData taskData = (TaskData) foo.next(); - Task task = taskData.getTask(); - if (!cli.loadedProcs.isEmpty() && -- cli.loadedProcs.containsKey(new Integer(taskData.getParentID()))) { -+ cli.loadedProcs.containsKey(Integer.valueOf(taskData.getParentID()))) { - run(cli, cmd, task.getProc().getExeFile().getSysRootedPath(), - runToBreak, taskData.getParentID()); - synchronized (cli) { -@@ -169,11 +169,11 @@ abstract class StartRun extends ParameterizedCommand { - } - // Take care of core procs - else if (!cli.coreProcs.isEmpty() && -- cli.coreProcs.containsKey(new Integer(taskData.getParentID()))) { -+ cli.coreProcs.containsKey(Integer.valueOf(taskData.getParentID()))) { - run(cli, cmd, task.getProc().getExeFile().getSysRootedPath(), - runToBreak, taskData.getParentID()); - synchronized (cli) { -- cli.coreProcs.remove(new Integer(taskData.getParentID())); -+ cli.coreProcs.remove(Integer.valueOf(taskData.getParentID())); - } - } - } -@@ -210,16 +210,16 @@ abstract class StartRun extends ParameterizedCommand { - int index = cmd.getFullCommand().indexOf("--"); - if (index != -1) { - String[] command = new String[1]; -- String[] oldCommand = (String[]) cli.ptsetParams.get(new Integer(parentID)); -+ String[] oldCommand = (String[]) cli.ptsetParams.get(Integer.valueOf(parentID)); - command[0] = oldCommand[0]; - // Set proc params to null so we won't run with them again -- cli.ptsetParams.put(new Integer(parentID), command); -+ cli.ptsetParams.put(Integer.valueOf(parentID), command); - } - break; - - // Params were passed - default: -- cli.ptsetParams.put(new Integer(parentID), -+ cli.ptsetParams.put(Integer.valueOf(parentID), - makeCommand(cmd.stringArrayValue(), parentID, cli)); - break; - } -@@ -236,7 +236,7 @@ abstract class StartRun extends ParameterizedCommand { - - private String[] makeCommand(String[] params, int parentID, CLI cli) { - String[] newParams = new String[params.length + 1]; -- String[] oldParams = (String[]) cli.ptsetParams.get(new Integer(parentID)); -+ String[] oldParams = (String[]) cli.ptsetParams.get(Integer.valueOf(parentID)); - newParams[0] = oldParams[0]; - for (int i = 1; i < newParams.length; i++) - newParams[i] = params[i-1]; -@@ -267,7 +267,7 @@ abstract class StartRun extends ParameterizedCommand { - // Don't kill loaded procs, don't have a PID assigned yet - task.getProc().getPid() > 0 && - // Don't kill core procs either, they have the old PID number -- cli.coreProcs.get(new Integer(taskData.getParentID())) == null) { -+ cli.coreProcs.get(Integer.valueOf(taskData.getParentID())) == null) { - cli.execCommand("kill " + task.getProc().getPid() + "\n"); - oldPid = task.getProc().getPid(); - } -@@ -301,10 +301,10 @@ abstract class StartRun extends ParameterizedCommand { - - cli.addMessage(startrun - + " with this command: " -- + asString((String[]) cli.ptsetParams.get(new Integer( -+ + asString((String[]) cli.ptsetParams.get(Integer.valueOf( - taskid))), Message.TYPE_NORMAL); - Manager.host.requestCreateAttachedProc((String[]) cli.ptsetParams -- .get(new Integer(taskid)), runner); -+ .get(Integer.valueOf(taskid)), runner); - - while (true) { - try { -diff --git a/frysk-core/frysk/hpd/UnloadCommand.java b/frysk-core/frysk/hpd/UnloadCommand.java -index edbcfce23..0c601e987 100644 ---- a/frysk-core/frysk/hpd/UnloadCommand.java -+++ b/frysk-core/frysk/hpd/UnloadCommand.java -@@ -78,7 +78,7 @@ public class UnloadCommand extends ParameterizedCommand { - throw new InvalidCommandException("Not enough parameters"); - int id = Integer.parseInt(cmd.parameter(1)); - synchronized (cli) { -- if (cli.loadedProcs.remove(new Integer(id)) == null) { -+ if (cli.loadedProcs.remove(Integer.valueOf(id)) == null) { - cli.addMessage( - "Trying to remove a proc that has not been loaded", - Message.TYPE_ERROR); -diff --git a/frysk-core/frysk/hpd/ViewsetCommand.java b/frysk-core/frysk/hpd/ViewsetCommand.java -index 0bd3fbd9e..91c357607 100644 ---- a/frysk-core/frysk/hpd/ViewsetCommand.java -+++ b/frysk-core/frysk/hpd/ViewsetCommand.java -@@ -99,7 +99,7 @@ class ViewsetCommand extends ParameterizedCommand { - cli.outWriter.println("\tpid\tid\tpath-to-executable"); - for (Iterator iter = tempset.getTaskData(); iter.hasNext();) { - temptd = (TaskData) iter.next(); -- if (loadedOnly && cli.loadedProcs.containsValue(new Integer(temptd.getID())) -+ if (loadedOnly && cli.loadedProcs.containsValue(Integer.valueOf(temptd.getID())) - || loadedOnly && cli.loadedProcs.containsKey(temptd.getTask().getProc()) - || !loadedOnly) { - cli.outWriter.print("["); -diff --git a/frysk-core/frysk/isa/ElfMap.java b/frysk-core/frysk/isa/ElfMap.java -index be2abd113..3cb3626a2 100644 ---- a/frysk-core/frysk/isa/ElfMap.java -+++ b/frysk-core/frysk/isa/ElfMap.java -@@ -52,7 +52,7 @@ import java.util.HashMap; - public final class ElfMap { - private static final Map isaToMachine; - private static void add(int m, ISA isa) { -- Integer machine = new Integer(m); -+ Integer machine = Integer.valueOf(m); - isaToMachine.put(isa, machine); - } - static { -diff --git a/frysk-core/frysk/isa/registers/RegisterMap.java b/frysk-core/frysk/isa/registers/RegisterMap.java -index fd5e1a46d..743c0e167 100644 ---- a/frysk-core/frysk/isa/registers/RegisterMap.java -+++ b/frysk-core/frysk/isa/registers/RegisterMap.java -@@ -66,7 +66,7 @@ public class RegisterMap { - public final RegisterMap add(Register register, - Number number) { - registerToNumber.put(register, number); -- integerToRegister.put(new Integer(number.intValue()), register); -+ integerToRegister.put(Integer.valueOf(number.intValue()), register); - numberToRegister.put(number, register); - return this; - } -@@ -90,7 +90,7 @@ public class RegisterMap { - */ - public Register getRegister(int regNum) { - Register register -- = (Register) integerToRegister.get(new Integer(regNum)); -+ = (Register) integerToRegister.get(Integer.valueOf(regNum)); - if (register == null) - throw new NullPointerException("register number <" + regNum - + "> not found in " + what -@@ -127,6 +127,6 @@ public class RegisterMap { - * Return true if REG_NUM (as a Number) is known. - */ - public boolean containsKey(int regNum) { -- return integerToRegister.containsKey(new Integer(regNum)); -+ return integerToRegister.containsKey(Integer.valueOf(regNum)); - } - } -diff --git a/frysk-core/frysk/isa/registers/TestRegisterMap.java b/frysk-core/frysk/isa/registers/TestRegisterMap.java -index 0e8c72744..95d8419c4 100644 ---- a/frysk-core/frysk/isa/registers/TestRegisterMap.java -+++ b/frysk-core/frysk/isa/registers/TestRegisterMap.java -@@ -46,10 +46,10 @@ import frysk.junit.TestCase; - public class TestRegisterMap extends TestCase { - private final RegisterMap map - = new RegisterMap("testing") -- .add(IA32Registers.EAX, new Long(0)) -- .add(IA32Registers.EBX, new Long(1)) -- .add(IA32Registers.ECX, new Long(2)) -- .add(IA32Registers.EDX, new Long(3)); -+ .add(IA32Registers.EAX, Long.valueOf(0)) -+ .add(IA32Registers.EBX, Long.valueOf(1)) -+ .add(IA32Registers.ECX, Long.valueOf(2)) -+ .add(IA32Registers.EDX, Long.valueOf(3)); - - public void testContainsRegister() { - assertEquals("contains EAX", true, -@@ -58,8 +58,8 @@ public class TestRegisterMap extends TestCase { - map.containsKey(IA32Registers.ESP)); - } - public void testContainsNumber() { -- assertEquals("contains 1", true, map.containsKey(new Long(1))); -- assertEquals("contains 5", false, map.containsKey(new Long(4))); -+ assertEquals("contains 1", true, map.containsKey(Long.valueOf(1))); -+ assertEquals("contains 5", false, map.containsKey(Long.valueOf(4))); - } - public void testContainsInt() { - assertEquals("contains 1", true, map.containsKey(1)); -@@ -67,12 +67,12 @@ public class TestRegisterMap extends TestCase { - } - - public void testRegisterToNumber() { -- assertEquals("EAX to 0", new Long(0), -+ assertEquals("EAX to 0", Long.valueOf(0), - map.getRegisterNumber(IA32Registers.EAX)); - } - public void testNumberToRegister() { - assertEquals("1 to EBX", IA32Registers.EBX, -- map.getRegister(new Long(1))); -+ map.getRegister(Long.valueOf(1))); - } - public void testIntToRegister() { - assertEquals("2 to ECX", IA32Registers.ECX, map.getRegister(2)); -@@ -91,7 +91,7 @@ public class TestRegisterMap extends TestCase { - public void testNoSuchNumber() { - boolean npe = false; - try { -- map.getRegister(new Long(4)); -+ map.getRegister(Long.valueOf(4)); - } catch (NullPointerException e) { - npe = true; - } -diff --git a/frysk-core/frysk/isa/syscalls/SyscallTable.java b/frysk-core/frysk/isa/syscalls/SyscallTable.java -index 9e1527aa0..bbc36cb46 100644 ---- a/frysk-core/frysk/isa/syscalls/SyscallTable.java -+++ b/frysk-core/frysk/isa/syscalls/SyscallTable.java -@@ -53,7 +53,7 @@ public abstract class SyscallTable { - */ - Syscall unknownSyscall(long num) { - synchronized (unknownSyscalls) { -- Long key = new Long(num); -+ Long key = Long.valueOf(num); - Syscall syscall = (Syscall)unknownSyscalls.get(key); - if (syscall == null) { - syscall = new Syscall("UNKNOWN SYSCALL " + num, (int)num) { -diff --git a/frysk-core/frysk/isa/syscalls/TestSyscallsWithAudit.java b/frysk-core/frysk/isa/syscalls/TestSyscallsWithAudit.java -index 87c21c4e3..85a683a3e 100644 ---- a/frysk-core/frysk/isa/syscalls/TestSyscallsWithAudit.java -+++ b/frysk-core/frysk/isa/syscalls/TestSyscallsWithAudit.java -@@ -47,10 +47,10 @@ import frysk.testbed.IsaTestbed; - public class TestSyscallsWithAudit extends TestLib { - - private static final ISAMap machines = new ISAMap("syscall machines") -- .put(ISA.IA32, new Integer(AuditLibs.MACH_X86)) -- .put(ISA.PPC32BE, new Integer(AuditLibs.MACH_PPC)) -- .put(ISA.PPC64BE, new Integer(AuditLibs.MACH_PPC64)) -- .put(ISA.X8664, new Integer(AuditLibs.MACH_86_64)) -+ .put(ISA.IA32, Integer.valueOf(AuditLibs.MACH_X86)) -+ .put(ISA.PPC32BE, Integer.valueOf(AuditLibs.MACH_PPC)) -+ .put(ISA.PPC64BE, Integer.valueOf(AuditLibs.MACH_PPC64)) -+ .put(ISA.X8664, Integer.valueOf(AuditLibs.MACH_86_64)) - ; - - private void syscallTest(ISA isa) { -diff --git a/frysk-core/frysk/proc/live/TestTaskObserverCode.java b/frysk-core/frysk/proc/live/TestTaskObserverCode.java -index 5d1571a99..88b0f3c7d 100644 ---- a/frysk-core/frysk/proc/live/TestTaskObserverCode.java -+++ b/frysk-core/frysk/proc/live/TestTaskObserverCode.java -@@ -1060,12 +1060,12 @@ public class TestTaskObserverCode extends TestLib - CountingCodeObserver(Task[] tasks) - { - for (int i = 0; i < tasks.length; ++i) -- hitmap.put(tasks[i], new Integer(0)); -+ hitmap.put(tasks[i], Integer.valueOf(0)); - } - - public Action updateHit (Task task, long addr) - { -- hitmap.put(task, new Integer(hitsFor(task) + 1)); -+ hitmap.put(task, Integer.valueOf(hitsFor(task) + 1)); - Manager.eventLoop.requestStop(); - return Action.BLOCK; - } -diff --git a/frysk-core/frysk/rt/BreakpointManager.java b/frysk-core/frysk/rt/BreakpointManager.java -index c465c99b4..b7458729a 100644 ---- a/frysk-core/frysk/rt/BreakpointManager.java -+++ b/frysk-core/frysk/rt/BreakpointManager.java -@@ -127,7 +127,7 @@ public class BreakpointManager extends Observable { - private HashMap watchers = new HashMap(); - - private synchronized void addBreakpoint(SourceBreakpoint bp) { -- breakpointMap.put(new Integer(bp.getId()), bp); -+ breakpointMap.put(Integer.valueOf(bp.getId()), bp); - setChanged(); - notifyObservers(); - } -@@ -247,7 +247,7 @@ public class BreakpointManager extends Observable { - - public SourceBreakpoint getBreakpoint(int bptId) { - SourceBreakpoint bpt -- = (SourceBreakpoint)breakpointMap.get(new Integer(bptId)); -+ = (SourceBreakpoint)breakpointMap.get(Integer.valueOf(bptId)); - return bpt; - } - -diff --git a/frysk-core/frysk/rt/DisplayManager.java b/frysk-core/frysk/rt/DisplayManager.java -index 67074e6f9..ee804c4f1 100644 ---- a/frysk-core/frysk/rt/DisplayManager.java -+++ b/frysk-core/frysk/rt/DisplayManager.java -@@ -87,7 +87,7 @@ public class DisplayManager { - value = new UpdatingDisplayValue(text, myTask, fIdent, engine, - CountManager.getNextId()); - displays.add(value); -- displaysByNum.put(new Integer(value.getId()), value); -+ displaysByNum.put(Integer.valueOf(value.getId()), value); - } - - return value; -@@ -102,7 +102,7 @@ public class DisplayManager { - */ - public static void deleteDisplay(UpdatingDisplayValue value) { - displays.remove(value); -- displaysByNum.remove(new Integer(value.getId())); -+ displaysByNum.remove(Integer.valueOf(value.getId())); - value.disable(); - } - -@@ -116,7 +116,7 @@ public class DisplayManager { - */ - public static boolean disableDisplay(int num) { - UpdatingDisplayValue val = (UpdatingDisplayValue) displaysByNum -- .get(new Integer(num)); -+ .get(Integer.valueOf(num)); - if (val != null) { - if (val.isEnabled()) - val.disable(); -@@ -135,7 +135,7 @@ public class DisplayManager { - */ - public static boolean enableDisplay(int num) { - UpdatingDisplayValue val = (UpdatingDisplayValue) displaysByNum -- .get(new Integer(num)); -+ .get(Integer.valueOf(num)); - - if (val != null) { - if (!val.isEnabled()) -@@ -156,12 +156,12 @@ public class DisplayManager { - */ - public static boolean deleteDisplay(int num) { - UpdatingDisplayValue val = (UpdatingDisplayValue) displaysByNum -- .get(new Integer(num)); -+ .get(Integer.valueOf(num)); - if (val != null) { - if (val.isEnabled()) - val.disable(); - displays.remove(val); -- displaysByNum.remove(new Integer(val.getId())); -+ displaysByNum.remove(Integer.valueOf(val.getId())); - - return true; - } -@@ -187,7 +187,7 @@ public class DisplayManager { - * exists - */ - public static UpdatingDisplayValue getDisplay(int id) { -- return (UpdatingDisplayValue) displaysByNum.get(new Integer(id)); -+ return (UpdatingDisplayValue) displaysByNum.get(Integer.valueOf(id)); - } - - } -diff --git a/frysk-core/frysk/rt/FunctionBreakpoint.java b/frysk-core/frysk/rt/FunctionBreakpoint.java -index 1e1874a9b..214c6c43b 100644 ---- a/frysk-core/frysk/rt/FunctionBreakpoint.java -+++ b/frysk-core/frysk/rt/FunctionBreakpoint.java -@@ -83,7 +83,7 @@ public class FunctionBreakpoint - if (function instanceof OutOfLineFunction) { - long address = ((OutOfLineFunction) function).getBreakPointAddress(); - LinkedList addrs = new LinkedList(); -- addrs.add(new Long(address)); -+ addrs.add(Long.valueOf(address)); - return addrs; - } - -@@ -93,7 +93,7 @@ public class FunctionBreakpoint - LinkedList addrs = new LinkedList(); - while (iterator.hasNext()) { - ConcreteInlinedFunction concreteInlinedFunction = (ConcreteInlinedFunction) iterator.next(); -- addrs.add(new Long(concreteInlinedFunction.getBreakPointAddress())); -+ addrs.add(Long.valueOf(concreteInlinedFunction.getBreakPointAddress())); - } - return addrs; - } -@@ -118,7 +118,7 @@ public class FunctionBreakpoint - for (ListIterator i = inlineDies.listIterator(); - i.hasNext(); ) { - DwarfDie inlinedSubroutine = (DwarfDie)i.next(); -- addrs.add(new Long(inlinedSubroutine.getLowPC())); -+ addrs.add(Long.valueOf(inlinedSubroutine.getLowPC())); - } - containsInlineInstances = true; - } -@@ -128,7 +128,7 @@ public class FunctionBreakpoint - LinkedList addrs = SymbolFactory.getAddresses(task, name); - - // Filter any null values that have sneaked in. -- Long nullVal = new Long(0); -+ Long nullVal = Long.valueOf(0); - while (addrs.remove(nullVal)) { - } - return addrs; -diff --git a/frysk-core/frysk/rt/LineBreakpoint.java b/frysk-core/frysk/rt/LineBreakpoint.java -index 89c5c173d..50a665326 100644 ---- a/frysk-core/frysk/rt/LineBreakpoint.java -+++ b/frysk-core/frysk/rt/LineBreakpoint.java -@@ -102,7 +102,7 @@ public class LineBreakpoint extends SourceBreakpoint { - LinkedList result = new LinkedList(); - ListIterator iterator = dies.listIterator(); - while (iterator.hasNext()) { -- result.add(new Long(((DwflLine)iterator.next()).getAddress())); -+ result.add(Long.valueOf(((DwflLine)iterator.next()).getAddress())); - } - - fine.log(this, "getBreakpointRawAddresses ... returns", result); -diff --git a/frysk-core/frysk/rt/PLTBreakpoint.java b/frysk-core/frysk/rt/PLTBreakpoint.java -index 7ed9e550b..580963a84 100644 ---- a/frysk-core/frysk/rt/PLTBreakpoint.java -+++ b/frysk-core/frysk/rt/PLTBreakpoint.java -@@ -59,7 +59,7 @@ public class PLTBreakpoint - - public LinkedList getBreakpointRawAddresses(Task task) { - LinkedList addrs = new LinkedList(); -- addrs.add(new Long(entry.getAddress())); -+ addrs.add(Long.valueOf(entry.getAddress())); - return addrs; - } - -diff --git a/frysk-core/frysk/rt/ProcTaskIDManager.java b/frysk-core/frysk/rt/ProcTaskIDManager.java -index da0a5afaf..ddbac668f 100644 ---- a/frysk-core/frysk/rt/ProcTaskIDManager.java -+++ b/frysk-core/frysk/rt/ProcTaskIDManager.java -@@ -70,7 +70,7 @@ public class ProcTaskIDManager - taskMap = new HashMap(); - for (int i = 0; i < tasks.size(); i++) { - Task task = (Task)tasks.get(i); -- taskMap.put(task, new Integer(i)); -+ taskMap.put(task, Integer.valueOf(i)); - addTaskObservers(task); - } - } -@@ -93,7 +93,7 @@ public class ProcTaskIDManager - synchronized (this) { - entry = new ProcEntry(proc, reservedID); - procList.set(reservedID, entry); -- procMap.put(proc, new Integer(reservedID)); -+ procMap.put(proc, Integer.valueOf(reservedID)); - } - } - -@@ -185,7 +185,7 @@ public class ProcTaskIDManager - synchronized (this) { - int taskID = entry.tasks.size(); - entry.tasks.add(offspring); -- entry.taskMap.put(offspring, new Integer(taskID)); -+ entry.taskMap.put(offspring, Integer.valueOf(taskID)); - } - addTaskObservers(offspring); - parent.requestUnblock(this); -diff --git a/frysk-core/frysk/rt/SymbolBreakpoint.java b/frysk-core/frysk/rt/SymbolBreakpoint.java -index f079b2469..a59694f29 100644 ---- a/frysk-core/frysk/rt/SymbolBreakpoint.java -+++ b/frysk-core/frysk/rt/SymbolBreakpoint.java -@@ -71,7 +71,7 @@ public class SymbolBreakpoint - LinkedList addrs = SymbolFactory.getAddresses(task, name, matcher); - - // Filter any null values that have sneaked in. -- Long nullVal = new Long(0); -+ Long nullVal = Long.valueOf(0); - while (addrs.remove(nullVal)) { - } - return addrs; -diff --git a/frysk-core/frysk/stepping/SteppingEngine.java b/frysk-core/frysk/stepping/SteppingEngine.java -index 7fb9b7d0e..3d0eab66c 100644 ---- a/frysk-core/frysk/stepping/SteppingEngine.java -+++ b/frysk-core/frysk/stepping/SteppingEngine.java -@@ -184,7 +184,7 @@ public class SteppingEngine { - this.taskStateMap.put(t, new TaskStepEngine(t, this)); - } - -- this.contextMap.put(proc, new Integer(tasksList.size())); -+ this.contextMap.put(proc, Integer.valueOf(tasksList.size())); - } - - /*********************************************************************** -@@ -207,7 +207,7 @@ public class SteppingEngine { - - tse.setState(new InstructionStepState(task, false)); - this.steppingObserver.notifyNotBlocked(tse); -- this.contextMap.put(task.getProc(), new Integer(1)); -+ this.contextMap.put(task.getProc(), Integer.valueOf(1)); - - continueForStepping(task, true); - return true; -@@ -229,7 +229,7 @@ public class SteppingEngine { - return false; - - Task t = (Task) tasks.getFirst(); -- this.contextMap.put(t.getProc(), new Integer(tasks.size())); -+ this.contextMap.put(t.getProc(), Integer.valueOf(tasks.size())); - - Iterator iter = tasks.iterator(); - while (iter.hasNext()) { -@@ -256,7 +256,7 @@ public class SteppingEngine { - if (isTaskRunning(task)) - return false; - -- this.contextMap.put(task.getProc(), new Integer(1)); -+ this.contextMap.put(task.getProc(), Integer.valueOf(1)); - TaskStepEngine tse = (TaskStepEngine) this.taskStateMap.get(task); - - /* Check to see if either the TaskStepEngine for this Task has not had its -@@ -342,7 +342,7 @@ public class SteppingEngine { - } - - /* Record how many Tasks we're dealing with here */ -- this.contextMap.put(t.getProc(), new Integer(tasks.size())); -+ this.contextMap.put(t.getProc(), Integer.valueOf(tasks.size())); - - i = tasks.iterator(); - while (i.hasNext()) { -@@ -372,7 +372,7 @@ public class SteppingEngine { - this.steppingObserver.notifyNotBlocked(tse); - - int i = ((Integer) this.contextMap.get(task.getProc())).intValue(); -- this.contextMap.put(task.getProc(), new Integer(++i)); -+ this.contextMap.put(task.getProc(), Integer.valueOf(++i)); - - /* - * Set a breakpoint on the current address of the given frame, which is the -@@ -396,7 +396,7 @@ public class SteppingEngine { - this.steppingObserver.notifyNotBlocked(tse); - - int i = ((Integer) this.contextMap.get(task.getProc())).intValue(); -- this.contextMap.put(task.getProc(), new Integer(++i)); -+ this.contextMap.put(task.getProc(), Integer.valueOf(++i)); - continueForStepping(task, true); - } - -@@ -413,7 +413,7 @@ public class SteppingEngine { - - Task t = (Task) tasks.getFirst(); - int i = ((Integer) this.contextMap.get(t.getProc())).intValue(); -- this.contextMap.put(t.getProc(), new Integer(i += tasks.size())); -+ this.contextMap.put(t.getProc(), Integer.valueOf(i += tasks.size())); - - Iterator iter = tasks.iterator(); - while (iter.hasNext()) { -@@ -449,7 +449,7 @@ public class SteppingEngine { - tse.setState(new StepOverTestState(task)); - - int i = ((Integer) this.contextMap.get(task.getProc())).intValue(); -- this.contextMap.put(task.getProc(), new Integer(++i)); -+ this.contextMap.put(task.getProc(), Integer.valueOf(++i)); - - if (continueForStepping(task, true)) { - this.steppingObserver.notifyNotBlocked(tse); -@@ -468,7 +468,7 @@ public class SteppingEngine { - - Task t = (Task) tasks.getFirst(); - int i = ((Integer) this.contextMap.get(t.getProc())).intValue(); -- this.contextMap.put(t.getProc(), new Integer(i += tasks.size())); -+ this.contextMap.put(t.getProc(), Integer.valueOf(i += tasks.size())); - - Iterator iter = tasks.iterator(); - while (iter.hasNext()) { -@@ -503,7 +503,7 @@ public class SteppingEngine { - this.steppingObserver.notifyNotBlocked(tse); - - int i = ((Integer) this.contextMap.get(task.getProc())).intValue(); -- this.contextMap.put(task.getProc(), new Integer(++i)); -+ this.contextMap.put(task.getProc(), Integer.valueOf(++i)); - - this.breakpoint = new SteppingBreakpoint(this, address); - this.breakpointMap.put(task, this.breakpoint); -@@ -519,7 +519,7 @@ public class SteppingEngine { - this.steppingObserver.notifyNotBlocked(tse); - - int i = ((Integer) this.contextMap.get(task.getProc())).intValue(); -- this.contextMap.put(task.getProc(), new Integer(++i)); -+ this.contextMap.put(task.getProc(), Integer.valueOf(++i)); - - this.breakpoint = new SteppingBreakpoint(this, address); - this.breakpointMap.put(task, this.breakpoint); -@@ -539,7 +539,7 @@ public class SteppingEngine { - - Task t = (Task) tasks.getFirst(); - int i = ((Integer) this.contextMap.get(t.getProc())).intValue(); -- this.contextMap.put(t.getProc(), new Integer(i += tasks.size())); -+ this.contextMap.put(t.getProc(), Integer.valueOf(i += tasks.size())); - - Iterator iter = tasks.iterator(); - while (iter.hasNext()) { -@@ -588,7 +588,7 @@ public class SteppingEngine { - */ - public void continueExecution(LinkedList list) { - TaskStepEngine tse = null; -- this.contextMap.put(((Task) list.getFirst()).getProc(), new Integer( -+ this.contextMap.put(((Task) list.getFirst()).getProc(), Integer.valueOf( - list.size())); - - Iterator i = list.iterator(); -@@ -761,7 +761,7 @@ public class SteppingEngine { - } - - this.contextMap.put(((Task) tasks.getFirst()).getProc(), -- new Integer(numRunning)); -+ Integer.valueOf(numRunning)); - this.runningTasks = temp; - } - return; -@@ -816,7 +816,7 @@ public class SteppingEngine { - Task t; - - if (kill) { -- Integer context = new Integer(list.size()); -+ Integer context = Integer.valueOf(list.size()); - this.contextMap.put(proc, context); - this.threadLifeObservable.setExitingTasks(list); - } -@@ -1131,15 +1131,15 @@ public class SteppingEngine { - .intValue(); - if (--i <= 0) { - if (threadsList.size() > 0) { -- SteppingEngine.this.contextMap.put(proc, new Integer( -+ SteppingEngine.this.contextMap.put(proc, Integer.valueOf( - threadsList.size() + i)); - requestAdd(); - } else { - SteppingEngine.this.contextMap.put(proc, -- new Integer(i)); -+ Integer.valueOf(i)); - } - } else { -- SteppingEngine.this.contextMap.put(proc, new Integer(i)); -+ SteppingEngine.this.contextMap.put(proc, Integer.valueOf(i)); - } - this.setChanged(); - this.notifyObservers(tse); -@@ -1226,7 +1226,7 @@ public class SteppingEngine { - public Action updateClonedOffspring(Task parent, Task offspring) { - Integer i = (Integer) SteppingEngine.this.contextMap.get(parent - .getProc()); -- SteppingEngine.this.contextMap.put(parent.getProc(), new Integer(i -+ SteppingEngine.this.contextMap.put(parent.getProc(), Integer.valueOf(i - .intValue() + 1)); - SteppingEngine.this.taskStateMap.put(offspring, new TaskStepEngine( - offspring, SteppingEngine.this)); -@@ -1268,7 +1268,7 @@ public class SteppingEngine { - Proc proc = task.getProc(); - Integer context = (Integer)SteppingEngine.this.contextMap.get(proc); - if (!SteppingEngine.this.contextMap.isEmpty() && context != null) -- SteppingEngine.this.contextMap.put(proc, new Integer( -+ SteppingEngine.this.contextMap.put(proc, Integer.valueOf( - context.intValue() - 1)); - - TaskStepEngine tse -@@ -1323,7 +1323,7 @@ public class SteppingEngine { - int i = ((Integer) SteppingEngine.this.contextMap.get(task - .getProc())).intValue(); - if (--i > 0) { -- contextMap.put(task.getProc(), new Integer(i)); -+ contextMap.put(task.getProc(), Integer.valueOf(i)); - } else { - contextMap.remove(task.getProc()); - ProcessIdentifier pid -diff --git a/frysk-core/frysk/symtab/SymbolFactory.java b/frysk-core/frysk/symtab/SymbolFactory.java -index d19ca2885..60beb451c 100644 ---- a/frysk-core/frysk/symtab/SymbolFactory.java -+++ b/frysk-core/frysk/symtab/SymbolFactory.java -@@ -235,7 +235,7 @@ public class SymbolFactory - lib.dwfl.ElfSymbolVisibility visibility, - boolean defined) - { -- addrs.add(new Long(value)); -+ addrs.add(Long.valueOf(value)); - } - }; - for (int i = 0; i < modules.length; i++) { -diff --git a/frysk-core/frysk/symtab/SymbolObjectDeclaration.java b/frysk-core/frysk/symtab/SymbolObjectDeclaration.java -index 1a581321f..577fed246 100644 ---- a/frysk-core/frysk/symtab/SymbolObjectDeclaration.java -+++ b/frysk-core/frysk/symtab/SymbolObjectDeclaration.java -@@ -92,7 +92,7 @@ public class SymbolObjectDeclaration implements ObjectDeclaration { - // treat all other types as array lists - // if any special handling is needed add an if statement. - ArrayList dims = new ArrayList(); -- dims.add(new Integer((int) (size-1))); -+ dims.add(Integer.valueOf((int) (size-1))); - this.type = new ArrayType(StandardTypes.uint8_t(isa.order()), (int) size, dims); - } - -diff --git a/frysk-core/frysk/util/StacktraceAction.java b/frysk-core/frysk/util/StacktraceAction.java -index ef1a474be..78a6e7315 100644 ---- a/frysk-core/frysk/util/StacktraceAction.java -+++ b/frysk-core/frysk/util/StacktraceAction.java -@@ -116,7 +116,7 @@ public abstract class StacktraceAction implements ProcBlockObserver { - if (sortedTasks == null) - sortedTasks = new TreeMap(); - -- sortedTasks.put(new Integer(task.getTid()), task); -+ sortedTasks.put(Integer.valueOf(task.getTid()), task); - } - - public void taskAddFailed (Object observable, Throwable w) -diff --git a/frysk-core/frysk/value/ArrayType.java b/frysk-core/frysk/value/ArrayType.java -index 4fe9b60ce..22d658b51 100644 ---- a/frysk-core/frysk/value/ArrayType.java -+++ b/frysk-core/frysk/value/ArrayType.java -@@ -148,7 +148,7 @@ public class ArrayType - { - ArrayList dims = new ArrayList(); - // For an n-dimensional array, create (n-1) dimensional array, where n>1 -- dims.add(new Integer(dimension[dimension.length - 1]-1)); -+ dims.add(Integer.valueOf(dimension[dimension.length - 1]-1)); - ArrayType arrayType = new ArrayType(type, dimension[dimension.length - 1] - * type.getSize(), dims); - return new Value(arrayType, v.getLocation().slice(idx.asLong() -@@ -176,9 +176,9 @@ public class ArrayType - ArrayList dims = new ArrayList(); - // Length of elements at 0th dimension changes. - // Rest remain same. -- dims.add(new Integer(len-1)); -+ dims.add(Integer.valueOf(len-1)); - for (int k=1; k 0) -diff --git a/frysk-core/prog/kill/detach.c b/frysk-core/prog/kill/detach.c -index 78f759194..e536f9e9c 100644 ---- a/frysk-core/prog/kill/detach.c -+++ b/frysk-core/prog/kill/detach.c -@@ -53,7 +53,7 @@ - // Simple sleep for roughly SECONDS and then exit. - - static void --sigalrm () -+sigalrm (int) - { - exit (0); - } diff --git a/frysk-0.4-awk-gensub.patch b/frysk-0.4-awk-gensub.patch deleted file mode 100644 index ac59f64..0000000 --- a/frysk-0.4-awk-gensub.patch +++ /dev/null @@ -1,193 +0,0 @@ -diff -up frysk-0.4/frysk-common/antlr-warnings.awk.awk-gensub frysk-0.4/frysk-common/antlr-warnings.awk ---- frysk-0.4/frysk-common/antlr-warnings.awk.awk-gensub 2015-08-17 11:28:51.763304833 -0400 -+++ frysk-0.4/frysk-common/antlr-warnings.awk 2015-08-17 11:31:02.856574123 -0400 -@@ -46,7 +46,7 @@ - - function get_prob_field(field) { - return gensub(/^(.*\.java):([0-9]+): (error|warning): (.*)$/, \ -- "\\" field, "") -+ "\\" field, 1) - } - - { -@@ -59,7 +59,7 @@ function get_prob_field(field) { - line = get_prob_field(2) - prob = get_prob_field(4) - getline -- code = gensub(/^[[:space:]]*(.*)[[:space:]]*$/, "\\1", "") -+ code = gensub(/^[[:space:]]*(.*)[[:space:]]*$/, "\\1", 1) - } else if ($0 ~ /^[[:digit:]]+\. (WARNING|ERROR) in .*\.java$/) { - # An ECJ warning looks like: - # . (WARNING|ERROR) in -@@ -69,9 +69,9 @@ function get_prob_field(field) { - # - file = $4 - getline -- line = gensub(/)/, "", "", $3) -+ line = gensub(/)/, "", 1, $3) - getline -- code = gensub(/^[[:space:]]*(.*)[[:space:]]*$/, "\\1", "") -+ code = gensub(/^[[:space:]]*(.*)[[:space:]]*$/, "\\1", 1) - getline - getline - prob = $0 -@@ -83,16 +83,16 @@ function get_prob_field(field) { - # - java = ECJ - file = $4 -- line = gensub(/)/, "", "", $7) -+ line = gensub(/)/, "", 1, $7) - getline -- code = gensub(/^[[:space:]]*(.*)[[:space:]]*$/, "\\1", "") -+ code = gensub(/^[[:space:]]*(.*)[[:space:]]*$/, "\\1", 1) - getline - getline - prob = $0 - } else { - next - } -- base = gensub(/^(|.*\/)([[:alnum:]]*)\.java/, "\\2", "", file) -+ base = gensub(/^(|.*\/)([[:alnum:]]*)\.java/, "\\2", 1, file) - sed = "" - if (DEBUG) { - print "file=" file >> "/dev/stderr" -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum.awk-gensub 2015-08-17 12:51:26.234215677 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum 2015-08-17 12:54:55.770427076 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_ACCESS_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_ACCESS_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_ACCESS_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum.awk-gensub 2015-08-17 12:51:10.498579529 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum 2015-08-17 12:55:14.737997869 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_ATE_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_ATE_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_ATE_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum.awk-gensub 2015-08-17 12:50:05.037093181 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum 2015-08-17 12:55:34.063560561 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_AT_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_AT_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_AT_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum.awk-gensub 2015-08-17 12:50:21.258718092 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum 2015-08-17 12:55:54.736092772 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_DSC_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_DSC_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_DSC_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum.awk-gensub 2015-08-17 12:50:32.963447446 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum 2015-08-17 12:56:13.462669019 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_DS_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_DS_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_DS_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum.awk-gensub 2015-08-17 12:51:54.258567676 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum 2015-08-17 12:56:34.959182585 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_END_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_END_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_END_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum.awk-gensub 2015-08-17 12:50:44.749174927 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum 2015-08-17 12:56:53.437764443 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_INL_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_INL_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_INL_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum.awk-gensub 2015-08-17 12:51:41.343866300 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum 2015-08-17 12:57:16.653239112 -0400 -@@ -46,8 +46,8 @@ $CC -dD -E /usr/include/dwarf.h | awk ' - /lo_user/ || /hi_user/ { next } - /DW_OP_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_OP_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_OP_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum.awk-gensub 2015-08-17 12:50:56.155911172 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum 2015-08-17 12:57:33.172865298 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_ORD_.* = / { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_ORD_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_ORD_","",1,p)) - print n, v, p - } - ' -diff -up frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum.awk-gensub frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum.awk-gensub 2015-08-17 12:52:06.320288776 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum 2015-08-17 12:57:54.620379973 -0400 -@@ -45,8 +45,8 @@ CC=${CC:-gcc} - $CC -dD -E /usr/include/dwarf.h | awk ' - /DW_TAG_/ { - p = $1 -- v = gensub(",","","",$3) -- n = toupper(gensub("DW_TAG_","","",p)) -+ v = gensub(",","",1,$3) -+ n = toupper(gensub("DW_TAG_","",1,p)) - print n, v, p - } - ' 2>&1 diff --git a/frysk-0.4-bin-antlr.patch b/frysk-0.4-bin-antlr.patch deleted file mode 100644 index de00f18..0000000 --- a/frysk-0.4-bin-antlr.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -up frysk-0.4/frysk-common/Makefile.rules.bin-antlr frysk-0.4/frysk-common/Makefile.rules ---- frysk-0.4/frysk-common/Makefile.rules.bin-antlr 2012-01-23 20:47:12.479000002 -0500 -+++ frysk-0.4/frysk-common/Makefile.rules 2012-01-23 20:48:29.693998397 -0500 -@@ -567,9 +567,7 @@ endif - # running the generated files through the compiler and then "fix" the - # warnings. Reuse the tmp directory for successive runs on related .g files. - --ANTLR = $(JAVA) \ -- -classpath @abs_builddir@/../frysk-imports/antlr.jar \ -- antlr.Tool -+ANTLR = antlr - - SUFFIXES += .antlred .g - .g.antlred: diff --git a/frysk-0.4-check-p-not-status.patch b/frysk-0.4-check-p-not-status.patch deleted file mode 100644 index 9b52d69..0000000 --- a/frysk-0.4-check-p-not-status.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- frysk-0.4/frysk-sys/frysk/sys/proc/jni/Status.cxx.dist 2017-02-10 18:49:47.680517267 -0500 -+++ frysk-0.4/frysk-sys/frysk/sys/proc/jni/Status.cxx 2017-02-10 18:49:59.424346177 -0500 -@@ -91,7 +91,7 @@ - break; - } - } -- if (state == '\0') -+ if (*p == '\0') - return Status(env, NULL); - - // UID diff --git a/frysk-0.4-clone-cursor.patch b/frysk-0.4-clone-cursor.patch deleted file mode 100644 index 8d1ff06..0000000 --- a/frysk-0.4-clone-cursor.patch +++ /dev/null @@ -1,154 +0,0 @@ -commit 1b43afaf5f93e3fd2c7198054c038268bb671149 -Author: Andrew Cagney -Date: Tue Apr 19 10:38:01 2016 -0400 - - When cloning a unw_cursor_t also clone the jobject ref. - -diff --git a/frysk-sys/lib/unwind/jni/UnwindH.hxx b/frysk-sys/lib/unwind/jni/UnwindH.hxx -index 4d72423..6c16f39 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindH.hxx -+++ b/frysk-sys/lib/unwind/jni/UnwindH.hxx -@@ -64,9 +64,12 @@ - using namespace java::lang; - using namespace lib::unwind; - -+#define CURSOR_MAGIC 0xfab -+ - struct jni_cursor { - unw_cursor_t cursor; - jobject addressSpace; -+ int magic; - }; - - #define UNW_PROC_INFO ((unw_proc_info_t*)unwProcInfo) -@@ -248,27 +251,56 @@ jlong - TARGET::createCursor(jnixx::env env, - AddressSpace addressSpace, - jlong unwAddressSpace) { -- logf(FINE, "createCursor from address-space %lx", (long) UNW_ADDRESS_SPACE); - jni_cursor *cursor = new(jni_cursor); -+ logf(FINE, "createCursor %p using address-space %p arg %llx", -+ cursor, UNW_ADDRESS_SPACE, (long long) addressSpace._object); - // XXX: Need to zero out the cursor, as unw_init_remote doesn't seem - // to do it. - memset(cursor, 0, sizeof(jni_cursor)); - // Make global as object is used across JNI calls -+ cursor->magic = CURSOR_MAGIC; - cursor->addressSpace = env.NewGlobalRef(addressSpace._object); - unw_init_remote(&cursor->cursor, UNW_ADDRESS_SPACE, cursor->addressSpace); -- logf(FINE, "createCursor at %p", cursor); -+ logf(FINE, "createCursor %p global address-space ref %llx", -+ cursor, (long long) cursor->addressSpace); - return (jlong)cursor; - } - - void - TARGET::destroyCursor(jnixx::env env, jlong unwCursor) { - jni_cursor *cursor = (jni_cursor*)unwCursor; -- logf(FINE, "destroyCursor at %p", cursor); -+ logf(FINE, "destroyCursor %p", cursor); -+ if (cursor->magic != CURSOR_MAGIC) { -+ fprintf(stderr, "\n%s: cursor %p has bad CURSOR_MAGIC number\n", -+ __func__, cursor); -+ abort(); -+ } -+ logf(FINE, "destroyCursor %p deleting global address-space ref %llx", -+ cursor, (long long) cursor->addressSpace); - env.DeleteGlobalRef(cursor->addressSpace); - ::free(cursor); - } - - jlong -+TARGET::copyCursor(jnixx::env env, jlong unwCursor) { -+ jni_cursor *original = (jni_cursor*) unwCursor; -+ logf(FINE, "copyCursor %p", original); -+ if (original->magic != CURSOR_MAGIC) { -+ fprintf(stderr, "\n%s: cursor %p has bad CURSOR_MAGIC number\n", -+ __func__, original); -+ abort(); -+ } -+ jni_cursor *copy = new(jni_cursor); -+ // Create a local copy of the unwind cursor -+ ::memcpy(©->cursor, &original->cursor, sizeof(original->cursor)); -+ copy->magic = CURSOR_MAGIC; -+ copy->addressSpace = env.NewGlobalRef(original->addressSpace); -+ logf(FINE, "copyCursor %p to %p global address-space ref %llx", -+ original, copy, (long long) copy->addressSpace); -+ return (jlong) copy; -+} -+ -+jlong - TARGET::createAddressSpace(jnixx::env env, ByteOrder byteOrder) { - logf(FINE, "createAddressSpace, byteOrder %d", - (int) byteOrder.hashCode(env)); -@@ -304,13 +336,13 @@ TARGET::setCachingPolicy(jnixx::env env, jlong unwAddressSpace, - - jint - TARGET::isSignalFrame(jnixx::env env, jlong unwCursor) { -- logf(FINE, "isSignalFrame"); -+ logf(FINE, "isSignalFrame: %p", UNW_CURSOR); - return unw_is_signal_frame(UNW_CURSOR); - } - - jint - TARGET::step(jnixx::env env, jlong unwCursor) { -- logf(FINE, "step cursor: %lx", (long) UNW_CURSOR); -+ logf(FINE, "step cursor: %p", UNW_CURSOR); - return unw_step(UNW_CURSOR); - } - -@@ -329,8 +361,8 @@ TARGET::getRegister(jnixx::env env, jlong unwCursor, - Number num, jlong offset, jint length, - jnixx::jbyteArray jbytes, jint start) { - int regNum = num.intValue(env); -- logf(FINE, "getRegister %d from %lx, offset %ld length %d start %d", -- regNum, (long)UNW_CURSOR, (long) offset, (int)length, (int)start); -+ logf(FINE, "getRegister: %d from cursor: %p offset: %ld length: %d start: %d", -+ regNum, UNW_CURSOR, (long) offset, (int)length, (int)start); - int status; - union { - unw_word_t w; -@@ -423,9 +455,11 @@ TARGET::getCFA(jnixx::env env, jlong unwCursor) { - // This is wasteful, but there is no generic UNW_REG_CFA. - // So just unwind and return the stack pointer. - #define FRYSK_UNW_REG_CFA UNW_REG_SP -- unw_cursor_t copy; -+ // Need to copy everything including magic and the addressSpace -+ // handle. -+ jni_cursor copy; - memcpy(©, UNW_CURSOR, sizeof (copy)); -- if (unw_step(©) < 0) -+ if (unw_step(©.cursor) < 0) - return 0; - unwCursor = (jlong) © - #endif -@@ -446,17 +480,6 @@ TARGET::getContext(jnixx::env env, jlong context) { - } - - jlong --TARGET::copyCursor(jnixx::env env, jlong unwCursor) { -- ::unw_cursor_t *nativeCursor -- = (::unw_cursor_t*) ::malloc(sizeof(::unw_cursor_t)); -- // Create a local copy of the unwind cursor -- ::memcpy(nativeCursor, UNW_CURSOR, sizeof(*UNW_CURSOR)); -- logf(FINE, "copyCursor %lx to %lx", (long) UNW_CURSOR, -- (long) nativeCursor); -- return (jlong) nativeCursor; --} -- --jlong - TARGET::getProcInfo(jnixx::env env, jlong unwCursor) { - logf(FINE, "getProcInfo cursor: %lx", (long) UNW_CURSOR); - unw_proc_info_t *procInfo -@@ -510,8 +533,9 @@ image_access_mem(unw_addr_space_t as, unw_word_t addr, - unw_word_t *val, int write, void *arg) { - struct image *image = (struct image*) arg; - if (image->magic != IMAGE_MAGIC) { -- fprintf(stderr, "%s: bad magic number\n", __func__); -- return -UNW_EINVAL; -+ fprintf(stderr, "%s: image %p has bad IMAGE_MAGIC number\n", -+ __func__, image); -+ abort(); - } - // Writing is not supported - if (write) diff --git a/frysk-0.4-configure-enable-gnome.patch b/frysk-0.4-configure-enable-gnome.patch deleted file mode 100644 index 3f948e5..0000000 --- a/frysk-0.4-configure-enable-gnome.patch +++ /dev/null @@ -1,153 +0,0 @@ -commit 3fbf17b6271ca389cd4de1e33d6ec33708261228 -Author: Andrew Cagney -Date: Sat Jul 17 13:06:46 2010 -0400 - - Add --enable-gnome; make gnome interface optional. - - 2010-07-17 Andrew Cagney - - * configure.ac: Add --enable-gnome option; only check for - java-gnome when enabled. - - * Makefile.am (manpages manpages/index.html): Only include - frysk-gui when ENABLE_GNOME. - -diff --git a/frysk-top/ChangeLog b/frysk-top/ChangeLog -index 00498f2..0c72180 100644 ---- a/frysk-top/ChangeLog -+++ b/frysk-top/ChangeLog -@@ -1,3 +1,11 @@ -+2010-07-17 Andrew Cagney -+ -+ * configure.ac: Add --enable-gnome option; only check for -+ java-gnome when enabled. -+ -+ * Makefile.am (manpages manpages/index.html): Only include -+ frysk-gui when ENABLE_GNOME. -+ - 2008-06-06 Rick Moseley - - * NEWS: Add bz #'s; add item on hover-over variable. -diff --git a/frysk-top/Makefile.am b/frysk-top/Makefile.am -index d852fba..49444fb 100644 ---- a/frysk-top/Makefile.am -+++ b/frysk-top/Makefile.am -@@ -41,30 +41,35 @@ - include common/Makefile.rules - - --SUBDIRS = \ -- frysk-imports \ -- frysk-sys \ -- frysk-core \ -- frysk-gtk \ -- frysk-gui -+SUBDIRS = -+SUBDIRS += frysk-imports -+SUBDIRS += frysk-sys -+SUBDIRS += frysk-core -+if ENABLE_GNOME -+SUBDIRS += frysk-gtk -+SUBDIRS += frysk-gui -+endif - - # Note the dir/. is needed, causes the file copy to put the contents - # into the top level directory. - --SOURCEDIRS = \ -- $(patsubst %,$(srcdir)/%/frysk,$(SUBDIRS)) \ -- $(patsubst %,$(top_builddir)/%/frysk,$(SUBDIRS)) \ -- $(srcdir)/frysk-sys/lib \ -- $(top_builddir)/frysk-sys/lib \ -- $(srcdir)/frysk-sys/inua \ -- $(top_builddir)/frysk-sys/inua \ -- $(srcdir)/frysk-imports/getopt/src/getopt/gnu \ -- $(srcdir)/frysk-imports/jline/src/jline \ -- $(srcdir)/frysk-imports/junit/src/junit \ -- $(srcdir)/frysk-core/frysk/pkglibdir/. \ -- $(srcdir)/frysk-core/frysk/bindir/. \ -- $(srcdir)/frysk-gui/frysk/bindir/. \ -- $(empty) -+SOURCEDIRS = -+SOURCEDIRS += $(patsubst %,$(srcdir)/%/frysk,$(SUBDIRS)) -+SOURCEDIRS += $(patsubst %,$(top_builddir)/%/frysk,$(SUBDIRS)) -+SOURCEDIRS += $(srcdir)/frysk-sys/lib -+SOURCEDIRS += $(top_builddir)/frysk-sys/lib -+SOURCEDIRS += $(srcdir)/frysk-sys/inua -+SOURCEDIRS += $(top_builddir)/frysk-sys/inua -+SOURCEDIRS += $(srcdir)/frysk-imports/getopt/src/getopt/gnu -+SOURCEDIRS += $(srcdir)/frysk-imports/jline/src/jline -+SOURCEDIRS += $(srcdir)/frysk-imports/junit/src/junit -+SOURCEDIRS += $(srcdir)/frysk-core/frysk/pkglibdir/. -+SOURCEDIRS += $(srcdir)/frysk-core/frysk/bindir/. -+SOURCEDIRS += $(srcdir)/frysk-gui/frysk/bindir/. -+ -+if ENABLE_GNOME -+SOURCEDIRS += $(srcdir)/frysk-gui/frysk/bindir/. -+endif - - - # Generate html manpages. Use same xml sources, but generate html. -@@ -78,6 +83,7 @@ TEMPLATE = $(srcdir)/htdocs/template.html - manpages manpages/index.html: - rm -rf manpages - mkdir -p manpages -+if ENABLE_GNOME - XMLTO=$(XMLTO) \ - sh $(srcdir)/frysk-common/manpages.sh \ - $(TEMPLATE) \ -@@ -89,6 +95,17 @@ manpages manpages/index.html: - frysk-gui/frysk/bindir/*.xml \ - -"Test framework" \ - */frysk/pkglibdir/*.xml -+else -+ XMLTO=$(XMLTO) \ -+ sh $(srcdir)/frysk-common/manpages.sh \ -+ $(TEMPLATE) \ -+ -"Overview" \ -+ frysk-common/frysk.xml \ -+ -"Command Line Utilities" \ -+ frysk-core/frysk/bindir/*.xml \ -+ -"Test framework" \ -+ */frysk/pkglibdir/*.xml -+endif - mv manpages/index.new manpages/index.html - - # Generate JAVADOC documentation. -diff --git a/frysk-top/configure.ac b/frysk-top/configure.ac -index 6e1d234..bf122ce 100644 ---- a/frysk-top/configure.ac -+++ b/frysk-top/configure.ac -@@ -43,11 +43,24 @@ sinclude(common/version.ac) - AC_INIT(frysk,defn([FRYSK_VERSION])) - m4_include([common/frysk-common.ac]) - -+AC_ARG_ENABLE(gnome, -+AC_HELP_STRING( -+ [--enable-gnome], -+ [enable gnome user interface (default no)]), -+[enable_gnome=$enableval], -+[enable_gnome=no]) -+AM_CONDITIONAL([ENABLE_GNOME], [test x$enable_gnome = xyes]) -+ - AM_INIT_AUTOMAKE([subdir-objects foreign no-installinfo no-exeext no-dist]) - AC_CONFIG_FILES([Makefile]) --AC_CONFIG_SUBDIRS([frysk-imports frysk-sys frysk-core frysk-gtk frysk-gui]) -+ -+AC_CONFIG_SUBDIRS([frysk-imports frysk-sys frysk-core]) -+if test x$enable_gnome = xyes; then -+ AC_CONFIG_SUBDIRS([frysk-gtk frysk-gui]) -+fi - - # Need to call PKG_CHECK_MODULES to get PKG_CONFIG set; used by javadoc. -+if test x$enable_gnome = xyes ; then - PKG_CHECK_MODULES(FRYSK_GNOME, [gtk+-2.0 >= 2.7.0 gtk2-java >= 2.7.0 - glade-java >= 2.7.0 glib-java >= 0.2 cairo-java >= 1.0 vte-java >= - 0.11.11 pango >= 1.10.0 pangox >= 1.10.0 pangoft2 >= 1.10.0]) -@@ -55,5 +68,6 @@ FRYSK_PKG_MODULE_VARIABLE(FRYSK_GNOME_JARS, classpath, [gtk+-2.0 >= 2.7.0 - gtk2-java >= 2.7.0 glade-java >= 2.7.0 glib-java >= 0.2 - cairo-java >= 1.0 vte-java - >= 0.11.11 pango >= 1.10.0 pangox >= 1.10.0 pangoft2 >= 1.10.0]) -+fi - - AC_OUTPUT diff --git a/frysk-0.4-cxx-scope.patch b/frysk-0.4-cxx-scope.patch deleted file mode 100644 index 3ec1f8c..0000000 --- a/frysk-0.4-cxx-scope.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up frysk-0.4/frysk-sys/jnixx/elements.hxx.cxx-scope frysk-0.4/frysk-sys/jnixx/elements.hxx ---- frysk-0.4/frysk-sys/jnixx/elements.hxx.cxx-scope 2012-01-22 21:21:58.336000647 -0500 -+++ frysk-0.4/frysk-sys/jnixx/elements.hxx 2012-01-22 21:22:13.119000651 -0500 -@@ -207,7 +207,7 @@ private: - char file[FILENAME_MAX]; - public: - void operator=(const FileElements& src) { -- copy(src); -+ this->copy(src); - ::strcpy(this->file, src.file); - // Don't copy the pointer. - } diff --git a/frysk-0.4-disable-arch32-tests.patch b/frysk-0.4-disable-arch32-tests.patch deleted file mode 100644 index dd0b9c6..0000000 --- a/frysk-0.4-disable-arch32-tests.patch +++ /dev/null @@ -1,29 +0,0 @@ -commit be258fda95c5a89305aa7a1bf2530d307a293115 -Author: Andrew Cagney -Date: Fri Sep 6 12:24:43 2019 -0400 - - disable arch32 tests by default - - frysk-0.4-disable-arch32-tests.patch - -diff --git a/frysk-common/m4/frysk_do_arch32_test.m4 b/frysk-common/m4/frysk_do_arch32_test.m4 -index 6f8c2a13d..d8b3b7b54 100644 ---- a/frysk-common/m4/frysk_do_arch32_test.m4 -+++ b/frysk-common/m4/frysk_do_arch32_test.m4 -@@ -39,13 +39,9 @@ - AC_DEFUN([FRYSK_DO_ARCH32_TEST], [ - AC_REQUIRE([AC_CANONICAL_TARGET]) - AC_ARG_ENABLE([arch32_tests], -- [AS_HELP_STRING([--disable-arch32-tests], -- [Disable the multiarch testing on 64-bit platforms.])], -+ [AS_HELP_STRING([--enable-arch32-tests], -+ [Enable the multiarch testing on 64-bit platforms.])], - [], -- [dnl The default: -- case $target_cpu in #( -- x86_64|powerpc64|ppc64) enable_arch32_tests=yes;; #( -- *) enable_arch32_tests=no;; -- esac]) -+ [enable_arch32_tests=no]) - AM_CONDITIONAL([DO_ARCH32_TEST], [test "$enable_arch32_tests" = yes]) - ]) diff --git a/frysk-0.4-elfutils-fixesout.patch b/frysk-0.4-elfutils-fixesout.patch new file mode 100644 index 0000000..b17557e --- /dev/null +++ b/frysk-0.4-elfutils-fixesout.patch @@ -0,0 +1,295 @@ +diff --git b/libdwfl/ChangeLog a/libdwfl/ChangeLog +index e1d00f1..01a2537 100644 +--- b/libdwfl/ChangeLog ++++ a/libdwfl/ChangeLog +@@ -1,39 +1,3 @@ +-2008-06-19 Andrew Cagney +- +- * dwfl_module_addrsym.c (dwfl_module_addrsym): Correctly update +- min_label. +- +-2008-06-07 Andrew Cagney +- +- * dwfl_module_getdwarf.c (open_elf): Don't align the module's load +- address. Bug frysk/6599, redhat/450218. +- +- * dwfl_module_getsrc.c (dwfl_module_getsrc): Remove bias from +- address. Fix frysk/6600, redhat/450229. +- +- +-2008-05-21 Petr Machata +- +- * dwfl_module_getdwarf.c (open_elf): Assume that debuginfo of EXEC +- files has the same bias as the main file. +- +-2008-04-02 Petr Machata +- +- * dwfl_module_getdwarf.c (find_debuginfo): Return DWFL_E_CB when +- the callback results in an error. +- (find_file): Likewise. +- +-2008-03-24 Stan Cox +- +- * dwfl_module_getdwarf.c (load_symtab): Keep looking for an external +- symbol table even if we have a .dynsym. Should be fixed post 0.133. +- +-2008-03-13 Tim Moore +- +- * dwfl_module_addrsym.c (dwfl_module_addrsym): Start min_label +- from 0 to allow sizeless symbols below the address. Choose the +- best sizeless symbol. +- + 2008-02-19 Roland McGrath + + * relocate.c (relocate_section): Check for an unhandled relocation +diff --git b/libdwfl/dwfl_module_addrsym.c a/libdwfl/dwfl_module_addrsym.c +index 77033a6..f16de11 100644 +--- b/libdwfl/dwfl_module_addrsym.c ++++ a/libdwfl/dwfl_module_addrsym.c +@@ -49,13 +49,10 @@ + + #include "libdwflP.h" + +-#include +- + const char * + dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + GElf_Sym *closest_sym, GElf_Word *shndxp) + { +- // fprintf(stderr, "looking up %lx\n", (long) addr); + int syments = INTUSE(dwfl_module_getsymtab) (mod); + if (syments < 0) + return NULL; +@@ -111,7 +108,7 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + GElf_Word sizeless_shndx = SHN_UNDEF; + + /* Keep track of the lowest address a relevant sizeless symbol could have. */ +- GElf_Addr min_label = 0; ++ GElf_Addr min_label = addr; + + /* Look through the symbol table for a matching symbol. */ + for (int i = 1; i < syments; ++i) +@@ -119,20 +116,15 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + GElf_Sym sym; + GElf_Word shndx; + const char *name = INTUSE(dwfl_module_getsym) (mod, i, &sym, &shndx); +- // fprintf(stderr, "symbol %s at 0x%lx 0x%ld\n", name, (long) sym.st_value, (long) sym.st_size); +- /* Even if we don't choose this symbol, its existence excludes +- any sizeless symbol (assembly label) that is below its upper +- bound. */ +- if (name != NULL && sym.st_value <= addr +- && sym.st_value + sym.st_size > min_label) { +- min_label = sym.st_value + sym.st_size; +- // fprintf(stderr, " min to %s size ends at %lx\n", name, (long) min_label); +- } + if (name != NULL + && sym.st_value <= addr + && (sym.st_size == 0 || addr - sym.st_value < sym.st_size)) + { +- // fprintf(stderr, " candidate %s at 0x%lx 0x%ld\n", name, (long) sym.st_value, (long) sym.st_size); ++ /* Even if we don't choose this symbol, its existence ++ excludes any sizeless symbol (assembly label) that ++ is inside its bounds. */ ++ if (sym.st_value + sym.st_size > addr) ++ min_label = sym.st_value + sym.st_size; + + /* This symbol is a better candidate than the current one + if it's a named symbol, not a section or file symbol, +@@ -148,7 +140,6 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + { + if (sym.st_size != 0) + { +- // fprintf(stderr, " closest %s at %lx\n", name, (long)sym.st_value); + *closest_sym = sym; + closest_shndx = shndx; + closest_name = name; +@@ -159,29 +150,17 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + 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. */ +- if (sizeless_name == NULL +- || sizeless_sym.st_value < sym.st_value +- || (sizeless_sym.st_value == sym.st_value +- && strcmp(name, sizeless_name) < 0)) +- { +- // fprintf(stderr, " sizeless %s at %lx\n", name, (long)sym.st_value); +- sizeless_sym = sym; +- sizeless_shndx = shndx; +- sizeless_name = name; +- } ++ 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. +- If symbols are identical, choose the first one in +- alphabetical order */ ++ the end of its range might be. */ + else if (sym.st_size != 0 + && closest_sym->st_value == sym.st_value +- && (closest_sym->st_size > sym.st_size +- || (closest_sym->st_size == sym.st_size +- && strcmp(name, closest_name) < 0))) ++ && closest_sym->st_size > sym.st_size) + { +- // fprintf(stderr, " alt closest %s at %lx\n", name, (long)sym.st_value); + *closest_sym = sym; + closest_shndx = shndx; + closest_name = name; +diff --git b/libdwfl/dwfl_module_getdwarf.c a/libdwfl/dwfl_module_getdwarf.c +index 1d75754..7dd9b53 100644 +--- b/libdwfl/dwfl_module_getdwarf.c ++++ a/libdwfl/dwfl_module_getdwarf.c +@@ -82,26 +82,19 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) + } + + file->bias = 0; +- if (mod->e_type == ET_EXEC && file == &mod->debug) +- /* Prelink can change ET_EXEC's first loadable address, but it +- will not touch .text or any section where symbol information is +- relevant. Assume debugbias is the same as the main file. */ +- file->bias = mod->main.bias; +- else +- 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) +- { +- // Align the vaddr. +- Dwarf_Addr vaddr = ph->p_vaddr & -ph->p_align; +- file->bias = (mod->low_addr - vaddr); +- break; +- } +- } ++ 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; + +@@ -124,15 +117,6 @@ find_file (Dwfl_Module *mod) + mod->main.fd = (*mod->dwfl->callbacks->find_elf) (MODCB_ARGS (mod), + &mod->main.name, + &mod->main.elf); +- +- /* Bail out on error, but if there was a pre-primed file name left +- behind by the callback, try to open that file name. */ +- if (mod->main.fd < 0 && mod->main.name == NULL) +- { +- mod->elferr = DWFL_E_CB; +- return; +- } +- + mod->elferr = open_elf (mod, &mod->main); + + if (mod->elferr == DWFL_E_NOERROR && !mod->main.valid) +@@ -222,12 +206,6 @@ find_debuginfo (Dwfl_Module *mod) + debuglink_file, + debuglink_crc, + &mod->debug.name); +- +- /* Bail out on error, but if there was a pre-primed file name left +- behind by the callback, try to open that file name. */ +- if (mod->debug.fd < 0 && mod->debug.name == NULL) +- return DWFL_E_CB; +- + return open_elf (mod, &mod->debug); + } + +@@ -240,7 +218,6 @@ 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) + { +@@ -249,7 +226,6 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + switch (shdr->sh_type) + { + case SHT_SYMTAB: +- symtab = true; + *symscn = scn; + *symfile = file; + *strshndx = shdr->sh_link; +@@ -259,8 +235,6 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + break; + + case SHT_DYNSYM: +- if (symtab) +- break; + /* Use this if need be, but keep looking for SHT_SYMTAB. */ + *symscn = scn; + *symfile = file; +@@ -270,7 +244,7 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + + case SHT_SYMTAB_SHNDX: + *xndxscn = scn; +- if (symtab) ++ if (*symscn != NULL) + return DWFL_E_NOERROR; + break; + +@@ -279,7 +253,7 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + } + } + +- if (symtab) ++ if (*symscn != NULL) + /* We found one, though no SHT_SYMTAB_SHNDX to go with it. */ + return DWFL_E_NOERROR; + +diff --git b/libdwfl/dwfl_module_getsrc.c a/libdwfl/dwfl_module_getsrc.c +index a413189..84c7eaa 100644 +--- b/libdwfl/dwfl_module_getsrc.c ++++ a/libdwfl/dwfl_module_getsrc.c +@@ -63,8 +63,6 @@ dwfl_module_getsrc (Dwfl_Module *mod, Dwarf_Addr addr) + error = __libdwfl_cu_getsrclines (cu); + if (likely (error == DWFL_E_NOERROR)) + { +- /* Remove bias. */ +- addr = 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) +diff --git b/libelf/ChangeLog a/libelf/ChangeLog +index b7aeee4..ef7b37a 100644 +--- b/libelf/ChangeLog ++++ a/libelf/ChangeLog +@@ -1,8 +1,3 @@ +-2008-03-13 Tim Moore +- +- * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Cast offset and +- size computation to uint64_t. +- + 2008-02-19 Roland McGrath + + * elf.h: Update from glibc. +diff --git b/libelf/elf_getdata_rawchunk.c a/libelf/elf_getdata_rawchunk.c +index 1b1b003..bea0f3f 100644 +--- b/libelf/elf_getdata_rawchunk.c ++++ a/libelf/elf_getdata_rawchunk.c +@@ -79,7 +79,7 @@ elf_getdata_rawchunk (elf, offset, size, type) + } + + if (unlikely (size > elf->maximum_size +- || (uint64_t)(elf->maximum_size - size) < (uint64_t)offset)) ++ || (off64_t) (elf->maximum_size - size) < offset)) + { + /* Invalid request. */ + __libelf_seterrno (ELF_E_INVALID_OP); diff --git a/frysk-0.4-elfutils-head.patch b/frysk-0.4-elfutils-head.patch new file mode 100644 index 0000000..32cc0d7 --- /dev/null +++ b/frysk-0.4-elfutils-head.patch @@ -0,0 +1,75359 @@ +diff --git a/.gitignore b/.gitignore +new file mode 100644 +index 0000000..163d790 +--- /dev/null ++++ b/.gitignore +@@ -0,0 +1,28 @@ ++*~ ++#* ++*# ++.#* ++=* ++.glimpse_* ++autom4te.* ++*.o ++*.so ++*.a ++*.orig ++*.patch ++*.rej ++Makefile.in ++*/Makefile.in ++aclocal.m4 ++INSTALL ++config.h.in ++config/config.guess ++config/config.sub ++config/depcomp ++config/install-sh ++config/missing ++config/ylwrap ++configure ++elfutils.spec ++*.pot ++libdw/known-dwarf.h +diff --git a/AUTHORS b/AUTHORS +index 29b776f..ef3c543 100644 +--- a/AUTHORS ++++ b/AUTHORS +@@ -1,2 +1,4 @@ + For Now: + Ulrich Drepper. ++Roland McGrath ++Petr Machata +diff --git a/ChangeLog b/ChangeLog +index fee15a4..c00ae18 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,70 @@ ++2009-09-21 Ulrich Drepper ++ ++ * configure.ac: Update for more modern autoconf. ++ ++2009-08-26 Roland McGrath ++ ++ * configure.ac (zip_LIBS): Check for liblzma too. ++ ++2009-04-19 Roland McGrath ++ ++ * configure.ac (eu_version): Round down here, not in version.h macros. ++ ++2009-04-17 Roland McGrath ++ ++ * configure.ac (eu_version): Compute number 1000 times larger, ++ let $PACKAGE_VERSION be x.y.z as well as x.y (implied x.y.0). ++ ++2009-01-23 Roland McGrath ++ ++ * configure.ac (zlib check): Check for gzdirect, need zlib >= 1.2.2.3. ++ ++ * configure.ac (__thread check): Use AC_LINK_IFELSE, in case of ++ building with compiler support but no working runtime support. ++ ++2009-01-22 Ulrich Drepper ++ ++ * Makefile.am (rpm): The tarball is now bzip2-compressed. ++ ++2009-01-10 Ulrich Drepper ++ ++ * configure.ac: Require gcc with TLS support. ++ Rename USE_TLS to USE_LOCKS. The option is renamed to ++ --enable-thread-safety. ++ ++2009-01-08 Roland McGrath ++ ++ * configure.ac (eu_ZIPLIB): Moved to m4/zip.am. ++ ++2009-01-05 Roland McGrath ++ ++ * configure.ac (eu_ZIPLIB): New macro. ++ Use it to test for -lz, -lbz2, set .am ZLIB, BZLIB, zip_LIBS. ++ ++2008-12-30 Ulrich Drepper ++ ++ * configure.ac: We need automake 1.8 now. ++ ++2008-12-24 Roland McGrath ++ ++ * configure.ac: Use automake flags dist-bzip2 no-dist-gzip, ++ distribute only in .tar.bz2 form now. ++ ++2008-12-16 Roland McGrath ++ ++ * 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 ++ ++ * configure.ac (--enable-tls): Set AM_CONDITIONAL USE_TLS too. ++ ++2008-08-21 Roland McGrath ++ ++ * configure.ac (AH_BOTTOM): Emit #include and ++ move the contents to lib/eu-config.h instead of keeping them here. ++ + 2007-12-20 Ulrich Drepper + + * configure.ac: Add support for --enable-debugpred. +diff --git a/Makefile.am b/Makefile.am +index 9306fe6..4decc55 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,7 +1,7 @@ + ## Process this file with automake to create Makefile.in + ## Configure input file for elfutils. + ## +-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006 Red Hat, Inc. ++## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2008, 2009 Red Hat, Inc. + ## This file is part of Red Hat elfutils. + ## + ## Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -27,6 +27,8 @@ + ## + 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 +@@ -44,7 +46,7 @@ distcheck-hook: + chmod -R u+w $(distdir) + + rpm: dist +- rpmbuild -ts --sign elfutils-@PACKAGE_VERSION@.tar.gz ++ rpmbuild -ts --sign elfutils-@PACKAGE_VERSION@.tar.bz2 + + # Tell version 3.79 and up of GNU make to not build goals in this + # directory in parallel. +diff --git a/NEWS b/NEWS +index 2c644dc..77ea4cb 100644 +--- a/NEWS ++++ b/NEWS +@@ -1,3 +1,121 @@ ++Version 0.145: ++ ++Fix build with --disable-dependency-tracking. ++ ++Fix build with most recent glibc headers. ++ ++libelf: More robust to bogus section headers. ++ ++libdw: Fix CFI decoding. ++ ++libdwfl: Fix address bias returned by CFI accessors. ++ Fix core file module layout identification. ++ ++readelf: Fix CFI decoding. ++ ++Version 0.144: ++ ++libelf: New function elf_getphdrnum. ++ Now support using more than 65536 program headers in a file. ++ ++libdw: New function dwarf_aggregate_size for computing (constant) type ++ sizes, including array_type cases with nontrivial calculation. ++ ++readelf: Don't give errors for missing info under -a. ++ Handle Linux "VMCOREINFO" notes under -n. ++ ++Version 0.143: ++ ++libdw: Various convenience functions for individual attributes now use ++ dwarf_attr_integrate to look up indirect inherited attributes. ++ Location expression handling now supports DW_OP_implicit_value. ++ ++libdwfl: Support automatic decompression of files in XZ format, ++ and of Linux kernel images made with bzip2 or LZMA (as well as gzip). ++ ++Version 0.142: ++ ++libelf: Add elf_getshdrnum alias for elf_getshnum and elf_getshdrstrndx alias ++ for elf_getshstrndx and deprecate original names. Sun screwed up ++ their implementation and asked for a solution. ++ ++libebl: Add support for STB_GNU_UNIQUE. ++ ++elflint: Add support for STB_GNU_UNIQUE. ++ ++readelf: Add -N option, speeds up DWARF printing without address->name lookups. ++ ++libdw: Add support for decoding DWARF CFI into location description form. ++ Handle some new DWARF 3 expression operations previously omitted. ++ Basic handling of some new encodings slated for DWARF 4. ++ ++Version 0.141: ++ ++libebl: sparc backend fixes; ++ some more arm backend support ++ ++libdwfl: fix dwfl_module_build_id for prelinked DSO case; ++ fixes in core file support; ++ dwfl_module_getsym interface improved for non-address symbols ++ ++strip: fix infinite loop on strange inputs with -f ++ ++addr2line: take -j/--section=NAME option for binutils compatibility ++ (same effect as '(NAME)0x123' syntax already supported) ++ ++Version 0.140: ++ ++libelf: Fix regression in creation of section header ++ ++libdwfl: Less strict behavior if DWARF reader ist just used to display data ++ ++Version 0.139: ++ ++libcpu: Add Intel SSE4 disassembler support ++ ++readelf: Implement call frame information and exception handling dumping. ++ Add -e option. Enable it implicitly for -a. ++ ++elflint: Check PT_GNU_EH_FRAME program header entry. ++ ++libdwfl: Support automatic gzip/bzip2 decompression of ELF files. ++ ++Version 0.138: ++ ++Install 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) +diff --git a/README b/README +index afc9407..33cac74 100644 +--- a/README ++++ b/README +@@ -4,3 +4,9 @@ Fundamental design decision: + 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. ++ ++- the ABI of the backend modules is not guaranteed. Really, not guarantee ++ whatsoever. We are enforcing this in the code. The modules and their ++ users must match. No third-party EBL module are supported or allowed. ++ The only reason there are separate modules is to not have the code for ++ all architectures in all the binaries. +diff --git a/THANKS b/THANKS +index 3ee88d1..887c067 100644 +--- a/THANKS ++++ b/THANKS +@@ -3,4 +3,4 @@ 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 ++Denys Vlasenko bug fuxes +diff --git a/TODO b/TODO +index b2bcf6e..0012a56 100644 +--- a/TODO ++++ b/TODO +@@ -1,7 +1,7 @@ + ToDo list for elfutils -*-outline-*- + ---------------------- + +-Time-stamp: <2008-02-03 14:15:41 drepper> ++Time-stamp: <2009-02-05 22:08:01 drepper> + + * mkinstalldirs + +@@ -22,6 +22,13 @@ Time-stamp: <2008-02-03 14:15:41 drepper> + archives and only when having the archive handling separately this + remains maintainable. + ++** shdrs in read-only files ++ ++ When reading (ELF_C_READ*) then there is no need to malloc Shdr ++ structure in elfXX_getshdr if file is mmaped and unaligned access ++ is allowed or the structure is aligned. Use ELF_F_MALLOCED flag ++ to differentiate. ++ + + * libdw + +@@ -38,6 +45,20 @@ Time-stamp: <2008-02-03 14:15:41 drepper> + ** Rename dwarf_getabbrev + + ++* libcpu ++ ++** x86 ++ ++*** Opcodes ++ ++ crc32 ++ extractps ++ pextrb ++ pextrd/pextrq ++ pextrw ++ pinsrq ++ popcnt 64-bit reg ++ + * nm: + + ** add demangler support +@@ -89,6 +110,13 @@ Time-stamp: <2008-02-03 14:15:41 drepper> + Not implemented at all in the moment except for recognition of the option + itself. + ++** variables with aliases in executables ++ ++ When linking an executable with a references against a variable in a ++ DSO, create symbol table entries for all the aliases of the variable ++ in the DSO and create a relocation for one of them (a non-weak ++ definition) ++ + * elflint + + ** additional checks +@@ -104,6 +132,8 @@ Time-stamp: <2008-02-03 14:15:41 drepper> + + check TLS relocation depencies + ++ Check content of .eh_frame_hdr, .eh_frame, .gcc_except_table ++ + *** for x86 + + check that R_386_TLS_GD is followed by R_386_PLT32 for __tls_get_addr +@@ -156,5 +186,5 @@ Time-stamp: <2008-02-03 14:15:41 drepper> + -V Print on standard error the version number of mcs. + + Local Variables: +-eval:(hide-body) ++eval:(hide-sublevels 3) + End: +diff --git a/backends/ChangeLog b/backends/ChangeLog +index 681ba94..4ec13fd 100644 +--- a/backends/ChangeLog ++++ b/backends/ChangeLog +@@ -1,3 +1,137 @@ ++2010-02-18 Roland McGrath ++ ++ * Makefile.am (libebl_%.so): Use multi-target pattern rule instead of ++ intermediate dependency file for libebl_%.map, working around apparent ++ make -j timing-sensitive bugs. ++ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++2010-01-05 Roland McGrath ++ ++ * arm_retval.c (arm_return_value_location): Use dwarf_aggregate_size. ++ * ia64_retval.c (ia64_return_value_location): Likewise. ++ * ppc_retval.c (ppc_return_value_location): Likewise. ++ * ppc64_retval.c (ppc64_return_value_location): Likewise. ++ * sparc_retval.c (sparc_return_value_location): Likewise. ++ ++ * ppc64_retval.c (ppc64_return_value_location): ++ Use vr2 for DW_TAG_array_type with DW_AT_GNU_vector. ++ * ppc_retval.c (ppc_return_value_location): Likewise. ++ ++2010-01-04 Roland McGrath ++ ++ * linux-core-note.c (vmcoreinfo_items): New static const variable. ++ (EBLHOOK(core_note)): Update arguments for new protocol. ++ Validate the name as "CORE" or "LINUX" for known n_type cases. ++ Handle name "VMCOREINFO" n_type=0 with vmcoreinfo_items. ++ * i386_corenote.c (EXTRA_NOTES): Update parameter usage. ++ * x86_corenote.c (EXTRA_NOTES_IOPERM): Likewise. ++ ++2009-09-10 Mark Wielaard ++ ++ * sparc_retval.c: Fix license header. ++ ++2009-08-07 Roland McGrath ++ ++ * x86_64_reloc.def: Add PC64, GOTOFF64, GOTPC32, GOTPC32_TLSDESC, ++ TLSDESC_CALL, TLSDESC. ++ ++2009-07-08 Roland McGrath ++ ++ * x86_64_cfi.c (x86_64_abi_cfi): New file. ++ * Makefile.am (x86_64_SRCS): Add it. ++ * x86_64_init.c (x86_64_init): Add initializer. ++ ++ * i386_cfi.c (i386_abi_cfi): New file. ++ * Makefile.am (i386_SRCS): Add it. ++ * i386_init.c (i386_init): Initialize abi_cfi hook. ++ ++2009-06-01 Ulrich Drepper ++ ++ * i386_reloc.def: Add IRELATIVE entry. ++ * x86_64_reloc.def: Likewise. ++ ++2009-04-16 Roland McGrath ++ ++ * arm_regs.c (arm_register_info): Handle VFP registers. ++ ++ * i386_corenote.c (EXTRA_NOTES): NT_PRXFPREG -> NT_PRXFPREG ++ ++2009-04-14 Roland McGrath ++ ++ * arm_retval.c: New file. ++ * arm_attrs.c: New file. ++ * Makefile.am (arm_SRCS): Add them. ++ * arm_symbol.c (arm_segment_type_name): New function. ++ (arm_section_type_name): New function. ++ (arm_machine_flag_check): New function. ++ * arm_init.c (arm_init): Initialize those hooks. ++ ++ * arm_regs.c: New file. ++ * arm_corenote.c: New file. ++ * arm_auxv.c: New file. ++ * Makefile.am (arm_SRCS): Add them. ++ * arm_init.c (arm_init): Initialize core_note, register_info, ++ and auxv_info hooks. ++ ++ * ia64_symbol.c (ia64_section_type_name): Remove "SHT_" prefixes. ++ ++2009-04-01 Roland McGrath ++ ++ * sparc_reloc.def: Update table. ++ Data from Dave Miller . ++ ++2009-02-15 Roland McGrath ++ ++ * ppc_attrs.c (ppc_check_object_attribute): Handle tag ++ GNU_Power_ABI_Struct_Return. ++ ++2008-10-04 Ulrich Drepper ++ ++ * i386_reloc.def: Fix entries for TLS_GOTDESC, TLS_DESC_CALL, and ++ TLS_DESC. ++ ++2008-08-01 Roland McGrath ++ ++ * 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 ++ ++ * 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 ++ ++ * alpha_symbol.c (alpha_check_special_section): New function. ++ * alpha_init.c (alpha_init): Initialize check_special_section hook. ++ ++2008-03-31 Roland McGrath ++ ++ * 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 + + * ppc_attrs.c: New file. +diff --git a/backends/Makefile.am b/backends/Makefile.am +index 75eacde..a18454d 100644 +--- a/backends/Makefile.am ++++ b/backends/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 2000-2006, 2007, 2008 Red Hat, Inc. ++## Copyright (C) 2000-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 +@@ -24,17 +24,9 @@ + ## Network licensing program, please visit 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.. ++include $(top_srcdir)/config/eu.am ++INCLUDES += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ ++ -I$(top_srcdir)/libelf -I$(top_srcdir)/libdw + + + modules = i386 sh x86_64 ia64 alpha arm sparc ppc ppc64 s390 +@@ -49,19 +41,13 @@ 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_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.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) +@@ -70,8 +56,8 @@ 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_SRCS = x86_64_init.c x86_64_symbol.c x86_64_corenote.c x86_64_cfi.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) +@@ -85,7 +71,8 @@ alpha_SRCS = alpha_init.c alpha_symbol.c alpha_retval.c alpha_regs.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 ++arm_SRCS = arm_init.c arm_symbol.c arm_regs.c arm_corenote.c \ ++ arm_auxv.c arm_attrs.c arm_retval.c + libebl_arm_pic_a_SOURCES = $(arm_SRCS) + am_libebl_arm_pic_a_OBJECTS = $(arm_SRCS:.c=.os) + +@@ -95,12 +82,12 @@ 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_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 ++ 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) + +@@ -109,28 +96,19 @@ 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,$^) \ ++libebl_%.so libebl_%.map: libebl_%_pic.a $(libelf) $(libdw) ++ @rm -f $(@:.so=.map) ++ echo 'ELFUTILS_$(PACKAGE_VERSION) { global: $*_init; local: *; };' \ ++ > $(@:.so=.map) ++ $(LINK) -shared -o $(@:.map=.so) \ ++ -Wl,--whole-archive $< $(cpu_$*) -Wl,--no-whole-archive \ ++ -Wl,--version-script,$(@:.so=.map) \ + -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) +@@ -146,9 +124,9 @@ uninstall: uninstall-am + done + rmdir --ignore-fail-on-non-empty $(DESTDIR)$(libdir)/$(LIBEBL_SUBDIR) + +-noinst_HEADERS = libebl_CPU.h common-reloc.c linux-core-note.c ++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)) ++CLEANFILES += $(foreach m,$(modules),\ ++ libebl_$(m).map libebl_$(m).so \ ++ $(am_libebl_$(m)_pic_a_OBJECTS)) +diff --git a/backends/alpha_init.c b/backends/alpha_init.c +index 3c9e29d..1ca99ab 100644 +--- a/backends/alpha_init.c ++++ b/backends/alpha_init.c +@@ -55,6 +55,7 @@ alpha_init (elf, machine, eh, ehlen) + 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); +diff --git a/backends/alpha_symbol.c b/backends/alpha_symbol.c +index dc3cce5..aa45c61 100644 +--- a/backends/alpha_symbol.c ++++ b/backends/alpha_symbol.c +@@ -1,5 +1,5 @@ + /* Alpha specific symbolic name handling. +- Copyright (C) 2002, 2005, 2007 Red Hat, Inc. ++ Copyright (C) 2002,2005,2007,2008 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -77,3 +77,47 @@ 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_attrs.c b/backends/arm_attrs.c +new file mode 100644 +index 0000000..84f4d45 +--- /dev/null ++++ b/backends/arm_attrs.c +@@ -0,0 +1,242 @@ ++/* Object attribute tags for ARM. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++#define BACKEND arm_ ++#include "libebl_CPU.h" ++ ++#define KNOWN_VALUES(...) do \ ++ { \ ++ static const char *table[] = { __VA_ARGS__ }; \ ++ if (value < sizeof table / sizeof table[0]) \ ++ *value_name = table[value]; \ ++ } while (0) ++ ++bool ++arm_check_object_attribute (ebl, vendor, tag, value, tag_name, value_name) ++ Ebl *ebl __attribute__ ((unused)); ++ const char *vendor; ++ int tag; ++ uint64_t value __attribute__ ((unused)); ++ const char **tag_name; ++ const char **value_name; ++{ ++ if (!strcmp (vendor, "aeabi")) ++ switch (tag) ++ { ++ case 4: ++ *tag_name = "CPU_raw_name"; ++ return true; ++ case 5: ++ *tag_name = "CPU_name"; ++ return true; ++ case 6: ++ *tag_name = "CPU_arch"; ++ KNOWN_VALUES ("Pre-v4", ++ "v4", ++ "v4T", ++ "v5T", ++ "v5TE", ++ "v5TEJ", ++ "v6", ++ "v6KZ", ++ "v6T2", ++ "v6K", ++ "v7", ++ "v6-M", ++ "v6S-M"); ++ return true; ++ case 7: ++ *tag_name = "CPU_arch_profile"; ++ switch (value) ++ { ++ case 'A': ++ *value_name = "Application"; ++ break; ++ case 'R': ++ *value_name = "Realtime"; ++ break; ++ case 'M': ++ *value_name = "Microcontroller"; ++ break; ++ } ++ return true; ++ case 8: ++ *tag_name = "ARM_ISA_use"; ++ KNOWN_VALUES ("No", "Yes"); ++ return true; ++ case 9: ++ *tag_name = "THUMB_ISA_use"; ++ KNOWN_VALUES ("No", "Thumb-1", "Thumb-2"); ++ return true; ++ case 10: ++ *tag_name = "VFP_arch"; ++ KNOWN_VALUES ("No", "VFPv1", "VFPv2", "VFPv3", "VFPv3-D16"); ++ return true; ++ case 11: ++ *tag_name = "WMMX_arch"; ++ KNOWN_VALUES ("No", "WMMXv1", "WMMXv2"); ++ return true; ++ case 12: ++ *tag_name = "Advanced_SIMD_arch"; ++ KNOWN_VALUES ("No", "NEONv1"); ++ return true; ++ case 13: ++ *tag_name = "PCS_config"; ++ KNOWN_VALUES ("None", ++ "Bare platform", ++ "Linux application", ++ "Linux DSO", ++ "PalmOS 2004", ++ "PalmOS (reserved)", ++ "SymbianOS 2004", ++ "SymbianOS (reserved)"); ++ return true; ++ case 14: ++ *tag_name = "ABI_PCS_R9_use"; ++ KNOWN_VALUES ("V6", "SB", "TLS", "Unused"); ++ return true; ++ case 15: ++ *tag_name = "ABI_PCS_RW_data"; ++ KNOWN_VALUES ("Absolute", "PC-relative", "SB-relative", "None"); ++ return true; ++ case 16: ++ *tag_name = "ABI_PCS_RO_data"; ++ KNOWN_VALUES ("Absolute", "PC-relative", "None"); ++ return true; ++ case 17: ++ *tag_name = "ABI_PCS_GOT_use"; ++ KNOWN_VALUES ("None", "direct", "GOT-indirect"); ++ return true; ++ case 18: ++ *tag_name = "ABI_PCS_wchar_t"; ++ return true; ++ case 19: ++ *tag_name = "ABI_FP_rounding"; ++ KNOWN_VALUES ("Unused", "Needed"); ++ return true; ++ case 20: ++ *tag_name = "ABI_FP_denormal"; ++ KNOWN_VALUES ("Unused", "Needed", "Sign only"); ++ return true; ++ case 21: ++ *tag_name = "ABI_FP_exceptions"; ++ KNOWN_VALUES ("Unused", "Needed"); ++ return true; ++ case 22: ++ *tag_name = "ABI_FP_user_exceptions"; ++ KNOWN_VALUES ("Unused", "Needed"); ++ return true; ++ case 23: ++ *tag_name = "ABI_FP_number_model"; ++ KNOWN_VALUES ("Unused", "Finite", "RTABI", "IEEE 754"); ++ return true; ++ case 24: ++ *tag_name = "ABI_align8_needed"; ++ KNOWN_VALUES ("No", "Yes", "4-byte"); ++ return true; ++ case 25: ++ *tag_name = "ABI_align8_preserved"; ++ KNOWN_VALUES ("No", "Yes, except leaf SP", "Yes"); ++ return true; ++ case 26: ++ *tag_name = "ABI_enum_size"; ++ KNOWN_VALUES ("Unused", "small", "int", "forced to int"); ++ return true; ++ case 27: ++ *tag_name = "ABI_HardFP_use"; ++ KNOWN_VALUES ("as VFP_arch", "SP only", "DP only", "SP and DP"); ++ return true; ++ case 28: ++ *tag_name = "ABI_VFP_args"; ++ KNOWN_VALUES ("AAPCS", "VFP registers", "custom"); ++ return true; ++ case 29: ++ *tag_name = "ABI_WMMX_args"; ++ KNOWN_VALUES ("AAPCS", "WMMX registers", "custom"); ++ return true; ++ case 30: ++ *tag_name = "ABI_optimization_goals"; ++ KNOWN_VALUES ("None", ++ "Prefer Speed", ++ "Aggressive Speed", ++ "Prefer Size", ++ "Aggressive Size", ++ "Prefer Debug", ++ "Aggressive Debug"); ++ return true; ++ case 31: ++ *tag_name = "ABI_FP_optimization_goals"; ++ KNOWN_VALUES ("None", ++ "Prefer Speed", ++ "Aggressive Speed", ++ "Prefer Size", ++ "Aggressive Size", ++ "Prefer Accuracy", ++ "Aggressive Accuracy"); ++ return true; ++ case 34: ++ *tag_name = "CPU_unaligned_access"; ++ KNOWN_VALUES ("None", "v6"); ++ return true; ++ case 36: ++ *tag_name = "VFP_HP_extension"; ++ KNOWN_VALUES ("Not Allowed", "Allowed"); ++ return true; ++ case 38: ++ *tag_name = "ABI_FP_16bit_format"; ++ KNOWN_VALUES ("None", "IEEE 754", "Alternative Format"); ++ return true; ++ case 64: ++ *tag_name = "nodefaults"; ++ return true; ++ case 65: ++ *tag_name = "also_compatible_with"; ++ return true; ++ case 66: ++ *tag_name = "T2EE_use"; ++ KNOWN_VALUES ("Not Allowed", "Allowed"); ++ return true; ++ case 67: ++ *tag_name = "conformance"; ++ return true; ++ case 68: ++ *tag_name = "Virtualization_use"; ++ KNOWN_VALUES ("Not Allowed", "Allowed"); ++ return true; ++ case 70: ++ *tag_name = "MPextension_use"; ++ KNOWN_VALUES ("Not Allowed", "Allowed"); ++ return true; ++ } ++ ++ return false; ++} +diff --git a/backends/arm_auxv.c b/backends/arm_auxv.c +new file mode 100644 +index 0000000..728f940 +--- /dev/null ++++ b/backends/arm_auxv.c +@@ -0,0 +1,46 @@ ++/* ARM-specific auxv handling. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#define BACKEND arm_ ++#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" ++ "swp\0" "half\0" "thumb\0" "26bit\0" ++ "fast-mult\0" "fpa\0" "vfp\0" "edsp\0" ++ "java\0" "iwmmxt\0" ++ "\0"; ++ return 1; ++} +diff --git a/backends/arm_corenote.c b/backends/arm_corenote.c +new file mode 100644 +index 0000000..6f2d3a3 +--- /dev/null ++++ b/backends/arm_corenote.c +@@ -0,0 +1,73 @@ ++/* ARM specific core note handling. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++ ++#define BACKEND arm_ ++#include "libebl_CPU.h" ++ ++ ++static const Ebl_Register_Location prstatus_regs[] = ++ { ++ { .offset = 0, .regno = 0, .count = 16, .bits = 32 }, /* r0..r15 */ ++ { .offset = 16 * 4, .regno = 128, .count = 1, .bits = 32 }, /* cpsr */ ++ }; ++#define PRSTATUS_REGS_SIZE (18 * 4) ++ ++#define PRSTATUS_REGSET_ITEMS \ ++ { \ ++ .name = "orig_r0", .type = ELF_T_SWORD, .format = 'd', \ ++ .offset = offsetof (struct EBLHOOK(prstatus), pr_reg) + (4 * 17), \ ++ .group = "register" \ ++ } ++ ++static const Ebl_Register_Location fpregset_regs[] = ++ { ++ { .offset = 0, .regno = 96, .count = 8, .bits = 96 }, /* f0..f7 */ ++ }; ++#define FPREGSET_SIZE 140 ++ ++#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 ++ ++#include "linux-core-note.c" +diff --git a/backends/arm_init.c b/backends/arm_init.c +index 172af19..15c0ee6 100644 +--- a/backends/arm_init.c ++++ b/backends/arm_init.c +@@ -1,5 +1,5 @@ + /* Initialization of Arm specific backend library. +- Copyright (C) 2002, 2005 Red Hat, Inc. ++ Copyright (C) 2002, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -50,7 +50,15 @@ arm_init (elf, machine, eh, ehlen) + /* We handle it. */ + eh->name = "ARM"; + arm_init_reloc (eh); ++ HOOK (eh, segment_type_name); ++ HOOK (eh, section_type_name); ++ HOOK (eh, machine_flag_check); + HOOK (eh, reloc_simple_type); ++ HOOK (eh, register_info); ++ HOOK (eh, core_note); ++ HOOK (eh, auxv_info); ++ HOOK (eh, check_object_attribute); ++ HOOK (eh, return_value_location); + + return MODVERSION; + } +diff --git a/backends/arm_regs.c b/backends/arm_regs.c +new file mode 100644 +index 0000000..0a9536d +--- /dev/null ++++ b/backends/arm_regs.c +@@ -0,0 +1,117 @@ ++/* Register names and numbers for ARM DWARF. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++#define BACKEND arm_ ++#include "libebl_CPU.h" ++ ++ssize_t ++arm_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 320; ++ ++ if (regno < 0 || regno > 320 || namelen < 5) ++ return -1; ++ ++ *prefix = NULL; ++ *bits = 32; ++ *type = DW_ATE_signed; ++ *setname = "integer"; ++ ++ switch (regno) ++ { ++ case 0 ... 9: ++ name[0] = 'r'; ++ name[1] = regno + '0'; ++ namelen = 2; ++ break; ++ ++ case 10 ... 12: ++ name[0] = 'r'; ++ name[1] = '1'; ++ name[2] = regno % 10 + '0'; ++ namelen = 3; ++ break; ++ ++ case 13 ... 15: ++ *type = DW_ATE_address; ++ name[0] = "slp"[regno - 13]; ++ name[1] = "prc"[regno - 13]; ++ namelen = 2; ++ break; ++ ++ case 16 + 0 ... 16 + 7: ++ regno += 96 - 16; ++ /* Fall through. */ ++ case 96 + 0 ... 96 + 7: ++ *setname = "FPA"; ++ *type = DW_ATE_float; ++ *bits = 96; ++ name[0] = 'f'; ++ name[1] = regno - 96 + '0'; ++ namelen = 2; ++ break; ++ ++ case 128: ++ *type = DW_ATE_unsigned; ++ return stpcpy (name, "spsr") + 1 - name; ++ ++ case 256 + 0 ... 256 + 9: ++ *setname = "VFP"; ++ *type = DW_ATE_float; ++ *bits = 64; ++ name[0] = 'd'; ++ name[1] = regno - 256 + '0'; ++ namelen = 2; ++ break; ++ ++ case 256 + 10 ... 256 + 31: ++ *setname = "VFP"; ++ *type = DW_ATE_float; ++ *bits = 64; ++ name[0] = 'd'; ++ name[1] = (regno - 256) / 10 + '0'; ++ name[2] = (regno - 256) % 10 + '0'; ++ namelen = 3; ++ break; ++ ++ default: ++ *setname = NULL; ++ return 0; ++ } ++ ++ name[namelen++] = '\0'; ++ return namelen; ++} +diff --git a/backends/arm_retval.c b/backends/arm_retval.c +new file mode 100644 +index 0000000..191cb17 +--- /dev/null ++++ b/backends/arm_retval.c +@@ -0,0 +1,137 @@ ++/* Function return value location for ARM EABI. ++ Copyright (C) 2009-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 ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++ ++#define BACKEND arm_ ++#include "libebl_CPU.h" ++ ++ ++/* r0, or pair r0, r1, or aggregate up to r0-r3. */ ++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 }, ++ { .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_intregs(n) (2 * (n)) ++ ++/* 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 r0. */ ++static const Dwarf_Op loc_aggregate[] = ++ { ++ { .atom = DW_OP_breg0, .number = 0 } ++ }; ++#define nloc_aggregate 1 ++ ++ ++int ++arm_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 <= 16) ++ { ++ intreg: ++ *locp = loc_intreg; ++ return size <= 4 ? nloc_intreg : nloc_intregs ((size + 3) / 4); ++ } ++ ++ 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_aggregate_size (typedie, &size) == 0 ++ && size > 0 && size <= 4) ++ 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/arm_symbol.c b/backends/arm_symbol.c +index 6d2f56d..e08874b 100644 +--- a/backends/arm_symbol.c ++++ b/backends/arm_symbol.c +@@ -1,7 +1,6 @@ + /* Arm specific symbolic name handling. +- Copyright (C) 2002, 2005 Red Hat, Inc. ++ Copyright (C) 2002-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. +- Written by Ulrich Drepper , 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 +@@ -34,6 +33,76 @@ + #define BACKEND arm_ + #include "libebl_CPU.h" + ++ ++const char * ++arm_segment_type_name (int segment, char *buf __attribute__ ((unused)), ++ size_t len __attribute__ ((unused))) ++{ ++ switch (segment) ++ { ++ case PT_ARM_EXIDX: ++ return "ARM_EXIDX"; ++ } ++ return NULL; ++} ++ ++/* Return symbolic representation of section type. */ ++const char * ++arm_section_type_name (int type, ++ char *buf __attribute__ ((unused)), ++ size_t len __attribute__ ((unused))) ++{ ++ switch (type) ++ { ++ case SHT_ARM_EXIDX: ++ return "ARM_EXIDX"; ++ case SHT_ARM_PREEMPTMAP: ++ return "ARM_PREEMPTMAP"; ++ case SHT_ARM_ATTRIBUTES: ++ return "ARM_ATTRIBUTES"; ++ } ++ ++ return NULL; ++} ++ ++/* Check whether machine flags are valid. */ ++bool ++arm_machine_flag_check (GElf_Word flags) ++{ ++ switch (flags & EF_ARM_EABIMASK) ++ { ++ case EF_ARM_EABI_UNKNOWN: ++ case EF_ARM_EABI_VER1: ++ case EF_ARM_EABI_VER2: ++ case EF_ARM_EABI_VER3: ++ case EF_ARM_EABI_VER4: ++ case EF_ARM_EABI_VER5: ++ break; ++ default: ++ return false; ++ } ++ ++ return ((flags &~ (EF_ARM_EABIMASK ++ | EF_ARM_RELEXEC ++ | EF_ARM_HASENTRY ++ | EF_ARM_INTERWORK ++ | EF_ARM_APCS_26 ++ | EF_ARM_APCS_FLOAT ++ | EF_ARM_PIC ++ | EF_ARM_ALIGN8 ++ | EF_ARM_NEW_ABI ++ | EF_ARM_OLD_ABI ++ | EF_ARM_SOFT_FLOAT ++ | EF_ARM_VFP_FLOAT ++ | EF_ARM_MAVERICK_FLOAT ++ | EF_ARM_SYMSARESORTED ++ | EF_ARM_DYNSYMSUSESEGIDX ++ | EF_ARM_MAPSYMSFIRST ++ | EF_ARM_EABIMASK ++ | EF_ARM_BE8 ++ | EF_ARM_LE8)) == 0); ++} ++ + /* Check for the simple reloc types. */ + Elf_Type + arm_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type) +diff --git a/backends/i386_cfi.c b/backends/i386_cfi.c +new file mode 100644 +index 0000000..77478f7 +--- /dev/null ++++ b/backends/i386_cfi.c +@@ -0,0 +1,65 @@ ++/* i386 ABI-specified defaults for DWARF CFI. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++#define BACKEND i386_ ++#include "libebl_CPU.h" ++ ++int ++i386_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info) ++{ ++ static const uint8_t abi_cfi[] = ++ { ++ /* Call-saved regs. */ ++ DW_CFA_same_value, ULEB128_7 (3), /* %ebx */ ++ DW_CFA_same_value, ULEB128_7 (5), /* %ebp */ ++ DW_CFA_same_value, ULEB128_7 (6), /* %esi */ ++ DW_CFA_same_value, ULEB128_7 (7), /* %edi */ ++ ++ /* The CFA is the SP. */ ++ DW_CFA_val_offset, ULEB128_7 (4), ULEB128_7 (0), ++ ++ /* Segment registers are call-saved if ever used at all. */ ++ DW_CFA_same_value, ULEB128_7 (40), /* %es */ ++ DW_CFA_same_value, ULEB128_7 (41), /* %cs */ ++ DW_CFA_same_value, ULEB128_7 (42), /* %ss */ ++ DW_CFA_same_value, ULEB128_7 (43), /* %ds */ ++ DW_CFA_same_value, ULEB128_7 (44), /* %fs */ ++ DW_CFA_same_value, ULEB128_7 (45), /* %gs */ ++ }; ++ ++ abi_info->initial_instructions = abi_cfi; ++ abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi]; ++ abi_info->data_alignment_factor = 4; ++ ++ abi_info->return_address_register = 8; /* %eip */ ++ ++ return 0; ++} +diff --git a/backends/i386_corenote.c b/backends/i386_corenote.c +index 02d8ec3..40b6a24 100644 +--- a/backends/i386_corenote.c ++++ b/backends/i386_corenote.c +@@ -1,5 +1,5 @@ + /* i386 specific core note handling. +- Copyright (C) 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2007-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 +@@ -101,11 +101,11 @@ static const Ebl_Register_Location prxfpreg_regs[] = + }; + + #define EXTRA_NOTES \ +- EXTRA_REGSET (NT_PRFPXREG, 512, prxfpreg_regs) \ ++ EXTRA_REGSET (NT_PRXFPREG, 512, prxfpreg_regs) \ + case NT_386_TLS: \ +- return tls_info (descsz, regs_offset, nregloc, reglocs, nitems, items); +- +-#define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ ++ return tls_info (nhdr->n_descsz, regs_offset, nregloc, reglocs, \ ++ nitems, items); \ ++ EXTRA_NOTES_IOPERM + + static const Ebl_Core_Item tls_items[] = + { +@@ -131,4 +131,5 @@ tls_info (GElf_Word descsz, GElf_Word *regs_offset, + return 1; + } + ++#include "x86_corenote.c" + #include "linux-core-note.c" +diff --git a/backends/i386_init.c b/backends/i386_init.c +index bf6c130..be9bbf9 100644 +--- a/backends/i386_init.c ++++ b/backends/i386_init.c +@@ -1,5 +1,5 @@ + /* Initialization of i386 specific backend library. +- Copyright (C) 2000, 2001, 2002, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2000-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -56,8 +56,10 @@ i386_init (elf, machine, eh, ehlen) + HOOK (eh, debugscn_p); + HOOK (eh, return_value_location); + HOOK (eh, register_info); ++ HOOK (eh, syscall_abi); + HOOK (eh, auxv_info); + HOOK (eh, disasm); ++ HOOK (eh, abi_cfi); + + return MODVERSION; + } +diff --git a/backends/i386_reloc.def b/backends/i386_reloc.def +index d8116f3..1befd1b 100644 +--- a/backends/i386_reloc.def ++++ b/backends/i386_reloc.def +@@ -1,5 +1,5 @@ + /* List the relocation types for i386. -*- C -*- +- Copyright (C) 2000, 2001, 2002, 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2000, 2001, 2002, 2003, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -61,3 +61,7 @@ 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) ++RELOC_TYPE (IRELATIVE, EXEC|DYN) +diff --git a/backends/i386_syscall.c b/backends/i386_syscall.c +new file mode 100644 +index 0000000..4d6e438 +--- /dev/null ++++ b/backends/i386_syscall.c +@@ -0,0 +1,47 @@ ++/* 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#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_retval.c b/backends/ia64_retval.c +index 238cd9e..7645c3c 100644 +--- a/backends/ia64_retval.c ++++ b/backends/ia64_retval.c +@@ -1,5 +1,5 @@ + /* Function return value location for IA64 ABI. +- Copyright (C) 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2006-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 +@@ -89,7 +89,8 @@ static const Dwarf_Op loc_aggregate[] = + /* 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) ++hfa_type (Dwarf_Die *typedie, Dwarf_Word size, ++ 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. +@@ -114,10 +115,6 @@ hfa_type (Dwarf_Die *typedie, const Dwarf_Op **locp, int fpregs_used) + 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) +@@ -178,9 +175,13 @@ hfa_type (Dwarf_Die *typedie, const Dwarf_Op **locp, int fpregs_used) + DW_AT_type, + &attr_mem), + &child_type_mem); ++ Dwarf_Word child_size; ++ if (dwarf_aggregate_size (child_typedie, &child_size) != 0) ++ return -1; + if (tag == DW_TAG_union_type) + { +- int used = hfa_type (child_typedie, locp, fpregs_used); ++ int used = hfa_type (child_typedie, child_size, ++ locp, fpregs_used); + if (used < 0 || used > 8) + return used; + if (used > max_used) +@@ -188,7 +189,8 @@ hfa_type (Dwarf_Die *typedie, const Dwarf_Op **locp, int fpregs_used) + } + else + { +- fpregs_used = hfa_type (child_typedie, locp, fpregs_used); ++ fpregs_used = hfa_type (child_typedie, child_size, ++ locp, fpregs_used); + if (fpregs_used < 0 || fpregs_used > 8) + return fpregs_used; + } +@@ -200,10 +202,7 @@ hfa_type (Dwarf_Die *typedie, const Dwarf_Op **locp, int fpregs_used) + } + break; + +- case DW_TAG_array_type:; +- size = dwarf_bytesize (typedie); +- if (size < 0) +- return 9; ++ case DW_TAG_array_type: + if (size == 0) + break; + +@@ -212,14 +211,16 @@ hfa_type (Dwarf_Die *typedie, const Dwarf_Op **locp, int fpregs_used) + = dwarf_formref_die (dwarf_attr_integrate (typedie, DW_AT_type, + &attr_mem), + &base_type_mem); ++ Dwarf_Word base_size; ++ if (dwarf_aggregate_size (base_typedie, &base_size) != 0) ++ return -1; + +- int used = hfa_type (base_typedie, locp, 0); ++ int used = hfa_type (base_typedie, base_size, 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; ++ fpregs_used += used * (size / (*locp)[1].number); + break; + + default: +@@ -346,13 +347,12 @@ ia64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + 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) ++ if (dwarf_aggregate_size (typedie, &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); ++ int nfpreg = hfa_type (typedie, size, locp, 0); + if (nfpreg < 0) + return nfpreg; + else if (nfpreg > 0 && nfpreg <= 8) +diff --git a/backends/ia64_symbol.c b/backends/ia64_symbol.c +index 2609db0..1edef8b 100644 +--- a/backends/ia64_symbol.c ++++ b/backends/ia64_symbol.c +@@ -1,5 +1,5 @@ + /* IA-64 specific symbolic name handling. +- Copyright (C) 2002, 2003, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2002-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -102,9 +102,9 @@ ia64_section_type_name (int type, + switch (type) + { + case SHT_IA_64_EXT: +- return "SHT_IA_64_EXT"; ++ return "IA_64_EXT"; + case SHT_IA_64_UNWIND: +- return "SHT_IA_64_UNWIND"; ++ return "IA_64_UNWIND"; + } + + return NULL; +diff --git a/backends/linux-core-note.c b/backends/linux-core-note.c +index 3dc4137..9d01219 100644 +--- a/backends/linux-core-note.c ++++ b/backends/linux-core-note.c +@@ -1,5 +1,5 @@ + /* Common core note type descriptions for Linux. +- Copyright (C) 2007 Red Hat, Inc. ++ Copyright (C) 2007-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 +@@ -23,6 +23,8 @@ + Network licensing program, please visit www.openinventionnetwork.com + . */ + ++#include ++ + /* The including CPU_corenote.c file provides prstatus_regs and + defines macros ULONG, [PUG]ID_T, and ALIGN_*, TYPE_*. + +@@ -118,8 +120,8 @@ static const Ebl_Core_Item prstatus_items[] = + 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 (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'), +@@ -163,23 +165,61 @@ static const Ebl_Core_Item prpsinfo_items[] = + FIELD (command, CHAR, psargs, 's', .count = PRARGSZ), + }; + ++static const Ebl_Core_Item vmcoreinfo_items[] = ++ { ++ { ++ .type = ELF_T_BYTE, .format = '\n' ++ } ++ }; ++ + #undef FIELD + + int +-EBLHOOK(core_note) (n_type, descsz, +- regs_offset, nregloc, reglocs, nitems, items) +- GElf_Word n_type; +- GElf_Word descsz; ++EBLHOOK(core_note) (nhdr, name, regs_offset, nregloc, reglocs, nitems, items) ++ const GElf_Nhdr *nhdr; ++ const char *name; + GElf_Word *regs_offset; + size_t *nregloc; + const Ebl_Register_Location **reglocs; + size_t *nitems; + const Ebl_Core_Item **items; + { +- switch (n_type) ++ switch (nhdr->n_namesz) ++ { ++ case sizeof "CORE" - 1: /* Buggy old Linux kernels. */ ++ if (memcmp (name, "CORE", nhdr->n_namesz) == 0) ++ break; ++ return 0; ++ ++ case sizeof "CORE": ++ if (memcmp (name, "CORE", nhdr->n_namesz) == 0) ++ break; ++ /* Buggy old Linux kernels didn't terminate "LINUX". ++ Fall through. */ ++ ++ case sizeof "LINUX": ++ if (memcmp (name, "LINUX", nhdr->n_namesz) == 0) ++ break; ++ return 0; ++ ++ case sizeof "VMCOREINFO": ++ if (nhdr->n_type != 0 ++ || memcmp (name, "VMCOREINFO", sizeof "VMCOREINFO") != 0) ++ return 0; ++ *regs_offset = 0; ++ *nregloc = 0; ++ *nitems = 1; ++ *items = vmcoreinfo_items; ++ return 1; ++ ++ default: ++ return 0; ++ } ++ ++ switch (nhdr->n_type) + { + case NT_PRSTATUS: +- if (descsz != sizeof (struct EBLHOOK(prstatus))) ++ if (nhdr->n_descsz != sizeof (struct EBLHOOK(prstatus))) + return 0; + *regs_offset = offsetof (struct EBLHOOK(prstatus), pr_reg); + *nregloc = sizeof prstatus_regs / sizeof prstatus_regs[0]; +@@ -189,7 +229,7 @@ EBLHOOK(core_note) (n_type, descsz, + return 1; + + case NT_PRPSINFO: +- if (descsz != sizeof (struct EBLHOOK(prpsinfo))) ++ if (nhdr->n_descsz != sizeof (struct EBLHOOK(prpsinfo))) + return 0; + *regs_offset = 0; + *nregloc = 0; +@@ -200,7 +240,7 @@ EBLHOOK(core_note) (n_type, descsz, + + #define EXTRA_REGSET(type, size, table) \ + case type: \ +- if (descsz != size) \ ++ if (nhdr->n_descsz != size) \ + return 0; \ + *regs_offset = 0; \ + *nregloc = sizeof table / sizeof table[0]; \ +diff --git a/backends/ppc64_init.c b/backends/ppc64_init.c +index 02a592f..3060a60 100644 +--- a/backends/ppc64_init.c ++++ b/backends/ppc64_init.c +@@ -1,5 +1,5 @@ + /* Initialization of PPC64 specific backend library. +- Copyright (C) 2004, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2004. + +@@ -58,6 +58,7 @@ ppc64_init (elf, machine, eh, ehlen) + 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); + +diff --git a/backends/ppc64_retval.c b/backends/ppc64_retval.c +index 454897c..a5fc0dc 100644 +--- a/backends/ppc64_retval.c ++++ b/backends/ppc64_retval.c +@@ -1,5 +1,5 @@ + /* Function return value location for Linux/PPC64 ABI. +- Copyright (C) 2005, 2006, 2007 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 +@@ -53,6 +53,13 @@ static const Dwarf_Op loc_fpreg[] = + #define nloc_fp2regs 4 + #define nloc_fp4regs 8 + ++/* vr2. */ ++static const Dwarf_Op loc_vmxreg[] = ++ { ++ { .atom = DW_OP_regx, .number = 1124 + 2 } ++ }; ++#define nloc_vmxreg 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. */ +@@ -150,11 +157,21 @@ ppc64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + *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) ++ { ++ bool is_vector; ++ if (dwarf_formflag (dwarf_attr_integrate (typedie, DW_AT_GNU_vector, ++ &attr_mem), &is_vector) == 0 ++ && is_vector) ++ { ++ *locp = loc_vmxreg; ++ return nloc_vmxreg; ++ } ++ } ++ /* Fall through. */ ++ ++ case DW_TAG_string_type: ++ if (dwarf_aggregate_size (typedie, &size) == 0 && size <= 8) + { + if (tag == DW_TAG_array_type) + { +diff --git a/backends/ppc_attrs.c b/backends/ppc_attrs.c +index 733b874..985df3f 100644 +--- a/backends/ppc_attrs.c ++++ b/backends/ppc_attrs.c +@@ -1,5 +1,5 @@ + /* Object attribute tags for PowerPC. +- Copyright (C) 2008 Red Hat, Inc. ++ Copyright (C) 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -66,6 +66,16 @@ ppc_check_object_attribute (ebl, vendor, tag, value, tag_name, value_name) + if (value < sizeof vector_kinds / sizeof vector_kinds[0]) + *value_name = vector_kinds[value]; + return true; ++ ++ case 12: ++ *tag_name = "GNU_Power_ABI_Struct_Return"; ++ static const char *struct_return_kinds[] = ++ { ++ "Any", "r3/r4", "Memory" ++ }; ++ if (value < sizeof struct_return_kinds / sizeof struct_return_kinds[0]) ++ *value_name = struct_return_kinds[value]; ++ return true; + } + + return false; +diff --git a/backends/ppc_corenote.c b/backends/ppc_corenote.c +index 59e619e..af0c46a 100644 +--- a/backends/ppc_corenote.c ++++ b/backends/ppc_corenote.c +@@ -118,8 +118,13 @@ static const Ebl_Register_Location spe_regs[] = + + #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) + (4 * 34), \ ++ .offset = offsetof (struct EBLHOOK(prstatus), pr_reg[34]), \ + .group = "register" \ + } + +diff --git a/backends/ppc_init.c b/backends/ppc_init.c +index 2e58716..523c658 100644 +--- a/backends/ppc_init.c ++++ b/backends/ppc_init.c +@@ -57,6 +57,7 @@ ppc_init (elf, machine, eh, ehlen) + 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); +diff --git a/backends/ppc_retval.c b/backends/ppc_retval.c +index fa0e303..15a0dba 100644 +--- a/backends/ppc_retval.c ++++ b/backends/ppc_retval.c +@@ -1,5 +1,5 @@ + /* Function return value location for Linux/PPC ABI. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2007, 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 +@@ -38,14 +38,17 @@ + #define SVR4_STRUCT_RETURN 0 + + +-/* r3, or pair r3, r4. */ ++/* r3, or pair r3, r4, or quad r3-r6. */ + 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 }, ++ { .atom = DW_OP_reg5 }, { .atom = DW_OP_piece, .number = 4 }, ++ { .atom = DW_OP_reg6 }, { .atom = DW_OP_piece, .number = 4 }, + }; + #define nloc_intreg 1 + #define nloc_intregpair 4 ++#define nloc_intregquad 8 + + /* f1. */ + static const Dwarf_Op loc_fpreg[] = +@@ -54,6 +57,13 @@ static const Dwarf_Op loc_fpreg[] = + }; + #define nloc_fpreg 1 + ++/* vr2. */ ++static const Dwarf_Op loc_vmxreg[] = ++ { ++ { .atom = DW_OP_regx, .number = 1124 + 2 } ++ }; ++#define nloc_vmxreg 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. */ +@@ -64,6 +74,13 @@ static const Dwarf_Op loc_aggregate[] = + #define nloc_aggregate 1 + + ++/* XXX We should check the SHT_GNU_ATTRIBUTES bits here (or in ppc_init). */ ++static bool ++ppc_altivec_abi (void) ++{ ++ return true; ++} ++ + int + ppc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + { +@@ -143,13 +160,32 @@ ppc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + *locp = loc_aggregate; + return nloc_aggregate; + ++ case DW_TAG_array_type: ++ { ++ bool is_vector; ++ if (dwarf_formflag (dwarf_attr_integrate (typedie, DW_AT_GNU_vector, ++ &attr_mem), &is_vector) == 0 ++ && is_vector ++ && dwarf_aggregate_size (typedie, &size) == 0) ++ switch (size) ++ { ++ case 16: ++ if (ppc_altivec_abi ()) ++ { ++ *locp = loc_vmxreg; ++ return nloc_vmxreg; ++ } ++ *locp = loc_intreg; ++ return nloc_intregquad; ++ } ++ } ++ /* Fall through. */ ++ + 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 ++ && dwarf_aggregate_size (typedie, &size) == 0 + && size > 0 && size <= 8) + goto intreg; + goto aggregate; +diff --git a/backends/ppc_syscall.c b/backends/ppc_syscall.c +new file mode 100644 +index 0000000..23eff81 +--- /dev/null ++++ b/backends/ppc_syscall.c +@@ -0,0 +1,50 @@ ++/* 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#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/sparc_init.c b/backends/sparc_init.c +index 8da845e..856bd48 100644 +--- a/backends/sparc_init.c ++++ b/backends/sparc_init.c +@@ -1,5 +1,5 @@ + /* Initialization of SPARC specific backend library. +- Copyright (C) 2002, 2005, 2006, 2007 Red Hat, Inc. ++ 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 +@@ -57,6 +57,10 @@ sparc_init (elf, machine, eh, ehlen) + 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 +diff --git a/backends/sparc_reloc.def b/backends/sparc_reloc.def +index de65097..a7ea52a 100644 +--- a/backends/sparc_reloc.def ++++ b/backends/sparc_reloc.def +@@ -1,5 +1,5 @@ + /* List the relocation types for sparc. -*- C -*- +- Copyright (C) 2005 Red Hat, Inc. ++ Copyright (C) 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -25,82 +25,94 @@ + + /* 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 (NONE, REL) ++RELOC_TYPE (8, REL) ++RELOC_TYPE (16, REL) ++RELOC_TYPE (32, REL|DYN) ++RELOC_TYPE (DISP8, REL) ++RELOC_TYPE (DISP16, REL) ++RELOC_TYPE (DISP32, REL) ++RELOC_TYPE (WDISP30, REL) ++RELOC_TYPE (WDISP22, REL) ++RELOC_TYPE (HI22, REL) ++RELOC_TYPE (22, REL) ++RELOC_TYPE (13, REL) ++RELOC_TYPE (LO10, REL) ++RELOC_TYPE (GOT10, REL) ++RELOC_TYPE (GOT13, REL) ++RELOC_TYPE (GOT22, REL) ++RELOC_TYPE (PC10, REL) ++RELOC_TYPE (PC22, REL) ++RELOC_TYPE (WPLT30, REL) + 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) ++RELOC_TYPE (UA32, REL) ++RELOC_TYPE (PLT32, REL) ++RELOC_TYPE (HIPLT22, REL) ++RELOC_TYPE (LOPLT10, REL) ++RELOC_TYPE (PCPLT32, REL) ++RELOC_TYPE (PCPLT22, REL) ++RELOC_TYPE (PCPLT10, REL) ++RELOC_TYPE (10, REL) ++RELOC_TYPE (11, REL) ++RELOC_TYPE (64, REL|DYN) ++RELOC_TYPE (OLO10, REL) ++RELOC_TYPE (HH22, REL) ++RELOC_TYPE (HM10, REL) ++RELOC_TYPE (LM22, REL) ++RELOC_TYPE (PC_HH22, REL) ++RELOC_TYPE (PC_HM10, REL) ++RELOC_TYPE (PC_LM22, REL) ++RELOC_TYPE (WDISP16, REL) ++RELOC_TYPE (WDISP19, REL) ++RELOC_TYPE (GLOB_JMP, EXEC|DYN) ++RELOC_TYPE (7, REL) ++RELOC_TYPE (5, REL) ++RELOC_TYPE (6, REL) ++RELOC_TYPE (DISP64, REL) ++RELOC_TYPE (PLT64, REL) ++RELOC_TYPE (HIX22, REL) ++RELOC_TYPE (LOX10, REL) ++RELOC_TYPE (H44, REL) ++RELOC_TYPE (M44, REL) ++RELOC_TYPE (L44, REL) ++RELOC_TYPE (REGISTER, REL) ++RELOC_TYPE (UA64, REL) ++RELOC_TYPE (UA16, REL) ++RELOC_TYPE (TLS_GD_HI22, REL) ++RELOC_TYPE (TLS_GD_LO10, REL) ++RELOC_TYPE (TLS_GD_ADD, REL) ++RELOC_TYPE (TLS_GD_CALL, REL) ++RELOC_TYPE (TLS_LDM_HI22, REL) ++RELOC_TYPE (TLS_LDM_LO10, REL) ++RELOC_TYPE (TLS_LDM_ADD, REL) ++RELOC_TYPE (TLS_LDM_CALL, REL) ++RELOC_TYPE (TLS_LDO_HIX22, REL) ++RELOC_TYPE (TLS_LDO_LOX10, REL) ++RELOC_TYPE (TLS_LDO_ADD, REL) ++RELOC_TYPE (TLS_IE_HI22, REL) ++RELOC_TYPE (TLS_IE_LO10, REL) ++RELOC_TYPE (TLS_IE_LD, REL) ++RELOC_TYPE (TLS_IE_LDX, REL) ++RELOC_TYPE (TLS_IE_ADD, REL) ++RELOC_TYPE (TLS_LE_HIX22, REL) ++RELOC_TYPE (TLS_LE_LOX10, REL) ++RELOC_TYPE (TLS_DTPMOD32, DYN) ++RELOC_TYPE (TLS_DTPMOD64, DYN) ++RELOC_TYPE (TLS_DTPOFF32, DYN) ++RELOC_TYPE (TLS_DTPOFF64, DYN) ++RELOC_TYPE (TLS_TPOFF32, DYN) ++RELOC_TYPE (TLS_TPOFF64, DYN) ++RELOC_TYPE (GOTDATA_HIX22, REL) ++RELOC_TYPE (GOTDATA_LOX10, REL) ++RELOC_TYPE (GOTDATA_OP_HIX22, DYN) ++RELOC_TYPE (GOTDATA_OP_LOX10, DYN) ++RELOC_TYPE (GOTDATA_OP, DYN) ++RELOC_TYPE (H34, REL) ++RELOC_TYPE (SIZE32, REL) ++RELOC_TYPE (SIZE64, REL) ++RELOC_TYPE (GNU_VTINHERIT, REL) ++RELOC_TYPE (GNU_VTENTRY, REL) ++RELOC_TYPE (REV32, REL) +diff --git a/backends/sparc_retval.c b/backends/sparc_retval.c +index 7cd3827..dcff67a 100644 +--- a/backends/sparc_retval.c ++++ b/backends/sparc_retval.c +@@ -1,15 +1,27 @@ + /* 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. */ ++ Copyright (C) 2006-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 ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License 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 ++ . */ + + #ifdef HAVE_CONFIG_H + # include +@@ -142,8 +154,7 @@ sparc_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + 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 ++ if (dwarf_aggregate_size (typedie, &size) == 0 + && size > 0 && size <= 8) + goto intreg; + goto aggregate; +diff --git a/backends/sparc_symbol.c b/backends/sparc_symbol.c +index 237620c..7896e9f 100644 +--- a/backends/sparc_symbol.c ++++ b/backends/sparc_symbol.c +@@ -1,5 +1,5 @@ + /* SPARC specific symbolic name handling. +- Copyright (C) 2002, 2003, 2005, 2007 Red Hat, Inc. ++ Copyright (C) 2002, 2003, 2005, 2007, 2008 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Jakub Jelinek , 2002. + +@@ -66,3 +66,80 @@ sparc_machine_flag_check (GElf_Word flags) + | 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_cfi.c b/backends/x86_64_cfi.c +new file mode 100644 +index 0000000..caaee44 +--- /dev/null ++++ b/backends/x86_64_cfi.c +@@ -0,0 +1,60 @@ ++/* x86-64 ABI-specified defaults for DWARF CFI. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++#define BACKEND x86_64_ ++#include "libebl_CPU.h" ++ ++int ++x86_64_abi_cfi (Ebl *ebl __attribute__ ((unused)), Dwarf_CIE *abi_info) ++{ ++ static const uint8_t abi_cfi[] = ++ { ++ /* Call-saved regs. */ ++ DW_CFA_same_value, ULEB128_7 (0), /* %rbx */ ++ DW_CFA_same_value, ULEB128_7 (6), /* %rbp */ ++ DW_CFA_same_value, ULEB128_7 (12), /* %r12 */ ++ DW_CFA_same_value, ULEB128_7 (13), /* %r13 */ ++ DW_CFA_same_value, ULEB128_7 (14), /* %r14 */ ++ DW_CFA_same_value, ULEB128_7 (15), /* %r15 */ ++ DW_CFA_same_value, ULEB128_7 (16), /* %r16 */ ++ ++ /* The CFA is the SP. */ ++ DW_CFA_val_offset, ULEB128_7 (7), ULEB128_7 (0), ++ }; ++ ++ abi_info->initial_instructions = abi_cfi; ++ abi_info->initial_instructions_end = &abi_cfi[sizeof abi_cfi]; ++ abi_info->data_alignment_factor = 8; ++ ++ abi_info->return_address_register = 16; /* %rip */ ++ ++ return 0; ++} +diff --git a/backends/x86_64_corenote.c b/backends/x86_64_corenote.c +index c2bc72e..552ac88 100644 +--- a/backends/x86_64_corenote.c ++++ b/backends/x86_64_corenote.c +@@ -1,5 +1,5 @@ + /* x86-64 specific core note handling. +- Copyright (C) 2005, 2007 Red Hat, Inc. ++ 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 +@@ -103,4 +103,7 @@ static const Ebl_Register_Location fpregset_regs[] = + }; + #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 +index 4e9eb55..32f32e0 100644 +--- a/backends/x86_64_init.c ++++ b/backends/x86_64_init.c +@@ -1,5 +1,5 @@ + /* Initialization of x86-64 specific backend library. +- Copyright (C) 2002, 2005, 2006, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2002-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -53,8 +53,10 @@ x86_64_init (elf, machine, eh, ehlen) + HOOK (eh, core_note); + HOOK (eh, return_value_location); + HOOK (eh, register_info); ++ HOOK (eh, syscall_abi); + HOOK (eh, auxv_info); + HOOK (eh, disasm); ++ HOOK (eh, abi_cfi); + + return MODVERSION; + } +diff --git a/backends/x86_64_reloc.def b/backends/x86_64_reloc.def +index e6c5a84..6c9cc1b 100644 +--- a/backends/x86_64_reloc.def ++++ b/backends/x86_64_reloc.def +@@ -1,5 +1,5 @@ + /* List the relocation types for x86-64. -*- C -*- +- Copyright (C) 2000, 2001, 2002, 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2000, 2001, 2002, 2003, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -49,3 +49,10 @@ RELOC_TYPE (TLSLD, REL) + RELOC_TYPE (DTPOFF32, REL) + RELOC_TYPE (GOTTPOFF, REL) + RELOC_TYPE (TPOFF32, REL) ++RELOC_TYPE (PC64, REL|EXEC|DYN) ++RELOC_TYPE (GOTOFF64, REL) ++RELOC_TYPE (GOTPC32, REL) ++RELOC_TYPE (GOTPC32_TLSDESC, REL) ++RELOC_TYPE (TLSDESC_CALL, REL) ++RELOC_TYPE (TLSDESC, REL|EXEC|DYN) ++RELOC_TYPE (IRELATIVE, EXEC|DYN) +diff --git a/backends/x86_64_retval.c b/backends/x86_64_retval.c +index 3109431..ba772bb 100644 +--- a/backends/x86_64_retval.c ++++ b/backends/x86_64_retval.c +@@ -1,5 +1,5 @@ + /* Function return value location for Linux/x86-64 ABI. +- Copyright (C) 2005, 2007 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 +@@ -181,9 +181,8 @@ x86_64_return_value_location (Dwarf_Die *functypedie, const Dwarf_Op **locp) + 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 (dwarf_aggregate_size (typedie, &size) != 0) ++ goto large; + if (size > 16) + goto large; + +diff --git a/backends/x86_64_syscall.c b/backends/x86_64_syscall.c +new file mode 100644 +index 0000000..c3db715 +--- /dev/null ++++ b/backends/x86_64_syscall.c +@@ -0,0 +1,47 @@ ++/* 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#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 +new file mode 100644 +index 0000000..78849a6 +--- /dev/null ++++ b/backends/x86_corenote.c +@@ -0,0 +1,48 @@ ++/* x86-specific core note handling, pieces common to x86-64 and i386. ++ 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 ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License 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 ++ . */ ++ ++#define EXTRA_NOTES_IOPERM \ ++ case NT_386_IOPERM: \ ++ return ioperm_info (nhdr->n_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/config/ChangeLog b/config/ChangeLog +index e580747..1e61047 100644 +--- a/config/ChangeLog ++++ b/config/ChangeLog +@@ -1,3 +1,39 @@ ++2010-02-15 Roland McGrath ++ ++ * eu.am: New file. ++ ++2009-04-19 Roland McGrath ++ ++ * version.h.in: Revert last change. ++ ++2009-04-17 Roland McGrath ++ ++ * version.h.in (_ELFUTILS_PREREQ): Multiple major by 1000000 and minor ++ by 1000; now _ELFUTILS_VERSION is 789000 for version 0.789. ++ ++2009-01-22 Ulrich Drepper ++ ++ * elfutils.spec.in: Distribute in ++ elfutils-libelf-devel. ++ ++2009-01-22 Roland McGrath ++ ++ * known-dwarf.awk: Handle DW_FOO_BAR_* sets better. ++ ++2009-01-11 Roland McGrath ++ ++ * known-dwarf.awk: New file. ++ * Makefile.am (EXTRA_DIST): Add it. ++ ++2008-12-24 Roland McGrath ++ ++ * Makefile.am ($(srcdir)/elfutils.spec.in): Rewrite awk magic. ++ Put the target inside [if MAINTAINER_MODE]. ++ ++2008-12-16 Roland McGrath ++ ++ * version.h.in: New file. ++ + 2008-01-12 Ulrich Drepper + + * elfutils.spec.in: Add m4 to build requirements. +diff --git a/config/Makefile.am b/config/Makefile.am +index 60e9bfe..91adeee 100644 +--- a/config/Makefile.am ++++ b/config/Makefile.am +@@ -1,7 +1,7 @@ + ## Process this file with automake to produce Makefile.in -*-Makefile-*- + ## Configure input file for elfutils. + ## +-## Copyright (C) 2004, 2005 Red Hat, Inc. ++## Copyright (C) 2004, 2005, 2008, 2009 Red Hat, Inc. + ## This file is part of Red Hat elfutils. + ## + ## Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -25,23 +25,24 @@ + ## Network licensing program, please visit www.openinventionnetwork.com + ## . + ## +-EXTRA_DIST = elfutils.spec.in ++EXTRA_DIST = elfutils.spec.in known-dwarf.awk + ++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; \ +- sed 's/Version \(.*\):$$/\1-1/;q' $(top_srcdir)/NEWS >> $$tmpname; \ +- sed '2,/^Version /p;d' $(top_srcdir)/NEWS | \ +- head -n -1 | \ +- awk '{ if ($$0 == "") { if (line != "") { printf "- "; fflush(); system("echo \"" line "\" | fold -w 70"); line=""; } } else { line=line $$0; }} END { if (line != "") { printf "- "; system("echo \"" line "\" | fold -w 70")}}' >> $$tmpname; \ +- echo >> $$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 $@ +- -@if [ -d $(srcdir)/CVS ]; then \ +- cd $(srcdir); \ +- cvs ci -m "Added changelog." $(@F); \ +- fi ++endif +diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in +index 790da1e..d9f592d 100644 +--- a/config/elfutils.spec.in ++++ b/config/elfutils.spec.in +@@ -5,7 +5,7 @@ Version: @PACKAGE_VERSION@ + Release: 1 + License: GPLv2 with exceptions + Group: Development/Tools +-Source: elfutils-%{version}.tar.gz ++Source: elfutils-%{version}.tar.bz2 + Obsoletes: libelf libelf-devel + Requires: elfutils-libelf = %{version}-%{release} + Requires: glibc >= 2.7 +@@ -176,12 +176,97 @@ rm -rf ${RPM_BUILD_ROOT} + %{_includedir}/libelf.h + %{_includedir}/gelf.h + %{_includedir}/nlist.h ++%{_includedir}/elfutils/version.h + %{_libdir}/libelf.so + + %files libelf-devel-static + %{_libdir}/libelf.a + + %changelog ++* Tue Feb 23 2010 Ulrich Drepper 0.145-1 ++- Fix build with --disable-dependency-tracking. ++- Fix build with most recent glibc headers. ++- libelf: More robust to bogus section headers. ++- libdw: Fix CFI decoding. ++- libdwfl: Fix address bias returned by CFI accessors. Fix core ++ file module layout identification. ++- readelf: Fix CFI decoding. ++ ++* Thu Jan 14 2010 0.144-1 ++- libelf: New function elf_getphdrnum. Now support using more than ++ 65536 program headers in a file. ++- libdw: New function dwarf_aggregate_size for computing (constant) ++ type sizes, including array_type cases with nontrivial ++ calculation. ++- readelf: Don't give errors for missing info under -a. ++ Handle Linux "VMCOREINFO" notes under -n. ++ ++* Mon Sep 21 2009 0.143-1 ++- libdw: Various convenience functions for individual attributes now ++ use dwarf_attr_integrate to look up indirect inherited ++ attributes. Location expression handling now supports ++ DW_OP_implicit_value. ++- libdwfl: Support automatic decompression of files in XZ format, ++ and of Linux kernel images made with bzip2 or LZMA (as well ++ as gzip). ++ ++* Mon Jun 29 2009 0.142-1 ++- libelf: Add elf_getshdrnum alias for elf_getshnum and elf_getshdrstrndx alias ++ for elf_getshstrndx and deprecate original names. Sun screwed up ++ their implementation and asked for a solution. ++- libebl: Add support for STB_GNU_UNIQUE. ++- elflint: Add support for STB_GNU_UNIQUE. ++- readelf: Add -N option, speeds up DWARF printing without address->name lookups. ++- libdw: Add support for decoding DWARF CFI into location description form. ++ Handle some new DWARF 3 expression operations previously omitted. ++ Basic handling of some new encodings slated for DWARF ++ ++* Thu Apr 23 2009 Ulrich Drepper 0.141-1 ++- libebl: sparc backend fixes; some more arm backend support ++- libdwfl: fix dwfl_module_build_id for prelinked DSO case; ++ fixes in core file support; dwfl_module_getsym interface ++ improved for non-address symbols ++- strip: fix infinite loop on strange inputs with -f ++- addr2line: take -j/--section=NAME option for binutils compatibility ++ (same effect as '(NAME)0x123' syntax already supported) ++ ++* Mon Feb 16 2009 Ulrich Drepper 0.140-1 ++- libelf: Fix regression in creation of section header ++- libdwfl: Less strict behavior if DWARF reader ist just used to ++ display data ++ ++* Thu Jan 22 2009 Ulrich Drepper 0.139-1 ++- libcpu: Add Intel SSE4 disassembler support ++- readelf: Implement call frame information and exception handling ++ dumping. Add -e option. Enable it implicitly for -a. ++- elflint: Check PT_GNU_EH_FRAME program header entry. ++- libdwfl: Support automatic gzip/bzip2 decompression of ELF files. ++ ++* Wed Dec 31 2008 Roland McGrath 0.138-1 ++- Install 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 0.137-1 ++- Minor fixes for unreleased 0.136 release. ++ ++* Mon Aug 25 2008 Ulrich Drepper 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 0.135-1 ++- libdwfl: bug fixes ++- strip: changed handling of ET_REL files wrt symbol tables and relocs ++ ++* Tue Apr 8 2008 Ulrich Drepper 0.134-1 ++- elflint: backend improvements for sparc, alpha ++- libdwfl, libelf: bug fixes ++ + * Sat Mar 1 2008 Ulrich Drepper 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 +@@ -199,7 +284,7 @@ rm -rf ${RPM_BUILD_ROOT} + - 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 ++ apply partial relocations for dwfl_module_address_section on + ET_REL + - libebl: powerpc backend support for Altivec registers + +diff --git a/config/eu.am b/config/eu.am +new file mode 100644 +index 0000000..7cbdd24 +--- /dev/null ++++ b/config/eu.am +@@ -0,0 +1,60 @@ ++## Common automake fragments for elfutils subdirectory makefiles. ++## ++## Copyright (C) 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 ++## it under the terms of the GNU General Public License as published by the ++## Free Software Foundation; version 2 of the License. ++## ++## Red Hat elfutils is distributed in the hope that it will be useful, but ++## WITHOUT ANY WARRANTY; without even the implied warranty of ++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++## General Public License for more details. ++## ++## You should 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 ++## . ++## ++ ++DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H ++INCLUDES = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. ++AM_CFLAGS = -std=gnu99 -Wall -Wshadow \ ++ $(if $($(*F)_no_Werror),,-Werror) \ ++ $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ ++ $(if $($(*F)_no_Wformat),-Wno-format,-Wformat=2) \ ++ $($(*F)_CFLAGS) ++ ++if MUDFLAP ++AM_CFLAGS += -fmudflap ++libmudflap = -lmudflap ++else ++libmudflap = ++endif ++ ++COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage $(no_mudflap.os),\ ++ $(COMPILE)) ++ ++%.os: %.c %.o ++if AMDEP ++ 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 ++else ++ $(COMPILE.os) -c -o $@ -fpic -DPIC -DSHARED $< ++endif ++ ++CLEANFILES = *.gcno *.gcda ++ ++textrel_check = if readelf -d $@ | fgrep -q TEXTREL; then exit 1; fi +diff --git a/config/known-dwarf.awk b/config/known-dwarf.awk +new file mode 100644 +index 0000000..3089dd2 +--- /dev/null ++++ b/config/known-dwarf.awk +@@ -0,0 +1,55 @@ ++#!/bin/awk -f ++ ++$1 == "enum" { set = ""; next } ++ ++set == "" && $1 ~ /DW_([A-Z_]+)_([^ ]+)/ { ++ set = $1; ++ sub(/^DW_/, "", set); ++ sub(/_[^[:upper:]_].*$/, "", set); ++ if (set ~ /LANG_.+/) set = "LANG"; ++} ++ ++$1 ~ /DW([_A-Z]+)_([^ ]+)/ { ++ match($1, ("DW_" set "_([^ ]+)"), fields); ++ elt = fields[1]; ++ if (set in DW) ++ DW[set] = DW[set] "," elt; ++ else ++ DW[set] = elt; ++ if ($NF == "*/" && $4 == "/*") { ++ c = $5; ++ for (i = 6; i < NF; ++i) c = c " " $i; ++ comment[set, elt] = c; ++ } ++} ++ ++END { ++ print "/* Generated by config/dwarf-known.awk from libdw.h contents. */"; ++ n = asorti(DW, sets); ++ for (i = 1; i <= n; ++i) { ++ set = sets[i]; ++ if (what && what != set) continue; ++ split(DW[set], elts, ","); ++ m = asort(elts); ++ lo = hi = ""; ++ if (m == 0) continue; ++ print "\n#define ALL_KNOWN_DW_" set " \\"; ++ for (j = 1; j <= m; ++j) { ++ elt = elts[j]; ++ if (elt ~ /(lo|low)_user$/) { ++ lo = elt; ++ continue; ++ } ++ if (elt ~ /(hi|high)_user$/) { ++ hi = elt; ++ continue; ++ } ++ if (comment[set, elt]) ++ print " ONE_KNOWN_DW_" set "_DESC (" elt ", DW_" set "_" elt \ ++ ", \"" comment[set, elt] "\") \\"; ++ else ++ print " ONE_KNOWN_DW_" set " (" elt ", DW_" set "_" elt ") \\"; ++ } ++ print " /* End of DW_" set "_*. */"; ++ } ++} +diff --git a/config/version.h.in b/config/version.h.in +new file mode 100644 +index 0000000..82c846e +--- /dev/null ++++ b/config/version.h.in +@@ -0,0 +1,58 @@ ++/* 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 ++ . */ ++ ++#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/configure.ac b/configure.ac +index 4c4e11a..d2af237 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,7 +1,7 @@ + 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 Copyright (C) 1996-2008, 2009 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 +@@ -16,17 +16,16 @@ 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.133],[http://bugzilla.redhat.com/bugzilla/], +- [elfutils]) ++AC_INIT([Red Hat elfutils],[0.145],[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. ++AC_COPYRIGHT([Copyright (C) 1996-2010 Red Hat, Inc.]) ++AC_PREREQ(2.63) dnl Minimum Autoconf version required. + + dnl We use GNU make extensions; automake 1.10 defaults to -Wportability. +-AM_INIT_AUTOMAKE([gnits 1.7 -Wno-portability]) ++AM_INIT_AUTOMAKE([gnits 1.8 -Wno-portability dist-bzip2 no-dist-gzip]) + AM_MAINTAINER_MODE + + dnl Unique ID for this build. +@@ -48,10 +47,13 @@ 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]), +-AC_DEFINE(USE_TLS)) +-AH_TEMPLATE([USE_TLS], [Defined if thread local storage should be used.]) ++AC_ARG_ENABLE([thread-safety], ++AS_HELP_STRING([--enable-thread-safety], [enable thread safety of libraries]), ++use_tls=locks, use_locks=no) ++AM_CONDITIONAL(USE_LOCKS, test "$use_locks" = yes) ++AS_IF([test "$use_locks" = yes], [AC_DEFINE(USE_LOCKS)]) ++ ++AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.]) + + dnl Add all the languages for which translations are available. + ALL_LINGUAS= +@@ -71,6 +73,23 @@ CFLAGS="$old_CFLAGS"]) + AS_IF([test "x$ac_cv_c99" != xyes], + AC_MSG_ERROR([gcc with C99 support required])) + ++AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl ++# Use the same flags that we use for our DSOs, so the test is representative. ++# Some old compiler/linker/libc combinations fail some ways and not others. ++save_CFLAGS="$CFLAGS" ++save_LDFLAGS="$LDFLAGS" ++CFLAGS="-fpic $CFLAGS" ++LDFLAGS="-shared -Wl,-z,defs,-z,relro $LDFLAGS" ++AC_LINK_IFELSE([dnl ++AC_LANG_PROGRAM([[#undef __thread ++static __thread int a; int foo (int b) { return a + b; }]], ++ [[exit (foo (0));]])], ++ ac_cv_tls=yes, ac_cv_tls=no) ++CFLAGS="$save_CFLAGS" ++LDFLAGS="$save_LDFLAGS"]) ++AS_IF([test "x$ac_cv_tls" != xyes], ++ AC_MSG_ERROR([__thread support required])) ++ + LOCALEDIR=$datadir + AC_SUBST(LOCALEDIR) + AC_DEFINE_UNQUOTED(LOCALEDIR, "$LOCALEDIR") +@@ -126,7 +145,7 @@ 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) ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[use_mudflap=yes],[use_mudflap=fail]) + CFLAGS="$old_CFLAGS" + fi]) + if test "$use_mudflap" = fail; then +@@ -137,15 +156,13 @@ 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]), ++AS_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]) ++AS_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" +@@ -154,8 +171,7 @@ 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]) ++AS_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" +@@ -166,7 +182,7 @@ 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]), ++AS_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) + +@@ -179,6 +195,17 @@ AC_SUBST([LIBEBL_SUBDIR]) + AC_DEFINE_UNQUOTED(LIBEBL_SUBDIR, "$LIBEBL_SUBDIR") + AH_TEMPLATE([LIBEBL_SUBDIR], [$libdir subdirectory containing libebl modules.]) + ++dnl Test for zlib and bzlib, gives ZLIB/BZLIB .am ++dnl conditional and config.h USE_ZLIB/USE_BZLIB #define. ++save_LIBS="$LIBS" ++LIBS= ++eu_ZIPLIB(zlib,ZLIB,z,gzdirect,gzip) ++eu_ZIPLIB(bzlib,BZLIB,bz2,BZ2_bzdopen,bzip2) ++eu_ZIPLIB(lzma,LZMA,lzma,lzma_auto_decoder,[LZMA (xz)]) ++zip_LIBS="$LIBS" ++LIBS="$save_LIBS" ++AC_SUBST([zip_LIBS]) ++ + dnl The directories with content. + + dnl Documentation. +@@ -222,141 +249,45 @@ AC_CONFIG_FILES([tests/Makefile]) + AC_SUBST(USE_NLS, yes) + AM_PO_SUBDIRS + +- +-dnl Test of the config.h file. We hide all kinds of configuration magic +-dnl in there. +-AH_BOTTOM([ +-/* 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) +- +-/* 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) +-]) ++dnl Appended to the config.h file. ++dnl We hide all kinds of configuration magic in lib/eu-config.h. ++AH_BOTTOM([#include ]) ++ ++dnl Version compatibility header. ++AC_CONFIG_FILES([version.h:config/version.h.in]) ++AC_SUBST([eu_version]) ++ ++# 1.234 -> 1234 ++case "$PACKAGE_VERSION" in ++[[0-9]].*) eu_version="${PACKAGE_VERSION/./}" ;; ++*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;; ++esac ++case "$eu_version" in ++*.*) ++ # 1234.567 -> "1234", "567" ++ eu_extra_version="${eu_version#*.}" ++ eu_version="${eu_version%%.*}" ++ case "$eu_extra_version" in ++ [[0-9]][[0-9]][[0-9]]) ;; ++ [[0-9]][[0-9]]) eu_extra_version="${eu_extra_version}0" ;; ++ [[0-9]]) eu_extra_version="${eu_extra_version}00" ;; ++ *) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;; ++ esac ++ ;; ++*) ++ eu_extra_version=000 ++ ;; ++esac ++ ++case "$eu_version" in ++ 0[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version#0}$eu_extra_version" ;; ++[[0-9]][[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}$eu_extra_version" ;; ++[[0-9]][[0-9]][[0-9]]) eu_version="${eu_version}0$eu_extra_version" ;; ++[[0-9]][[0-9]]) eu_version="${eu_version}00$eu_extra_version";; ++*) AC_MSG_ERROR([confused by version number '$PACKAGE_VERSION']) ;; ++esac ++ ++# Round up to the next release API (x.y) version. ++[eu_version=$[($eu_version + 999) / 1000]] + + AC_OUTPUT +diff --git a/lib/ChangeLog b/lib/ChangeLog +index c3cd0ac..089747a 100644 +--- a/lib/ChangeLog ++++ b/lib/ChangeLog +@@ -1,3 +1,37 @@ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++2009-08-09 Roland McGrath ++ ++ * eu-config.h (OLD_VERSION, NEW_VERSION, COMPAT_VERSION): New macros. ++ ++2009-01-23 Roland McGrath ++ ++ * eu-config.h: Add multiple inclusion protection. ++ ++2009-01-17 Ulrich Drepper ++ ++ * system.h (ARGP_PROGRAM_VERSION_HOOK_DEF): Define. ++ (ARGP_PROGRAM_BUG_ADDRESS_DEF): Define. ++ ++2009-01-10 Ulrich Drepper ++ ++ * eu-config.h: Remove tls_key_t, key_create, getspecific, setspecific, ++ once_define, and once_execute macros. Use USE_LOCKS instead of ++ USE_TLS. ++ ++2008-08-25 Roland McGrath ++ ++ * 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 ++ ++ * eu-config.h: New file. ++ * Makefile.am (noinst_HEADERS): Add it. ++ + 2008-02-01 Ulrich Drepper + + * Makefile.am (libeu_a_SOURCES): Add sha1.c. +diff --git a/lib/Makefile.am b/lib/Makefile.am +index 7662c38..50d55c5 100644 +--- a/lib/Makefile.am ++++ b/lib/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 1996-2001, 2002, 2004, 2005, 2008 Red Hat, Inc. ++## Copyright (C) 1996-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 +@@ -24,14 +24,9 @@ + ## Network licensing program, please visit 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.. ++include $(top_srcdir)/config/eu.am ++AM_CFLAGS += -fpic ++INCLUDES += -I$(srcdir)/../libelf + + noinst_LIBRARIES = libeu.a + +@@ -39,7 +34,7 @@ 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 ++ sha1.h eu-config.h + EXTRA_DIST = dynamicsizehash.c + + if !GPROF +diff --git a/lib/eu-config.h b/lib/eu-config.h +new file mode 100644 +index 0000000..f814604 +--- /dev/null ++++ b/lib/eu-config.h +@@ -0,0 +1,203 @@ ++/* Configuration definitions. ++ Copyright (C) 2008, 2009 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 ++ . */ ++ ++#ifndef EU_CONFIG_H ++#define EU_CONFIG_H 1 ++ ++#ifdef USE_LOCKS ++# include ++# include ++# 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 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)) ++#endif /* USE_LOCKS */ ++ ++/* 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) ++ ++ ++#ifdef SHARED ++# define OLD_VERSION(name, version) \ ++ asm (".globl _compat." #version "." #name "\n" \ ++ "_compat." #version "." #name " = " #name "\n" \ ++ ".symver _compat." #version "." #name "," #name "@" #version); ++# define NEW_VERSION(name, version) \ ++ asm (".symver " #name "," #name "@@@" #version); ++# define COMPAT_VERSION(name, version, prefix) \ ++ asm (".symver _compat." #version "." #name "," #name "@" #version); \ ++ __typeof (name) _compat_##prefix##_##name asm ("_compat." #version "." #name); ++#else ++# define OLD_VERSION(name, version) /* Nothing for static linking. */ ++# define NEW_VERSION(name, version) /* Nothing for static linking. */ ++# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SHARED" ++#endif ++ ++ ++#endif /* eu-config.h */ +diff --git a/lib/system.h b/lib/system.h +index 23c666a..10b4734 100644 +--- a/lib/system.h ++++ b/lib/system.h +@@ -1,5 +1,5 @@ + /* Declarations for common convenience functions. +- Copyright (C) 2006 Red Hat, Inc. ++ Copyright (C) 2006, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -78,4 +78,16 @@ extern int crc32_file (int fd, uint32_t *resp); + #define pread_retry(fd, buf, len, off) \ + TEMP_FAILURE_RETRY (pread (fd, buf, len, off)) + ++ ++/* We need define two variables, argp_program_version_hook and ++ argp_program_bug_address, in all programs. argp.h declares these ++ variables as non-const (which is correct in general). But we can ++ do better, it is not going to change. So we want to move them into ++ the .rodata section. Define macros to do the trick. */ ++#define ARGP_PROGRAM_VERSION_HOOK_DEF \ ++ void (*const apvh) (FILE *, struct argp_state *) \ ++ __asm ("argp_program_version_hook") ++#define ARGP_PROGRAM_BUG_ADDRESS_DEF \ ++ const char *const apba__ __asm ("argp_program_bug_address") ++ + #endif /* system.h */ +diff --git a/libasm/ChangeLog b/libasm/ChangeLog +index 2894970..ef31dbb 100644 +--- a/libasm/ChangeLog ++++ b/libasm/ChangeLog +@@ -1,3 +1,16 @@ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++2009-01-10 Ulrich Drepper ++ ++ * Makefile.am: Use USE_LOCKS instead of USE_TLS. ++ * asm_error.c: Always use __thread. Remove all !USE_TLS code. ++ ++2008-12-03 Ulrich Drepper ++ ++ * Makefile.am [USE_TLS]: Like libasm.so with libpthread. ++ + 2008-01-11 Ulrich Drepper + + * libasm.h (DisasmGetSymCB_t): Change type of fourth and fifth +diff --git a/libasm/Makefile.am b/libasm/Makefile.am +index bd5779e..52de7a3 100644 +--- a/libasm/Makefile.am ++++ b/libasm/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 2002, 2004, 2005, 2006, 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 +@@ -24,22 +24,12 @@ + ## Network licensing program, please visit 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 ++include $(top_srcdir)/config/eu.am ++INCLUDES += -I$(top_srcdir)/libelf -I$(top_srcdir)/libebl -I$(top_srcdir)/libdw ++ + 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 +@@ -65,24 +55,20 @@ if !MUDFLAP + libasm_pic_a_SOURCES = + am_libasm_pic_a_OBJECTS = $(libasm_a_SOURCES:.c=.os) + ++libasm_so_LDLIBS = ++if USE_LOCKS ++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 ++ ../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 +@@ -99,4 +85,4 @@ endif + noinst_HEADERS = libasmP.h symbolhash.h + EXTRA_DIST = libasm.map + +-CLEANFILES = $(am_libasm_pic_a_OBJECTS) *.gcno *.gcda libasm.so.$(VERSION) ++CLEANFILES += $(am_libasm_pic_a_OBJECTS) libasm.so.$(VERSION) +diff --git a/libasm/asm_error.c b/libasm/asm_error.c +index 29c54cb..4d249e9 100644 +--- a/libasm/asm_error.c ++++ b/libasm/asm_error.c +@@ -1,5 +1,5 @@ + /* Error handling in libasm. +- Copyright (C) 2002, 2004, 2005 Red Hat, Inc. ++ Copyright (C) 2002, 2004, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -36,50 +36,13 @@ + + + /* 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); ++static __thread int global_error; + + + 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; ++ int result = global_error; + global_error = ASM_E_NOERROR; + return result; + } +@@ -89,27 +52,6 @@ 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; + } + +@@ -133,31 +75,7 @@ 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; ++ int last_error = global_error; + + if (error < -1) + return _("unknown error"); +@@ -173,25 +91,3 @@ asm_errmsg (error) + + 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/libcpu/ChangeLog b/libcpu/ChangeLog +index ff642de..9d517fc 100644 +--- a/libcpu/ChangeLog ++++ b/libcpu/ChangeLog +@@ -1,3 +1,76 @@ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++2009-04-14 Roland McGrath ++ ++ * Makefile.am (AM_CFLAGS): Add -fdollars-in-identifiers; it is not the ++ default on every machine. ++ ++2009-01-23 Roland McGrath ++ ++ * Makefile.am (i386_parse_CFLAGS): Use quotes around command ++ substitution that can produce leading whitespace. ++ ++2009-01-01 Ulrich Drepper ++ ++ * i386_parse.y (instrtable_out): Optimize match_data table by not ++ emitting 0xff masks for leading bytes. ++ * i386_disasm.c (i386_disasm): Adjust reader of match_data. ++ ++ * i386_disasm.c (i386_disasm): Reset bufcnt when not matched. We ++ don't expect snprintf to fail. ++ ++2008-12-31 Ulrich Drepper ++ ++ * defs/i386: Add dppd, dpps, insertps, movntdqa, mpsadbw, packusdw, ++ pblendvb, pblendw, pcmpeqq, pcmpestri, pcmpestrm, pcmpistri, pcmpistrm, ++ pcmpgtq, phminposuw, pinsrb, pinsrd, pmaxsb, pmaxsd, pmaxud, pmaxuw, ++ pminsb, pminsd, pminud, pminuw, pmovsxbw, pmovsxbd, pmovsxbq, pmovsxwd, ++ pmovsxwq, pmovsxdq, pmovzxbw, pmovzxbd, pmovzxbq, pmovzxwd, pmovzxwq, ++ pmovzxdq, pmuldq, pmulld, popcnt, ptest, roundss, roundps, roundpd, ++ and roundsd opcodes. ++ ++ * 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 ++ ++ * defs/i386: Add blendpd and blendps opcodes. ++ ++2008-12-19 Ulrich Drepper ++ ++ * defs/i386: Add entry for AMD 3DNOW. ++ * i386_disasm.c: Implement AMD 3DNOW disassembly. ++ ++2008-12-17 Ulrich Drepper ++ ++ * i386_disasm.c (i386_disasm): If instruction matches prefix, ++ undoing the prefix match finishes the instruction. ++ + 2008-01-21 Roland McGrath + + * defs/i386: Fix typo in comment. +diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am +index 51817c1..ca334bb 100644 +--- a/libcpu/Makefile.am ++++ b/libcpu/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 2002, 2004, 2005, 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 +@@ -24,25 +24,14 @@ + ## Network licensing program, please visit 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 ++include $(top_srcdir)/config/eu.am ++INCLUDES += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ ++ -I$(srcdir)/../libdw -I$(srcdir)/../libasm ++AM_CFLAGS += -fpic -fdollars-in-identifiers + LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) -P$(, 2007. + +@@ -184,6 +184,73 @@ static const char *prefix_str[] = + #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; +@@ -289,6 +356,9 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + 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); + +@@ -302,79 +372,61 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + goto do_ret; + } + +- 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; +- +- size_t cnt = 0; ++ next_match: + while (curr < match_end) + { +- const uint8_t *start = curr; +- + uint_fast8_t len = *curr++; ++ uint_fast8_t clen = len >> 4; ++ len &= 0xf; ++ const uint8_t *next_curr = curr + clen + (len - clen) * 2; + + assert (len > 0); +- assert (curr + 2 * len + 2 <= match_end); ++ assert (curr + clen + 2 * (len - clen) <= match_end); + + const uint8_t *codep = data; +- size_t avail = len; + int correct_prefix = 0; + int opoff = 0; + +- if (data > begin && codep[-1] == curr[1] && curr[0] == 0xff) ++ if (data > begin && codep[-1] == *curr && clen > 0) + { + /* We match a prefix byte. This is exactly one byte and + is matched exactly, without a mask. */ +- --avail; +- + --len; +- start += 2; ++ --clen; + opoff = 8; + +- curr += 2; +- assert (avail > 0); ++ ++curr; + + assert (last_prefix_bit != 0); + correct_prefix = last_prefix_bit; + } + +- do ++ size_t avail = len; ++ while (clen > 0) + { +- uint_fast8_t masked = *codep++ & *curr++; +- if (masked != *curr++) +- break; +- ++ if (*codep++ != *curr++) ++ goto not; + --avail; ++ --clen; + if (codep == end && avail > 0) + goto do_ret; + } +- while (avail > 0); + +- if (avail != 0) ++ while (avail > 0) + { +- not: +- curr = start + 1 + 2 * len + 2; +- ++cnt; +- continue; ++ uint_fast8_t masked = *codep++ & *curr++; ++ if (masked != *curr++) ++ { ++ not: ++ curr = next_curr; ++ ++cnt; ++ bufcnt = 0; ++ goto next_match; ++ } ++ ++ --avail; ++ if (codep == end && avail > 0) ++ goto do_ret; + } + + if (len > end - data) +@@ -387,6 +439,41 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + || (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" (next_curr), "=mr" (len)); ++ } ++ + size_t prefix_size = 0; + + // XXXonly print as prefix if valid? +@@ -460,6 +547,23 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + 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"); +@@ -625,6 +729,24 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + 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) + { +@@ -765,7 +887,8 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + { + /* First parameter. */ + if (instrtab[cnt].str1 != 0) +- ADD_STRING (op1_str[instrtab[cnt].str1]); ++ ADD_STRING (op1_str ++ + op1_str_idx[instrtab[cnt].str1 - 1]); + + output_data.opoff1 = (instrtab[cnt].off1_1 + + OFF1_1_BIAS - opoff); +@@ -785,7 +908,8 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + { + /* Second parameter. */ + if (instrtab[cnt].str2 != 0) +- ADD_STRING (op2_str[instrtab[cnt].str2]); ++ ADD_STRING (op2_str ++ + op2_str_idx[instrtab[cnt].str2 - 1]); + + output_data.opoff1 = (instrtab[cnt].off2_1 + + OFF2_1_BIAS - opoff); +@@ -805,7 +929,8 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + { + /* Third parameter. */ + if (instrtab[cnt].str3 != 0) +- ADD_STRING (op3_str[instrtab[cnt].str3]); ++ ADD_STRING (op3_str ++ + op3_str_idx[instrtab[cnt].str3 - 1]); + + output_data.opoff1 = (instrtab[cnt].off3_1 + + OFF3_1_BIAS - opoff); +@@ -872,8 +997,7 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, + r = snprintf (&buf[bufcnt], bufavail, "# %#" PRIx64, + (uint64_t) symaddr); + +- if (r < 0) +- goto not; ++ assert (r >= 0); + if ((size_t) r >= bufavail) + goto enomem; + bufcnt += r; +diff --git a/libcpu/i386_parse.y b/libcpu/i386_parse.y +index ceeb12a..bea0e33 100644 +--- a/libcpu/i386_parse.y ++++ b/libcpu/i386_parse.y +@@ -1,6 +1,6 @@ + %{ + /* Parser for i386 CPU description. +- Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2004, 2005, 2007, 2008, 2009 Red Hat, Inc. + Written by Ulrich Drepper , 2004. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -145,6 +146,7 @@ struct argstring + { + char *str; + int idx; ++ int off; + }; + + +@@ -1066,19 +1068,33 @@ compare_suf (const void *p1, const void *p2) + + + 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) + { +- fprintf (outfile, " \"%s\",\n", (*(struct argstring **) nodep)->str); ++ 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))) + { +@@ -1149,7 +1165,8 @@ instrtable_out (void) + { + /* Functions. */ + count_op_str = 0; +- fprintf (outfile, "static opfct_t op%d_fct[] =\n{\n NULL,\n", i + 1); ++ 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); + +@@ -1157,9 +1174,14 @@ instrtable_out (void) + if (nbitstr[i] != 0) + { + count_op_str = 0; +- fprintf (outfile, "static const char *op%d_str[] =\n{\n NULL,\n", +- i + 1); ++ 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); + } + } +@@ -1227,6 +1249,8 @@ instrtable_out (void) + /* First count the number of bytes. */ + size_t totalbits = 0; + size_t zerobits = 0; ++ bool leading_p = true; ++ size_t leadingbits = 0; + struct bitvalue *b = instr->bytes; + while (b != NULL) + { +@@ -1234,6 +1258,8 @@ instrtable_out (void) + { + ++totalbits; + zerobits = 0; ++ if (leading_p) ++ ++leadingbits; + } + else + { +@@ -1243,13 +1269,15 @@ instrtable_out (void) + zerobits = 0; + else + zerobits += b->field->bits; ++ leading_p = false; + } + b = b->next; + } + size_t nbytes = (totalbits - zerobits + 7) / 8; + assert (nbytes > 0); ++ size_t leadingbytes = leadingbits / 8; + +- fprintf (outfile, " %#zx,", nbytes); ++ fprintf (outfile, " %#zx,", nbytes | (leadingbytes << 4)); + + /* Now create the mask and byte values. */ + uint8_t byte = 0; +@@ -1264,7 +1292,15 @@ instrtable_out (void) + mask = (mask << 1) | 1; + if (++nbits == 8) + { +- fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",", mask, byte); ++ if (leadingbytes > 0) ++ { ++ assert (mask == 0xff); ++ fprintf (outfile, " %#" PRIx8 ",", byte); ++ --leadingbytes; ++ } ++ else ++ fprintf (outfile, " %#" PRIx8 ", %#" PRIx8 ",", ++ mask, byte); + byte = mask = nbits = 0; + if (--nbytes == 0) + break; +@@ -1272,6 +1308,8 @@ instrtable_out (void) + } + else + { ++ assert (leadingbytes == 0); ++ + unsigned long int remaining = b->field->bits; + while (nbits + remaining > 8) + { +@@ -1296,7 +1334,7 @@ instrtable_out (void) + b = b->next; + } + +- fprintf (outfile, " %#zx, %#zx,\n", cnt & 0xff, cnt >> 8); ++ fputc_unlocked ('\n', outfile); + } + fputs ("};\n", outfile); + } +diff --git a/libdw/ChangeLog b/libdw/ChangeLog +index d344bae..c21b912 100644 +--- a/libdw/ChangeLog ++++ b/libdw/ChangeLog +@@ -1,3 +1,338 @@ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++2010-02-02 Mark Wielaard ++ ++ * fde.c (intern_fde): Fix length check for sized_augmentation_data. ++ ++2010-01-07 Roland McGrath ++ ++ * dwarf_getcfi_elf.c (getcfi_phdr): Use elf_getphdrnum. ++ ++2010-01-05 Roland McGrath ++ ++ * dwarf_aggregate_size.c: New file. ++ * Makefile.am (libdw_a_SOURCES): Add it. ++ * libdw.h: Declare it. ++ * libdwP.h: Add INTDECL. ++ * libdw.map (ELFUTILS_0.144): New set. Add dwarf_aggregate_size. ++ ++ * dwarf_srclang.c: Add INTDEF. ++ * libdwP.h: Add INTDECL. ++ ++ * dwarf.h: Add some more DW_AT_GNU_* types from gcc. ++ ++ * dwarf.h: Add DW_AT_GNU_vector, DW_AT_GNU_template_name. ++ ++2009-11-21 Roland McGrath ++ ++ * dwarf_getlocation.c (check_constant_offset): Return 1 for all ++ non-constant forms. ++ ++2009-10-15 Roland McGrath ++ ++ * libdw_form.c (__libdw_form_val_len): Grok DW_FORM_sec_offset, ++ DW_FORM_exprloc, DW_FORM_flag_present, and DW_FORM_ref_sig8. ++ ++2009-09-17 Roland McGrath ++ ++ * dwarf_getlocation.c (dwarf_getlocation_implicit_value): Make OP ++ argument a pointer to const. ++ * libdw.h: Update decl. ++ ++2009-09-10 Roland McGrath ++ ++ * dwarf_getlocation.c (store_implicit_value): New function. ++ (__libdw_intern_expression): Use it, handle DW_OP_implicit_value. ++ (dwarf_getlocation_implicit_value): New function. ++ * libdw.h: Declare it. ++ * libdw.map (ELFUTILS_0.143): Add it. ++ ++2009-09-09 Mark Wielaard ++ ++ * dwarf_getcfi.c (dwarf_getcfi): Clear cfi->ebl. ++ ++2009-08-21 Josh Stone ++ ++ * dwarf_hasattr_integrate.c: Integrate DW_AT_specification too. ++ ++2009-08-10 Roland McGrath ++ ++ * dwarf_getscopevar.c: Use dwarf_diename. ++ ++2009-08-09 Roland McGrath ++ ++ * libdw.map (ELFUTILS_0.143): New version set, ++ inherits from ELFUTILS_0.142. ++ * dwarf_arrayorder.c: Use OLD_VERSION and NEW_VERSION to define an ++ alias in the ELFUTILS_0.122 version set and the default in the new set. ++ * dwarf_srclang.c: Likewise. ++ * dwarf_decl_file.c: Likewise. ++ * dwarf_decl_line.c: Likewise. ++ * dwarf_decl_column.c: Likewise. ++ * dwarf_bytesize.c: Likewise. ++ * dwarf_bitsize.c: Likewise. ++ * dwarf_bitoffset.c: Likewise. ++ ++2009-08-07 Roland McGrath ++ ++ * dwarf_arrayorder.c: Use dwarf_attr_integrate. ++ * dwarf_srclang.c: Likewise. ++ * dwarf_decl_file.c: Likewise. ++ * dwarf_decl_line.c (__libdw_attr_intval): Likewise. ++ * dwarf_bytesize.c: Likewise. ++ * dwarf_bitsize.c: Likewise. ++ * dwarf_bitoffset.c: Likewise. ++ ++2009-07-22 Roland McGrath ++ ++ * dwarf_frame_cfa.c: Change calling convention. ++ * libdw.h: Update decl. ++ ++ * dwarf_frame_register.c: Change calling/return-value convention for ++ value-only results and undefined/same_value. ++ * libdw.h: Update decl. ++ ++ * dwarf_getlocation.c (__libdw_intern_expression): Take new bool ++ argument, append DW_OP_stack_value if set. Don't take NOPS argument, ++ return that value instead. ++ (getlocation): Update caller. ++ * dwarf_frame_cfa.c: Likewise. ++ * libdwP.h: Update decl. ++ ++2009-07-21 Roland McGrath ++ ++ * dwarf_getsrc_file.c: Ignore a CU that just has no DW_AT_stmt_list. ++ Fix loop iteration after skipping a bogus or useless CU. ++ ++ * dwarf_entry_breakpoints.c: Handle 0 dwarf_errno () as harmless ++ absence, not DWARF_E_NO_DEBUG_LINE. ++ ++2009-07-20 Roland McGrath ++ ++ * dwarf_getlocation.c (__libdw_intern_expression): ++ Handle DW_OP_stack_value. ++ ++2009-07-16 Roland McGrath ++ ++ * dwarf_formudata.c (__libdw_formptr): Handle DW_FORM_sec_offset, ++ reject others when CU's version > 3. ++ ++ * dwarf_formflag.c: Handle DW_FORM_flag_present. ++ ++ * dwarf.h: Add DW_OP_{implicit,stack}_value from DWARF 4 draft. ++ Also DW_TAG_type_unit and DW_TAG_rvalue_reference_type. ++ Also DW_AT_signature, DW_AT_main_subprogram, DW_AT_data_bit_offset, ++ and DW_AT_const_expr. ++ Also DW_FORM_sec_offset, DW_FORM_exprloc, DW_FORM_flag_present, ++ and DW_FORM_ref_sig8. ++ ++2009-07-15 Roland McGrath ++ ++ * dwarf_getlocation.c: Grok DW_OP_form_tls_address, ++ DW_OP_GNU_push_tls_address, and DW_OP_bit_piece. ++ ++2009-07-13 Roland McGrath ++ ++ * dwarf_getlocation.c: Grok DW_OP_call_frame_cfa. ++ ++2009-07-08 Roland McGrath ++ ++ * libdw.map (ELFUTILS_0.142): Add dwfl_module_dwarf_cfi, ++ dwfl_module_eh_cfi. ++ ++ * libdwP.h (struct Dwarf): Add member `cfi'. ++ * dwarf_end.c (dwarf_end): Call __libdw_destroy_frame_cache on it. ++ * dwarf_getcfi.c: New file. ++ * dwarf_getcfi_elf.c: New file. ++ * dwarf_cfi_end.c: New file. ++ * dwarf_cfi_addrframe.c: New file. ++ * dwarf_frame_cfa.c: New file. ++ * dwarf_frame_register.c: New file. ++ * dwarf_frame_return_address_register.c: New file. ++ * Makefile.am (libdw_a_SOURCES): Add them. ++ * unwind.h: Declare those functions. ++ * libdw.map (ELFUTILS_0.142): Export them. ++ ++ * dwarf_getlocation.c (__libdw_intern_expression): New function, ++ broken out of ... ++ (getlocation): ... here, call it. ++ * libdwP.h: Declare it. ++ ++ * cie.c: New file. ++ * fde.c: New file. ++ * frame-cache.c: New file. ++ * cfi.c: New file. ++ * cfi.h: New file. ++ * encoded-value.h: New file. ++ * Makefile.am (libdw_a_SOURCES, noinst_HEADERS): Add them. ++ * libdwP.h: Add DWARF_E_INVALID_CFI to errors enum. ++ * dwarf_error.c (errmsgs): Add element for it. ++ ++ * dwarf_next_cfi.c: New file. ++ * Makefile.am (libdw_a_SOURCES): Add it. ++ * libdw.h (Dwarf_CIE, Dwarf_FDE, Dwarf_CIE_Entry): New types. ++ Declare dwarf_next_cfi. ++ * libdw.map (ELFUTILS_0.142): New set, inherits from ELFUTILS_0.136. ++ Add dwarf_next_cfi. ++ ++ * memory-access.h [! ALLOW_UNALIGNED] ++ (read_2ubyte_unaligned): Renamed to ... ++ (read_2ubyte_unaligned_1): ... this. Take bool rather than Dwarf *. ++ (read_2ubyte_unaligned): Define as macro passing dbg->other_byte_order. ++ (read_2sbyte_unaligned): Likewise. ++ (read_4ubyte_unaligned): Likewise. ++ (read_4sbyte_unaligned): Likewise. ++ (read_8ubyte_unaligned): Likewise. ++ (read_8sbyte_unaligned): Likewise. ++ ++ * libdwP.h (IDX_eh_frame): Remove it. ++ * dwarf_begin_elf.c (dwarf_scnnames): Remove its element. ++ ++2009-07-08 Roland McGrath ++ ++ * libdwP.h (struct Dwarf_Line_s): Reorder members to pack better. ++ ++ * dwarf_getlocation.c (check_constant_offset): New function. ++ (dwarf_getlocation, dwarf_getlocation_addr): Call it to ++ handle DW_AT_data_member_location of data[48] as constant offset. ++ ++2009-06-18 Roland McGrath ++ ++ * libdwP.h (__libdw_read_address_inc): Constify. ++ (__libdw_read_offset_inc): Likewise. ++ * dwarf_getaranges.c: Likewise. ++ * dwarf_getlocation.c: Likewise. ++ * dwarf_getsrclines.c: Likewise. ++ * dwarf_nextcu.c: Likewise. ++ ++2009-05-05 Petr Machata ++ ++ * libdwP.h (__libdw_formptr): Declare new function. ++ * dwarf_formudata.c: Implement it here. ++ * dwarf_getlocation.c (dwarf_getlocation_addr): ++ Call it instead of hand-rolled offset handling code. ++ * dwarf_getsrclines.c (dwarf_getsrclines): Likewise. ++ * dwarf_ranges.c (dwarf_ranges): Likewise. ++ ++2009-05-04 Petr Machata ++ ++ * libdwP.h (__libdw_read_begin_end_pair_inc): Declare new function. ++ * dwarf_ranges.c: Implement it here. ++ (dwarf_ranges): Call it. ++ * dwarf_getlocation.c (dwarf_getlocation_addr): Call it also here. ++ ++2009-04-23 Petr Machata ++ ++ * dwarf_formaddr.c (dwarf_formaddr): Call __libdw_read_* instead ++ of read_*ubyte_unaligned. ++ * dwarf_formref_die.c (dwarf_formref_die): Likewise. ++ * dwarf_formstring.c (dwarf_formstring): Likewise. ++ * dwarf_formudate.c (dwarf_formudata): Likewise. ++ * dwarf_getaranges.c (dwarf_getaranges): Likewise. ++ * dwarf_getlocation.c (dwarf_getlocation_addr): Likewise. ++ * dwarf_getpubnames.c (get_offsets): Likewise. ++ * dwarf_nextcu.c (dwarf_nextcu): Likewise. ++ ++2009-04-23 Petr Machata ++ ++ * libdwP.h (__libdw_read_addr_inc, __libdw_read_off_inc, ++ __libdw_read_addr, __libdw_read_off): Add four new internal ++ functions. ++ ++2009-05-07 Roland McGrath ++ ++ * dwarf_getmacros.c (dwarf_getmacros): Use absolute section offset in ++ return value and OFFSET argument, not CU-relative. Only fetch the ++ attribute data when called with OFFSET of 0. ++ ++2009-05-07 Petr Machata ++ ++ * dwarf_getmacros.c (dwarf_getmacros): Take into account offset in ++ DW_AT_macro_info attribute of CU DIE. ++ ++2009-04-15 Roland McGrath ++ ++ * dwarf.h (DW_CIE_ID): Removed. ++ (DW_CIE_ID_32, DW_CIE_ID_64): New constants replace it. ++ ++2009-04-01 Roland McGrath ++ ++ * dwarf.h: Add DW_CFA_GNU_negative_offset_extended. ++ ++2009-01-28 Roland McGrath ++ ++ * libdwP.h (struct Dwarf_Line_s): Move out of struct Dwarf_Lines_s ++ defn so C++ doesn't scope the name to not match the Dwarf_Line typedef. ++ ++ * libdwP.h (struct Dwarf_Files_s): Replace dbg field with cu field. ++ ++2009-01-26 Roland McGrath ++ ++ * dwarf_ranges.c: Return 0 when no ranges or *_pc attrs at all. ++ ++2009-01-25 Roland McGrath ++ ++ * dwarf_getattrs.c: Correctly skip attribute values when restarting. ++ ++2009-01-23 Roland McGrath ++ ++ * Makefile.am ($(srcdir)/known-dwarf.h): Target renamed back. ++ Put these rules under if MAINTAINER_MODE. ++ ++2009-01-22 Roland McGrath ++ ++ * dwarf.h: Add DW_OP_GNU_encoded_addr. ++ ++2009-01-21 Roland McGrath ++ ++ * Makefile.am (CLEANFILES): Renamed to ... ++ (MOSTLYCLEANFILES): ... here. ++ (CLEANFILES): New variable, add known-dwarf.h. ++ ++2009-01-17 Roland McGrath ++ ++ * Makefile.am (known-dwarf.h): Target renamed, not in $(srcdir). ++ Make it unconditional. ++ (BUILT_SOURCES): Updated. ++ ++ * dwarf.h: Add description comments for DW_LANG_* values. ++ ++ * Makefile.am [MAINTAINER_MODE] ++ ($(srcdir)/known-dwarf.h): New target. ++ (BUILT_SOURCES): Add it. ++ ++ * dwarf.h: Add DW_OP_GNU_push_tls_address, DW_OP_GNU_uninit. ++ ++2009-01-10 Ulrich Drepper ++ ++ * dwarf_error.c: Always use __thread. Remove all !USE_TLS code. ++ ++2009-01-08 Roland McGrath ++ ++ * Makefile.am (libdw.so): Don't depend on $(zip_LIBS), just link it in. ++ ++2008-01-06 Roland McGrath ++ ++ * libdwP.h (struct Dwarf_Abbrev): Change type of 'has_children' to bool. ++ Reorder members. ++ * dwarf_haschildren.c: Return -1 for error case, not 0. ++ ++ * Makefile.am (libdw.so): Link in $(zip_LIBS). ++ ++2009-01-06 Ulrich Drepper ++ ++ * dwarf.h: Add definition for unwind and call frame information. ++ ++ * memory-access.h: Define read_ubyte_unaligned, read_sbyte_unaligned, ++ read_ubyte_unaligned_inc, and read_sbyte_unaligned_inc. ++ ++2008-08-15 Roland McGrath ++ ++ * libdw.map (ELFUTILS_0.136): New version set, inherits from ++ ELFUTILS_0.130. Add dwfl_addrsegment, dwfl_report_segment. ++ + 2008-01-21 Ulrich Drepper + + * dwarf_child.c: Minor optimizations. +diff --git a/libdw/Makefile.am b/libdw/Makefile.am +index 69ce526..4bd0f2a 100644 +--- a/libdw/Makefile.am ++++ b/libdw/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 2002, 2003, 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 +@@ -24,22 +24,14 @@ + ## Network licensing program, please visit www.openinventionnetwork.com + ## . + ## +-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DIS_LIBDW +-if MUDFLAP +-AM_CFLAGS = -fmudflap +-else +-AM_CFLAGS = +-endif ++include $(top_srcdir)/config/eu.am ++DEFS += -DIS_LIBDW + 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 ++INCLUDES += -I$(srcdir)/../libelf + VERSION = 1 + +-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \ +- $(COMPILE))) +- + lib_LIBRARIES = libdw.a + if !MUDFLAP + noinst_LIBRARIES = libdw_pic.a +@@ -83,7 +75,21 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.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 ++ dwarf_entry_breakpoints.c \ ++ dwarf_next_cfi.c \ ++ cie.c fde.c cfi.c frame-cache.c \ ++ dwarf_frame_info.c dwarf_frame_cfa.c dwarf_frame_register.c \ ++ dwarf_cfi_addrframe.c \ ++ dwarf_getcfi.c dwarf_getcfi_elf.c dwarf_cfi_end.c \ ++ dwarf_aggregate_size.c ++ ++if MAINTAINER_MODE ++BUILT_SOURCES = $(srcdir)/known-dwarf.h ++MAINTAINERCLEANFILES = $(srcdir)/known-dwarf.h ++$(srcdir)/known-dwarf.h: $(top_srcdir)/config/known-dwarf.awk $(srcdir)/dwarf.h ++ $(AWK) -f $^ > $@.new ++ mv -f $@.new $@ ++endif + + if !MUDFLAP + libdw_pic_a_SOURCES = +@@ -99,18 +105,10 @@ libdw.so: $(srcdir)/libdw.map libdw_pic.a \ + -Wl,--enable-new-dtags,-rpath,$(pkglibdir) \ + -Wl,--version-script,$<,--no-undefined \ + -Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\ +- -ldl ++ -ldl $(zip_LIBS) + 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 +@@ -126,8 +124,9 @@ endif + + libdw_a_LIBADD = $(addprefix ../libdwfl/,$(shell $(AR) t ../libdwfl/libdwfl.a)) + +-noinst_HEADERS = libdwP.h memory-access.h dwarf_abbrev_hash.h ++noinst_HEADERS = libdwP.h memory-access.h dwarf_abbrev_hash.h \ ++ cfi.h encoded-value.h + + EXTRA_DIST = libdw.map + +-CLEANFILES = $(am_libdw_pic_a_OBJECTS) *.gcno *.gcda libdw.so.$(VERSION) ++MOSTLYCLEANFILES = $(am_libdw_pic_a_OBJECTS) libdw.so.$(VERSION) +diff --git a/libdw/cfi.c b/libdw/cfi.c +new file mode 100644 +index 0000000..ac19783 +--- /dev/null ++++ b/libdw/cfi.c +@@ -0,0 +1,500 @@ ++/* CFI program execution. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include "../libebl/libebl.h" ++#include "cfi.h" ++#include "memory-access.h" ++#include "encoded-value.h" ++#include ++#include ++#include ++ ++#define CFI_PRIMARY_MAX 0x3f ++ ++static Dwarf_Frame * ++duplicate_frame_state (const Dwarf_Frame *original, ++ Dwarf_Frame *prev) ++{ ++ size_t size = offsetof (Dwarf_Frame, regs[original->nregs]); ++ Dwarf_Frame *copy = malloc (size); ++ if (likely (copy != NULL)) ++ { ++ memcpy (copy, original, size); ++ copy->prev = prev; ++ } ++ return copy; ++} ++ ++/* Returns a DWARF_E_* error code, usually NOERROR or INVALID_CFI. */ ++static int ++execute_cfi (Dwarf_CFI *cache, ++ const struct dwarf_cie *cie, ++ Dwarf_Frame **state, ++ const uint8_t *program, const uint8_t *const end, bool abi_cfi, ++ Dwarf_Addr loc, Dwarf_Addr find_pc) ++{ ++ /* The caller should not give us anything out of range. */ ++ assert (loc <= find_pc); ++ ++ int result = DWARF_E_NOERROR; ++ ++#define cfi_assert(ok) do { \ ++ if (likely (ok)) break; \ ++ result = DWARF_E_INVALID_CFI; \ ++ goto out; \ ++ } while (0) ++ ++ Dwarf_Frame *fs = *state; ++ inline bool enough_registers (Dwarf_Word reg) ++ { ++ if (fs->nregs <= reg) ++ { ++ size_t size = offsetof (Dwarf_Frame, regs[reg + 1]); ++ Dwarf_Frame *bigger = realloc (fs, size); ++ if (unlikely (bigger == NULL)) ++ { ++ result = DWARF_E_NOMEM; ++ return false; ++ } ++ else ++ { ++ bigger->nregs = reg + 1; ++ fs = bigger; ++ } ++ } ++ return true; ++ } ++ ++#define register_rule(regno, r_rule, r_value) do { \ ++ if (unlikely (! enough_registers (regno))) \ ++ goto out; \ ++ fs->regs[regno].rule = reg_##r_rule; \ ++ fs->regs[regno].value = (r_value); \ ++ } while (0) ++ ++ while (program < end) ++ { ++ uint8_t opcode = *program++; ++ Dwarf_Word regno; ++ Dwarf_Word offset; ++ Dwarf_Word sf_offset; ++ Dwarf_Word operand = opcode & CFI_PRIMARY_MAX; ++ switch (opcode) ++ { ++ /* These cases move LOC, i.e. "create a new table row". */ ++ ++ case DW_CFA_advance_loc1: ++ operand = *program++; ++ case DW_CFA_advance_loc + 0 ... DW_CFA_advance_loc + CFI_PRIMARY_MAX: ++ advance_loc: ++ loc += operand * cie->code_alignment_factor; ++ break; ++ ++ case DW_CFA_advance_loc2: ++ operand = read_2ubyte_unaligned_inc (cache, program); ++ goto advance_loc; ++ case DW_CFA_advance_loc4: ++ operand = read_4ubyte_unaligned_inc (cache, program); ++ goto advance_loc; ++ case DW_CFA_MIPS_advance_loc8: ++ operand = read_8ubyte_unaligned_inc (cache, program); ++ goto advance_loc; ++ ++ case DW_CFA_set_loc: ++ if (unlikely (read_encoded_value (cache, cie->fde_encoding, &program, ++ &loc))) ++ return INTUSE(dwarf_errno) (); ++ break; ++ ++ /* Now all following cases affect this row, but do not touch LOC. ++ These cases end with 'continue'. We only get out of the ++ switch block for the row-copying (LOC-moving) cases above. */ ++ ++ case DW_CFA_def_cfa: ++ get_uleb128 (operand, program); ++ get_uleb128 (offset, program); ++ def_cfa: ++ fs->cfa_rule = cfa_offset; ++ fs->cfa_val_reg = operand; ++ fs->cfa_val_offset = offset; ++ /* Prime the rest of the Dwarf_Op so dwarf_frame_cfa can use it. */ ++ fs->cfa_data.offset.atom = DW_OP_bregx; ++ fs->cfa_data.offset.offset = 0; ++ continue; ++ ++ case DW_CFA_def_cfa_register: ++ get_uleb128 (regno, program); ++ cfi_assert (fs->cfa_rule == cfa_offset); ++ fs->cfa_val_reg = regno; ++ continue; ++ ++ case DW_CFA_def_cfa_sf: ++ get_uleb128 (operand, program); ++ get_sleb128 (sf_offset, program); ++ offset = sf_offset * cie->data_alignment_factor; ++ goto def_cfa; ++ ++ case DW_CFA_def_cfa_offset: ++ get_uleb128 (offset, program); ++ def_cfa_offset: ++ cfi_assert (fs->cfa_rule == cfa_offset); ++ fs->cfa_val_offset = offset; ++ continue; ++ ++ case DW_CFA_def_cfa_offset_sf: ++ get_sleb128 (sf_offset, program); ++ offset = sf_offset * cie->data_alignment_factor; ++ goto def_cfa_offset; ++ ++ case DW_CFA_def_cfa_expression: ++ /* DW_FORM_block is a ULEB128 length followed by that many bytes. */ ++ get_uleb128 (operand, program); ++ cfi_assert (operand <= (Dwarf_Word) (end - program)); ++ fs->cfa_rule = cfa_expr; ++ fs->cfa_data.expr.data = (unsigned char *) program; ++ fs->cfa_data.expr.length = operand; ++ program += operand; ++ continue; ++ ++ case DW_CFA_undefined: ++ get_uleb128 (regno, program); ++ register_rule (regno, undefined, 0); ++ continue; ++ ++ case DW_CFA_same_value: ++ get_uleb128 (regno, program); ++ register_rule (regno, same_value, 0); ++ continue; ++ ++ case DW_CFA_offset_extended: ++ get_uleb128 (operand, program); ++ case DW_CFA_offset + 0 ... DW_CFA_offset + CFI_PRIMARY_MAX: ++ get_uleb128 (offset, program); ++ offset *= cie->data_alignment_factor; ++ offset_extended: ++ register_rule (operand, offset, offset); ++ continue; ++ ++ case DW_CFA_offset_extended_sf: ++ get_uleb128 (operand, program); ++ get_sleb128 (sf_offset, program); ++ offset_extended_sf: ++ offset = sf_offset * cie->data_alignment_factor; ++ goto offset_extended; ++ ++ case DW_CFA_GNU_negative_offset_extended: ++ /* GNU extension obsoleted by DW_CFA_offset_extended_sf. */ ++ get_uleb128 (operand, program); ++ get_uleb128 (offset, program); ++ sf_offset = -offset; ++ goto offset_extended_sf; ++ ++ case DW_CFA_val_offset: ++ get_uleb128 (operand, program); ++ get_uleb128 (offset, program); ++ offset *= cie->data_alignment_factor; ++ val_offset: ++ register_rule (operand, val_offset, offset); ++ continue; ++ ++ case DW_CFA_val_offset_sf: ++ get_uleb128 (operand, program); ++ get_sleb128 (sf_offset, program); ++ offset = sf_offset * cie->data_alignment_factor; ++ goto val_offset; ++ ++ case DW_CFA_register: ++ get_uleb128 (regno, program); ++ get_uleb128 (operand, program); ++ register_rule (regno, register, operand); ++ continue; ++ ++ case DW_CFA_expression: ++ get_uleb128 (regno, program); ++ offset = program - (const uint8_t *) cache->data->d.d_buf; ++ /* DW_FORM_block is a ULEB128 length followed by that many bytes. */ ++ get_uleb128 (operand, program); ++ cfi_assert (operand <= (Dwarf_Word) (end - program)); ++ program += operand; ++ register_rule (regno, expression, offset); ++ continue; ++ ++ case DW_CFA_val_expression: ++ get_uleb128 (regno, program); ++ /* DW_FORM_block is a ULEB128 length followed by that many bytes. */ ++ offset = program - (const uint8_t *) cache->data->d.d_buf; ++ get_uleb128 (operand, program); ++ cfi_assert (operand <= (Dwarf_Word) (end - program)); ++ program += operand; ++ register_rule (regno, val_expression, offset); ++ continue; ++ ++ case DW_CFA_restore_extended: ++ get_uleb128 (operand, program); ++ case DW_CFA_restore + 0 ... DW_CFA_restore + CFI_PRIMARY_MAX: ++ ++ if (unlikely (abi_cfi) && likely (opcode == DW_CFA_restore)) ++ { ++ /* Special case hack to give backend abi_cfi a shorthand. */ ++ cache->default_same_value = true; ++ continue; ++ } ++ ++ /* This can't be used in the CIE's own initial instructions. */ ++ cfi_assert (cie->initial_state != NULL); ++ ++ /* Restore the CIE's initial rule for this register. */ ++ if (unlikely (! enough_registers (operand))) ++ goto out; ++ if (cie->initial_state->nregs > operand) ++ fs->regs[operand] = cie->initial_state->regs[operand]; ++ else ++ fs->regs[operand].rule = reg_unspecified; ++ continue; ++ ++ case DW_CFA_remember_state: ++ { ++ /* Duplicate the state and chain the copy on. */ ++ Dwarf_Frame *copy = duplicate_frame_state (fs, fs); ++ if (unlikely (copy == NULL)) ++ { ++ result = DWARF_E_NOMEM; ++ goto out; ++ } ++ fs = copy; ++ continue; ++ } ++ ++ case DW_CFA_restore_state: ++ { ++ /* Pop the current state off and use the old one instead. */ ++ Dwarf_Frame *prev = fs->prev; ++ cfi_assert (prev != NULL); ++ free (fs); ++ fs = prev; ++ } ++ continue; ++ ++ case DW_CFA_nop: ++ continue; ++ ++ case DW_CFA_GNU_window_save: ++ /* This is magic shorthand used only by SPARC. It's equivalent ++ to a bunch of DW_CFA_register and DW_CFA_offset operations. */ ++ if (unlikely (! enough_registers (31))) ++ goto out; ++ for (regno = 8; regno < 16; ++regno) ++ { ++ /* Find each %oN in %iN. */ ++ fs->regs[regno].rule = reg_register; ++ fs->regs[regno].value = regno + 16; ++ } ++ unsigned int address_size = (cache->e_ident[EI_CLASS] == ELFCLASS32 ++ ? 4 : 8); ++ for (; regno < 32; ++regno) ++ { ++ /* Find %l0..%l7 and %i0..%i7 in a block at the CFA. */ ++ fs->regs[regno].rule = reg_offset; ++ fs->regs[regno].value = (regno - 16) * address_size; ++ } ++ continue; ++ ++ case DW_CFA_GNU_args_size: ++ /* XXX is this useful for anything? */ ++ get_uleb128 (operand, program); ++ continue; ++ ++ default: ++ cfi_assert (false); ++ continue; ++ } ++ ++ /* We get here only for the cases that have just moved LOC. */ ++ if (find_pc >= loc) ++ /* This advance has not yet reached FIND_PC. */ ++ fs->start = loc; ++ else ++ { ++ /* We have just advanced past the address we're looking for. ++ The state currently described is what we want to see. */ ++ fs->end = loc; ++ break; ++ } ++ } ++ ++ /* "The end of the instruction stream can be thought of as a ++ DW_CFA_set_loc (initial_location + address_range) instruction." ++ (DWARF 3.0 Section 6.4.3) ++ ++ When we fall off the end of the program without an advance_loc/set_loc ++ that put us past FIND_PC, the final state left by the FDE program ++ applies to this address (the caller ensured it was inside the FDE). ++ This address (FDE->end) is already in FS->end as set by the caller. */ ++ ++#undef register_rule ++#undef cfi_assert ++ ++ out: ++ ++ /* Pop any remembered states left on the stack. */ ++ while (fs->prev != NULL) ++ { ++ Dwarf_Frame *prev = fs->prev; ++ fs->prev = prev->prev; ++ free (prev); ++ } ++ ++ if (result == DWARF_E_NOERROR) ++ *state = fs; ++ ++ return result; ++} ++ ++static int ++cie_cache_initial_state (Dwarf_CFI *cache, struct dwarf_cie *cie) ++{ ++ int result = DWARF_E_NOERROR; ++ ++ if (likely (cie->initial_state != NULL)) ++ return result; ++ ++ /* This CIE has not been used before. Play out its initial ++ instructions and cache the initial state that results. ++ First we'll let the backend fill in the default initial ++ state for this machine's ABI. */ ++ ++ Dwarf_CIE abi_info = { DW_CIE_ID_64, NULL, NULL, 1, 1, -1, "", NULL, 0, 0 }; ++ ++ /* Make sure we have a backend handle cached. */ ++ if (unlikely (cache->ebl == NULL)) ++ { ++ cache->ebl = ebl_openbackend (cache->data->s->elf); ++ if (unlikely (cache->ebl == NULL)) ++ cache->ebl = (void *) -1l; ++ } ++ ++ /* Fetch the ABI's default CFI program. */ ++ if (likely (cache->ebl != (void *) -1l) ++ && unlikely (ebl_abi_cfi (cache->ebl, &abi_info) < 0)) ++ return DWARF_E_UNKNOWN_ERROR; ++ ++ Dwarf_Frame *cie_fs = calloc (1, sizeof (Dwarf_Frame)); ++ if (unlikely (cie_fs == NULL)) ++ return DWARF_E_NOMEM; ++ ++ /* If the default state of any register is not "undefined" ++ (i.e. call-clobbered), then the backend supplies instructions ++ for the standard initial state. */ ++ if (abi_info.initial_instructions_end > abi_info.initial_instructions) ++ { ++ /* Dummy CIE for backend's instructions. */ ++ struct dwarf_cie abi_cie = ++ { ++ .code_alignment_factor = abi_info.code_alignment_factor, ++ .data_alignment_factor = abi_info.data_alignment_factor, ++ }; ++ result = execute_cfi (cache, &abi_cie, &cie_fs, ++ abi_info.initial_instructions, ++ abi_info.initial_instructions_end, true, ++ 0, (Dwarf_Addr) -1l); ++ } ++ ++ /* Now run the CIE's initial instructions. */ ++ if (cie->initial_instructions_end > cie->initial_instructions ++ && likely (result == DWARF_E_NOERROR)) ++ result = execute_cfi (cache, cie, &cie_fs, ++ cie->initial_instructions, ++ cie->initial_instructions_end, false, ++ 0, (Dwarf_Addr) -1l); ++ ++ if (unlikely (result != DWARF_E_NOERROR)) ++ { ++ free (cie_fs); ++ return result; ++ } ++ ++ /* Now we have the initial state of things that all ++ FDEs using this CIE will start from. */ ++ cie_fs->cache = cache; ++ cie->initial_state = cie_fs; ++ ++ return result; ++} ++ ++int ++internal_function ++__libdw_frame_at_address (Dwarf_CFI *cache, struct dwarf_fde *fde, ++ Dwarf_Addr address, Dwarf_Frame **frame) ++{ ++ int result = cie_cache_initial_state (cache, fde->cie); ++ if (likely (result == DWARF_E_NOERROR)) ++ { ++ Dwarf_Frame *fs = duplicate_frame_state (fde->cie->initial_state, NULL); ++ if (unlikely (fs == NULL)) ++ return DWARF_E_NOMEM; ++ ++ fs->fde = fde; ++ fs->start = fde->start; ++ fs->end = fde->end; ++ ++ result = execute_cfi (cache, fde->cie, &fs, ++ fde->instructions, fde->instructions_end, false, ++ fde->start, address); ++ if (unlikely (result != DWARF_E_NOERROR)) ++ free (fs); ++ else ++ *frame = fs; ++ } ++ return result; ++} +diff --git a/libdw/cfi.h b/libdw/cfi.h +new file mode 100644 +index 0000000..64f3f15 +--- /dev/null ++++ b/libdw/cfi.h +@@ -0,0 +1,250 @@ ++/* Internal definitions for libdw CFI interpreter. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifndef _UNWINDP_H ++#define _UNWINDP_H 1 ++ ++#include "libdwP.h" ++#include "libelfP.h" ++struct ebl; ++ ++#define dwarf_cfi_cie_p(entry) ((entry)->cie.CIE_id == DW_CIE_ID_64) ++ ++/* Cached CIE representation. */ ++struct dwarf_cie ++{ ++ Dwarf_Off offset; /* Our position, as seen in FDEs' CIE_pointer. */ ++ ++ Dwarf_Word code_alignment_factor; ++ Dwarf_Sword data_alignment_factor; ++ Dwarf_Word return_address_register; ++ ++ size_t fde_augmentation_data_size; ++ ++ // play out to initial state ++ const uint8_t *initial_instructions; ++ const uint8_t *initial_instructions_end; ++ ++ const Dwarf_Frame *initial_state; ++ ++ uint8_t fde_encoding; /* DW_EH_PE_* for addresses in FDEs. */ ++ uint8_t lsda_encoding; /* DW_EH_PE_* for LSDA in FDE augmentation. */ ++ ++ bool sized_augmentation_data; /* Saw 'z': FDEs have self-sized data. */ ++ bool signal_frame; /* Saw 'S': FDE is for a signal frame. */ ++}; ++ ++/* Cached FDE representation. */ ++struct dwarf_fde ++{ ++ struct dwarf_cie *cie; ++ ++ /* This FDE describes PC values in [start, end). */ ++ Dwarf_Addr start; ++ Dwarf_Addr end; ++ ++ const uint8_t *instructions; ++ const uint8_t *instructions_end; ++}; ++ ++/* This holds everything we cache about the CFI from each ELF file's ++ .debug_frame or .eh_frame section. */ ++struct Dwarf_CFI_s ++{ ++ /* Dwarf handle we came from. If null, this is .eh_frame data. */ ++ Dwarf *dbg; ++#define CFI_IS_EH(cfi) ((cfi)->dbg == NULL) ++ ++ /* Data of the .debug_frame or .eh_frame section. */ ++ Elf_Data_Scn *data; ++ const unsigned char *e_ident; /* For EI_DATA and EI_CLASS. */ ++ ++ Dwarf_Addr frame_vaddr; /* DW_EH_PE_pcrel, address of frame section. */ ++ Dwarf_Addr textrel; /* DW_EH_PE_textrel base address. */ ++ Dwarf_Addr datarel; /* DW_EH_PE_datarel base address. */ ++ ++ /* Location of next unread entry in the section. */ ++ Dwarf_Off next_offset; ++ ++ /* Search tree for the CIEs, indexed by CIE_pointer (section offset). */ ++ void *cie_tree; ++ ++ /* Search tree for the FDEs, indexed by PC address. */ ++ void *fde_tree; ++ ++ /* Search tree for parsed DWARF expressions, indexed by raw pointer. */ ++ void *expr_tree; ++ ++ /* Backend hook. */ ++ struct ebl *ebl; ++ ++ /* Binary search table in .eh_frame_hdr section. */ ++ const uint8_t *search_table; ++ Dwarf_Addr search_table_vaddr; ++ size_t search_table_entries; ++ uint8_t search_table_encoding; ++ ++ /* True if the file has a byte order different from the host. */ ++ bool other_byte_order; ++ ++ /* Default rule for registers not previously mentioned ++ is same_value, not undefined. */ ++ bool default_same_value; ++}; ++ ++ ++enum dwarf_frame_rule ++ { ++ reg_unspecified, /* Uninitialized state. */ ++ reg_undefined, /* DW_CFA_undefined */ ++ reg_same_value, /* DW_CFA_same_value */ ++ reg_offset, /* DW_CFA_offset_extended et al */ ++ reg_val_offset, /* DW_CFA_val_offset et al */ ++ reg_register, /* DW_CFA_register */ ++ reg_expression, /* DW_CFA_expression */ ++ reg_val_expression, /* DW_CFA_val_expression */ ++ }; ++ ++/* This describes what we know about an individual register. */ ++struct dwarf_frame_register ++{ ++ enum dwarf_frame_rule rule:3; ++ ++ /* The meaning of the value bits depends on the rule: ++ ++ Rule Value ++ ---- ----- ++ undefined unused ++ same_value unused ++ offset(N) N (register saved at CFA + value) ++ val_offset(N) N (register = CFA + value) ++ register(R) R (register = register #value) ++ expression(E) section offset of DW_FORM_block containing E ++ (register saved at address E computes) ++ val_expression(E) section offset of DW_FORM_block containing E ++ (register = value E computes) ++ */ ++ Dwarf_Sword value:(sizeof (Dwarf_Sword) * 8 - 3); ++}; ++ ++/* This holds everything we know about the state of the frame ++ at a particular PC location described by an FDE. */ ++struct Dwarf_Frame_s ++{ ++ /* This frame description covers PC values in [start, end). */ ++ Dwarf_Addr start; ++ Dwarf_Addr end; ++ ++ Dwarf_CFI *cache; ++ ++ /* Previous state saved by DW_CFA_remember_state, or .cie->initial_state, ++ or NULL in an initial_state pseudo-frame. */ ++ Dwarf_Frame *prev; ++ ++ /* The FDE that generated this frame state. This points to its CIE, ++ which has the return_address_register and signal_frame flag. */ ++ struct dwarf_fde *fde; ++ ++ /* The CFA is unknown, is R+N, or is computed by a DWARF expression. */ ++ enum { cfa_undefined, cfa_offset, cfa_expr } cfa_rule; ++ union ++ { ++ Dwarf_Op offset; ++ Dwarf_Block expr; ++ } cfa_data; ++ /* We store an offset rule as a DW_OP_bregx operation. */ ++#define cfa_val_reg cfa_data.offset.number ++#define cfa_val_offset cfa_data.offset.number2 ++ ++ size_t nregs; ++ struct dwarf_frame_register regs[]; ++}; ++ ++ ++/* Clean up the data structure and all it points to. */ ++extern void __libdw_destroy_frame_cache (Dwarf_CFI *cache) ++ __nonnull_attribute__ (1) internal_function; ++ ++/* Enter a CIE encountered while reading through for FDEs. */ ++extern void __libdw_intern_cie (Dwarf_CFI *cache, Dwarf_Off offset, ++ const Dwarf_CIE *info) ++ __nonnull_attribute__ (1, 3) internal_function; ++ ++/* Look up a CIE_pointer for random access. */ ++extern struct dwarf_cie *__libdw_find_cie (Dwarf_CFI *cache, Dwarf_Off offset) ++ __nonnull_attribute__ (1) internal_function; ++ ++ ++/* Look for an FDE covering the given PC address. */ ++extern struct dwarf_fde *__libdw_find_fde (Dwarf_CFI *cache, ++ Dwarf_Addr address) ++ __nonnull_attribute__ (1) internal_function; ++ ++/* Process the FDE that contains the given PC address, ++ to yield the frame state when stopped there. ++ The return value is a DWARF_E_* error code. */ ++extern int __libdw_frame_at_address (Dwarf_CFI *cache, struct dwarf_fde *fde, ++ Dwarf_Addr address, Dwarf_Frame **frame) ++ __nonnull_attribute__ (1, 2, 4) internal_function; ++ ++ ++/* Dummy struct for memory-access.h macros. */ ++#define BYTE_ORDER_DUMMY(var, e_ident) \ ++ const struct { bool other_byte_order; } var = \ ++ { ((BYTE_ORDER == LITTLE_ENDIAN && e_ident[EI_DATA] == ELFDATA2MSB) \ ++ || (BYTE_ORDER == BIG_ENDIAN && e_ident[EI_DATA] == ELFDATA2LSB)) } ++ ++ ++INTDECL (dwarf_next_cfi) ++INTDECL (dwarf_getcfi) ++INTDECL (dwarf_getcfi_elf) ++INTDECL (dwarf_cfi_end) ++INTDECL (dwarf_cfi_addrframe) ++ ++#endif /* unwindP.h */ +diff --git a/libdw/cie.c b/libdw/cie.c +new file mode 100644 +index 0000000..08752a6 +--- /dev/null ++++ b/libdw/cie.c +@@ -0,0 +1,193 @@ ++/* CIE reading. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "cfi.h" ++#include "encoded-value.h" ++#include ++#include ++ ++ ++static int ++compare_cie (const void *a, const void *b) ++{ ++ const struct dwarf_cie *cie1 = a; ++ const struct dwarf_cie *cie2 = b; ++ if (cie1->offset < cie2->offset) ++ return -1; ++ if (cie1->offset > cie2->offset) ++ return 1; ++ return 0; ++} ++ ++/* There is no CIE at OFFSET in the tree. Add it. */ ++static struct dwarf_cie * ++intern_new_cie (Dwarf_CFI *cache, Dwarf_Off offset, const Dwarf_CIE *info) ++{ ++ struct dwarf_cie *cie = malloc (sizeof (struct dwarf_cie)); ++ if (cie == NULL) ++ { ++ __libdw_seterrno (DWARF_E_NOMEM); ++ return NULL; ++ } ++ ++ cie->offset = offset; ++ cie->code_alignment_factor = info->code_alignment_factor; ++ cie->data_alignment_factor = info->data_alignment_factor; ++ cie->return_address_register = info->return_address_register; ++ ++ cie->fde_augmentation_data_size = 0; ++ cie->sized_augmentation_data = false; ++ cie->signal_frame = false; ++ ++ cie->fde_encoding = DW_EH_PE_absptr; ++ cie->lsda_encoding = DW_EH_PE_omit; ++ ++ /* Grok the augmentation string and its data. */ ++ const uint8_t *data = info->augmentation_data; ++ for (const char *ap = info->augmentation; *ap != '\0'; ++ap) ++ { ++ uint8_t encoding; ++ switch (*ap) ++ { ++ case 'z': ++ cie->sized_augmentation_data = true; ++ continue; ++ ++ case 'S': ++ cie->signal_frame = true; ++ continue; ++ ++ case 'L': /* LSDA pointer encoding byte. */ ++ cie->lsda_encoding = *data++; ++ if (!cie->sized_augmentation_data) ++ cie->fde_augmentation_data_size ++ += encoded_value_size (&cache->data->d, cache->e_ident, ++ cie->lsda_encoding, NULL); ++ continue; ++ ++ case 'R': /* FDE address encoding byte. */ ++ cie->fde_encoding = *data++; ++ continue; ++ ++ case 'P': /* Skip personality routine. */ ++ encoding = *data++; ++ data += encoded_value_size (&cache->data->d, cache->e_ident, ++ encoding, data); ++ continue; ++ ++ default: ++ /* Unknown augmentation string. If we have 'z' we can ignore it, ++ otherwise we must bail out. */ ++ if (cie->sized_augmentation_data) ++ continue; ++ } ++ /* We only get here when we need to bail out. */ ++ break; ++ } ++ ++ /* Save the initial instructions to be played out into initial state. */ ++ cie->initial_instructions = info->initial_instructions; ++ cie->initial_instructions_end = info->initial_instructions_end; ++ cie->initial_state = NULL; ++ ++ /* Add the new entry to the search tree. */ ++ if (tsearch (cie, &cache->cie_tree, &compare_cie) == NULL) ++ { ++ free (cie); ++ __libdw_seterrno (DWARF_E_NOMEM); ++ return NULL; ++ } ++ ++ return cie; ++} ++ ++/* Look up a CIE_pointer for random access. */ ++struct dwarf_cie * ++internal_function ++__libdw_find_cie (Dwarf_CFI *cache, Dwarf_Off offset) ++{ ++ const struct dwarf_cie cie_key = { .offset = offset }; ++ struct dwarf_cie **found = tfind (&cie_key, &cache->cie_tree, &compare_cie); ++ if (found != NULL) ++ return *found; ++ ++ /* We have not read this CIE yet. Go find it. */ ++ Dwarf_Off next_offset = offset; ++ Dwarf_CFI_Entry entry; ++ int result = INTUSE(dwarf_next_cfi) (cache->e_ident, ++ &cache->data->d, CFI_IS_EH (cache), ++ offset, &next_offset, &entry); ++ if (result != 0 || entry.cie.CIE_id != DW_CIE_ID_64) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_DWARF); ++ return NULL; ++ } ++ ++ /* If this happened to be what we would have read next, notice it. */ ++ if (cache->next_offset == offset) ++ cache->next_offset = next_offset; ++ ++ return intern_new_cie (cache, offset, &entry.cie); ++} ++ ++/* Enter a CIE encountered while reading through for FDEs. */ ++void ++internal_function ++__libdw_intern_cie (Dwarf_CFI *cache, Dwarf_Off offset, const Dwarf_CIE *info) ++{ ++ const struct dwarf_cie cie_key = { .offset = offset }; ++ struct dwarf_cie **found = tfind (&cie_key, &cache->cie_tree, &compare_cie); ++ if (found == NULL) ++ /* We have not read this CIE yet. Enter it. */ ++ (void) intern_new_cie (cache, offset, info); ++} +diff --git a/libdw/dwarf.h b/libdw/dwarf.h +index f1261c3..aefc1a7 100644 +--- a/libdw/dwarf.h ++++ b/libdw/dwarf.h +@@ -1,5 +1,5 @@ + /* This file defines standard DWARF types, structures, and macros. +- Copyright (C) 2000, 2002, 2005, 2006, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2000-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 +@@ -111,6 +111,8 @@ enum + DW_TAG_mutable_type = 0x3e, + DW_TAG_condition = 0x3f, + DW_TAG_shared_type = 0x40, ++ DW_TAG_type_unit = 0x41, ++ DW_TAG_rvalue_reference_type = 0x42, + DW_TAG_lo_user = 0x4080, + DW_TAG_MIPS_loop = 0x4081, + DW_TAG_format_label = 0x4101, +@@ -220,8 +222,13 @@ enum + DW_AT_elemental = 0x66, + DW_AT_pure = 0x67, + DW_AT_recursive = 0x68, ++ DW_AT_signature = 0x69, ++ DW_AT_main_subprogram = 0x6a, ++ DW_AT_data_bit_offset = 0x6b, ++ DW_AT_const_expr = 0x6c, + + DW_AT_lo_user = 0x2000, ++ + DW_AT_MIPS_fde = 0x2001, + DW_AT_MIPS_loop_begin = 0x2002, + DW_AT_MIPS_tail_loop_begin = 0x2003, +@@ -239,12 +246,25 @@ enum + DW_AT_MIPS_allocatable_dopetype = 0x200f, + DW_AT_MIPS_assumed_shape_dopetype = 0x2010, + DW_AT_MIPS_assumed_size = 0x2011, ++ ++ /* GNU extensions. */ + 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_GNU_vector = 0x2107, ++ DW_AT_GNU_guarded_by = 0x2108, ++ DW_AT_GNU_pt_guarded_by = 0x2109, ++ DW_AT_GNU_guarded = 0x210a, ++ DW_AT_GNU_pt_guarded = 0x210b, ++ DW_AT_GNU_locks_excluded = 0x210c, ++ DW_AT_GNU_exclusive_locks_required = 0x210d, ++ DW_AT_GNU_shared_locks_required = 0x210e, ++ DW_AT_GNU_odr_signature = 0x210f, ++ DW_AT_GNU_template_name = 0x2110, ++ + DW_AT_hi_user = 0x3fff + }; + +@@ -272,7 +292,11 @@ enum + DW_FORM_ref4 = 0x13, + DW_FORM_ref8 = 0x14, + DW_FORM_ref_udata = 0x15, +- DW_FORM_indirect = 0x16 ++ DW_FORM_indirect = 0x16, ++ DW_FORM_sec_offset = 0x17, ++ DW_FORM_exprloc = 0x18, ++ DW_FORM_flag_present = 0x19, ++ DW_FORM_ref_sig8 = 0x20 + }; + + +@@ -431,6 +455,13 @@ enum + 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_implicit_value = 0x9e, /* DW_FORM_block follows opcode. */ ++ DW_OP_stack_value = 0x9f, /* No operands, special like DW_OP_piece. */ ++ ++ /* GNU extensions. */ ++ DW_OP_GNU_push_tls_address = 0xe0, ++ DW_OP_GNU_uninit = 0xf0, ++ DW_OP_GNU_encoded_addr = 0xf1, + + DW_OP_lo_user = 0xe0, /* Implementation-defined range start. */ + DW_OP_hi_user = 0xff /* Implementation-defined range end. */ +@@ -515,25 +546,25 @@ enum + /* 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_C89 = 0x0001, /* ISO C:1989 */ ++ DW_LANG_C = 0x0002, /* C */ ++ DW_LANG_Ada83 = 0x0003, /* ISO Ada:1983 */ ++ DW_LANG_C_plus_plus = 0x0004, /* ISO C++:1998 */ ++ DW_LANG_Cobol74 = 0x0005, /* ISO Cobol:1974 */ ++ DW_LANG_Cobol85 = 0x0006, /* ISO Cobol:1985 */ ++ DW_LANG_Fortran77 = 0x0007, /* ISO FORTRAN 77 */ ++ DW_LANG_Fortran90 = 0x0008, /* ISO Fortran 90 */ ++ DW_LANG_Pascal83 = 0x0009, /* ISO Pascal:1983 */ ++ DW_LANG_Modula2 = 0x000a, /* ISO Modula-2:1996 */ ++ DW_LANG_Java = 0x000b, /* Java */ ++ DW_LANG_C99 = 0x000c, /* ISO C:1999 */ ++ DW_LANG_Ada95 = 0x000d, /* ISO Ada:1995 */ ++ DW_LANG_Fortran95 = 0x000e, /* ISO Fortran 95 */ ++ DW_LANG_PL1 = 0x000f, /* ISO PL/1:1976 */ ++ DW_LANG_Objc = 0x0010, /* Objective-C */ ++ DW_LANG_ObjC_plus_plus = 0x0011, /* Objective-C++ */ ++ DW_LANG_UPC = 0x0012, /* Unified Parallel C */ ++ DW_LANG_D = 0x0013, /* D */ + + DW_LANG_lo_user = 0x8000, + DW_LANG_Mips_Assembler = 0x8001, +@@ -665,9 +696,45 @@ enum + DW_CFA_MIPS_advance_loc8 = 0x1d, + DW_CFA_GNU_window_save = 0x2d, + DW_CFA_GNU_args_size = 0x2e, ++ DW_CFA_GNU_negative_offset_extended = 0x2f, + DW_CFA_high_user = 0x3f + }; + ++/* ID indicating CIE as opposed to FDE in .debug_frame. */ ++enum ++ { ++ DW_CIE_ID_32 = 0xffffffffU, /* In 32-bit format CIE header. */ ++ DW_CIE_ID_64 = 0xffffffffffffffffULL /* In 64-bit format CIE header. */ ++ }; ++ ++ ++/* Information for GNU unwind information. */ ++enum ++ { ++ DW_EH_PE_absptr = 0x00, ++ DW_EH_PE_omit = 0xff, ++ ++ /* FDE data encoding. */ ++ DW_EH_PE_uleb128 = 0x01, ++ DW_EH_PE_udata2 = 0x02, ++ DW_EH_PE_udata4 = 0x03, ++ DW_EH_PE_udata8 = 0x04, ++ DW_EH_PE_sleb128 = 0x09, ++ DW_EH_PE_sdata2 = 0x0a, ++ DW_EH_PE_sdata4 = 0x0b, ++ DW_EH_PE_sdata8 = 0x0c, ++ DW_EH_PE_signed = 0x08, ++ ++ /* FDE flags. */ ++ DW_EH_PE_pcrel = 0x10, ++ DW_EH_PE_textrel = 0x20, ++ DW_EH_PE_datarel = 0x30, ++ DW_EH_PE_funcrel = 0x40, ++ DW_EH_PE_aligned = 0x50, ++ ++ DW_EH_PE_indirect = 0x80 ++ }; ++ + + /* DWARF XXX. */ + #define DW_ADDR_none 0 +diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c +new file mode 100644 +index 0000000..e742014 +--- /dev/null ++++ b/libdw/dwarf_aggregate_size.c +@@ -0,0 +1,243 @@ ++/* Compute size of an aggregate type from DWARF. ++ Copyright (C) 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 ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ In addition, as a special exception, Red Hat, Inc. gives You the ++ additional right to link the code of Red Hat elfutils with code licensed ++ under any Open Source Initiative certified open source license ++ (http://www.opensource.org/licenses/index.php) which requires the ++ distribution of source code with any binary distribution and to ++ distribute linked combinations of the two. Non-GPL Code permitted under ++ this exception must only link to the code of Red Hat elfutils through ++ those well defined interfaces identified in the file named EXCEPTION ++ found in the source code files (the "Approved Interfaces"). The files ++ of Non-GPL Code may instantiate templates or use macros or inline ++ functions from the Approved Interfaces without causing the resulting ++ work to be covered by the GNU General Public License. Only Red Hat, ++ Inc. may make changes or additions to the list of Approved Interfaces. ++ Red Hat's grant of this exception is conditioned upon your not adding ++ any new exceptions. If you wish to add a new Approved Interface or ++ exception, please contact Red Hat. You must obey the GNU General Public ++ License in all respects for all of the Red Hat elfutils code and other ++ code used in conjunction with Red Hat elfutils except the Non-GPL Code ++ covered by this exception. If you modify this file, you may extend this ++ exception to your version of the file, but you are not obligated to do ++ so. If you do not wish to provide this exception without modification, ++ you must delete this exception statement from your version and license ++ this file solely under the GPL without exception. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include "libdwP.h" ++ ++ ++static Dwarf_Die * ++get_type (Dwarf_Die *die, Dwarf_Attribute *attr_mem, Dwarf_Die *type_mem) ++{ ++ return INTUSE(dwarf_formref_die) ++ (INTUSE(dwarf_attr_integrate) (die, DW_AT_type, attr_mem), type_mem); ++} ++ ++static int ++array_size (Dwarf_Die *die, Dwarf_Word *size, ++ Dwarf_Attribute *attr_mem, Dwarf_Die *type_mem) ++{ ++ Dwarf_Word eltsize; ++ if (INTUSE(dwarf_aggregate_size) (get_type (die, attr_mem, type_mem), ++ &eltsize) != 0) ++ return -1; ++ ++ /* An array can have DW_TAG_subrange_type or DW_TAG_enumeration_type ++ children instead that give the size of each dimension. */ ++ ++ Dwarf_Die child; ++ if (INTUSE(dwarf_child) (die, &child) != 0) ++ return -1; ++ ++ bool any = false; ++ Dwarf_Word total = 0; ++ do ++ { ++ Dwarf_Word count; ++ switch (INTUSE(dwarf_tag) (&child)) ++ { ++ case DW_TAG_subrange_type: ++ /* This has either DW_AT_count or DW_AT_upper_bound. */ ++ if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_count, ++ attr_mem) != NULL) ++ { ++ if (INTUSE(dwarf_formudata) (attr_mem, &count) != 0) ++ return -1; ++ } ++ else ++ { ++ Dwarf_Sword upper; ++ Dwarf_Sword lower; ++ if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) ++ (&child, DW_AT_upper_bound, ++ attr_mem), &upper) != 0) ++ return -1; ++ ++ /* Having DW_AT_lower_bound is optional. */ ++ if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_lower_bound, ++ attr_mem) != NULL) ++ { ++ if (INTUSE(dwarf_formsdata) (attr_mem, &lower) != 0) ++ return -1; ++ } ++ else ++ { ++ /* Determine default lower bound from language, ++ as per "4.12 Subrange Type Entries". */ ++ Dwarf_Die cu = CUDIE (die->cu); ++ switch (INTUSE(dwarf_srclang) (&cu)) ++ { ++ case DW_LANG_C: ++ case DW_LANG_C89: ++ case DW_LANG_C99: ++ case DW_LANG_C_plus_plus: ++ case DW_LANG_Objc: ++ case DW_LANG_ObjC_plus_plus: ++ case DW_LANG_Java: ++ case DW_LANG_D: ++ case DW_LANG_UPC: ++ lower = 0; ++ break; ++ ++ case DW_LANG_Ada83: ++ case DW_LANG_Ada95: ++ case DW_LANG_Cobol74: ++ case DW_LANG_Cobol85: ++ case DW_LANG_Fortran77: ++ case DW_LANG_Fortran90: ++ case DW_LANG_Fortran95: ++ case DW_LANG_Pascal83: ++ case DW_LANG_Modula2: ++ case DW_LANG_PL1: ++ lower = 1; ++ break; ++ ++ default: ++ return -1; ++ } ++ } ++ if (unlikely (lower > upper)) ++ return -1; ++ count = upper - lower + 1; ++ } ++ break; ++ ++ case DW_TAG_enumeration_type: ++ /* We have to find the DW_TAG_enumerator child with the ++ highest value to know the array's element count. */ ++ count = 0; ++ Dwarf_Die enum_child; ++ int has_children = INTUSE(dwarf_child) (die, &enum_child); ++ if (has_children < 0) ++ return -1; ++ if (has_children > 0) ++ do ++ if (INTUSE(dwarf_tag) (&enum_child) == DW_TAG_enumerator) ++ { ++ Dwarf_Word value; ++ if (INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) ++ (&enum_child, DW_AT_const_value, ++ attr_mem), &value) != 0) ++ return -1; ++ if (value >= count) ++ count = value + 1; ++ } ++ while (INTUSE(dwarf_siblingof) (&enum_child, &enum_child) > 0); ++ break; ++ ++ default: ++ continue; ++ } ++ ++ /* This is a subrange_type or enumeration_type and we've set COUNT. ++ Now determine the stride for this array dimension. */ ++ Dwarf_Word stride = eltsize; ++ if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_byte_stride, ++ attr_mem) != NULL) ++ { ++ if (INTUSE(dwarf_formudata) (attr_mem, &stride) != 0) ++ return -1; ++ } ++ else if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_bit_stride, ++ attr_mem) != NULL) ++ { ++ if (INTUSE(dwarf_formudata) (attr_mem, &stride) != 0) ++ return -1; ++ if (stride % 8) /* XXX maybe compute in bits? */ ++ return -1; ++ stride /= 8; ++ } ++ ++ any = true; ++ total += stride * count; ++ } ++ while (INTUSE(dwarf_siblingof) (&child, &child) == 0); ++ ++ if (!any) ++ return -1; ++ ++ *size = total; ++ return 0; ++} ++ ++static int ++aggregate_size (Dwarf_Die *die, Dwarf_Word *size, Dwarf_Die *type_mem) ++{ ++ Dwarf_Attribute attr_mem; ++ ++ if (INTUSE(dwarf_attr_integrate) (die, DW_AT_byte_size, &attr_mem) != NULL) ++ return INTUSE(dwarf_formudata) (&attr_mem, size); ++ ++ switch (INTUSE(dwarf_tag) (die)) ++ { ++ case DW_TAG_typedef: ++ case DW_TAG_subrange_type: ++ return aggregate_size (get_type (die, &attr_mem, type_mem), ++ size, type_mem); /* Tail call. */ ++ ++ case DW_TAG_array_type: ++ return array_size (die, size, &attr_mem, type_mem); ++ } ++ ++ /* Most types must give their size directly. */ ++ return -1; ++} ++ ++int ++dwarf_aggregate_size (die, size) ++ Dwarf_Die *die; ++ Dwarf_Word *size; ++{ ++ Dwarf_Die type_mem; ++ return aggregate_size (die, size, &type_mem); ++} ++INTDEF (dwarf_aggregate_size) +diff --git a/libdw/dwarf_arrayorder.c b/libdw/dwarf_arrayorder.c +index 6d5a42d..4929fb3 100644 +--- a/libdw/dwarf_arrayorder.c ++++ b/libdw/dwarf_arrayorder.c +@@ -1,5 +1,5 @@ + /* Return array order attribute of DIE. +- Copyright (C) 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2003, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2003. + +@@ -63,7 +63,9 @@ dwarf_arrayorder (die) + Dwarf_Attribute attr_mem; + Dwarf_Word value; + +- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_ordering, +- &attr_mem), ++ return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) ++ (die, DW_AT_ordering, &attr_mem), + &value) == 0 ? (int) value : -1; + } ++OLD_VERSION (dwarf_arrayorder, ELFUTILS_0.122) ++NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143) +diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c +index aaac399..391a8b8 100644 +--- a/libdw/dwarf_begin_elf.c ++++ b/libdw/dwarf_begin_elf.c +@@ -1,5 +1,5 @@ + /* Create descriptor from ELF descriptor for processing file. +- Copyright (C) 2002, 2003, 2004, 2005, 2007 Red Hat, Inc. ++ Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -70,7 +70,6 @@ static const char dwarf_scnnames[IDX_last][17] = + [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", +diff --git a/libdw/dwarf_bitoffset.c b/libdw/dwarf_bitoffset.c +index 235b7ee..3ab1468 100644 +--- a/libdw/dwarf_bitoffset.c ++++ b/libdw/dwarf_bitoffset.c +@@ -1,5 +1,5 @@ + /* Return bit offset attribute of DIE. +- Copyright (C) 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2003, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2003. + +@@ -63,7 +63,9 @@ dwarf_bitoffset (die) + Dwarf_Attribute attr_mem; + Dwarf_Word value; + +- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_bit_offset, +- &attr_mem), ++ return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) ++ (die, DW_AT_bit_offset, &attr_mem), + &value) == 0 ? (int) value : -1; + } ++OLD_VERSION (dwarf_bitoffset, ELFUTILS_0.122) ++NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143) +diff --git a/libdw/dwarf_bitsize.c b/libdw/dwarf_bitsize.c +index 57d7fba..67d97dc 100644 +--- a/libdw/dwarf_bitsize.c ++++ b/libdw/dwarf_bitsize.c +@@ -1,5 +1,5 @@ + /* Return bit size attribute of DIE. +- Copyright (C) 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2003, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2003. + +@@ -63,7 +63,9 @@ dwarf_bitsize (die) + Dwarf_Attribute attr_mem; + Dwarf_Word value; + +- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_bit_size, +- &attr_mem), ++ return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) ++ (die, DW_AT_bit_size, &attr_mem), + &value) == 0 ? (int) value : -1; + } ++OLD_VERSION (dwarf_bitsize, ELFUTILS_0.122) ++NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143) +diff --git a/libdw/dwarf_bytesize.c b/libdw/dwarf_bytesize.c +index 635a3c1..2f2e198 100644 +--- a/libdw/dwarf_bytesize.c ++++ b/libdw/dwarf_bytesize.c +@@ -1,5 +1,5 @@ + /* Return byte size attribute of DIE. +- Copyright (C) 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2003, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2003. + +@@ -63,7 +63,9 @@ dwarf_bytesize (die) + Dwarf_Attribute attr_mem; + Dwarf_Word value; + +- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_byte_size, +- &attr_mem), ++ return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) ++ (die, DW_AT_byte_size, &attr_mem), + &value) == 0 ? (int) value : -1; + } ++OLD_VERSION (dwarf_bytesize, ELFUTILS_0.122) ++NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143) +diff --git a/libdw/dwarf_cfi_addrframe.c b/libdw/dwarf_cfi_addrframe.c +new file mode 100644 +index 0000000..79d0e12 +--- /dev/null ++++ b/libdw/dwarf_cfi_addrframe.c +@@ -0,0 +1,78 @@ ++/* Compute frame state at PC. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "cfi.h" ++ ++int ++dwarf_cfi_addrframe (cache, address, frame) ++ Dwarf_CFI *cache; ++ Dwarf_Addr address; ++ Dwarf_Frame **frame; ++{ ++ /* Maybe there was a previous error. */ ++ if (cache == NULL) ++ return -1; ++ ++ struct dwarf_fde *fde = __libdw_find_fde (cache, address); ++ if (fde == NULL) ++ return -1; ++ ++ int error = __libdw_frame_at_address (cache, fde, address, frame); ++ if (error != DWARF_E_NOERROR) ++ { ++ __libdw_seterrno (error); ++ return -1; ++ } ++ return 0; ++} ++INTDEF (dwarf_cfi_addrframe) +diff --git a/libdw/dwarf_cfi_end.c b/libdw/dwarf_cfi_end.c +new file mode 100644 +index 0000000..5591e2a +--- /dev/null ++++ b/libdw/dwarf_cfi_end.c +@@ -0,0 +1,70 @@ ++/* Clean up Dwarf_CFI structure. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "libdwP.h" ++#include "cfi.h" ++#include ++ ++int ++dwarf_cfi_end (cache) ++ Dwarf_CFI *cache; ++{ ++ if (cache != NULL) ++ { ++ __libdw_destroy_frame_cache (cache); ++ free (cache); ++ } ++ ++ return 0; ++} ++INTDEF (dwarf_cfi_end) +diff --git a/libdw/dwarf_decl_column.c b/libdw/dwarf_decl_column.c +index 5e0f3e0..11ba5d7 100644 +--- a/libdw/dwarf_decl_column.c ++++ b/libdw/dwarf_decl_column.c +@@ -1,5 +1,5 @@ + /* Get column number of beginning of given declaration. +- Copyright (C) 2005 Red Hat, Inc. ++ Copyright (C) 2005-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -61,3 +61,5 @@ dwarf_decl_column (Dwarf_Die *decl, int *colp) + { + return __libdw_attr_intval (decl, colp, DW_AT_decl_column); + } ++OLD_VERSION (dwarf_decl_column, ELFUTILS_0.122) ++NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143) +diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c +index b1d62df..c81e35b 100644 +--- a/libdw/dwarf_decl_file.c ++++ b/libdw/dwarf_decl_file.c +@@ -1,5 +1,5 @@ + /* Return file name containing definition of the given function. +- Copyright (C) 2005 Red Hat, Inc. ++ Copyright (C) 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -63,8 +63,9 @@ 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) ++ if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) ++ (die, DW_AT_decl_file, &attr_mem), ++ &idx) != 0) + return NULL; + + /* Zero means no source file information available. */ +@@ -105,3 +106,5 @@ dwarf_decl_file (Dwarf_Die *die) + + return cu->files->info[idx].name; + } ++OLD_VERSION (dwarf_decl_file, ELFUTILS_0.122) ++NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143) +diff --git a/libdw/dwarf_decl_line.c b/libdw/dwarf_decl_line.c +index b4e3c42..ab64e51 100644 +--- a/libdw/dwarf_decl_line.c ++++ b/libdw/dwarf_decl_line.c +@@ -1,5 +1,5 @@ + /* Get line number of beginning of given function. +- Copyright (C) 2005 Red Hat, Inc. ++ Copyright (C) 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -63,6 +63,8 @@ dwarf_decl_line (Dwarf_Die *func, int *linep) + { + return __libdw_attr_intval (func, linep, DW_AT_decl_line); + } ++OLD_VERSION (dwarf_decl_line, ELFUTILS_0.122) ++NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143) + + + int internal_function +@@ -71,8 +73,9 @@ __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); ++ int res = INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) ++ (die, attval, &attr_mem), ++ &line); + if (res == 0) + { + assert (line >= 0 && line <= INT_MAX); +diff --git a/libdw/dwarf_end.c b/libdw/dwarf_end.c +index 60c9716..fda37fc 100644 +--- a/libdw/dwarf_end.c ++++ b/libdw/dwarf_end.c +@@ -1,5 +1,5 @@ + /* Release debugging handling context. +- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc. ++ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -56,7 +56,7 @@ + #include + + #include "libdwP.h" +- ++#include "cfi.h" + + + static void +@@ -82,6 +82,10 @@ dwarf_end (dwarf) + { + if (dwarf != NULL) + { ++ if (dwarf->cfi != NULL) ++ /* Clean up the CFI cache. */ ++ __libdw_destroy_frame_cache (dwarf->cfi); ++ + /* The search tree for the CUs. NB: the CU data itself is + allocated separately, but the abbreviation hash tables need + to be handled. */ +diff --git a/libdw/dwarf_entry_breakpoints.c b/libdw/dwarf_entry_breakpoints.c +index 578464f..1e5c1b8 100644 +--- a/libdw/dwarf_entry_breakpoints.c ++++ b/libdw/dwarf_entry_breakpoints.c +@@ -1,5 +1,5 @@ + /* Find entry breakpoint locations for a function. +- Copyright (C) 2005, 2008 Red Hat, Inc. ++ Copyright (C) 2005-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -93,7 +93,7 @@ dwarf_entry_breakpoints (die, bkpts) + if (INTUSE(dwarf_getsrclines) (&cudie, &lines, &nlines) < 0) + { + int error = INTUSE (dwarf_errno) (); +- if (error == DWARF_E_NO_DEBUG_LINE) ++ if (error == 0) /* CU has no DW_AT_stmt_list. */ + return entrypc_bkpt (); + __libdw_seterrno (error); + return -1; +diff --git a/libdw/dwarf_error.c b/libdw/dwarf_error.c +index fe91664..0d95b8d 100644 +--- a/libdw/dwarf_error.c ++++ b/libdw/dwarf_error.c +@@ -1,5 +1,5 @@ + /* Retrieve ELF descriptor used for DWARF access. +- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc. ++ Copyright (C) 2002, 2003, 2004, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -58,46 +58,14 @@ + #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; ++ int result = global_error; + global_error = DWARF_E_NOERROR; + return result; + } +@@ -143,6 +111,7 @@ static const char *errmsgs[] = + [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"), ++ [DWARF_E_INVALID_CFI] = N_("invalid CFI section"), + }; + #define nerrmsgs (sizeof (errmsgs) / sizeof (errmsgs[0])) + +@@ -151,16 +120,6 @@ 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); + } +@@ -170,19 +129,7 @@ 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; ++ int last_error = global_error; + + if (error == 0) + return last_error != 0 ? _(errmsgs[last_error]) : NULL; +@@ -192,26 +139,3 @@ dwarf_errmsg (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_formaddr.c b/libdw/dwarf_formaddr.c +index dcb58d4..9938be7 100644 +--- a/libdw/dwarf_formaddr.c ++++ b/libdw/dwarf_formaddr.c +@@ -70,10 +70,10 @@ dwarf_formaddr (attr, return_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); ++ if (__libdw_read_address (attr->cu->dbg, ++ IDX_debug_info, attr->valp, ++ attr->cu->address_size, return_addr)) ++ return -1; + + return 0; + } +diff --git a/libdw/dwarf_formflag.c b/libdw/dwarf_formflag.c +index 4e57c3a..fb60c8e 100644 +--- a/libdw/dwarf_formflag.c ++++ b/libdw/dwarf_formflag.c +@@ -1,5 +1,5 @@ + /* Return flag represented by attribute. +- Copyright (C) 2004 Red Hat, Inc. ++ Copyright (C) 2004-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2004. + +@@ -64,6 +64,12 @@ dwarf_formflag (attr, return_bool) + if (attr == NULL) + return -1; + ++ if (attr->form == DW_FORM_flag_present) ++ { ++ *return_bool = true; ++ return 0; ++ } ++ + if (unlikely (attr->form != DW_FORM_flag)) + { + __libdw_seterrno (DWARF_E_NO_FLAG); +diff --git a/libdw/dwarf_formref_die.c b/libdw/dwarf_formref_die.c +index 90a4b2d..a004a0f 100644 +--- a/libdw/dwarf_formref_die.c ++++ b/libdw/dwarf_formref_die.c +@@ -72,10 +72,9 @@ dwarf_formref_die (attr, die_mem) + ? 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); ++ if (__libdw_read_offset (attr->cu->dbg, IDX_debug_info, attr->valp, ++ ref_size, &offset, IDX_debug_info, 0)) ++ return NULL; + } + else + { +diff --git a/libdw/dwarf_formstring.c b/libdw/dwarf_formstring.c +index 790831e..f95d31b 100644 +--- a/libdw/dwarf_formstring.c ++++ b/libdw/dwarf_formstring.c +@@ -74,20 +74,14 @@ dwarf_formstring (attrp) + 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; ++ if (__libdw_read_offset (dbg, IDX_debug_info, attrp->valp, ++ attrp->cu->offset_size, &off, IDX_debug_str, 1)) ++ return NULL; + + return (const char *) dbg->sectiondata[IDX_debug_str]->d_buf + off; + } +diff --git a/libdw/dwarf_formudata.c b/libdw/dwarf_formudata.c +index b5c40bb..d9d0a1c 100644 +--- a/libdw/dwarf_formudata.c ++++ b/libdw/dwarf_formudata.c +@@ -1,5 +1,5 @@ + /* Return unsigned constant represented by attribute. +- Copyright (C) 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2003-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2003. + +@@ -55,6 +55,61 @@ + #include + #include "libdwP.h" + ++internal_function unsigned char * ++__libdw_formptr (Dwarf_Attribute *attr, int sec_index, ++ int err_nodata, unsigned char **endpp, ++ Dwarf_Off *offsetp) ++{ ++ if (attr == NULL) ++ return NULL; ++ ++ const Elf_Data *d = attr->cu->dbg->sectiondata[sec_index]; ++ if (unlikely (d == NULL)) ++ { ++ __libdw_seterrno (err_nodata); ++ return NULL; ++ } ++ ++ Dwarf_Word offset; ++ if (attr->form == DW_FORM_sec_offset) ++ { ++ if (__libdw_read_offset (attr->cu->dbg, IDX_debug_info, attr->valp, ++ attr->cu->offset_size, &offset, sec_index, 0)) ++ return NULL; ++ } ++ else if (attr->cu->version > 3) ++ goto invalid; ++ ++ switch (attr->form) ++ { ++ case DW_FORM_data4: ++ case DW_FORM_data8: ++ if (__libdw_read_offset (attr->cu->dbg, IDX_debug_info, attr->valp, ++ attr->form == DW_FORM_data4 ? 4 : 8, ++ &offset, sec_index, 0)) ++ return NULL; ++ break; ++ ++ default: ++ if (INTUSE(dwarf_formudata) (attr, &offset)) ++ return NULL; ++ }; ++ ++ unsigned char *readp = d->d_buf + offset; ++ unsigned char *endp = d->d_buf + d->d_size; ++ if (unlikely (readp >= endp)) ++ { ++ invalid: ++ __libdw_seterrno (DWARF_E_INVALID_DWARF); ++ return NULL; ++ } ++ ++ if (endpp != NULL) ++ *endpp = endp; ++ if (offsetp != NULL) ++ *offsetp = offset; ++ return readp; ++} + + int + dwarf_formudata (attr, return_uval) +@@ -77,11 +132,11 @@ dwarf_formudata (attr, return_uval) + 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); ++ if (__libdw_read_address (attr->cu->dbg, IDX_debug_info, attr->valp, ++ attr->form == DW_FORM_data4 ? 4 : 8, ++ return_uval)) ++ return -1; + break; + + case DW_FORM_sdata: +diff --git a/libdw/dwarf_frame_cfa.c b/libdw/dwarf_frame_cfa.c +new file mode 100644 +index 0000000..d1c5710 +--- /dev/null ++++ b/libdw/dwarf_frame_cfa.c +@@ -0,0 +1,96 @@ ++/* Get CFA expression for frame. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "cfi.h" ++#include ++#include ++ ++int ++dwarf_frame_cfa (fs, ops, nops) ++ Dwarf_Frame *fs; ++ Dwarf_Op **ops; ++ size_t *nops; ++{ ++ /* Maybe there was a previous error. */ ++ if (fs == NULL) ++ return -1; ++ ++ int result = 0; ++ switch (fs->cfa_rule) ++ { ++ case cfa_undefined: ++ *ops = NULL; ++ *nops = 0; ++ break; ++ ++ case cfa_offset: ++ /* The Dwarf_Op was already fully initialized by execute_cfi. */ ++ *ops = &fs->cfa_data.offset; ++ *nops = 1; ++ break; ++ ++ case cfa_expr: ++ /* Parse the expression into internal form. */ ++ result = __libdw_intern_expression ++ (NULL, fs->cache->other_byte_order, ++ fs->cache->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8, ++ &fs->cache->expr_tree, &fs->cfa_data.expr, false, ++ ops, nops, IDX_debug_frame); ++ break; ++ ++ default: ++ abort (); ++ } ++ ++ return result; ++} +diff --git a/libdw/dwarf_frame_info.c b/libdw/dwarf_frame_info.c +new file mode 100644 +index 0000000..4bdd806 +--- /dev/null ++++ b/libdw/dwarf_frame_info.c +@@ -0,0 +1,74 @@ ++/* Get return address register for frame. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "cfi.h" ++ ++int ++dwarf_frame_info (fs, start, end, signalp) ++ Dwarf_Frame *fs; ++ Dwarf_Addr *start; ++ Dwarf_Addr *end; ++ bool *signalp; ++{ ++ /* Maybe there was a previous error. */ ++ if (fs == NULL) ++ return -1; ++ ++ if (start != NULL) ++ *start = fs->start; ++ if (end != NULL) ++ *end = fs->end; ++ if (signalp != NULL) ++ *signalp = fs->fde->cie->signal_frame; ++ return fs->fde->cie->return_address_register; ++} +diff --git a/libdw/dwarf_frame_register.c b/libdw/dwarf_frame_register.c +new file mode 100644 +index 0000000..3d232e9 +--- /dev/null ++++ b/libdw/dwarf_frame_register.c +@@ -0,0 +1,142 @@ ++/* Get register location expression for frame. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "cfi.h" ++#include ++ ++int ++dwarf_frame_register (fs, regno, ops_mem, ops, nops) ++ Dwarf_Frame *fs; ++ int regno; ++ Dwarf_Op ops_mem[3]; ++ Dwarf_Op **ops; ++ size_t *nops; ++{ ++ /* Maybe there was a previous error. */ ++ if (fs == NULL) ++ return -1; ++ ++ if (unlikely (regno < 0)) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_ACCESS); ++ return -1; ++ } ++ ++ *ops = ops_mem; ++ *nops = 0; ++ ++ if (unlikely ((size_t) regno >= fs->nregs)) ++ goto default_rule; ++ ++ const struct dwarf_frame_register *reg = &fs->regs[regno]; ++ ++ switch (reg->rule) ++ { ++ case reg_unspecified: ++ default_rule: ++ /* Use the default rule for registers not yet mentioned in CFI. */ ++ if (fs->cache->default_same_value) ++ goto same_value; ++ /*FALLTHROUGH*/ ++ case reg_undefined: ++ /* The value is known to be unavailable. */ ++ break; ++ ++ case reg_same_value: ++ same_value: ++ /* The location is not known here, but the caller might know it. */ ++ *ops = NULL; ++ break; ++ ++ case reg_offset: ++ case reg_val_offset: ++ ops_mem[(*nops)++] = (Dwarf_Op) { .atom = DW_OP_call_frame_cfa }; ++ if (reg->value != 0) ++ ops_mem[(*nops)++] = (Dwarf_Op) { .atom = DW_OP_plus_uconst, ++ .number = reg->value }; ++ if (reg->rule == reg_val_offset) ++ /* A value, not a location. */ ++ ops_mem[(*nops)++] = (Dwarf_Op) { .atom = DW_OP_stack_value }; ++ *ops = ops_mem; ++ break; ++ ++ case reg_register: ++ ops_mem[(*nops)++] = (Dwarf_Op) { .atom = DW_OP_regx, ++ .number = reg->value }; ++ break; ++ ++ case reg_val_expression: ++ case reg_expression: ++ { ++ unsigned int address_size = (fs->cache->e_ident[EI_CLASS] == ELFCLASS32 ++ ? 4 : 8); ++ ++ Dwarf_Block block; ++ const uint8_t *p = fs->cache->data->d.d_buf + reg->value; ++ get_uleb128 (block.length, p); ++ block.data = (void *) p; ++ ++ /* Parse the expression into internal form. */ ++ if (__libdw_intern_expression (NULL, ++ fs->cache->other_byte_order, ++ address_size, ++ &fs->cache->expr_tree, &block, ++ reg->rule == reg_val_expression, ++ ops, nops, IDX_debug_frame) < 0) ++ return -1; ++ break; ++ } ++ } ++ ++ return 0; ++} +diff --git a/libdw/dwarf_getaranges.c b/libdw/dwarf_getaranges.c +index 96e9962..72334f5 100644 +--- a/libdw/dwarf_getaranges.c ++++ b/libdw/dwarf_getaranges.c +@@ -1,5 +1,5 @@ + /* Return list address ranges. +- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2008 Red Hat, Inc. ++ Copyright (C) 2000-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -104,13 +104,13 @@ dwarf_getaranges (dbg, aranges, naranges) + 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; ++ const unsigned char *readp = dbg->sectiondata[IDX_debug_aranges]->d_buf; ++ const unsigned char *readendp ++ = readp + dbg->sectiondata[IDX_debug_aranges]->d_size; + + while (readp < readendp) + { +- const char *hdrstart = readp; ++ const unsigned char *hdrstart = readp; + + /* Each entry starts with a header: + +@@ -149,14 +149,10 @@ dwarf_getaranges (dbg, aranges, naranges) + } + + 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; ++ if (__libdw_read_offset_inc (dbg, ++ IDX_debug_aranges, &readp, ++ length_bytes, &offset, IDX_debug_info, 4)) ++ return -1; + + unsigned int address_size = *readp++; + if (address_size != 4 && address_size != 8) +@@ -175,16 +171,14 @@ dwarf_getaranges (dbg, aranges, naranges) + Dwarf_Word range_address; + Dwarf_Word range_length; + ++ if (__libdw_read_address_inc (dbg, IDX_debug_aranges, &readp, ++ address_size, &range_address)) ++ return -1; ++ + if (address_size == 4) +- { +- range_address = read_4ubyte_unaligned_inc (dbg, readp); +- range_length = 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); +- } ++ range_length = read_8ubyte_unaligned_inc (dbg, readp); + + /* Two zero values mark the end. */ + if (range_address == 0 && range_length == 0) +diff --git a/libdw/dwarf_getattrs.c b/libdw/dwarf_getattrs.c +index 42f25ca..051dc25 100644 +--- a/libdw/dwarf_getattrs.c ++++ b/libdw/dwarf_getattrs.c +@@ -1,5 +1,5 @@ + /* Get attributes of the DIE. +- Copyright (C) 2004, 2005, 2008 Red Hat, Inc. ++ Copyright (C) 2004, 2005, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2004. + +@@ -62,6 +62,9 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), + if (die == NULL) + return -1l; + ++ if (unlikely (offset == 1)) ++ return 1; ++ + const unsigned char *die_addr = die->addr; + + /* Get the abbreviation code. */ +@@ -80,7 +83,8 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), + } + + /* This is where the attributes start. */ +- const unsigned char *attrp = die->abbrev->attrp + offset; ++ const unsigned char *attrp = die->abbrev->attrp; ++ const unsigned char *const offset_attrp = die->abbrev->attrp + offset; + + /* Go over the list of attributes. */ + Dwarf *dbg = die->cu->dbg; +@@ -108,16 +112,21 @@ dwarf_getattrs (Dwarf_Die *die, int (*callback) (Dwarf_Attribute *, void *), + 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; ++ /* If we are not to OFFSET_ATTRP yet, we just have to skip ++ the values of the intervening attributes. */ ++ if (remembered_attrp >= offset_attrp) ++ { ++ /* 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) +diff --git a/libdw/dwarf_getcfi.c b/libdw/dwarf_getcfi.c +new file mode 100644 +index 0000000..c935631 +--- /dev/null ++++ b/libdw/dwarf_getcfi.c +@@ -0,0 +1,94 @@ ++/* Get CFI from DWARF file. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "libdwP.h" ++#include "cfi.h" ++#include ++ ++Dwarf_CFI * ++dwarf_getcfi (dbg) ++ Dwarf *dbg; ++{ ++ if (dbg == NULL) ++ return NULL; ++ ++ if (dbg->cfi == NULL && dbg->sectiondata[IDX_debug_frame] != NULL) ++ { ++ Dwarf_CFI *cfi = libdw_typed_alloc (dbg, Dwarf_CFI); ++ ++ cfi->dbg = dbg; ++ cfi->data = (Elf_Data_Scn *) dbg->sectiondata[IDX_debug_frame]; ++ ++ cfi->search_table = NULL; ++ cfi->search_table_vaddr = 0; ++ cfi->search_table_entries = 0; ++ cfi->search_table_encoding = DW_EH_PE_omit; ++ ++ cfi->frame_vaddr = 0; ++ cfi->textrel = 0; ++ cfi->datarel = 0; ++ ++ cfi->e_ident = (unsigned char *) elf_getident (dbg->elf, NULL); ++ cfi->other_byte_order = dbg->other_byte_order; ++ ++ cfi->next_offset = 0; ++ cfi->cie_tree = cfi->fde_tree = cfi->expr_tree = NULL; ++ ++ cfi->ebl = NULL; ++ ++ dbg->cfi = cfi; ++ } ++ ++ return dbg->cfi; ++} ++INTDEF (dwarf_getcfi) +diff --git a/libdw/dwarf_getcfi_elf.c b/libdw/dwarf_getcfi_elf.c +new file mode 100644 +index 0000000..64a2a88 +--- /dev/null ++++ b/libdw/dwarf_getcfi_elf.c +@@ -0,0 +1,336 @@ ++/* Get CFI from ELF file's exception-handling info. ++ Copyright (C) 2009-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 ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ In addition, as a special exception, Red Hat, Inc. gives You the ++ additional right to link the code of Red Hat elfutils with code licensed ++ under any Open Source Initiative certified open source license ++ (http://www.opensource.org/licenses/index.php) which requires the ++ distribution of source code with any binary distribution and to ++ distribute linked combinations of the two. Non-GPL Code permitted under ++ this exception must only link to the code of Red Hat elfutils through ++ those well defined interfaces identified in the file named EXCEPTION ++ found in the source code files (the "Approved Interfaces"). The files ++ of Non-GPL Code may instantiate templates or use macros or inline ++ functions from the Approved Interfaces without causing the resulting ++ work to be covered by the GNU General Public License. Only Red Hat, ++ Inc. may make changes or additions to the list of Approved Interfaces. ++ Red Hat's grant of this exception is conditioned upon your not adding ++ any new exceptions. If you wish to add a new Approved Interface or ++ exception, please contact Red Hat. You must obey the GNU General Public ++ License in all respects for all of the Red Hat elfutils code and other ++ code used in conjunction with Red Hat elfutils except the Non-GPL Code ++ covered by this exception. If you modify this file, you may extend this ++ exception to your version of the file, but you are not obligated to do ++ so. If you do not wish to provide this exception without modification, ++ you must delete this exception statement from your version and license ++ this file solely under the GPL without exception. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++#include ++ ++#include "libdwP.h" ++#include "cfi.h" ++#include "encoded-value.h" ++#include ++ ++ ++static Dwarf_CFI * ++allocate_cfi (Elf *elf, GElf_Addr vaddr) ++{ ++ Dwarf_CFI *cfi = calloc (1, sizeof *cfi); ++ if (cfi == NULL) ++ { ++ __libdw_seterrno (DWARF_E_NOMEM); ++ return NULL; ++ } ++ ++ cfi->e_ident = (unsigned char *) elf_getident (elf, NULL); ++ if (cfi->e_ident == NULL) ++ { ++ free (cfi); ++ __libdw_seterrno (DWARF_E_GETEHDR_ERROR); ++ return NULL; ++ } ++ ++ if ((BYTE_ORDER == LITTLE_ENDIAN && cfi->e_ident[EI_DATA] == ELFDATA2MSB) ++ || (BYTE_ORDER == BIG_ENDIAN && cfi->e_ident[EI_DATA] == ELFDATA2LSB)) ++ cfi->other_byte_order = true; ++ ++ cfi->frame_vaddr = vaddr; ++ cfi->textrel = 0; /* XXX ? */ ++ cfi->datarel = 0; /* XXX ? */ ++ ++ return cfi; ++} ++ ++static const uint8_t * ++parse_eh_frame_hdr (const uint8_t *hdr, size_t hdr_size, GElf_Addr hdr_vaddr, ++ const GElf_Ehdr *ehdr, GElf_Addr *eh_frame_vaddr, ++ size_t *table_entries, uint8_t *table_encoding) ++{ ++ const uint8_t *h = hdr; ++ ++ if (*h++ != 1) /* version */ ++ return (void *) -1l; ++ ++ uint8_t eh_frame_ptr_encoding = *h++; ++ uint8_t fde_count_encoding = *h++; ++ uint8_t fde_table_encoding = *h++; ++ ++ if (eh_frame_ptr_encoding == DW_EH_PE_omit) ++ return (void *) -1l; ++ ++ /* Dummy used by read_encoded_value. */ ++ Elf_Data_Scn dummy_cfi_hdr_data = ++ { ++ .d = { .d_buf = (void *) hdr, .d_size = hdr_size } ++ }; ++ Dwarf_CFI dummy_cfi = ++ { ++ .e_ident = ehdr->e_ident, ++ .datarel = hdr_vaddr, ++ .frame_vaddr = hdr_vaddr, ++ .data = &dummy_cfi_hdr_data, ++ }; ++ ++ if (unlikely (read_encoded_value (&dummy_cfi, eh_frame_ptr_encoding, &h, ++ eh_frame_vaddr))) ++ return (void *) -1l; ++ ++ if (fde_count_encoding != DW_EH_PE_omit) ++ { ++ Dwarf_Word fde_count; ++ if (unlikely (read_encoded_value (&dummy_cfi, fde_count_encoding, &h, ++ &fde_count))) ++ return (void *) -1l; ++ if (fde_count != 0 && (size_t) fde_count == fde_count ++ && fde_table_encoding != DW_EH_PE_omit ++ && (fde_table_encoding &~ DW_EH_PE_signed) != DW_EH_PE_uleb128) ++ { ++ *table_entries = fde_count; ++ *table_encoding = fde_table_encoding; ++ return h; ++ } ++ } ++ ++ return NULL; ++} ++ ++static Dwarf_CFI * ++getcfi_gnu_eh_frame (Elf *elf, const GElf_Ehdr *ehdr, const GElf_Phdr *phdr) ++{ ++ if (unlikely (phdr->p_filesz < 4)) ++ goto invalid; ++ ++ Elf_Data *data = elf_getdata_rawchunk (elf, phdr->p_offset, phdr->p_filesz, ++ ELF_T_BYTE); ++ if (data == NULL) ++ { ++ invalid_hdr: ++ invalid: ++ /* XXX might be read error or corrupt phdr */ ++ __libdw_seterrno (DWARF_E_INVALID_CFI); ++ return NULL; ++ } ++ ++ Dwarf_Addr eh_frame_ptr; ++ size_t search_table_entries; ++ uint8_t search_table_encoding; ++ const uint8_t *search_table = parse_eh_frame_hdr (data->d_buf, phdr->p_filesz, ++ phdr->p_vaddr, ehdr, ++ &eh_frame_ptr, ++ &search_table_entries, ++ &search_table_encoding); ++ if (search_table == (void *) -1l) ++ goto invalid_hdr; ++ ++ Dwarf_Off eh_frame_offset = eh_frame_ptr - phdr->p_vaddr + phdr->p_offset; ++ Dwarf_Word eh_frame_size = 0; ++ ++ /* XXX we have no way without section headers to know the size ++ of the .eh_frame data. Calculate the largest it might possibly be. ++ This won't be wasteful if the file is already mmap'd, but if it isn't ++ it might be quite excessive. */ ++ size_t filesize; ++ if (elf_rawfile (elf, &filesize) != NULL) ++ eh_frame_size = filesize - eh_frame_offset; ++ ++ data = elf_getdata_rawchunk (elf, eh_frame_offset, eh_frame_size, ELF_T_BYTE); ++ if (data == NULL) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_ELF); /* XXX might be read error */ ++ return NULL; ++ } ++ Dwarf_CFI *cfi = allocate_cfi (elf, eh_frame_ptr); ++ if (cfi != NULL) ++ { ++ cfi->data = (Elf_Data_Scn *) data; ++ ++ if (search_table != NULL) ++ { ++ cfi->search_table = search_table; ++ cfi->search_table_vaddr = phdr->p_vaddr; ++ cfi->search_table_encoding = search_table_encoding; ++ cfi->search_table_entries = search_table_entries; ++ } ++ } ++ return cfi; ++} ++ ++/* Search the phdrs for PT_GNU_EH_FRAME. */ ++static Dwarf_CFI * ++getcfi_phdr (Elf *elf, const GElf_Ehdr *ehdr) ++{ ++ size_t phnum; ++ if (unlikely (elf_getphdrnum (elf, &phnum) != 0)) ++ return NULL; ++ ++ for (size_t i = 0; i < phnum; ++i) ++ { ++ GElf_Phdr phdr_mem; ++ GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); ++ if (unlikely (phdr == NULL)) ++ return NULL; ++ if (phdr->p_type == PT_GNU_EH_FRAME) ++ return getcfi_gnu_eh_frame (elf, ehdr, phdr); ++ } ++ ++ __libdw_seterrno (DWARF_E_NO_DWARF); ++ return NULL; ++} ++ ++static Dwarf_CFI * ++getcfi_scn_eh_frame (Elf *elf, const GElf_Ehdr *ehdr, ++ Elf_Scn *scn, GElf_Shdr *shdr, ++ Elf_Scn *hdr_scn, GElf_Addr hdr_vaddr) ++{ ++ Elf_Data *data = elf_rawdata (scn, NULL); ++ if (data == NULL) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_ELF); ++ return NULL; ++ } ++ Dwarf_CFI *cfi = allocate_cfi (elf, shdr->sh_addr); ++ if (cfi != NULL) ++ { ++ cfi->data = (Elf_Data_Scn *) data; ++ if (hdr_scn != NULL) ++ { ++ Elf_Data *hdr_data = elf_rawdata (hdr_scn, NULL); ++ if (hdr_data != NULL) ++ { ++ GElf_Addr eh_frame_vaddr; ++ cfi->search_table_vaddr = hdr_vaddr; ++ cfi->search_table ++ = parse_eh_frame_hdr (hdr_data->d_buf, hdr_data->d_size, ++ hdr_vaddr, ehdr, &eh_frame_vaddr, ++ &cfi->search_table_entries, ++ &cfi->search_table_encoding); ++ if (cfi->search_table == (void *) -1l) ++ { ++ free (cfi); ++ /* XXX might be read error or corrupt phdr */ ++ __libdw_seterrno (DWARF_E_INVALID_CFI); ++ return NULL; ++ } ++ ++ /* Sanity check. */ ++ if (unlikely (eh_frame_vaddr != shdr->sh_addr)) ++ cfi->search_table = NULL; ++ } ++ } ++ } ++ return cfi; ++} ++ ++/* Search for the sections named ".eh_frame" and ".eh_frame_hdr". */ ++static Dwarf_CFI * ++getcfi_shdr (Elf *elf, const GElf_Ehdr *ehdr) ++{ ++ size_t shstrndx; ++ if (elf_getshdrstrndx (elf, &shstrndx) != 0) ++ { ++ __libdw_seterrno (DWARF_E_GETEHDR_ERROR); ++ return NULL; ++ } ++ ++ if (shstrndx != 0) ++ { ++ Elf_Scn *hdr_scn = NULL; ++ GElf_Addr hdr_vaddr = 0; ++ 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) ++ continue; ++ const char *name = elf_strptr (elf, shstrndx, shdr->sh_name); ++ if (name == NULL) ++ continue; ++ if (!strcmp (name, ".eh_frame_hdr")) ++ { ++ hdr_scn = scn; ++ hdr_vaddr = shdr->sh_addr; ++ } ++ else if (!strcmp (name, ".eh_frame")) ++ return getcfi_scn_eh_frame (elf, ehdr, scn, shdr, ++ hdr_scn, hdr_vaddr); ++ } ++ } ++ ++ return (void *) -1l; ++} ++ ++Dwarf_CFI * ++dwarf_getcfi_elf (elf) ++ Elf *elf; ++{ ++ if (elf_kind (elf) != ELF_K_ELF) ++ { ++ __libdw_seterrno (DWARF_E_NOELF); ++ return NULL; ++ } ++ ++ GElf_Ehdr ehdr_mem; ++ GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); ++ if (unlikely (ehdr == NULL)) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_ELF); ++ return NULL; ++ } ++ ++ Dwarf_CFI *result = getcfi_shdr (elf, ehdr); ++ if (result == (void *) -1l) ++ result = getcfi_phdr (elf, ehdr); ++ ++ return result; ++} ++INTDEF (dwarf_getcfi_elf) +diff --git a/libdw/dwarf_getlocation.c b/libdw/dwarf_getlocation.c +index f680aa9..720b20f 100644 +--- a/libdw/dwarf_getlocation.c ++++ b/libdw/dwarf_getlocation.c +@@ -1,5 +1,5 @@ + /* Return location expression list. +- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006 Red Hat, Inc. ++ Copyright (C) 2000-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -55,6 +55,7 @@ + #include + #include + #include ++#include + + #include + +@@ -111,27 +112,141 @@ loc_compare (const void *p1, const void *p2) + return 0; + } + ++/* For each DW_OP_implicit_value, we store a special entry in the cache. ++ This points us directly to the block data for later fetching. */ ++static void ++store_implicit_value (Dwarf *dbg, void **cache, Dwarf_Op *op, ++ unsigned char *data) ++{ ++ struct loc_block_s *block = libdw_alloc (dbg, struct loc_block_s, ++ sizeof (struct loc_block_s), 1); ++ block->addr = op; ++ block->data = data + op->number2; ++ block->length = op->number; ++ (void) tsearch (block, cache, loc_compare); ++} ++ ++int ++dwarf_getlocation_implicit_value (attr, op, return_block) ++ Dwarf_Attribute *attr; ++ const Dwarf_Op *op; ++ Dwarf_Block *return_block; ++{ ++ if (attr == NULL) ++ return -1; ++ ++ struct loc_block_s fake = { .addr = (void *) op }; ++ struct loc_block_s **found = tfind (&fake, &attr->cu->locs, loc_compare); ++ if (unlikely (found == NULL)) ++ { ++ __libdw_seterrno (DWARF_E_NO_BLOCK); ++ return -1; ++ } ++ ++ return_block->length = (*found)->length; ++ return_block->data = (*found)->data; ++ return 0; ++} ++ ++/* DW_AT_data_member_location can be a constant as well as a loclistptr. ++ Only data[48] indicate a loclistptr. */ + static int +-getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, +- Dwarf_Op **llbuf, size_t *listlen) ++check_constant_offset (Dwarf_Attribute *attr, ++ Dwarf_Op **llbuf, size_t *listlen) + { +- Dwarf *dbg = cu->dbg; ++ if (attr->code != DW_AT_data_member_location) ++ return 1; ++ ++ switch (attr->form) ++ { ++ /* Punt for any non-constant form. */ ++ default: ++ return 1; ++ ++ case DW_FORM_data1: ++ case DW_FORM_data2: ++ case DW_FORM_sdata: ++ case DW_FORM_udata: ++ break; ++ ++ case DW_FORM_data4: ++ case DW_FORM_data8: ++ /* These are loclistptr, not constants. ++ XXX check cu->version > 3??? ++ */ ++ return 1; ++ } ++ ++ /* Check whether we already cached this location. */ ++ struct loc_s fake = { .addr = attr->valp }; ++ struct loc_s **found = tfind (&fake, &attr->cu->locs, loc_compare); ++ ++ if (found == NULL) ++ { ++ Dwarf_Word offset; ++ if (INTUSE(dwarf_formudata) (attr, &offset) != 0) ++ return -1; ++ ++ Dwarf_Op *result = libdw_alloc (attr->cu->dbg, ++ Dwarf_Op, sizeof (Dwarf_Op), 1); ++ ++ result->atom = DW_OP_plus_uconst; ++ result->number = offset; ++ result->number2 = 0; ++ result->offset = 0; ++ ++ /* Insert a record in the search tree so we can find it again later. */ ++ struct loc_s *newp = libdw_alloc (attr->cu->dbg, ++ struct loc_s, sizeof (struct loc_s), ++ 1); ++ newp->addr = attr->valp; ++ newp->loc = result; ++ newp->nloc = 1; ++ ++ found = tsearch (newp, &attr->cu->locs, loc_compare); ++ } ++ ++ assert ((*found)->nloc == 1); ++ ++ if (llbuf != NULL) ++ { ++ *llbuf = (*found)->loc; ++ *listlen = 1; ++ } ++ ++ return 0; ++} + ++int ++internal_function ++__libdw_intern_expression (Dwarf *dbg, ++ bool other_byte_order, unsigned int address_size, ++ void **cache, const Dwarf_Block *block, bool valuep, ++ Dwarf_Op **llbuf, size_t *listlen, int sec_index) ++{ + /* 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); ++ struct loc_s **found = tfind (&fake, cache, loc_compare); + if (found != NULL) + { + /* We already saw it. */ + *llbuf = (*found)->loc; + *listlen = (*found)->nloc; + ++ if (valuep) ++ { ++ assert (*listlen > 1); ++ assert ((*llbuf)[*listlen - 1].atom == DW_OP_stack_value); ++ } ++ + return 0; + } + + const unsigned char *data = block->data; + const unsigned char *const end_data = data + block->length; + ++ const struct { bool other_byte_order; } bo = { other_byte_order }; ++ + struct loclist *loclist = NULL; + unsigned int n = 0; + /* Decode the opcodes. It is possible in some situations to have a +@@ -151,24 +266,9 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + { + 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); +- } ++ if (__libdw_read_address_inc (dbg, sec_index, &data, ++ address_size, &newloc->number)) ++ return -1; + break; + + case DW_OP_deref: +@@ -203,6 +303,10 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + case DW_OP_nop: + case DW_OP_push_object_address: + case DW_OP_call_ref: ++ case DW_OP_call_frame_cfa: ++ case DW_OP_form_tls_address: ++ case DW_OP_GNU_push_tls_address: ++ case DW_OP_stack_value: + /* No operand. */ + break; + +@@ -211,7 +315,11 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + case DW_OP_deref_size: + case DW_OP_xderef_size: + if (unlikely (data >= end_data)) +- goto invalid; ++ { ++ invalid: ++ __libdw_seterrno (DWARF_E_INVALID_DWARF); ++ return -1; ++ } + + newloc->number = *data++; + break; +@@ -228,7 +336,7 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + if (unlikely (data + 2 > end_data)) + goto invalid; + +- newloc->number = read_2ubyte_unaligned_inc (dbg, data); ++ newloc->number = read_2ubyte_unaligned_inc (&bo, data); + break; + + case DW_OP_const2s: +@@ -238,14 +346,14 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + if (unlikely (data + 2 > end_data)) + goto invalid; + +- newloc->number = read_2sbyte_unaligned_inc (dbg, data); ++ newloc->number = read_2sbyte_unaligned_inc (&bo, data); + break; + + case DW_OP_const4u: + if (unlikely (data + 4 > end_data)) + goto invalid; + +- newloc->number = read_4ubyte_unaligned_inc (dbg, data); ++ newloc->number = read_4ubyte_unaligned_inc (&bo, data); + break; + + case DW_OP_const4s: +@@ -253,21 +361,21 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + if (unlikely (data + 4 > end_data)) + goto invalid; + +- newloc->number = read_4sbyte_unaligned_inc (dbg, data); ++ newloc->number = read_4sbyte_unaligned_inc (&bo, data); + break; + + case DW_OP_const8u: + if (unlikely (data + 8 > end_data)) + goto invalid; + +- newloc->number = read_8ubyte_unaligned_inc (dbg, data); ++ newloc->number = read_8ubyte_unaligned_inc (&bo, data); + break; + + case DW_OP_const8s: + if (unlikely (data + 8 > end_data)) + goto invalid; + +- newloc->number = read_8sbyte_unaligned_inc (dbg, data); ++ newloc->number = read_8sbyte_unaligned_inc (&bo, data); + break; + + case DW_OP_constu: +@@ -291,6 +399,25 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + get_sleb128 (newloc->number2, data); + break; + ++ case DW_OP_bit_piece: ++ /* XXX Check size. */ ++ get_uleb128 (newloc->number, data); ++ get_uleb128 (newloc->number2, data); ++ break; ++ ++ case DW_OP_implicit_value: ++ /* This cannot be used in a CFI expression. */ ++ if (unlikely (dbg == NULL)) ++ goto invalid; ++ ++ /* XXX Check size. */ ++ get_uleb128 (newloc->number, data); /* Block length. */ ++ if (unlikely ((Dwarf_Word) (end_data - data) < newloc->number)) ++ goto invalid; ++ newloc->number2 = data - block->data; /* Relative block offset. */ ++ data += newloc->number; /* Skip the block. */ ++ break; ++ + default: + goto invalid; + } +@@ -304,8 +431,33 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + goto invalid; + } + ++ if (valuep) ++ { ++ struct loclist *newloc; ++ newloc = (struct loclist *) alloca (sizeof (struct loclist)); ++ newloc->atom = DW_OP_stack_value; ++ newloc->number = 0; ++ newloc->number2 = 0; ++ newloc->offset = data - block->data; ++ newloc->next = loclist; ++ loclist = newloc; ++ ++n; ++ } ++ + /* Allocate the array. */ +- Dwarf_Op *result = libdw_alloc (dbg, Dwarf_Op, sizeof (Dwarf_Op), n); ++ Dwarf_Op *result; ++ if (dbg != NULL) ++ result = libdw_alloc (dbg, Dwarf_Op, sizeof (Dwarf_Op), n); ++ else ++ { ++ result = malloc (sizeof *result * n); ++ if (result == NULL) ++ { ++ nomem: ++ __libdw_seterrno (DWARF_E_NOMEM); ++ return -1; ++ } ++ } + + /* Store the result. */ + *llbuf = result; +@@ -313,37 +465,62 @@ getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, + + do + { +- /* We populate the array from the back since the list is +- backwards. */ ++ /* 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; + ++ if (result[n].atom == DW_OP_implicit_value) ++ store_implicit_value (dbg, cache, &result[n], block->data); ++ + 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); ++ /* Insert a record in the search tree so that we can find it again later. */ ++ struct loc_s *newp; ++ if (dbg != NULL) ++ newp = libdw_alloc (dbg, struct loc_s, sizeof (struct loc_s), 1); ++ else ++ { ++ newp = malloc (sizeof *newp); ++ if (newp == NULL) ++ { ++ free (result); ++ goto nomem; ++ } ++ } ++ + newp->addr = block->data; + newp->loc = result; + newp->nloc = *listlen; +- (void) tsearch (newp, &cu->locs, loc_compare); ++ (void) tsearch (newp, cache, loc_compare); + + /* We did it. */ + return 0; + } + ++static int ++getlocation (struct Dwarf_CU *cu, const Dwarf_Block *block, ++ Dwarf_Op **llbuf, size_t *listlen, int sec_index) ++{ ++ return __libdw_intern_expression (cu->dbg, cu->dbg->other_byte_order, ++ cu->address_size, &cu->locs, block, false, ++ llbuf, listlen, sec_index); ++} ++ + int + dwarf_getlocation (attr, llbuf, listlen) + Dwarf_Attribute *attr; + Dwarf_Op **llbuf; + size_t *listlen; + { ++ int result = check_constant_offset (attr, llbuf, listlen); ++ if (result != 1) ++ return result; ++ + if (! attr_ok (attr)) + return -1; + +@@ -352,7 +529,7 @@ dwarf_getlocation (attr, llbuf, listlen) + if (INTUSE(dwarf_formblock) (attr, &block) != 0) + return -1; + +- return getlocation (attr->cu, &block, llbuf, listlen); ++ return getlocation (attr->cu, &block, llbuf, listlen, IDX_debug_info); + } + + int +@@ -376,7 +553,8 @@ dwarf_getlocation_addr (attr, address, llbufs, listlens, maxlocs) + if (maxlocs == 0) + return 0; + if (llbufs != NULL && +- getlocation (attr->cu, &block, &llbufs[0], &listlens[0]) != 0) ++ getlocation (attr->cu, &block, &llbufs[0], &listlens[0], ++ IDX_debug_info) != 0) + return -1; + return listlens[0] == 0 ? 0 : 1; + } +@@ -388,25 +566,21 @@ dwarf_getlocation_addr (attr, address, llbufs, listlens, maxlocs) + 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; ++ int result = check_constant_offset (attr, &llbufs[0], &listlens[0]); ++ if (result != 1) ++ return result ?: 1; + +- const Elf_Data *d = attr->cu->dbg->sectiondata[IDX_debug_loc]; +- if (unlikely (d == NULL)) +- { +- __libdw_seterrno (DWARF_E_NO_LOCLIST); +- return -1; +- } ++ unsigned char *endp; ++ unsigned char *readp = __libdw_formptr (attr, IDX_debug_loc, ++ DWARF_E_NO_LOCLIST, &endp, NULL); ++ if (readp == NULL) ++ 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) ++ if (endp - readp < attr->cu->address_size * 2) + { + invalid: + __libdw_seterrno (DWARF_E_INVALID_DWARF); +@@ -415,42 +589,25 @@ dwarf_getlocation_addr (attr, address, llbufs, listlens, maxlocs) + + 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. */ ++ int status ++ = __libdw_read_begin_end_pair_inc (attr->cu->dbg, IDX_debug_loc, ++ &readp, attr->cu->address_size, ++ &begin, &end, &base); ++ if (status == 2) /* End of list entry. */ + break; ++ else if (status == 1) /* Base address selected. */ ++ continue; ++ else if (status < 0) ++ return status; + +- if ((unsigned char *) d->d_buf + d->d_size - readp < 2) ++ if (endp - 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) ++ if (endp - readp < (ptrdiff_t) block.length) + goto invalid; + readp += block.length; + +@@ -486,7 +643,8 @@ dwarf_getlocation_addr (attr, address, llbufs, listlens, maxlocs) + /* This one matches the address. */ + if (llbufs != NULL + && unlikely (getlocation (attr->cu, &block, +- &llbufs[got], &listlens[got]) != 0)) ++ &llbufs[got], &listlens[got], ++ IDX_debug_loc) != 0)) + return -1; + ++got; + } +diff --git a/libdw/dwarf_getmacros.c b/libdw/dwarf_getmacros.c +index 743ade3..b9ec34b 100644 +--- a/libdw/dwarf_getmacros.c ++++ b/libdw/dwarf_getmacros.c +@@ -1,5 +1,5 @@ + /* Get macro information. +- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc. ++ Copyright (C) 2002-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -65,27 +65,39 @@ dwarf_getmacros (die, callback, arg, offset) + void *arg; + ptrdiff_t offset; + { +- /* Get the appropriate attribute. */ +- Dwarf_Attribute attr; +- if (INTUSE(dwarf_attr) (die, DW_AT_macro_info, &attr) == NULL) ++ if (die == NULL) + return -1; + +- /* Offset into the .debug_macinfo section. */ +- Dwarf_Word macoff; +- if (INTUSE(dwarf_formudata) (&attr, &macoff) != 0) +- return -1; ++ Elf_Data *d = die->cu->dbg->sectiondata[IDX_debug_macinfo]; ++ if (unlikely (d == NULL) || unlikely (d->d_buf == NULL)) ++ { ++ __libdw_seterrno (DWARF_E_NO_ENTRY); ++ 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 (offset == 0) ++ { ++ /* Get the appropriate attribute. */ ++ Dwarf_Attribute attr; ++ if (INTUSE(dwarf_attr) (die, DW_AT_macro_info, &attr) == NULL) ++ return -1; + +- if (readp == readendp) +- return 0; ++ /* Offset into the .debug_macinfo section. */ ++ Dwarf_Word macoff; ++ if (INTUSE(dwarf_formudata) (&attr, &macoff) != 0) ++ return -1; + +- if (*readp != DW_MACINFO_start_file) ++ offset = macoff; ++ } ++ if (unlikely (offset > (ptrdiff_t) d->d_size)) + goto invalid; + ++ const unsigned char *readp = d->d_buf + offset; ++ const unsigned char *readendp = d->d_buf + d->d_size; ++ ++ if (readp == readendp) ++ return 0; ++ + while (readp < readendp) + { + unsigned int opcode = *readp++; +@@ -142,9 +154,7 @@ dwarf_getmacros (die, callback, arg, offset) + 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)); ++ return readp - (const unsigned char *) d->d_buf; + } + + /* If we come here the termination of the data for the CU is not +diff --git a/libdw/dwarf_getpubnames.c b/libdw/dwarf_getpubnames.c +index 1b054e2..5560a75 100644 +--- a/libdw/dwarf_getpubnames.c ++++ b/libdw/dwarf_getpubnames.c +@@ -102,7 +102,6 @@ get_offsets (Dwarf *dbg) + 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; + } +@@ -124,18 +123,12 @@ get_offsets (Dwarf *dbg) + } + + /* 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); ++ if (__libdw_read_offset (dbg, IDX_debug_pubnames, readp + 2, len_bytes, ++ &mem[cnt].cu_offset, IDX_debug_info, 3)) ++ /* Error has been already set in reader. */ ++ goto err_return; + + /* 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); +diff --git a/libdw/dwarf_getscopevar.c b/libdw/dwarf_getscopevar.c +index 4e5b429..6ce214f 100644 +--- a/libdw/dwarf_getscopevar.c ++++ b/libdw/dwarf_getscopevar.c +@@ -1,5 +1,5 @@ + /* Find a named variable or parameter within given scopes. +- Copyright (C) 2005 Red Hat, Inc. ++ Copyright (C) 2005-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -129,9 +129,7 @@ dwarf_getscopevar (Dwarf_Die *scopes, int nscopes, + } + + /* 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)); ++ const char *diename = INTUSE(dwarf_diename) (result); + if (diename != NULL && !strcmp (name, diename)) + { + /* We have a matching name. */ +diff --git a/libdw/dwarf_getsrc_file.c b/libdw/dwarf_getsrc_file.c +index 91abbae..bc612f6 100644 +--- a/libdw/dwarf_getsrc_file.c ++++ b/libdw/dwarf_getsrc_file.c +@@ -1,5 +1,5 @@ + /* Find line information for given file/line/column triple. +- Copyright (C) 2005 Red Hat, Inc. ++ Copyright (C) 2005-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -74,11 +74,11 @@ dwarf_getsrc_file (Dwarf *dbg, const char *fname, int lineno, int column, + 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) ++ for (Dwarf_Off off = 0; ++ INTUSE(dwarf_nextcu) (dbg, off, &noff, &cuhl, NULL, NULL, NULL) == 0; ++ off = noff) + { + Dwarf_Die cudie_mem; + Dwarf_Die *cudie = INTUSE(dwarf_offdie) (dbg, off + cuhl, &cudie_mem); +@@ -89,7 +89,14 @@ dwarf_getsrc_file (Dwarf *dbg, const char *fname, int lineno, int column, + Dwarf_Lines *lines; + size_t nlines; + if (INTUSE(dwarf_getsrclines) (cudie, &lines, &nlines) != 0) +- return -1; ++ { ++ /* Ignore a CU that just has no DW_AT_stmt_list at all. */ ++ int error = INTUSE(dwarf_errno) (); ++ if (error == 0) ++ continue; ++ __libdw_seterrno (error); ++ return -1; ++ } + + /* Search through all the line number records for a matching + file and line/column number. If any of the numbers is zero, +@@ -175,8 +182,6 @@ dwarf_getsrc_file (Dwarf *dbg, const char *fname, int lineno, int column, + already, there is no need to go on to the next CU. */ + if (cur_match == max_match) + break; +- +- off = noff; + } + + if (cur_match > 0) +diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c +index 9b3c97a..43fad99 100644 +--- a/libdw/dwarf_getsrclines.c ++++ b/libdw/dwarf_getsrclines.c +@@ -1,5 +1,5 @@ + /* Return line number information of CU. +- Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2004-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2004. + +@@ -135,20 +135,13 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) + + /* 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) ++ const unsigned char *lineendp; ++ const unsigned char *linep ++ = __libdw_formptr (stmt_list, IDX_debug_line, DWARF_E_NO_DEBUG_LINE, ++ (unsigned char **) &lineendp, NULL); ++ if (linep == NULL) + 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, +@@ -162,6 +155,8 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) + __libdw_seterrno (DWARF_E_INVALID_DEBUG_LINE); + goto out; + } ++ ++ Dwarf *dbg = cu->dbg; + Dwarf_Word unit_length = read_4ubyte_unaligned_inc (dbg, linep); + unsigned int length = 4; + if (unlikely (unit_length == DWARF3_LENGTH_64_BIT)) +@@ -429,10 +424,9 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) + /* 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); ++ if (__libdw_read_address_inc (dbg, IDX_debug_line, &linep, ++ cu->address_size, &address)) ++ goto out; + break; + + case DW_LNE_define_file: +@@ -634,8 +628,8 @@ dwarf_getsrclines (Dwarf_Die *cudie, Dwarf_Lines **lines, size_t *nlines) + dirs[i] = dirarray[i]->dir; + dirs[ndirlist] = NULL; + +- /* Remember the debugging descriptor. */ +- files->dbg = dbg; ++ /* Remember the referring CU. */ ++ files->cu = cu; + + /* Make the file data structure available through the CU. */ + cu->files = files; +diff --git a/libdw/dwarf_hasattr_integrate.c b/libdw/dwarf_hasattr_integrate.c +index 12b4863..806742d 100644 +--- a/libdw/dwarf_hasattr_integrate.c ++++ b/libdw/dwarf_hasattr_integrate.c +@@ -68,6 +68,8 @@ dwarf_hasattr_integrate (Dwarf_Die *die, unsigned int search_name) + Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, DW_AT_abstract_origin, + &attr_mem); + if (attr == NULL) ++ attr = INTUSE(dwarf_attr) (die, DW_AT_specification, &attr_mem); ++ if (attr == NULL) + break; + + die = INTUSE(dwarf_formref_die) (attr, &die_mem); +diff --git a/libdw/dwarf_haschildren.c b/libdw/dwarf_haschildren.c +index fe43195..d9a47ad 100644 +--- a/libdw/dwarf_haschildren.c ++++ b/libdw/dwarf_haschildren.c +@@ -1,5 +1,5 @@ + /* Return string associated with given attribute. +- Copyright (C) 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2003, 2005, 2008 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2003. + +@@ -77,7 +77,7 @@ dwarf_haschildren (die) + if (unlikely (die->abbrev == DWARF_END_ABBREV)) + { + __libdw_seterrno (DWARF_E_INVALID_DWARF); +- return 0; ++ return -1; + } + + return die->abbrev->has_children; +diff --git a/libdw/dwarf_next_cfi.c b/libdw/dwarf_next_cfi.c +new file mode 100644 +index 0000000..d5d4cfd +--- /dev/null ++++ b/libdw/dwarf_next_cfi.c +@@ -0,0 +1,234 @@ ++/* Advance to next CFI entry. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "cfi.h" ++#include "encoded-value.h" ++ ++#include ++ ++ ++int ++dwarf_next_cfi (e_ident, data, eh_frame_p, off, next_off, entry) ++ const unsigned char e_ident[]; ++ Elf_Data *data; ++ bool eh_frame_p; ++ Dwarf_Off off; ++ Dwarf_Off *next_off; ++ Dwarf_CFI_Entry *entry; ++{ ++ /* Dummy struct for memory-access.h macros. */ ++ BYTE_ORDER_DUMMY (dw, e_ident); ++ ++ /* If we reached the end before don't do anything. */ ++ if (off == (Dwarf_Off) -1l ++ /* Make sure there is enough space in the .debug_frame 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 >= data->d_size)) ++ { ++ *next_off = (Dwarf_Off) -1l; ++ return 1; ++ } ++ ++ /* This points into the .debug_frame section at the start of the entry. */ ++ const uint8_t *bytes = data->d_buf + off; ++ const uint8_t *limit = data->d_buf + data->d_size; ++ ++ /* The format of a CFI entry is described in DWARF3 6.4.1: ++ */ ++ ++ uint64_t length = read_4ubyte_unaligned_inc (&dw, bytes); ++ size_t offset_size = 4; ++ if (length == DWARF3_LENGTH_64_BIT) ++ { ++ /* This is the 64-bit DWARF format. */ ++ offset_size = 8; ++ if (unlikely (limit - bytes < 8)) ++ { ++ invalid: ++ __libdw_seterrno (DWARF_E_INVALID_DWARF); ++ return -1; ++ } ++ length = read_8ubyte_unaligned_inc (&dw, bytes); ++ } ++ if (unlikely ((uint64_t) (limit - bytes) < length) ++ || unlikely (length < offset_size + 1)) ++ goto invalid; ++ ++ /* Now we know how large the entry is. Note the trick in the ++ computation. If the offset_size is 4 the '- 4' term undoes the ++ '2 *'. If offset_size is 8 this term computes the size of the ++ escape value plus the 8 byte offset. */ ++ *next_off = off + (2 * offset_size - 4) + length; ++ ++ limit = bytes + length; ++ ++ const uint8_t *const cie_pointer_start = bytes; ++ if (offset_size == 8) ++ entry->cie.CIE_id = read_8ubyte_unaligned_inc (&dw, bytes); ++ else ++ { ++ entry->cie.CIE_id = read_4ubyte_unaligned_inc (&dw, bytes); ++ /* Canonicalize the 32-bit CIE_ID value to 64 bits. */ ++ if (!eh_frame_p && entry->cie.CIE_id == DW_CIE_ID_32) ++ entry->cie.CIE_id = DW_CIE_ID_64; ++ } ++ if (eh_frame_p) ++ { ++ /* Canonicalize the .eh_frame CIE pointer to .debug_frame format. */ ++ if (entry->cie.CIE_id == 0) ++ entry->cie.CIE_id = DW_CIE_ID_64; ++ else ++ { ++ /* In .eh_frame format, a CIE pointer is the distance from where ++ it appears back to the beginning of the CIE. */ ++ ptrdiff_t pos = cie_pointer_start - (const uint8_t *) data->d_buf; ++ if (unlikely (entry->cie.CIE_id > (Dwarf_Off) pos) ++ || unlikely (pos <= (ptrdiff_t) offset_size)) ++ goto invalid; ++ entry->cie.CIE_id = pos - entry->cie.CIE_id; ++ } ++ } ++ ++ if (entry->cie.CIE_id == DW_CIE_ID_64) ++ { ++ /* Read the version stamp. Always an 8-bit value. */ ++ uint8_t version = *bytes++; ++ ++ if (version != 1 && version != 3) ++ goto invalid; ++ ++ entry->cie.augmentation = (const char *) bytes; ++ ++ bytes = memchr (bytes, '\0', limit - bytes); ++ if (bytes == NULL) ++ goto invalid; ++ ++bytes; ++ ++ const char *ap = entry->cie.augmentation; ++ ++ /* g++ v2 "eh" has pointer immediately following augmentation string, ++ so it must be handled first. */ ++ if (unlikely (ap[0] == 'e' && ap[1] == 'h')) ++ { ++ /* The address size for CFI is implicit in the ELF class. */ ++ unsigned int address_size = e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; ++ ++ ap += 2; ++ bytes += address_size; ++ } ++ ++ get_uleb128 (entry->cie.code_alignment_factor, bytes); ++ get_sleb128 (entry->cie.data_alignment_factor, bytes); ++ ++ if (version == 3) /* DWARF 3 */ ++ get_uleb128 (entry->cie.return_address_register, bytes); ++ else /* DWARF 2 */ ++ entry->cie.return_address_register = *bytes++; ++ ++ /* If we have sized augmentation data, ++ we don't need to grok it all. */ ++ entry->cie.fde_augmentation_data_size = 0; ++ bool sized_augmentation = *ap == 'z'; ++ if (sized_augmentation) ++ { ++ get_uleb128 (entry->cie.augmentation_data_size, bytes); ++ if ((Dwarf_Word) (limit - bytes) < entry->cie.augmentation_data_size) ++ goto invalid; ++ entry->cie.augmentation_data = bytes; ++ bytes += entry->cie.augmentation_data_size; ++ } ++ else ++ { ++ entry->cie.augmentation_data = bytes; ++ ++ for (; *ap != '\0'; ++ap) ++ { ++ uint8_t encoding; ++ switch (*ap) ++ { ++ case 'L': /* Skip LSDA pointer encoding byte. */ ++ case 'R': /* Skip FDE address encoding byte. */ ++ encoding = *bytes++; ++ entry->cie.fde_augmentation_data_size ++ += encoded_value_size (data, e_ident, encoding, NULL); ++ continue; ++ case 'P': /* Skip encoded personality routine pointer. */ ++ encoding = *bytes++; ++ bytes += encoded_value_size (data, e_ident, encoding, bytes); ++ continue; ++ case 'S': /* Skip signal-frame flag. */ ++ continue; ++ default: ++ /* Unknown augmentation string. initial_instructions might ++ actually start with some augmentation data. */ ++ break; ++ } ++ break; ++ } ++ entry->cie.augmentation_data_size ++ = bytes - entry->cie.augmentation_data; ++ } ++ ++ entry->cie.initial_instructions = bytes; ++ entry->cie.initial_instructions_end = limit; ++ } ++ else ++ { ++ entry->fde.start = bytes; ++ entry->fde.end = limit; ++ } ++ ++ return 0; ++} ++INTDEF (dwarf_next_cfi) +diff --git a/libdw/dwarf_nextcu.c b/libdw/dwarf_nextcu.c +index 9e5a96b..e436e11 100644 +--- a/libdw/dwarf_nextcu.c ++++ b/libdw/dwarf_nextcu.c +@@ -1,5 +1,5 @@ + /* Advance to next CU header. +- Copyright (C) 2002, 2003, 2004, 2005, 2008 Red Hat, Inc. ++ Copyright (C) 2002-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -84,7 +84,8 @@ dwarf_nextcu (dwarf, off, next_off, header_sizep, abbrev_offsetp, + + /* 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; ++ const unsigned char *data = dwarf->sectiondata[IDX_debug_info]->d_buf; ++ const unsigned char *bytes = data + off; + + /* The format of the CU header is described in dwarf2p1 7.5.1: + +@@ -144,10 +145,10 @@ dwarf_nextcu (dwarf, off, next_off, header_sizep, abbrev_offsetp, + /* 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 (__libdw_read_offset_inc (dwarf, IDX_debug_info, &bytes, offset_size, ++ &abbrev_offset, IDX_debug_abbrev, 0)) ++ return -1; ++ + if (abbrev_offsetp != NULL) + *abbrev_offsetp = abbrev_offset; + +@@ -162,9 +163,7 @@ dwarf_nextcu (dwarf, off, next_off, header_sizep, abbrev_offsetp, + + /* Store the header length. */ + if (header_sizep != NULL) +- *header_sizep = (bytes +- - ((char *) dwarf->sectiondata[IDX_debug_info]->d_buf +- + off)); ++ *header_sizep = bytes - (data + off); + + /* See definition of DIE_OFFSET_FROM_CU_OFFSET macro + for an explanation of the trick in this expression. */ +diff --git a/libdw/dwarf_ranges.c b/libdw/dwarf_ranges.c +index 89da0af..50fb6ba 100644 +--- a/libdw/dwarf_ranges.c ++++ b/libdw/dwarf_ranges.c +@@ -1,5 +1,5 @@ + /* Enumerate the PC ranges covered by a DIE. +- Copyright (C) 2005, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -55,6 +55,52 @@ + #include + #include + ++/* Read up begin/end pair and increment read pointer. ++ - If it's normal range record, set up `*beginp' and `*endp' and return 0. ++ - If it's base address selection record, set up `*basep' and return 1. ++ - If it's end of rangelist, don't set anything and return 2 ++ - If an error occurs, don't set anything and return -1. */ ++internal_function int ++__libdw_read_begin_end_pair_inc (Dwarf *dbg, int sec_index, ++ unsigned char **addrp, int width, ++ Dwarf_Addr *beginp, Dwarf_Addr *endp, ++ Dwarf_Addr *basep) ++{ ++ Dwarf_Addr escape = (width == 8 ? (Elf64_Addr) -1 ++ : (Elf64_Addr) (Elf32_Addr) -1); ++ Dwarf_Addr begin; ++ Dwarf_Addr end; ++ ++ unsigned char *addr = *addrp; ++ bool begin_relocated = READ_AND_RELOCATE (__libdw_relocate_address, begin); ++ bool end_relocated = READ_AND_RELOCATE (__libdw_relocate_address, end); ++ *addrp = addr; ++ ++ /* Unrelocated escape for begin means base address selection. */ ++ if (begin == escape && !begin_relocated) ++ { ++ if (unlikely (end == escape)) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_DWARF); ++ return -1; ++ } ++ ++ if (basep != NULL) ++ *basep = end; ++ return 1; ++ } ++ ++ /* Unrelocated pair of zeroes means end of range list. */ ++ if (begin == 0 && end == 0 && !begin_relocated && !end_relocated) ++ return 2; ++ ++ /* Don't check for begin_relocated == end_relocated. Serve the data ++ to the client even though it may be buggy. */ ++ *beginp = begin; ++ *endp = end; ++ ++ return 0; ++} + + ptrdiff_t + dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep, +@@ -78,23 +124,27 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep, + /* We have to look for a noncontiguous range. */ + + const Elf_Data *d = die->cu->dbg->sectiondata[IDX_debug_ranges]; +- if (d == NULL) ++ if (d == NULL && offset != 0) + { + __libdw_seterrno (DWARF_E_NO_DEBUG_RANGES); + return -1; + } + ++ unsigned char *readp; ++ unsigned char *readendp; + if (offset == 0) + { + Dwarf_Attribute attr_mem; + Dwarf_Attribute *attr = INTUSE(dwarf_attr) (die, DW_AT_ranges, + &attr_mem); + if (attr == NULL) +- return -1; ++ /* No PC attributes in this DIE at all, so an empty range list. */ ++ return 0; + +- /* Must have the form data4 or data8 which act as an offset. */ + Dwarf_Word start_offset; +- if (INTUSE(dwarf_formudata) (attr, &start_offset) != 0) ++ if ((readp = __libdw_formptr (attr, IDX_debug_ranges, ++ DWARF_E_NO_DEBUG_RANGES, ++ &readendp, &start_offset)) == NULL) + return -1; + + offset = start_offset; +@@ -122,45 +172,37 @@ dwarf_ranges (Dwarf_Die *die, ptrdiff_t offset, Dwarf_Addr *basep, + return -1; + } + } +- else if (offset < 0 || (size_t) offset >= d->d_size) ++ else + { +- __libdw_seterrno (DWARF_E_INVALID_OFFSET); +- return -1l; +- } ++ if (__libdw_offset_in_section (die->cu->dbg, ++ IDX_debug_ranges, offset, 1)) ++ return -1l; + +- unsigned char *readp = d->d_buf + offset; ++ readp = d->d_buf + offset; ++ readendp = d->d_buf + d->d_size; ++ } + + next: +- if ((unsigned char *) d->d_buf + d->d_size - readp +- < die->cu->address_size * 2) ++ if (readendp - 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 ++ ++ switch (__libdw_read_begin_end_pair_inc (die->cu->dbg, IDX_debug_ranges, ++ &readp, die->cu->address_size, ++ &begin, &end, basep)) + { +- 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; +- } ++ case 0: ++ break; ++ case 1: ++ goto next; ++ case 2: ++ return 0; ++ default: ++ return -1l; + } + +- if (begin == 0 && end == 0) /* End of list entry. */ +- return 0; +- + /* We have an address range entry. */ + *startp = *basep + begin; + *endp = *basep + end; +diff --git a/libdw/dwarf_srclang.c b/libdw/dwarf_srclang.c +index 2efa095..305ffcd 100644 +--- a/libdw/dwarf_srclang.c ++++ b/libdw/dwarf_srclang.c +@@ -1,5 +1,5 @@ + /* Return source language attribute of DIE. +- Copyright (C) 2003, 2005 Red Hat, Inc. ++ Copyright (C) 2003-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2003. + +@@ -63,7 +63,10 @@ dwarf_srclang (die) + Dwarf_Attribute attr_mem; + Dwarf_Word value; + +- return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr) (die, DW_AT_language, +- &attr_mem), ++ return INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) ++ (die, DW_AT_language, &attr_mem), + &value) == 0 ? (int) value : -1; + } ++INTDEF (dwarf_srclang) ++OLD_VERSION (dwarf_srclang, ELFUTILS_0.122) ++NEW_VERSION (dwarf_srclang, ELFUTILS_0.143) +diff --git a/libdw/encoded-value.h b/libdw/encoded-value.h +new file mode 100644 +index 0000000..3f9b244 +--- /dev/null ++++ b/libdw/encoded-value.h +@@ -0,0 +1,202 @@ ++/* DW_EH_PE_* support for libdw unwinder. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifndef _ENCODED_VALUE_H ++#define _ENCODED_VALUE_H 1 ++ ++#include ++#include ++#include "libdwP.h" ++ ++ ++static size_t __attribute__ ((unused)) ++encoded_value_size (const Elf_Data *data, const unsigned char e_ident[], ++ uint8_t encoding, const uint8_t *p) ++{ ++ if (encoding == DW_EH_PE_omit) ++ return 0; ++ ++ switch (encoding & 0x07) ++ { ++ case DW_EH_PE_udata2: ++ return 2; ++ case DW_EH_PE_udata4: ++ return 4; ++ case DW_EH_PE_udata8: ++ return 8; ++ ++ case DW_EH_PE_absptr: ++ return e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; ++ ++ case DW_EH_PE_uleb128: ++ if (p != NULL) ++ { ++ const uint8_t *end = p; ++ while (end < (uint8_t *) data->d_buf + data->d_size) ++ if (*end++ & 0x80u) ++ return end - p; ++ } ++ ++ default: ++ abort (); ++ return 0; ++ } ++} ++ ++static inline int __attribute__ ((unused)) ++__libdw_cfi_read_address_inc (const Dwarf_CFI *cache, ++ const unsigned char **addrp, ++ int width, Dwarf_Addr *ret) ++{ ++ width = width ?: cache->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; ++ ++ if (cache->dbg != NULL) ++ return __libdw_read_address_inc (cache->dbg, IDX_debug_frame, ++ addrp, width, ret); ++ ++ /* Only .debug_frame might have relocation to consider. ++ Read plain values from .eh_frame data. */ ++ ++ if (width == 4) ++ *ret = read_4ubyte_unaligned_inc (cache, *addrp); ++ else ++ *ret = read_8ubyte_unaligned_inc (cache, *addrp); ++ return 0; ++} ++ ++static bool __attribute__ ((unused)) ++read_encoded_value (const Dwarf_CFI *cache, uint8_t encoding, const uint8_t **p, ++ Dwarf_Addr *result) ++{ ++ *result = 0; ++ switch (encoding & 0x70) ++ { ++ case DW_EH_PE_absptr: ++ break; ++ case DW_EH_PE_pcrel: ++ *result = (cache->frame_vaddr ++ + (*p - (const uint8_t *) cache->data->d.d_buf)); ++ break; ++ case DW_EH_PE_textrel: ++ // ia64: segrel ++ *result = cache->textrel; ++ break; ++ case DW_EH_PE_datarel: ++ // i386: GOTOFF ++ // ia64: gprel ++ *result = cache->datarel; ++ break; ++ case DW_EH_PE_funcrel: /* XXX */ ++ break; ++ case DW_EH_PE_aligned: ++ { ++ const size_t address_size ++ = cache->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; ++ size_t align = ((cache->frame_vaddr ++ + (*p - (const uint8_t *) cache->data->d.d_buf)) ++ & (address_size - 1)); ++ if (align != 0) ++ *p += address_size - align; ++ break; ++ } ++ ++ default: ++ abort (); ++ } ++ ++ Dwarf_Addr value; ++ switch (encoding & 0x0f) ++ { ++ case DW_EH_PE_udata2: ++ value = read_2ubyte_unaligned_inc (cache, *p); ++ break; ++ ++ case DW_EH_PE_sdata2: ++ value = read_2sbyte_unaligned_inc (cache, *p); ++ break; ++ ++ case DW_EH_PE_udata4: ++ if (__libdw_cfi_read_address_inc (cache, p, 4, &value)) ++ return false; ++ break; ++ ++ case DW_EH_PE_sdata4: ++ if (__libdw_cfi_read_address_inc (cache, p, 4, &value)) ++ return false; ++ value = (Dwarf_Sword) (Elf32_Sword) value; /* Sign-extend. */ ++ break; ++ ++ case DW_EH_PE_udata8: ++ case DW_EH_PE_sdata8: ++ if (__libdw_cfi_read_address_inc (cache, p, 8, &value)) ++ return false; ++ break; ++ ++ case DW_EH_PE_absptr: ++ if (__libdw_cfi_read_address_inc (cache, p, 0, &value)) ++ return false; ++ break; ++ ++ case DW_EH_PE_uleb128: ++ get_uleb128 (value, *p); ++ break; ++ ++ case DW_EH_PE_sleb128: ++ get_sleb128 (value, *p); ++ break; ++ ++ default: ++ abort (); ++ } ++ ++ *result += value; ++ return false; ++} ++ ++#endif /* encoded-value.h */ +diff --git a/libdw/fde.c b/libdw/fde.c +new file mode 100644 +index 0000000..c826114 +--- /dev/null ++++ b/libdw/fde.c +@@ -0,0 +1,306 @@ ++/* FDE reading. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "cfi.h" ++#include ++#include ++ ++#include "encoded-value.h" ++ ++static int ++compare_fde (const void *a, const void *b) ++{ ++ const struct dwarf_fde *fde1 = a; ++ const struct dwarf_fde *fde2 = b; ++ ++ /* Find out which of the two arguments is the search value. ++ It has end offset 0. */ ++ if (fde1->end == 0) ++ { ++ if (fde1->start < fde2->start) ++ return -1; ++ if (fde1->start >= fde2->end) ++ return 1; ++ } ++ else ++ { ++ if (fde2->start < fde1->start) ++ return 1; ++ if (fde2->start >= fde1->end) ++ return -1; ++ } ++ ++ return 0; ++} ++ ++static struct dwarf_fde * ++intern_fde (Dwarf_CFI *cache, const Dwarf_FDE *entry) ++{ ++ /* Look up the new entry's CIE. */ ++ struct dwarf_cie *cie = __libdw_find_cie (cache, entry->CIE_pointer); ++ if (cie == NULL) ++ return (void *) -1l; ++ ++ struct dwarf_fde *fde = malloc (sizeof (struct dwarf_fde)); ++ if (fde == NULL) ++ { ++ __libdw_seterrno (DWARF_E_NOMEM); ++ return NULL; ++ } ++ ++ fde->instructions = entry->start; ++ fde->instructions_end = entry->end; ++ if (unlikely (read_encoded_value (cache, cie->fde_encoding, ++ &fde->instructions, &fde->start)) ++ || unlikely (read_encoded_value (cache, cie->fde_encoding & 0x0f, ++ &fde->instructions, &fde->end))) ++ return NULL; ++ fde->end += fde->start; ++ ++ fde->cie = cie; ++ ++ if (cie->sized_augmentation_data) ++ { ++ /* The CIE augmentation says the FDE has a DW_FORM_block ++ before its actual instruction stream. */ ++ Dwarf_Word len; ++ get_uleb128 (len, fde->instructions); ++ if ((Dwarf_Word) (fde->instructions_end - fde->instructions) < len) ++ { ++ free (fde); ++ __libdw_seterrno (DWARF_E_INVALID_DWARF); ++ return NULL; ++ } ++ fde->instructions += len; ++ } ++ else ++ /* We had to understand all of the CIE augmentation string. ++ We've recorded the number of data bytes in FDEs. */ ++ fde->instructions += cie->fde_augmentation_data_size; ++ ++ /* Add the new entry to the search tree. */ ++ if (tsearch (fde, &cache->fde_tree, &compare_fde) == NULL) ++ { ++ free (fde); ++ __libdw_seterrno (DWARF_E_NOMEM); ++ return NULL; ++ } ++ ++ return fde; ++} ++ ++static struct dwarf_fde * ++fde_by_offset (Dwarf_CFI *cache, Dwarf_Addr address, Dwarf_Off offset) ++{ ++ Dwarf_CFI_Entry entry; ++ Dwarf_Off next_offset; ++ int result = INTUSE(dwarf_next_cfi) (cache->e_ident, ++ &cache->data->d, CFI_IS_EH (cache), ++ offset, &next_offset, &entry); ++ if (result != 0) ++ { ++ if (result > 0) ++ invalid: ++ __libdw_seterrno (DWARF_E_INVALID_DWARF); ++ return NULL; ++ } ++ ++ if (unlikely (dwarf_cfi_cie_p (&entry))) ++ goto invalid; ++ ++ /* We have a new FDE to consider. */ ++ struct dwarf_fde *fde = intern_fde (cache, &entry.fde); ++ if (fde == (void *) -1l || fde == NULL) ++ return NULL; ++ ++ /* If this happened to be what we would have read next, notice it. */ ++ if (cache->next_offset == offset) ++ cache->next_offset = next_offset; ++ ++ /* Sanity check the address range. */ ++ if (address < fde->start || address >= fde->end) ++ goto invalid; ++ ++ return fde; ++} ++ ++/* Use a binary search table in .eh_frame_hdr format, yield an FDE offset. */ ++static Dwarf_Off ++binary_search_fde (Dwarf_CFI *cache, Dwarf_Addr address) ++{ ++ const size_t size = 2 * encoded_value_size (&cache->data->d, cache->e_ident, ++ cache->search_table_encoding, ++ NULL); ++ ++ /* Dummy used by read_encoded_value. */ ++ Dwarf_CFI dummy_cfi = ++ { ++ .e_ident = cache->e_ident, ++ .datarel = cache->search_table_vaddr, ++ .frame_vaddr = cache->search_table_vaddr, ++ }; ++ ++ size_t l = 0, u = cache->search_table_entries; ++ while (l < u) ++ { ++ size_t idx = (l + u) / 2; ++ ++ const uint8_t *p = &cache->search_table[idx * size]; ++ Dwarf_Addr start; ++ if (unlikely (read_encoded_value (&dummy_cfi, ++ cache->search_table_encoding, &p, ++ &start))) ++ break; ++ if (address < start) ++ u = idx; ++ else ++ { ++ Dwarf_Addr fde; ++ if (unlikely (read_encoded_value (&dummy_cfi, ++ cache->search_table_encoding, &p, ++ &fde))) ++ break; ++ if (address >= start) ++ { ++ l = idx + 1; ++ ++ /* If this is the last entry, its upper bound is assumed to be ++ the end of the module. ++ XXX really should be end of containing PT_LOAD segment */ ++ if (l < cache->search_table_entries) ++ { ++ /* Look at the start address in the following entry. */ ++ Dwarf_Addr end; ++ if (unlikely (read_encoded_value ++ (&dummy_cfi, cache->search_table_encoding, &p, ++ &end))) ++ break; ++ if (address >= end) ++ continue; ++ } ++ ++ return fde - cache->frame_vaddr; ++ } ++ } ++ } ++ ++ return (Dwarf_Off) -1l; ++} ++ ++struct dwarf_fde * ++internal_function ++__libdw_find_fde (Dwarf_CFI *cache, Dwarf_Addr address) ++{ ++ /* Look for a cached FDE covering this address. */ ++ ++ const struct dwarf_fde fde_key = { .start = address, .end = 0 }; ++ struct dwarf_fde **found = tfind (&fde_key, &cache->fde_tree, &compare_fde); ++ if (found != NULL) ++ return *found; ++ ++ /* Use .eh_frame_hdr binary search table if possible. */ ++ if (cache->search_table != NULL) ++ { ++ Dwarf_Off offset = binary_search_fde (cache, address); ++ if (offset == (Dwarf_Off) -1l) ++ goto no_match; ++ return fde_by_offset (cache, address, offset); ++ } ++ ++ /* It's not there. Read more CFI entries until we find it. */ ++ while (1) ++ { ++ Dwarf_Off last_offset = cache->next_offset; ++ Dwarf_CFI_Entry entry; ++ int result = INTUSE(dwarf_next_cfi) (cache->e_ident, ++ &cache->data->d, CFI_IS_EH (cache), ++ last_offset, &cache->next_offset, ++ &entry); ++ if (result > 0) ++ break; ++ if (result < 0) ++ { ++ if (cache->next_offset == last_offset) ++ /* We couldn't progress past the bogus FDE. */ ++ break; ++ /* Skip the loser and look at the next entry. */ ++ continue; ++ } ++ ++ if (dwarf_cfi_cie_p (&entry)) ++ { ++ /* This is a CIE, not an FDE. We eagerly intern these ++ because the next FDE will usually refer to this CIE. */ ++ __libdw_intern_cie (cache, last_offset, &entry.cie); ++ continue; ++ } ++ ++ /* We have a new FDE to consider. */ ++ struct dwarf_fde *fde = intern_fde (cache, &entry.fde); ++ ++ if (fde == (void *) -1l) /* Bad FDE, but we can keep looking. */ ++ continue; ++ ++ if (fde == NULL) /* Bad data. */ ++ return NULL; ++ ++ /* Is this the one we're looking for? */ ++ if (fde->start <= address && fde->end > address) ++ return fde; ++ } ++ ++ no_match: ++ /* We found no FDE covering this address. */ ++ __libdw_seterrno (DWARF_E_NO_MATCH); ++ return NULL; ++} +diff --git a/libdw/frame-cache.c b/libdw/frame-cache.c +new file mode 100644 +index 0000000..f487663 +--- /dev/null ++++ b/libdw/frame-cache.c +@@ -0,0 +1,87 @@ ++/* Frame cache handling. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include "cfi.h" ++#include ++#include ++ ++ ++static void ++free_cie (void *arg) ++{ ++ struct dwarf_cie *cie = arg; ++ ++ free ((Dwarf_Frame *) cie->initial_state); ++ free (cie); ++} ++ ++#define free_fde free ++ ++static void ++free_expr (void *arg) ++{ ++ struct loc_s *loc = arg; ++ ++ free (loc->loc); ++ free (loc); ++} ++ ++void ++internal_function ++__libdw_destroy_frame_cache (Dwarf_CFI *cache) ++{ ++ /* Most of the data is in our two search trees. */ ++ tdestroy (cache->fde_tree, free_fde); ++ tdestroy (cache->cie_tree, free_cie); ++ tdestroy (cache->expr_tree, free_expr); ++} +diff --git a/libdw/libdw.h b/libdw/libdw.h +index 3f3e5a0..94320c7 100644 +--- a/libdw/libdw.h ++++ b/libdw/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,70 @@ typedef struct + } 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; ++ ++/* 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; + +@@ -229,6 +293,47 @@ extern int dwarf_nextcu (Dwarf *dwarf, Dwarf_Off off, Dwarf_Off *next_off, + __nonnull_attribute__ (3); + + ++/* 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. */ + extern Dwarf_Die *dwarf_offdie (Dwarf *dbg, Dwarf_Off offset, + Dwarf_Die *result) __nonnull_attribute__ (3); +@@ -257,7 +362,7 @@ extern int dwarf_child (Dwarf_Die *die, Dwarf_Die *result) + 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); + +@@ -518,6 +623,20 @@ extern int dwarf_getlocation_addr (Dwarf_Attribute *attr, Dwarf_Addr address, + 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); ++ ++ ++/* 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 +745,59 @@ extern int dwarf_macro_param2 (Dwarf_Macro *macro, Dwarf_Word *paramp, + 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/libdw/libdw.map b/libdw/libdw.map +index 8ef5f63..8eaeacd 100644 +--- a/libdw/libdw.map ++++ b/libdw/libdw.map +@@ -176,3 +176,59 @@ ELFUTILS_0.130 { + 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; ++ ++ELFUTILS_0.142 { ++ global: ++ dwarf_next_cfi; ++ dwarf_getcfi; ++ dwarf_getcfi_elf; ++ dwarf_cfi_addrframe; ++ dwarf_cfi_end; ++ dwarf_frame_cfa; ++ dwarf_frame_register; ++ dwarf_frame_info; ++ ++ dwfl_module_dwarf_cfi; ++ dwfl_module_eh_cfi; ++} ELFUTILS_0.138; ++ ++ELFUTILS_0.143 { ++ global: ++ dwarf_getlocation_implicit_value; ++ ++ # Replaced ELFUTILS_0.122 versions. Both versions point to the ++ # same implementation, but users of the new symbol version can ++ # presume that they use dwarf_attr_integrate properly. ++ dwarf_arrayorder; ++ dwarf_bitoffset; ++ dwarf_bitsize; ++ dwarf_bytesize; ++ dwarf_decl_column; ++ dwarf_decl_file; ++ dwarf_decl_line; ++ dwarf_srclang; ++ ++} ELFUTILS_0.142; ++ ++ELFUTILS_0.144 { ++ global: ++ dwarf_aggregate_size; ++} ELFUTILS_0.143; +diff --git a/libdw/libdwP.h b/libdw/libdwP.h +index f805295..248a58d 100644 +--- a/libdw/libdwP.h ++++ b/libdw/libdwP.h +@@ -1,5 +1,5 @@ + /* Internal definitions for libdwarf. +- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2002-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -76,6 +76,16 @@ struct loc_s + size_t nloc; + }; + ++/* Known DW_OP_implicit_value blocks already decoded. ++ This overlaps struct loc_s exactly, but only the ++ first member really has to match. */ ++struct loc_block_s ++{ ++ void *addr; ++ unsigned char *data; ++ size_t length; ++}; ++ + /* Valid indeces for the section data. */ + enum + { +@@ -84,7 +94,6 @@ enum + IDX_debug_aranges, + IDX_debug_line, + IDX_debug_frame, +- IDX_eh_frame, + IDX_debug_loc, + IDX_debug_pubnames, + IDX_debug_str, +@@ -136,6 +145,7 @@ enum + DWARF_E_NO_FLAG, + DWARF_E_INVALID_OFFSET, + DWARF_E_NO_DEBUG_RANGES, ++ DWARF_E_INVALID_CFI, + }; + + +@@ -172,6 +182,9 @@ struct Dwarf + /* Address ranges. */ + Dwarf_Aranges *aranges; + ++ /* Cached info from the CFI section. */ ++ struct Dwarf_CFI_s *cfi; ++ + /* Internal memory handling. This is basically a simplified + reimplementation of obstacks. Unfortunately the standard obstack + implementation is not usable in libraries. */ +@@ -194,12 +207,12 @@ struct Dwarf + /* Abbreviation representation. */ + struct Dwarf_Abbrev + { ++ Dwarf_Off offset; ++ unsigned char *attrp; ++ unsigned int attrcnt; + unsigned int code; + unsigned int tag; +- int has_children; +- unsigned int attrcnt; +- unsigned char *attrp; +- Dwarf_Off offset; ++ bool has_children; + }; + + #include "dwarf_abbrev_hash.h" +@@ -208,7 +221,7 @@ struct Dwarf_Abbrev + /* Files in line information records. */ + struct Dwarf_Files_s + { +- Dwarf *dbg; ++ struct Dwarf_CU *cu; + unsigned int ndirs; + unsigned int nfiles; + struct Dwarf_Fileinfo_s +@@ -223,26 +236,27 @@ 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]; +- }; ++struct Dwarf_Line_s ++{ ++ Dwarf_Files *files; ++ ++ 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; ++}; + ++struct Dwarf_Lines_s ++{ ++ size_t nlines; ++ struct Dwarf_Line_s info[0]; ++}; + + /* Representation of address ranges. */ + struct Dwarf_Aranges_s +@@ -413,12 +427,175 @@ extern int __libdw_visit_scopes (unsigned int depth, + void *arg) + __nonnull_attribute__ (2, 3) internal_function; + ++/* Parse a DWARF Dwarf_Block into an array of Dwarf_Op's, ++ and cache the result (via tsearch). */ ++extern int __libdw_intern_expression (Dwarf *dbg, ++ bool other_byte_order, ++ unsigned int address_size, ++ void **cache, const Dwarf_Block *block, ++ bool valuep, ++ Dwarf_Op **llbuf, size_t *listlen, ++ int sec_index) ++ __nonnull_attribute__ (4, 5, 7, 8) internal_function; ++ ++ + /* Return error code of last failing function call. This value is kept + separately for each thread. */ + extern int __dwarf_errno_internal (void); + + ++/* Reader hooks. */ ++ ++/* Relocation hooks return -1 on error (in that case the error code ++ must already have been set), 0 if there is no relocation and 1 if a ++ relocation was present.*/ ++ ++static inline int ++__libdw_relocate_address (Dwarf *dbg __attribute__ ((unused)), ++ int sec_index __attribute__ ((unused)), ++ const void *addr __attribute__ ((unused)), ++ int width __attribute__ ((unused)), ++ Dwarf_Addr *val __attribute__ ((unused))) ++{ ++ return 0; ++} ++ ++static inline int ++__libdw_relocate_offset (Dwarf *dbg __attribute__ ((unused)), ++ int sec_index __attribute__ ((unused)), ++ const void *addr __attribute__ ((unused)), ++ int width __attribute__ ((unused)), ++ Dwarf_Off *val __attribute__ ((unused))) ++{ ++ return 0; ++} ++ ++static inline Elf_Data * ++__libdw_checked_get_data (Dwarf *dbg, int sec_index) ++{ ++ Elf_Data *data = dbg->sectiondata[sec_index]; ++ if (unlikely (data == NULL) ++ || unlikely (data->d_buf == NULL)) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_DWARF); ++ return NULL; ++ } ++ return data; ++} ++ ++static inline int ++__libdw_offset_in_section (Dwarf *dbg, int sec_index, ++ Dwarf_Off offset, size_t size) ++{ ++ Elf_Data *data = __libdw_checked_get_data (dbg, sec_index); ++ if (data == NULL) ++ return -1; ++ if (unlikely (offset > data->d_size) ++ || unlikely (data->d_size - offset < size)) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_OFFSET); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++static inline bool ++__libdw_in_section (Dwarf *dbg, int sec_index, ++ const void *addr, size_t size) ++{ ++ Elf_Data *data = __libdw_checked_get_data (dbg, sec_index); ++ if (data == NULL) ++ return false; ++ if (unlikely (addr < data->d_buf) ++ || unlikely (data->d_size - (addr - data->d_buf) < size)) ++ { ++ __libdw_seterrno (DWARF_E_INVALID_OFFSET); ++ return false; ++ } ++ ++ return true; ++} ++ ++#define READ_AND_RELOCATE(RELOC_HOOK, VAL) \ ++ ({ \ ++ if (!__libdw_in_section (dbg, sec_index, addr, width)) \ ++ return -1; \ ++ \ ++ const unsigned char *orig_addr = addr; \ ++ if (width == 4) \ ++ VAL = read_4ubyte_unaligned_inc (dbg, addr); \ ++ else \ ++ VAL = read_8ubyte_unaligned_inc (dbg, addr); \ ++ \ ++ int status = RELOC_HOOK (dbg, sec_index, orig_addr, width, &VAL); \ ++ if (status < 0) \ ++ return status; \ ++ status > 0; \ ++ }) ++ ++static inline int ++__libdw_read_address_inc (Dwarf *dbg, ++ int sec_index, const unsigned char **addrp, ++ int width, Dwarf_Addr *ret) ++{ ++ const unsigned char *addr = *addrp; ++ READ_AND_RELOCATE (__libdw_relocate_address, (*ret)); ++ *addrp = addr; ++ return 0; ++} ++ ++static inline int ++__libdw_read_address (Dwarf *dbg, ++ int sec_index, const unsigned char *addr, ++ int width, Dwarf_Addr *ret) ++{ ++ READ_AND_RELOCATE (__libdw_relocate_address, (*ret)); ++ return 0; ++} ++ ++static inline int ++__libdw_read_offset_inc (Dwarf *dbg, ++ int sec_index, const unsigned char **addrp, ++ int width, Dwarf_Off *ret, int sec_ret, ++ size_t size) ++{ ++ const unsigned char *addr = *addrp; ++ READ_AND_RELOCATE (__libdw_relocate_offset, (*ret)); ++ *addrp = addr; ++ return __libdw_offset_in_section (dbg, sec_ret, *ret, size); ++} ++ ++static inline int ++__libdw_read_offset (Dwarf *dbg, ++ int sec_index, const unsigned char *addr, ++ int width, Dwarf_Off *ret, int sec_ret, ++ size_t size) ++{ ++ READ_AND_RELOCATE (__libdw_relocate_offset, (*ret)); ++ return __libdw_offset_in_section (dbg, sec_ret, *ret, size); ++} ++ ++/* Read up begin/end pair and increment read pointer. ++ - If it's normal range record, set up *BEGINP and *ENDP and return 0. ++ - If it's base address selection record, set up *BASEP and return 1. ++ - If it's end of rangelist, don't set anything and return 2 ++ - If an error occurs, don't set anything and return <0. */ ++int __libdw_read_begin_end_pair_inc (Dwarf *dbg, int sec_index, ++ unsigned char **addr, int width, ++ Dwarf_Addr *beginp, Dwarf_Addr *endp, ++ Dwarf_Addr *basep) ++ internal_function; ++ ++unsigned char * __libdw_formptr (Dwarf_Attribute *attr, int sec_index, ++ int err_nodata, unsigned char **endpp, ++ Dwarf_Off *offsetp) ++ internal_function; ++ ++ ++ + /* Aliases to avoid PLTs. */ ++INTDECL (dwarf_aggregate_size) + INTDECL (dwarf_attr) + INTDECL (dwarf_attr_integrate) + INTDECL (dwarf_begin_elf) +@@ -448,6 +625,7 @@ INTDECL (dwarf_nextcu) + INTDECL (dwarf_offdie) + INTDECL (dwarf_ranges) + INTDECL (dwarf_siblingof) ++INTDECL (dwarf_srclang) + INTDECL (dwarf_tag) + + #endif /* libdwP.h */ +diff --git a/libdw/libdw_form.c b/libdw/libdw_form.c +index ad78f4b..219dd79 100644 +--- a/libdw/libdw_form.c ++++ b/libdw/libdw_form.c +@@ -1,5 +1,5 @@ + /* Helper functions for form handling. +- Copyright (C) 2003, 2004, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2003-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2003. + +@@ -78,6 +78,7 @@ __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, unsigned int form, + break; + + case DW_FORM_strp: ++ case DW_FORM_sec_offset: + result = cu->offset_size; + break; + +@@ -94,11 +95,16 @@ __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, unsigned int form, + break; + + case DW_FORM_block: ++ case DW_FORM_exprloc: + saved = valp; + get_uleb128 (u128, valp); + result = u128 + (valp - saved); + break; + ++ case DW_FORM_flag_present: ++ result = 0; ++ break; ++ + case DW_FORM_ref1: + case DW_FORM_data1: + case DW_FORM_flag: +@@ -117,6 +123,7 @@ __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, unsigned int form, + + case DW_FORM_data8: + case DW_FORM_ref8: ++ case DW_FORM_ref_sig8: + result = 8; + break; + +diff --git a/libdw/memory-access.h b/libdw/memory-access.h +index 52b41b5..13f79ec 100644 +--- a/libdw/memory-access.h ++++ b/libdw/memory-access.h +@@ -1,5 +1,5 @@ + /* Unaligned memory access functionality. +- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc. ++ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -186,19 +186,32 @@ union unaligned + int64_t s8; + } __attribute__ ((packed)); + ++# define read_2ubyte_unaligned(Dbg, Addr) \ ++ read_2ubyte_unaligned_1 ((Dbg)->other_byte_order, (Addr)) ++# define read_2sbyte_unaligned(Dbg, Addr) \ ++ read_2sbyte_unaligned_1 ((Dbg)->other_byte_order, (Addr)) ++# define read_4ubyte_unaligned(Dbg, Addr) \ ++ read_4ubyte_unaligned_1 ((Dbg)->other_byte_order, (Addr)) ++# define read_4sbyte_unaligned(Dbg, Addr) \ ++ read_4sbyte_unaligned_1 ((Dbg)->other_byte_order, (Addr)) ++# define read_8ubyte_unaligned(Dbg, Addr) \ ++ read_8ubyte_unaligned_1 ((Dbg)->other_byte_order, (Addr)) ++# define read_8sbyte_unaligned(Dbg, Addr) \ ++ read_8sbyte_unaligned_1 ((Dbg)->other_byte_order, (Addr)) ++ + static inline uint16_t +-read_2ubyte_unaligned (Dwarf *dbg, const void *p) ++read_2ubyte_unaligned_1 (bool other_byte_order, const void *p) + { + const union unaligned *up = p; +- if (dbg->other_byte_order) ++ if (unlikely (other_byte_order)) + return bswap_16 (up->u2); + return up->u2; + } + static inline int16_t +-read_2sbyte_unaligned (Dwarf *dbg, const void *p) ++read_2sbyte_unaligned_1 (bool other_byte_order, const void *p) + { + const union unaligned *up = p; +- if (dbg->other_byte_order) ++ if (unlikely (other_byte_order)) + return (int16_t) bswap_16 (up->u2); + return up->s2; + } +@@ -210,35 +223,35 @@ read_4ubyte_unaligned_noncvt (const void *p) + return up->u4; + } + static inline uint32_t +-read_4ubyte_unaligned (Dwarf *dbg, const void *p) ++read_4ubyte_unaligned_1 (bool other_byte_order, const void *p) + { + const union unaligned *up = p; +- if (dbg->other_byte_order) ++ if (unlikely (other_byte_order)) + return bswap_32 (up->u4); + return up->u4; + } + static inline int32_t +-read_4sbyte_unaligned (Dwarf *dbg, const void *p) ++read_4sbyte_unaligned_1 (bool other_byte_order, const void *p) + { + const union unaligned *up = p; +- if (dbg->other_byte_order) ++ if (unlikely (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) ++read_8ubyte_unaligned_1 (bool other_byte_order, const void *p) + { + const union unaligned *up = p; +- if (dbg->other_byte_order) ++ if (unlikely (other_byte_order)) + return bswap_64 (up->u8); + return up->u8; + } + static inline int64_t +-read_8sbyte_unaligned (Dwarf *dbg, const void *p) ++read_8sbyte_unaligned_1 (bool other_byte_order, const void *p) + { + const union unaligned *up = p; +- if (dbg->other_byte_order) ++ if (unlikely (other_byte_order)) + return (int64_t) bswap_64 (up->u8); + return up->s8; + } +@@ -246,6 +259,17 @@ read_8sbyte_unaligned (Dwarf *dbg, const void *p) + #endif /* allow unaligned */ + + ++#define read_ubyte_unaligned(Nbytes, Dbg, Addr) \ ++ ((Nbytes) == 2 ? read_2ubyte_unaligned (Dbg, Addr) \ ++ : (Nbytes) == 4 ? read_4ubyte_unaligned (Dbg, Addr) \ ++ : read_8ubyte_unaligned (Dbg, Addr)) ++ ++#define read_sbyte_unaligned(Nbytes, Dbg, Addr) \ ++ ((Nbytes) == 2 ? read_2sbyte_unaligned (Dbg, Addr) \ ++ : (Nbytes) == 4 ? read_4sbyte_unaligned (Dbg, Addr) \ ++ : read_8sbyte_unaligned (Dbg, Addr)) ++ ++ + #define read_2ubyte_unaligned_inc(Dbg, Addr) \ + ({ uint16_t t_ = read_2ubyte_unaligned (Dbg, Addr); \ + Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 2); \ +@@ -273,4 +297,15 @@ read_8sbyte_unaligned (Dwarf *dbg, const void *p) + Addr = (__typeof (Addr)) (((uintptr_t) (Addr)) + 8); \ + t_; }) + ++ ++#define read_ubyte_unaligned_inc(Nbytes, Dbg, Addr) \ ++ ((Nbytes) == 2 ? read_2ubyte_unaligned_inc (Dbg, Addr) \ ++ : (Nbytes) == 4 ? read_4ubyte_unaligned_inc (Dbg, Addr) \ ++ : read_8ubyte_unaligned_inc (Dbg, Addr)) ++ ++#define read_sbyte_unaligned_inc(Nbytes, Dbg, Addr) \ ++ ((Nbytes) == 2 ? read_2sbyte_unaligned_inc (Dbg, Addr) \ ++ : (Nbytes) == 4 ? read_4sbyte_unaligned_inc (Dbg, Addr) \ ++ : read_8sbyte_unaligned_inc (Dbg, Addr)) ++ + #endif /* memory-access.h */ +diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog +index 01a2537..7df643e 100644 +--- a/libdwfl/ChangeLog ++++ b/libdwfl/ChangeLog +@@ -1,3 +1,427 @@ ++2010-02-17 Roland McGrath ++ ++ * dwfl_segment_report_module.c (addr_segndx): Take new flag argument. ++ If set, find the first index not below ADDR. ++ (dwfl_segment_report_module): Update callers. ++ Pass true when calculating return value. ++ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++ * find-debuginfo.c (find_debuginfo_in_path): Fix uninitialized ++ variable in failure path. ++ ++2010-02-02 Mark Wielaard ++ ++ * dwfl_module_dwarf_cfi.c (dwfl_module_dwarf_cfi): Always set bias. ++ * dwfl_module_eh_cfi.c (dwfl_module_eh_cfi): Likewise ++ ++2010-01-07 Roland McGrath ++ ++ * core-file.c (dwfl_core_file_report): Use elf_getphdrnum. ++ * dwfl_module_build_id.c (__libdwfl_find_build_id): Likewise. ++ * dwfl_module_getdwarf.c (open_elf, find_dynsym): Likewise. ++ * dwfl_report_elf.c (__libdwfl_report_elf): Likewise. ++ ++2010-01-06 Roland McGrath ++ ++ * relocate.c (relocate_getsym): For SHN_COMMON, zero st_value. ++ (relocate_section): Let unresolved SHN_COMMON symbol stay 0. ++ ++2009-11-16 Roland McGrath ++ ++ * relocate.c (relocate_section): Skip SHT_NOBITS or empty target scn. ++ ++2009-11-12 Petr Machata ++ ++ * core-file.c (dwfl_elf_phdr_memory_callback): Only load ahead if ++ the chunk is both offset-contiguous and vaddr-contiguous. ++ ++2009-11-05 Roland McGrath ++ ++ * link_map.c (report_r_debug): Skip entries with l_ld==0. ++ Use dwfl_addrmodule for l_ld lookup, don't bail on lookup failure. ++ ++2009-09-04 Roland McGrath ++ ++ * image-header.c (__libdw_image_header): Fix tranposed comparison. ++ ++2009-08-27 Roland McGrath ++ ++ * image-header.c: New file. ++ * Makefile.am (libdwfl_a_SOURCES): Add it. ++ * libdwflP.h: Declare __libdw_image_header. ++ * open.c (decompress): Don't consume ELF on failure. ++ (what_kind): New function, broken out of ... ++ (__libdw_open_file): ... here. Call it. ++ If it fails, try __libdw_image_header and then try what_kind again. ++ ++ * gzip.c (unzip): Reuse *WHOLE as first INPUT_BUFFER, ++ leave it behind for next decompressor. ++ * open.c (decompress): Free BUFFER on failure. ++ ++2009-08-26 Roland McGrath ++ ++ * gzip.c (find_zImage_payload): New function, broken out of ... ++ (mapped_zImage): ... here. Call it. ++ (find_zImage_payload) [LZMA]: Match LZMA-compressed kernels with ++ stupid method of just trying the decoder. ++ ++ * open.c [USE_LZMA]: Try __libdw_unlzma. ++ * libdwflP.h: Declare it. ++ (DWFL_ERRORS): Add DWFL_E_LZMA. ++ * gzip.c [LZMA]: Implement liblzma version for XZ file format. ++ * lzma.c: New file. ++ * Makefile.am [LZMA] (libdwfl_a_SOURCES): Add it. ++ ++ * gzip.c (mapped_zImage): Limit scan to 32kb. ++ Make this unconditional, support bzip2 kernel images too. ++ (unzip): Use direct inflate method for non-mmap case too. ++ Only zlib uses the stream method. ++ ++2009-08-09 Roland McGrath ++ ++ * dwfl_module_build_id.c: Use new macros for versioned definitions. ++ ++2009-07-08 Roland McGrath ++ ++ * dwfl_module_dwarf_cfi.c: New file. ++ * dwfl_module_eh_cfi.c: New file. ++ * Makefile.am (libdwfl_a_SOURCES): Add them. ++ * libdwflP.h (struct Dwfl_Module): New members `dwarf_cfi', `eh_cfi. ++ Add INTDECL for dwfl_module_eh_cfi, dwfl_module_dwarf_cfi. ++ ++2009-07-08 Roland McGrath ++ ++ * libdwflP.h (struct Dwfl_Module): Reorder members to pack better. ++ ++2009-06-18 Mark Wielaard ++ ++ * dwfl_report_elf.c (__libdwfl_report_elf): Return NULL on overlap. ++ ++2009-06-13 Ulrich Drepper ++ ++ * derelocate.c: Don't use deprecated libelf functions. ++ * dwfl_module_getdwarf.c: Likewise. ++ * relocate.c: Likewise. ++ ++2009-04-23 Ulrich Drepper ++ ++ * dwfl_module_build_id.c: Define versioned symbols only if SHARED is ++ defined. Otherwise just define the latest version. ++ ++2009-04-22 Roland McGrath ++ ++ * relocate.c (resolve_symbol): Apply correct bias to st_value found in ++ a non-ET_REL module. ++ ++ * dwfl_module_build_id.c (__libdwfl_find_build_id): Fix last change to ++ adjust properly for non-ET_REL. ++ ++2009-04-21 Roland McGrath ++ ++ * dwfl_module_getsym.c: Apply non-ET_REL bias only if SHF_ALLOC. ++ ++ * relocate.c (__libdwfl_relocate_value): Assert that MOD is ET_REL. ++ * derelocate.c (cache_sections): Call __libdwfl_relocate_value only ++ for ET_REL. ++ * dwfl_module_build_id.c (__libdwfl_find_build_id): Likewise. ++ ++2009-04-20 Roland McGrath ++ ++ * dwfl_module_getdwarf.c (__libdwfl_getelf): Add internal_function. ++ ++2009-04-19 Roland McGrath ++ ++ * dwfl_module_getdwarf.c (find_file): Renamed to ... ++ (__libdwfl_getelf): ... this. Make it global. ++ (find_symtab, find_dw): Update callers. ++ (dwfl_module_getelf): Functions moved ... ++ * dwfl_module_getelf.c: ... here, new file. ++ * Makefile.am (libdwfl_a_SOURCES): Add it. ++ * libdwflP.h: Declare __libdwfl_getelf. ++ ++2009-04-14 Roland McGrath ++ ++ * dwfl_segment_report_module.c: Handle DT_STRTAB value being either ++ absolute (already adjusted in place) or needing load bias adjustment. ++ ++ * core-file.c (dwfl_elf_phdr_memory_callback): Fix return value for ++ gelf_getphdr failure. Fix file size limit checks. ++ ++ * dwfl_segment_report_module.c: Fix underflow in DYNSTRSZ check. ++ ++2009-04-08 Roland McGrath ++ ++ * dwfl_module_getsym.c: Don't adjust for bias again after ++ __libdwfl_relocate_value. ++ ++ * relocate.c (__libdwfl_relocate_value): Don't adjust a value from ++ a non-SHF_ALLOC section. ++ (relocate_getsym): Test st_shndx for SHN_* values, not *SHNDX. ++ * dwfl_module_getsym.c (dwfl_module_getsym): Likewise. ++ ++2009-03-09 Roland McGrath ++ ++ * dwfl_module_build_id.c (__libdwfl_find_build_id): Move SHSTRNDX ++ variable to outer scope, so we cache it for the loop. ++ ++ * relocate.c (__libdwfl_relocate_value): Add MOD->main.bias to sh_addr. ++ ++2009-02-12 Roland McGrath ++ ++ * dwfl_module_build_id.c (__libdwfl_find_build_id): Use ++ __libdwfl_relocate_value to find correct sh_addr value. ++ ++2009-02-10 Roland McGrath ++ ++ * dwfl_report_elf.c (__libdwfl_report_elf): Take new arg SANITY. ++ If false, don't fail for NO_PHDR. ++ (dwfl_report_elf): Update caller. ++ * libdwflP.h: Update decl. ++ * offline.c (process_elf): Call it with false, so we don't refuse ++ dubiously-formed objects here. ++ ++ * link_map.c (consider_executable): Don't assert dwfl_addrsegment ++ finds our module. We shouldn't crash when we confuse some guesses. ++ ++2009-02-10 Ulrich Drepper ++ ++ * open.c (decompress): Avoid crash with empty input file. ++ ++2009-01-27 Roland McGrath ++ ++ * dwfl_report_elf.c (__libdwfl_report_elf): Ignore trailing PT_LOAD ++ with zero vaddr and memsz. ++ ++2009-01-22 Roland McGrath ++ ++ * open.c (decompress): Move BUFFER, SIZE decls outside #if. ++ ++ * dwfl_segment_report_module.c (addr_segndx): Remove bogus adjustments ++ after address-matching loop. ++ ++ * segment.c (lookup): Fix fencepost in checking for HINT match. ++ ++2009-01-14 Roland McGrath ++ ++ * gzip.c [!BZLIB] (mapped_zImage): New function. ++ (unzip) [!BZLIB]: Grok Linux kernel zImage format. ++ ++2009-01-10 Ulrich Drepper ++ ++ * dwfl_error.c: Always use __thread. Remove all !USE_TLS code. ++ ++2009-01-08 Roland McGrath ++ ++ * linux-kernel-modules.c (dwfl_linux_kernel_report_offline): ++ Skip subdirectory named "source". ++ (dwfl_linux_kernel_find_elf): Likewise. ++ ++2009-01-06 Roland McGrath ++ ++ * linux-kernel-modules.c (check_suffix): New function. ++ Match ".ko", ".ko.gz", and ".ko.bz2" suffixes. ++ (dwfl_linux_kernel_report_offline): Use it. ++ (dwfl_linux_kernel_find_elf): Likewise. ++ ++2009-01-05 Roland McGrath ++ ++ * argp-std.c (parse_opt): Use __libdw_open_file for core file. ++ * dwfl_build_id_find_debuginfo.c: Use it to open the file. ++ * dwfl_build_id_find_elf.c: Likewise. ++ * dwfl_module_getdwarf.c (open_elf): Likewise. ++ * dwfl_report_elf.c: Likewise. ++ * find-debuginfo.c (validate): Likewise. ++ * offline.c (__libdwfl_report_offline): Likewise. ++ ++ * libdwflP.h: Declare __libdw_open_file. ++ * open.c: New file. ++ * Makefile.am (libdwfl_a_SOURCES): Add it. ++ ++ * gzip.c: New file. ++ * Makefile.am [ZLIB] (libdwfl_a_SOURCES): Add it. ++ * bzip2.c: New file. ++ * Makefile.am [BZLIB] (libdwfl_a_SOURCES): Add it. ++ * libdwflP.h: Declare __libdw_gunzip, __libdw_bunzip2. ++ ++2008-12-16 Roland McGrath ++ ++ * 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 ++ ++ * 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 ++ ++ * derelocate.c (dwfl_module_relocate_address): Apply main.bias, not ++ debug.bias. ++ ++2008-12-11 Roland McGrath ++ ++ * 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 ++ ++ * dwfl_getmodules.c (dwfl_getmodules): Typo fix in last change. ++ ++2008-11-26 Roland McGrath ++ ++ * dwfl_getmodules.c (dwfl_getmodules): Encode iteration style in ++ return value, and interpret encoded OFFSET argument. ++ ++2008-10-07 Roland McGrath ++ ++ * dwfl_module_build_id.c (check_notes): Fix typo in vaddr calculation. ++ ++2008-09-29 Roland McGrath ++ ++ * 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 ++ ++ * segment.c (reify_segments): Fix last change. ++ ++2008-08-27 Roland McGrath ++ ++ * linux-proc-maps.c (read_proc_memory): Return 0 for EINVAL or EPERM ++ failure from pread64. ++ ++2008-08-26 Roland McGrath ++ ++ * segment.c (reify_segments): Insert a trailing segment for a module ++ end that is above the highest current segment. ++ ++2008-08-25 Roland McGrath ++ ++ * 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 ++ ++ * dwfl_module_addrsym.c (dwfl_module_addrsym): Improve logic ++ which decides which symbol is "closest" to a given address. ++ ++2008-08-15 Roland McGrath ++ ++ * 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 ++ ++ * linux-kernel-modules.c: Include before . ++ ++2008-07-17 Roland McGrath ++ ++ * 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 ++ ++ * dwfl_module_addrsym.c (dwfl_module_addrsym): Exclude undefined ++ symbols. ++ ++2008-05-22 Petr Machata ++ ++ * dwfl_module_getdwarf.c (open_elf): Bias of ET_EXEC files is always 0. ++ ++2008-05-06 Roland McGrath ++ ++ * 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 ++ ++ * 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 ++ ++ * linux-kernel-modules.c (report_kernel): Fix crash when ++ dwfl_report_elf fails. ++ ++2008-04-05 Roland McGrath ++ ++ * 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 ++ ++ * 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 ++ ++ * dwfl_module_getsrc.c: Adjust address for module bias before search. ++ ++2008-03-01 Roland McGrath ++ ++ * 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 + + * relocate.c (relocate_section): Check for an unhandled relocation +@@ -403,7 +827,7 @@ + 2006-09-05 Roland McGrath + + * derelocate.c (cache_sections): Use alloca instead of variable-sized +- auto array, in function already alloca. ++ auto array, in function already using alloca. + + 2006-08-14 Roland McGrath + +diff --git a/libdwfl/Makefile.am b/libdwfl/Makefile.am +index 0371993..8ec1f4f 100644 +--- a/libdwfl/Makefile.am ++++ b/libdwfl/Makefile.am +@@ -2,7 +2,7 @@ + ## + ## Process this file with automake to create Makefile.in + ## +-## 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 +@@ -26,20 +26,11 @@ + ## Network licensing program, please visit 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 ++include $(top_srcdir)/config/eu.am ++INCLUDES += -I$(srcdir) -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ ++ -I$(srcdir)/../libdw + VERSION = 1 + +-COMPILE.os = $(filter-out -fprofile-arcs, $(filter-out -ftest-coverage, \ +- $(COMPILE))) +- + noinst_LIBRARIES = libdwfl.a + if !MUDFLAP + noinst_LIBRARIES += libdwfl_pic.a +@@ -50,9 +41,9 @@ 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 \ +- dwfl_module_info.c dwfl_getmodules.c \ +- dwfl_module_getdwarf.c dwfl_getdwarf.c \ ++ derelocate.c offline.c segment.c \ ++ dwfl_module_info.c dwfl_getmodules.c dwfl_getdwarf.c \ ++ dwfl_module_getdwarf.c dwfl_module_getelf.c \ + dwfl_validate_address.c \ + argp-std.c find-debuginfo.c \ + dwfl_build_id_find_elf.c \ +@@ -68,17 +59,28 @@ libdwfl_a_SOURCES = dwfl_begin.c dwfl_end.c dwfl_error.c dwfl_version.c \ + dwfl_module_getsrc_file.c \ + libdwfl_crc32.c libdwfl_crc32_file.c \ + elf-from-memory.c \ ++ dwfl_module_dwarf_cfi.c dwfl_module_eh_cfi.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_module_register_names.c \ ++ dwfl_segment_report_module.c \ ++ link_map.c core-file.c open.c image-header.c + ++if ZLIB ++libdwfl_a_SOURCES += gzip.c ++endif ++if BZLIB ++libdwfl_a_SOURCES += bzip2.c ++endif ++if LZMA ++libdwfl_a_SOURCES += lzma.c ++endif + + 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 +@@ -87,20 +89,11 @@ 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) ++CLEANFILES += $(am_libdwfl_pic_a_OBJECTS) +diff --git a/libdwfl/argp-std.c b/libdwfl/argp-std.c +index 1139788..ce2e20a 100644 +--- a/libdwfl/argp-std.c ++++ b/libdwfl/argp-std.c +@@ -1,5 +1,5 @@ + /* Standard argp argument parsers for tools using libdwfl. +- Copyright (C) 2005, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2007, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -52,17 +52,22 @@ + #include + #include + #include ++#include ++#include + + /* gettext helper macros. */ + #define _(Str) dgettext ("elfutils", Str) + + +-#define OPT_DEBUGINFO 0x100 ++#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, +@@ -84,6 +89,9 @@ static const Dwfl_Callbacks offline_callbacks = + .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 = +@@ -108,13 +116,13 @@ 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); +- if (dwfl != NULL) +- dwfl_end (dwfl); + } + inline error_t fail (Dwfl *dwfl, int errnum, const char *msg) + { +@@ -151,8 +159,8 @@ parse_opt (int key, char *arg, struct argp_state *state) + else + { + toomany: +- argp_error (state, +- "%s", _("only one of -e, -p, -k, or -K allowed")); ++ argp_error (state, "%s", ++ _("only one of -e, -p, -k, -K, or --core allowed")); + return EINVAL; + } + } +@@ -176,6 +184,7 @@ parse_opt (int key, char *arg, struct argp_state *state) + { + FILE *f = fopen (arg, "r"); + if (f == NULL) ++ nofile: + { + int code = errno; + argp_failure (state, EXIT_FAILURE, code, +@@ -193,6 +202,50 @@ parse_opt (int key, char *arg, struct argp_state *state) + 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; ++ Dwfl_Error error = __libdw_open_file (&fd, &core, true, false); ++ if (error != DWFL_E_NOERROR) ++ { ++ argp_failure (state, EXIT_FAILURE, 0, ++ _("cannot read ELF core file: %s"), ++ INTUSE(dwfl_errmsg) (error)); ++ return error == DWFL_E_ERRNO ? errno : 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) + { +diff --git a/libdwfl/bzip2.c b/libdwfl/bzip2.c +new file mode 100644 +index 0000000..8ad4ee5 +--- /dev/null ++++ b/libdwfl/bzip2.c +@@ -0,0 +1,4 @@ ++/* bzlib is almost just like zlib. */ ++ ++#define BZLIB ++#include "gzip.c" +diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c +new file mode 100644 +index 0000000..1872d8a +--- /dev/null ++++ b/libdwfl/core-file.c +@@ -0,0 +1,472 @@ ++/* Core file handling. ++ Copyright (C) 2008-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 ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ In addition, as a special exception, Red Hat, Inc. gives You the ++ additional right to link the code of Red Hat elfutils with code licensed ++ under any Open Source Initiative certified open source license ++ (http://www.opensource.org/licenses/index.php) which requires the ++ distribution of source code with any binary distribution and to ++ distribute linked combinations of the two. Non-GPL Code permitted under ++ this exception must only link to the code of Red Hat elfutils through ++ those well defined interfaces identified in the file named EXCEPTION ++ found in the source code files (the "Approved Interfaces"). The files ++ of Non-GPL Code may instantiate templates or use macros or inline ++ functions from the Approved Interfaces without causing the resulting ++ work to be covered by the GNU General Public License. Only Red Hat, ++ Inc. may make changes or additions to the list of Approved Interfaces. ++ Red Hat's grant of this exception is conditioned upon your not adding ++ any new exceptions. If you wish to add a new Approved Interface or ++ exception, please contact Red Hat. You must obey the GNU General Public ++ License in all respects for all of the Red Hat elfutils code and other ++ code used in conjunction with Red Hat elfutils except the Non-GPL Code ++ covered by this exception. If you modify this file, you may extend this ++ exception to your version of the file, but you are not obligated to do ++ so. If you do not wish to provide this exception without modification, ++ you must delete this exception statement from your version and license ++ this file solely under the GPL without exception. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#include ++#include "../libelf/libelfP.h" /* For NOTE_ALIGN. */ ++#undef _ ++#include "libdwflP.h" ++#include ++ ++#include ++#include ++#include ++#include ++#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, size_t phnum, GElf_Phdr *notes) ++{ ++ if (unlikely (dwfl == NULL)) ++ return -1; ++ ++ int result = 0; ++ ++ if (notes != NULL) ++ notes->p_type = PT_NULL; ++ ++ for (size_t ndx = 0; result >= 0 && ndx < 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 false; ++ 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; ++ GElf_Addr end_vaddr; ++ ++ inline void update_end () ++ { ++ end = (phdr.p_offset + phdr.p_filesz + align - 1) & -align; ++ end_vaddr = (phdr.p_vaddr + phdr.p_memsz + align - 1) & -align; ++ } ++ ++ update_end (); ++ ++ /* 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 ++ || phdr.p_vaddr > end_vaddr) ++ /* It's discontiguous! */ ++ return false; ++ ++ update_end (); ++ } ++ } ++ 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); ++ ++ /* Make sure we don't look past the end of the actual file, ++ even if the headers tell us to. */ ++ if (unlikely (end > elf->maximum_size)) ++ end = elf->maximum_size; ++ ++ /* If the file is too small, there is nothing at all to get. */ ++ if (unlikely (start >= end)) ++ return false; ++ ++ 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; ++ ++ size_t phnum; ++ if (unlikely (ehdr == NULL) || unlikely (elf_getphdrnum (elf, &phnum) != 0)) ++ { ++ __libdw_seterrno (DWFL_E_LIBELF); ++ return -1; ++ } ++ ++ /* First report each PT_LOAD segment. */ ++ int ndx = dwfl_report_core_segments (dwfl, elf, phnum, ¬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 < (int) 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/derelocate.c b/libdwfl/derelocate.c +index 0877276..56ba25a 100644 +--- a/libdwfl/derelocate.c ++++ b/libdwfl/derelocate.c +@@ -1,5 +1,5 @@ + /* Recover relocatibility for addresses computed from debug information. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -94,7 +94,7 @@ cache_sections (Dwfl_Module *mod) + size_t nrefs = 0; + + size_t shstrndx; +- if (unlikely (elf_getshstrndx (mod->main.elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (mod->main.elf, &shstrndx) < 0)) + { + elf_error: + __libdwfl_seterrno (DWFL_E_LIBELF); +@@ -110,7 +110,8 @@ cache_sections (Dwfl_Module *mod) + if (shdr == NULL) + goto elf_error; + +- if ((shdr->sh_flags & SHF_ALLOC) && shdr->sh_addr == 0) ++ if ((shdr->sh_flags & SHF_ALLOC) && shdr->sh_addr == 0 ++ && mod->e_type == ET_REL) + { + /* This section might not yet have been looked at. */ + if (__libdwfl_relocate_value (mod, mod->main.elf, &shstrndx, +@@ -238,6 +239,7 @@ dwfl_module_relocations (Dwfl_Module *mod) + return 1; + + case ET_EXEC: ++ assert (mod->main.bias == 0); + assert (mod->debug.bias == 0); + break; + } +@@ -353,16 +355,26 @@ find_section (Dwfl_Module *mod, Dwarf_Addr *addr) + int + dwfl_module_relocate_address (Dwfl_Module *mod, Dwarf_Addr *addr) + { +- if (check_module (mod)) ++ if (unlikely (check_module (mod))) + return -1; + +- if (mod->e_type != ET_REL) ++ switch (mod->e_type) + { +- *addr -= mod->debug.bias; +- return 0; ++ 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 find_section (mod, addr); ++ return 0; + } + INTDEF (dwfl_module_relocate_address) + +@@ -397,3 +409,4 @@ dwfl_module_address_section (Dwfl_Module *mod, Dwarf_Addr *address, + *bias = mod->main.bias; + return mod->reloc_info->refs[idx].scn; + } ++INTDEF (dwfl_module_address_section) +diff --git a/libdwfl/dwfl_addrmodule.c b/libdwfl/dwfl_addrmodule.c +index 54d9a3d..6455943 100644 +--- a/libdwfl/dwfl_addrmodule.c ++++ b/libdwfl/dwfl_addrmodule.c +@@ -1,5 +1,5 @@ + /* Find module containing address. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ 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 +@@ -52,32 +52,8 @@ + Dwfl_Module * + dwfl_addrmodule (Dwfl *dwfl, Dwarf_Addr address) + { +- if (dwfl == NULL || dwfl->modules == NULL) +- return NULL; +- +- Dwfl_Module *boundary = NULL; +- +- /* Do binary search on the array indexed by module load address. */ +- size_t l = 0, u = dwfl->nmodules; +- while (l < u) +- { +- size_t idx = (l + u) / 2; +- Dwfl_Module *m = dwfl->modules[idx]; +- if (address < m->low_addr) +- u = idx; +- else if (address >= m->high_addr) +- { +- l = idx + 1; +- if (address == m->high_addr) +- /* If the high bound of this module is not the low bound of +- another, then consider the boundary address to be inside +- this module. */ +- boundary = m; +- } +- else +- return m; +- } +- +- return boundary; ++ Dwfl_Module *mod; ++ (void) INTUSE(dwfl_addrsegment) (dwfl, address, &mod); ++ return mod; + } + INTDEF (dwfl_addrmodule) +diff --git a/libdwfl/dwfl_build_id_find_debuginfo.c b/libdwfl/dwfl_build_id_find_debuginfo.c +index 97def07..e51b65b 100644 +--- a/libdwfl/dwfl_build_id_find_debuginfo.c ++++ b/libdwfl/dwfl_build_id_find_debuginfo.c +@@ -1,5 +1,5 @@ + /* Find the debuginfo file for a module from its build ID. +- Copyright (C) 2007 Red Hat, Inc. ++ Copyright (C) 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -71,10 +71,16 @@ dwfl_build_id_find_debuginfo (Dwfl_Module *mod, + /* 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; ++ Dwfl_Error error = __libdw_open_file (&fd, &mod->debug.elf, true, false); ++ if (error != DWFL_E_NOERROR) ++ __libdwfl_seterrno (error); ++ else if (likely (__libdwfl_find_build_id (mod, false, ++ mod->debug.elf) == 2)) ++ { ++ /* Also backdoor the gratuitous flag. */ ++ mod->debug.valid = true; ++ return fd; ++ } + else + { + /* A mismatch! */ +@@ -82,10 +88,10 @@ dwfl_build_id_find_debuginfo (Dwfl_Module *mod, + mod->debug.elf = NULL; + close (fd); + fd = -1; +- free (*debuginfo_file_name); +- *debuginfo_file_name = NULL; +- errno = 0; + } ++ free (*debuginfo_file_name); ++ *debuginfo_file_name = NULL; ++ errno = 0; + } + return fd; + } +diff --git a/libdwfl/dwfl_build_id_find_elf.c b/libdwfl/dwfl_build_id_find_elf.c +index a6e38ce..fcc6f1e 100644 +--- a/libdwfl/dwfl_build_id_find_elf.c ++++ b/libdwfl/dwfl_build_id_find_elf.c +@@ -1,5 +1,5 @@ + /* Find an ELF file for a module from its build ID. +- Copyright (C) 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2007, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -119,6 +119,13 @@ __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name) + free (name); + } + ++ /* 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; + } + +@@ -133,10 +140,15 @@ dwfl_build_id_find_elf (Dwfl_Module *mod, + 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; ++ Dwfl_Error error = __libdw_open_file (&fd, elfp, true, false); ++ if (error != DWFL_E_NOERROR) ++ __libdwfl_seterrno (error); ++ else if (__libdwfl_find_build_id (mod, false, *elfp) == 2) ++ { ++ /* This is a backdoor signal to short-circuit the ID refresh. */ ++ mod->main.valid = true; ++ return fd; ++ } + else + { + /* This file does not contain the ID it should! */ +@@ -144,9 +156,9 @@ dwfl_build_id_find_elf (Dwfl_Module *mod, + *elfp = NULL; + close (fd); + fd = -1; +- free (*file_name); +- *file_name = NULL; + } ++ free (*file_name); ++ *file_name = NULL; + } + return fd; + } +diff --git a/libdwfl/dwfl_end.c b/libdwfl/dwfl_end.c +index e339b14..429abb1 100644 +--- a/libdwfl/dwfl_end.c ++++ b/libdwfl/dwfl_end.c +@@ -1,5 +1,5 @@ + /* Finish a session using libdwfl. +- Copyright (C) 2005 Red Hat, Inc. ++ 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 +@@ -52,12 +52,20 @@ + void + dwfl_end (Dwfl *dwfl) + { +- if (dwfl != NULL) ++ if (dwfl == NULL) ++ return; ++ ++ free (dwfl->lookup_addr); ++ free (dwfl->lookup_module); ++ free (dwfl->lookup_segndx); ++ ++ Dwfl_Module *next = dwfl->modulelist; ++ while (next != NULL) + { +- for (size_t i = 0; i < dwfl->nmodules; ++i) +- if (dwfl->modules[i] != NULL) +- __libdwfl_module_free (dwfl->modules[i]); +- free (dwfl->modules); +- free (dwfl); ++ 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 +index 414fbaf..df2765a 100644 +--- a/libdwfl/dwfl_error.c ++++ b/libdwfl/dwfl_error.c +@@ -1,5 +1,5 @@ + /* Error handling in libdwfl. +- Copyright (C) 2005, 2006 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -61,46 +61,14 @@ + #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; ++ int result = global_error; + global_error = DWFL_E_NOERROR; + return result; + } +@@ -172,19 +140,7 @@ 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; ++ global_error = canonicalize (error); + } + + +@@ -194,19 +150,7 @@ dwfl_errmsg (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; ++ int last_error = global_error; + + if (error == 0 && last_error == 0) + return NULL; +@@ -233,26 +177,3 @@ dwfl_errmsg (error) + ? 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 +index e1c1aa7..0a0656f 100644 +--- a/libdwfl/dwfl_getdwarf.c ++++ b/libdwfl/dwfl_getdwarf.c +@@ -1,5 +1,5 @@ + /* Iterate through modules to fetch Dwarf information. +- Copyright (C) 2005 Red Hat, Inc. ++ 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 +@@ -49,6 +49,24 @@ + + #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 **, +@@ -57,20 +75,6 @@ dwfl_getdwarf (Dwfl *dwfl, + void *arg, + ptrdiff_t offset) + { +- if (dwfl == NULL) +- return -1; +- +- if ((size_t) offset > dwfl->nmodules) +- return -1; +- +- while ((size_t) offset < dwfl->nmodules) +- { +- Dwfl_Module *mod = dwfl->modules[offset++]; +- Dwarf_Addr bias = 0; +- Dwarf *dw = INTUSE(dwfl_module_getdwarf) (mod, &bias); +- if ((*callback) (MODCB_ARGS (mod), dw, bias, arg) != DWARF_CB_OK) +- return offset; +- } +- +- return 0; ++ 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 +index 45e550a..7c6ab97 100644 +--- a/libdwfl/dwfl_getmodules.c ++++ b/libdwfl/dwfl_getmodules.c +@@ -1,5 +1,5 @@ + /* Iterate through modules. +- Copyright (C) 2005 Red Hat, Inc. ++ 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 +@@ -59,15 +59,55 @@ dwfl_getmodules (Dwfl *dwfl, + if (dwfl == NULL) + return -1; + +- if ((size_t) offset > dwfl->nmodules) +- 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; + +- while ((size_t) offset < dwfl->nmodules) ++ if ((offset & 3) == 1) + { +- Dwfl_Module *mod = dwfl->modules[offset++]; +- if ((*callback) (MODCB_ARGS (mod), arg) != DWARF_CB_OK) +- return offset; ++ 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_module.c b/libdwfl/dwfl_module.c +index 434f3ff..d7e5413 100644 +--- a/libdwfl/dwfl_module.c ++++ b/libdwfl/dwfl_module.c +@@ -1,5 +1,5 @@ + /* Maintenance of module list in libdwfl. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ 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 +@@ -109,19 +109,18 @@ __libdwfl_module_free (Dwfl_Module *mod) + } + + void +-dwfl_report_begin_add (Dwfl *dwfl) ++dwfl_report_begin_add (Dwfl *dwfl __attribute__ ((unused))) + { +- if (dwfl->modules != NULL) +- free (dwfl->modules); +- dwfl->modules = NULL; +- dwfl->nmodules = 0; ++ /* 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) + { +- INTUSE(dwfl_report_begin_add) (dwfl); ++ /* Clear the segment lookup table. */ ++ dwfl->lookup_elts = 0; + + for (Dwfl_Module *m = dwfl->modulelist; m != NULL; m = m->next) + m->gc = true; +@@ -138,6 +137,21 @@ 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 +@@ -145,13 +159,9 @@ dwfl_report_module (Dwfl *dwfl, const char *name, + { + /* This module is still here. Move it to the place in the list + after the last module already reported. */ +- + *prevp = m->next; +- m->next = *tailp; + m->gc = false; +- *tailp = m; +- ++dwfl->nmodules; +- return m; ++ return use (m); + } + + if (! m->gc) +@@ -175,35 +185,11 @@ dwfl_report_module (Dwfl *dwfl, const char *name, + mod->high_addr = end; + mod->dwfl = dwfl; + +- mod->next = *tailp; +- *tailp = mod; +- ++dwfl->nmodules; +- +- return mod; ++ return use (mod); + } + INTDEF (dwfl_report_module) + + +-static int +-compare_modules (const void *a, const void *b) +-{ +- Dwfl_Module *const *p1 = a, *const *p2 = b; +- const Dwfl_Module *m1 = *p1, *m2 = *p2; +- if (m1 == NULL) +- return -1; +- if (m2 == NULL) +- return 1; +- +- /* No signed difference calculation is correct here, since the +- terms are unsigned and could be more than INT64_MAX apart. */ +- if (m1->low_addr < m2->low_addr) +- return -1; +- if (m1->low_addr > m2->low_addr) +- return 1; +- return 0; +-} +- +- + /* 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. +@@ -216,8 +202,6 @@ dwfl_report_end (Dwfl *dwfl, + void *arg), + void *arg) + { +- assert (dwfl->modules == NULL); +- + Dwfl_Module **tailp = &dwfl->modulelist; + while (*tailp != NULL) + { +@@ -237,21 +221,6 @@ dwfl_report_end (Dwfl *dwfl, + tailp = &m->next; + } + +- dwfl->modules = malloc (dwfl->nmodules * sizeof dwfl->modules[0]); +- if (dwfl->modules == NULL && dwfl->nmodules != 0) +- return -1; +- +- size_t i = 0; +- for (Dwfl_Module *m = dwfl->modulelist; m != NULL; m = m->next) +- { +- assert (! m->gc); +- dwfl->modules[i++] = m; +- } +- assert (i == dwfl->nmodules); +- +- qsort (dwfl->modules, dwfl->nmodules, sizeof dwfl->modules[0], +- &compare_modules); +- + return 0; + } + INTDEF (dwfl_report_end) +diff --git a/libdwfl/dwfl_module_addrsym.c b/libdwfl/dwfl_module_addrsym.c +index f16de11..72280d1 100644 +--- a/libdwfl/dwfl_module_addrsym.c ++++ b/libdwfl/dwfl_module_addrsym.c +@@ -1,5 +1,5 @@ + /* Find debugging and symbol information for a module in libdwfl. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ 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 +@@ -49,6 +49,9 @@ + + #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) +@@ -65,15 +68,6 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + if (shndx >= SHN_LORESERVE) + return sym->st_value == addr; + +- /* Ignore section and other special symbols. */ +- switch (GELF_ST_TYPE (sym->st_info)) +- { +- case STT_SECTION: +- case STT_FILE: +- case STT_TLS: +- return false; +- } +- + /* Figure out what section ADDR lies in. */ + if (addr_shndx == SHN_UNDEF) + { +@@ -108,7 +102,7 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + GElf_Word sizeless_shndx = SHN_UNDEF; + + /* Keep track of the lowest address a relevant sizeless symbol could have. */ +- GElf_Addr min_label = addr; ++ GElf_Addr min_label = 0; + + /* Look through the symbol table for a matching symbol. */ + for (int i = 1; i < syments; ++i) +@@ -116,23 +110,23 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + GElf_Sym sym; + GElf_Word shndx; + const char *name = INTUSE(dwfl_module_getsym) (mod, i, &sym, &shndx); +- if (name != NULL ++ if (name != NULL && name[0] != '\0' ++ && sym.st_shndx != SHN_UNDEF + && sym.st_value <= addr +- && (sym.st_size == 0 || addr - sym.st_value < sym.st_size)) ++ && 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 inside its bounds. */ +- if (sym.st_value + sym.st_size > addr) ++ /* 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; + +- /* This symbol is a better candidate than the current one +- if it's a named symbol, not a section or file symbol, +- and is closer to ADDR or is global when it was local. */ +- if (name[0] != '\0' +- && GELF_ST_TYPE (sym.st_info) != STT_SECTION +- && GELF_ST_TYPE (sym.st_info) != STT_FILE) ++ 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) +@@ -156,10 +150,13 @@ dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr addr, + } + } + /* When the beginning of its range is no closer, +- the end of its range might be. */ ++ 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) ++ && 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; +diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c +index 903b79c..9dc7f67 100644 +--- a/libdwfl/dwfl_module_build_id.c ++++ b/libdwfl/dwfl_module_build_id.c +@@ -1,5 +1,5 @@ + /* Return build ID information for a module. +- Copyright (C) 2007 Red Hat, Inc. ++ Copyright (C) 2007-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 +@@ -88,7 +88,8 @@ check_notes (Dwfl_Module *mod, bool set, Elf_Data *data, GElf_Addr data_vaddr) + "GNU", sizeof "GNU")) + return found_build_id (mod, set, + data->d_buf + desc_pos, nhdr.n_descsz, +- data_vaddr == NO_VADDR ? 0 : data_vaddr + pos); ++ data_vaddr == NO_VADDR ? 0 ++ : data_vaddr + desc_pos); + return 0; + } + +@@ -96,6 +97,7 @@ int + internal_function + __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) + { ++ size_t shstrndx = SHN_UNDEF; + int result = 0; + + Elf_Scn *scn = elf_nextscn (elf, NULL); +@@ -105,12 +107,14 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) + /* No sections, have to look for phdrs. */ + GElf_Ehdr ehdr_mem; + GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); +- if (unlikely (ehdr == NULL)) ++ size_t phnum; ++ if (unlikely (ehdr == NULL) ++ || unlikely (elf_getphdrnum (elf, &phnum) != 0)) + { + __libdwfl_seterrno (DWFL_E_LIBELF); + return -1; + } +- for (uint_fast16_t i = 0; result == 0 && i < ehdr_mem.e_phnum; ++i) ++ for (size_t i = 0; result == 0 && i < phnum; ++i) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); +@@ -129,9 +133,18 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) + 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); ++ { ++ /* Determine the right sh_addr in this module. */ ++ GElf_Addr vaddr = 0; ++ if (!(shdr->sh_flags & SHF_ALLOC)) ++ vaddr = NO_VADDR; ++ else if (mod->e_type != ET_REL) ++ vaddr = shdr->sh_addr + mod->main.bias; ++ else if (__libdwfl_relocate_value (mod, elf, &shstrndx, ++ elf_ndxscn (scn), &vaddr)) ++ vaddr = NO_VADDR; ++ result = check_notes (mod, set, elf_getdata (scn, NULL), vaddr); ++ } + } + while (result == 0 && (scn = elf_nextscn (elf, scn)) != NULL); + +@@ -164,3 +177,19 @@ dwfl_module_build_id (Dwfl_Module *mod, + return mod->build_id_len; + } + INTDEF (dwfl_module_build_id) ++NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) ++ ++#ifdef SHARED ++COMPAT_VERSION (dwfl_module_build_id, ELFUTILS_0.130, vaddr_at_end) ++ ++int ++_compat_vaddr_at_end_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; ++} ++#endif +diff --git a/libdwfl/dwfl_module_dwarf_cfi.c b/libdwfl/dwfl_module_dwarf_cfi.c +new file mode 100644 +index 0000000..e851a1f +--- /dev/null ++++ b/libdwfl/dwfl_module_dwarf_cfi.c +@@ -0,0 +1,92 @@ ++/* Find DWARF CFI for a module in libdwfl. ++ Copyright (C) 2009 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 ++ . */ ++ ++#include "libdwflP.h" ++#include "../libdw/cfi.h" ++ ++Dwarf_CFI * ++internal_function ++__libdwfl_set_cfi (Dwfl_Module *mod, Dwarf_CFI **slot, Dwarf_CFI *cfi) ++{ ++ if (cfi != NULL && cfi->ebl == NULL) ++ { ++ Dwfl_Error error = __libdwfl_module_getebl (mod); ++ if (error == DWFL_E_NOERROR) ++ cfi->ebl = mod->ebl; ++ else ++ { ++ if (slot == &mod->eh_cfi) ++ INTUSE(dwarf_cfi_end) (cfi); ++ __libdwfl_seterrno (error); ++ return NULL; ++ } ++ } ++ ++ return *slot = cfi; ++} ++ ++Dwarf_CFI * ++dwfl_module_dwarf_cfi (mod, bias) ++ Dwfl_Module *mod; ++ Dwarf_Addr *bias; ++{ ++ if (mod == NULL) ++ return NULL; ++ ++ if (mod->dwarf_cfi != NULL) ++ { ++ *bias = mod->debug.bias; ++ return mod->dwarf_cfi; ++ } ++ ++ return __libdwfl_set_cfi (mod, &mod->dwarf_cfi, ++ INTUSE(dwarf_getcfi) ++ (INTUSE(dwfl_module_getdwarf) (mod, bias))); ++} ++INTDEF (dwfl_module_dwarf_cfi) +diff --git a/libdwfl/dwfl_module_eh_cfi.c b/libdwfl/dwfl_module_eh_cfi.c +new file mode 100644 +index 0000000..36a495f +--- /dev/null ++++ b/libdwfl/dwfl_module_eh_cfi.c +@@ -0,0 +1,78 @@ ++/* Find EH CFI for a module in libdwfl. ++ Copyright (C) 2009 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 ++ . */ ++ ++#include "libdwflP.h" ++#include "../libdw/cfi.h" ++ ++Dwarf_CFI * ++dwfl_module_eh_cfi (mod, bias) ++ Dwfl_Module *mod; ++ Dwarf_Addr *bias; ++{ ++ if (mod == NULL) ++ return NULL; ++ ++ if (mod->eh_cfi != NULL) ++ { ++ *bias = mod->main.bias; ++ return mod->eh_cfi; ++ } ++ ++ __libdwfl_getelf (mod); ++ if (mod->elferr != DWFL_E_NOERROR) ++ { ++ __libdwfl_seterrno (mod->elferr); ++ return NULL; ++ } ++ ++ *bias = mod->main.bias; ++ return __libdwfl_set_cfi (mod, &mod->eh_cfi, ++ INTUSE(dwarf_getcfi_elf) (mod->main.elf)); ++} ++INTDEF (dwfl_module_eh_cfi) +diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c +index 7dd9b53..b084673 100644 +--- a/libdwfl/dwfl_module_getdwarf.c ++++ b/libdwfl/dwfl_module_getdwarf.c +@@ -1,5 +1,5 @@ + /* Find debugging and symbol information for a module in 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 +@@ -69,7 +69,15 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) + if (file->fd < 0) + return CBFAIL; + +- file->elf = elf_begin (file->fd, ELF_C_READ_MMAP_PRIVATE, NULL); ++ Dwfl_Error error = __libdw_open_file (&file->fd, &file->elf, true, false); ++ if (error != DWFL_E_NOERROR) ++ return error; ++ } ++ else 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); +@@ -78,21 +86,32 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) + elf_error: + close (file->fd); + file->fd = -1; +- return DWFL_E_LIBELF; ++ 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; +- for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i) ++ if (mod->e_type != ET_EXEC) + { +- GElf_Phdr ph_mem; +- GElf_Phdr *ph = gelf_getphdr (file->elf, i, &ph_mem); +- if (ph == NULL) ++ size_t phnum; ++ if (unlikely (elf_getphdrnum (file->elf, &phnum) != 0)) + goto elf_error; +- if (ph->p_type == PT_LOAD) ++ ++ for (size_t i = 0; i < phnum; ++i) + { +- file->bias = ((mod->low_addr & -ph->p_align) +- - (ph->p_vaddr & -ph->p_align)); +- break; ++ 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; ++ } + } + } + +@@ -107,8 +126,9 @@ open_elf (Dwfl_Module *mod, struct dwfl_file *file) + + /* 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) ++void ++internal_function ++__libdwfl_getelf (Dwfl_Module *mod) + { + if (mod->main.elf != NULL /* Already done. */ + || mod->elferr != DWFL_E_NOERROR) /* Cached failure. */ +@@ -123,8 +143,8 @@ find_file (Dwfl_Module *mod) + { + /* Clear any explicitly reported build ID, just in case it was wrong. + We'll fetch it from the file when asked. */ +- if (mod->build_id_len > 0) +- free (mod->build_id_bits); ++ free (mod->build_id_bits); ++ mod->build_id_bits = NULL; + mod->build_id_len = 0; + } + } +@@ -134,7 +154,7 @@ static const char * + find_debuglink (Elf *elf, GElf_Word *crc) + { + size_t shstrndx; +- if (elf_getshstrndx (elf, &shstrndx) < 0) ++ if (elf_getshdrstrndx (elf, &shstrndx) < 0) + return NULL; + + Elf_Scn *scn = NULL; +@@ -218,6 +238,7 @@ 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) + { +@@ -226,6 +247,7 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + switch (shdr->sh_type) + { + case SHT_SYMTAB: ++ symtab = true; + *symscn = scn; + *symfile = file; + *strshndx = shdr->sh_link; +@@ -235,6 +257,8 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + break; + + case SHT_DYNSYM: ++ if (symtab) ++ break; + /* Use this if need be, but keep looking for SHT_SYMTAB. */ + *symscn = scn; + *symfile = file; +@@ -244,7 +268,7 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + + case SHT_SYMTAB_SHNDX: + *xndxscn = scn; +- if (*symscn != NULL) ++ if (symtab) + return DWFL_E_NOERROR; + break; + +@@ -253,7 +277,7 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + } + } + +- if (*symscn != NULL) ++ if (symtab) + /* We found one, though no SHT_SYMTAB_SHNDX to go with it. */ + return DWFL_E_NOERROR; + +@@ -267,11 +291,11 @@ load_symtab (struct dwfl_file *file, struct dwfl_file **symfile, + /* 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, ++find_offsets (Elf *elf, size_t phnum, 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) ++ for (size_t i = 0; i < phnum; ++i) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr (elf, i, &phdr_mem); +@@ -295,7 +319,11 @@ 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) ++ size_t phnum; ++ if (unlikely (elf_getphdrnum (mod->main.elf, &phnum) != 0)) ++ return; ++ ++ for (size_t i = 0; i < phnum; ++i) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr (mod->main.elf, i, &phdr_mem); +@@ -362,7 +390,7 @@ find_dynsym (Dwfl_Module *mod) + + /* Translate pointers into file offsets. */ + GElf_Off offs[i_max] = { 0, }; +- find_offsets (mod->main.elf, ehdr, i_max, addrs, offs); ++ find_offsets (mod->main.elf, phnum, i_max, addrs, offs); + + /* Figure out the size of the symbol table. */ + if (offs[i_hash] != 0) +@@ -479,7 +507,7 @@ find_symtab (Dwfl_Module *mod) + || mod->symerr != DWFL_E_NOERROR) /* Cached previous failure. */ + return; + +- find_file (mod); ++ __libdwfl_getelf (mod); + mod->symerr = mod->elferr; + if (mod->symerr != DWFL_E_NOERROR) + return; +@@ -575,7 +603,7 @@ __libdwfl_module_getebl (Dwfl_Module *mod) + { + if (mod->ebl == NULL) + { +- find_file (mod); ++ __libdwfl_getelf (mod); + if (mod->elferr != DWFL_E_NOERROR) + return mod->elferr; + +@@ -643,7 +671,7 @@ find_dw (Dwfl_Module *mod) + || mod->dwerr != DWFL_E_NOERROR) /* Cached previous failure. */ + return; + +- find_file (mod); ++ __libdwfl_getelf (mod); + mod->dwerr = mod->elferr; + if (mod->dwerr != DWFL_E_NOERROR) + return; +@@ -684,46 +712,6 @@ find_dw (Dwfl_Module *mod) + 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) + { +diff --git a/libdwfl/dwfl_module_getelf.c b/libdwfl/dwfl_module_getelf.c +new file mode 100644 +index 0000000..6414a9d +--- /dev/null ++++ b/libdwfl/dwfl_module_getelf.c +@@ -0,0 +1,88 @@ ++/* Find debugging and symbol information for a module in libdwfl. ++ Copyright (C) 2009 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 ++ . */ ++ ++#include "libdwflP.h" ++ ++Elf * ++dwfl_module_getelf (Dwfl_Module *mod, GElf_Addr *loadbase) ++{ ++ if (mod == NULL) ++ return NULL; ++ ++ __libdwfl_getelf (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) +diff --git a/libdwfl/dwfl_module_getsrc.c b/libdwfl/dwfl_module_getsrc.c +index 84c7eaa..be03055 100644 +--- a/libdwfl/dwfl_module_getsrc.c ++++ b/libdwfl/dwfl_module_getsrc.c +@@ -1,5 +1,5 @@ + /* Find source location for PC address in module. +- Copyright (C) 2005 Red Hat, Inc. ++ 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 +@@ -63,6 +63,9 @@ dwfl_module_getsrc (Dwfl_Module *mod, Dwarf_Addr addr) + 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) +diff --git a/libdwfl/dwfl_module_getsym.c b/libdwfl/dwfl_module_getsym.c +index 5f289cc..f78e6ec 100644 +--- a/libdwfl/dwfl_module_getsym.c ++++ b/libdwfl/dwfl_module_getsym.c +@@ -1,5 +1,5 @@ + /* Find debugging and symbol information for a module in libdwfl. +- Copyright (C) 2006,2007 Red Hat, Inc. ++ Copyright (C) 2006,2007,2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -74,12 +74,25 @@ dwfl_module_getsym (Dwfl_Module *mod, int ndx, + if (sym->st_shndx != SHN_XINDEX) + shndx = sym->st_shndx; + ++ /* Figure out whether this symbol points into an SHF_ALLOC section. */ ++ bool alloc = true; ++ if ((shndxp != NULL || mod->e_type != ET_REL) ++ && (sym->st_shndx == SHN_XINDEX ++ || (sym->st_shndx < SHN_LORESERVE && sym->st_shndx != SHN_UNDEF))) ++ { ++ GElf_Shdr shdr_mem; ++ GElf_Shdr *shdr = gelf_getshdr (elf_getscn (mod->symfile->elf, shndx), ++ &shdr_mem); ++ alloc = unlikely (shdr == NULL) || (shdr->sh_flags & SHF_ALLOC); ++ } ++ + if (shndxp != NULL) +- *shndxp = shndx; ++ /* Yield -1 in case of a non-SHF_ALLOC section. */ ++ *shndxp = alloc ? shndx : (GElf_Word) -1; + +- switch (shndx) ++ switch (sym->st_shndx) + { +- case SHN_ABS: ++ case SHN_ABS: /* XXX sometimes should use bias?? */ + case SHN_UNDEF: + case SHN_COMMON: + break; +@@ -99,8 +112,9 @@ dwfl_module_getsym (Dwfl_Module *mod, int ndx, + return NULL; + } + } +- /* Apply the bias to the symbol value. */ +- sym->st_value += mod->symfile->bias; ++ else if (alloc) ++ /* Apply the bias to the symbol value. */ ++ sym->st_value += mod->symfile->bias; + break; + } + +diff --git a/libdwfl/dwfl_module_report_build_id.c b/libdwfl/dwfl_module_report_build_id.c +index 4886931..9a1b14f 100644 +--- a/libdwfl/dwfl_module_report_build_id.c ++++ b/libdwfl/dwfl_module_report_build_id.c +@@ -1,5 +1,5 @@ + /* Report build ID information for a module. +- Copyright (C) 2007 Red Hat, Inc. ++ 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 +@@ -90,8 +90,7 @@ dwfl_module_report_build_id (Dwfl_Module *mod, + memcpy (copy, bits, len); + } + +- if (mod->build_id_len > 0) +- free (mod->build_id_bits); ++ free (mod->build_id_bits); + + mod->build_id_bits = copy; + mod->build_id_len = len; +diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c +index 0e5d09b..062a647 100644 +--- a/libdwfl/dwfl_report_elf.c ++++ b/libdwfl/dwfl_report_elf.c +@@ -1,5 +1,5 @@ + /* Report a module to libdwfl based on ELF program headers. +- Copyright (C) 2005, 2007 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 +@@ -62,7 +62,7 @@ + Dwfl_Module * + internal_function + __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, +- int fd, Elf *elf, GElf_Addr base) ++ int fd, Elf *elf, GElf_Addr base, bool sanity) + { + GElf_Ehdr ehdr_mem, *ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr == NULL) +@@ -187,8 +187,11 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, + base = 0; + + case ET_DYN: +- default: +- for (uint_fast16_t i = 0; i < ehdr->e_phnum; ++i) ++ default:; ++ size_t phnum; ++ if (unlikely (elf_getphdrnum (elf, &phnum) != 0)) ++ goto elf_error; ++ for (size_t i = 0; i < phnum; ++i) + { + GElf_Phdr phdr_mem, *ph = gelf_getphdr (elf, i, &phdr_mem); + if (unlikely (ph == NULL)) +@@ -203,19 +206,20 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, + } + bias = base; + +- for (uint_fast16_t i = ehdr->e_phnum; i-- > 0;) ++ for (size_t i = 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) ++ if (ph->p_type == PT_LOAD ++ && ph->p_vaddr + ph->p_memsz > 0) + { + end = base + (ph->p_vaddr + ph->p_memsz); + break; + } + } + +- if (end == 0) ++ if (end == 0 && sanity) + { + __libdwfl_seterrno (DWFL_E_NO_PHDR); + return NULL; +@@ -234,11 +238,10 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, + 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; ++ return NULL; + } + + /* Preinstall the open ELF handle for the module. */ +@@ -274,9 +277,16 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, + } + } + +- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL); ++ Elf *elf; ++ Dwfl_Error error = __libdw_open_file (&fd, &elf, closefd, false); ++ if (error != DWFL_E_NOERROR) ++ { ++ __libdwfl_seterrno (error); ++ return NULL; ++ } ++ + Dwfl_Module *mod = __libdwfl_report_elf (dwfl, name, file_name, +- fd, elf, base); ++ fd, elf, base, true); + if (mod == NULL) + { + elf_end (elf); +diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c +new file mode 100644 +index 0000000..5f982f4 +--- /dev/null ++++ b/libdwfl/dwfl_segment_report_module.c +@@ -0,0 +1,661 @@ ++/* Sniff out modules from ELF headers visible in memory segments. ++ Copyright (C) 2008-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 ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ In addition, as a special exception, Red Hat, Inc. gives You the ++ additional right to link the code of Red Hat elfutils with code licensed ++ under any Open Source Initiative certified open source license ++ (http://www.opensource.org/licenses/index.php) which requires the ++ distribution of source code with any binary distribution and to ++ distribute linked combinations of the two. Non-GPL Code permitted under ++ this exception must only link to the code of Red Hat elfutils through ++ those well defined interfaces identified in the file named EXCEPTION ++ found in the source code files (the "Approved Interfaces"). The files ++ of Non-GPL Code may instantiate templates or use macros or inline ++ functions from the Approved Interfaces without causing the resulting ++ work to be covered by the GNU General Public License. Only Red Hat, ++ Inc. may make changes or additions to the list of Approved Interfaces. ++ Red Hat's grant of this exception is conditioned upon your not adding ++ any new exceptions. If you wish to add a new Approved Interface or ++ exception, please contact Red Hat. You must obey the GNU General Public ++ License in all respects for all of the Red Hat elfutils code and other ++ code used in conjunction with Red Hat elfutils except the Non-GPL Code ++ covered by this exception. If you modify this file, you may extend this ++ exception to your version of the file, but you are not obligated to do ++ so. If you do not wish to provide this exception without modification, ++ you must delete this exception statement from your version and license ++ this file solely under the GPL without exception. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#include ++#include "../libelf/libelfP.h" /* For NOTE_ALIGN. */ ++#undef _ ++#include "libdwflP.h" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ ++/* 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. ++ If NEXT, return the closest to ADDR but not below it. */ ++static int ++addr_segndx (Dwfl *dwfl, size_t segment, GElf_Addr addr, bool next) ++{ ++ int ndx = -1; ++ do ++ { ++ if (dwfl->lookup_segndx[segment] >= 0) ++ ndx = dwfl->lookup_segndx[segment]; ++ if (++segment >= dwfl->lookup_elts - 1) ++ return next ? ndx + 1 : ndx; ++ } ++ while (dwfl->lookup_addr[segment] < addr); ++ ++ if (next) ++ { ++ while (dwfl->lookup_segndx[segment] < 0) ++ if (++segment >= dwfl->lookup_elts - 1) ++ return ndx + 1; ++ 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, false), ++ 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. */ ++ ndx = addr_segndx (dwfl, segment, module_end, true); ++ ++ /* 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. ++ ++ The DYNSTR_VADDR pointer comes from the .dynamic section ++ (DT_STRTAB, detected above). Ordinarily the dynamic linker ++ will have adjusted this pointer in place so it's now an ++ absolute address. But sometimes .dynamic is read-only (in ++ vDSOs and odd architectures), and sometimes the adjustment ++ just hasn't happened yet in the memory image we looked at. ++ So treat DYNSTR_VADDR as an absolute address if it falls ++ within the module bounds, or try applying the phdr bias ++ when that adjusts it to fall within the module bounds. */ ++ ++ if ((dynstr_vaddr < module_start || dynstr_vaddr >= module_end) ++ && dynstr_vaddr + bias >= module_start ++ && dynstr_vaddr + bias < module_end) ++ 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 + 1 < dynstrsz ++ && ! 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, false), ++ &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/find-debuginfo.c b/libdwfl/find-debuginfo.c +index f1ff3a4..8fdaeb3 100644 +--- a/libdwfl/find-debuginfo.c ++++ b/libdwfl/find-debuginfo.c +@@ -1,5 +1,5 @@ + /* Standard find_debuginfo callback for libdwfl. +- Copyright (C) 2005, 2006, 2007 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 +@@ -99,16 +99,22 @@ validate (Dwfl_Module *mod, int fd, bool check, GElf_Word debuglink_crc) + /* 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; ++ ++ mod->debug.valid = false; ++ Dwfl_Error error = __libdw_open_file (&fd, &mod->debug.elf, false, false); ++ if (error != DWFL_E_NOERROR) ++ __libdwfl_seterrno (error); ++ else 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; ++ close (fd); ++ fd = -1; + } + + return mod->debug.valid; +@@ -192,7 +198,7 @@ find_debuginfo_in_path (Dwfl_Module *mod, const char *file_name, + break; + } + +- char *fname; ++ char *fname = NULL; + int fd = try_open (dir, subdir, debuglink_file, &fname); + if (fd < 0) + switch (errno) +@@ -242,7 +248,23 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod, + } + + /* Failing that, search the path by name. */ +- return find_debuginfo_in_path (mod, file_name, debuglink_file, debuglink_crc, +- debuginfo_file_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/gzip.c b/libdwfl/gzip.c +new file mode 100644 +index 0000000..5604d49 +--- /dev/null ++++ b/libdwfl/gzip.c +@@ -0,0 +1,316 @@ ++/* Decompression support for libdwfl: zlib (gzip) and/or bzlib (bzip2). ++ Copyright (C) 2009 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 ++ . */ ++ ++#include "libdwflP.h" ++#include "system.h" ++ ++#include ++ ++#ifdef LZMA ++# define USE_INFLATE 1 ++# include ++# define unzip __libdw_unlzma ++# define DWFL_E_ZLIB DWFL_E_LZMA ++# define MAGIC "\xFD" "7zXZ\0" /* XZ file format. */ ++# define MAGIC2 "\x5d\0" /* Raw LZMA format. */ ++# define Z(what) LZMA_##what ++# define LZMA_ERRNO LZMA_PROG_ERROR ++# define z_stream lzma_stream ++# define inflateInit(z) lzma_auto_decoder (z, 1 << 30, 0) ++# define do_inflate(z) lzma_code (z, LZMA_RUN) ++# define inflateEnd(z) lzma_end (z) ++#elif defined BZLIB ++# define USE_INFLATE 1 ++# include ++# define unzip __libdw_bunzip2 ++# define DWFL_E_ZLIB DWFL_E_BZLIB ++# define MAGIC "BZh" ++# define Z(what) BZ_##what ++# define BZ_ERRNO BZ_IO_ERROR ++# define z_stream bz_stream ++# define inflateInit(z) BZ2_bzDecompressInit (z, 0, 0) ++# define do_inflate(z) BZ2_bzDecompress (z) ++# define inflateEnd(z) BZ2_bzDecompressEnd (z) ++#else ++# define USE_INFLATE 0 ++# define crc32 loser_crc32 ++# include ++# define unzip __libdw_gunzip ++# define MAGIC "\037\213" ++# define Z(what) Z_##what ++#endif ++ ++#define READ_SIZE (1 << 20) ++ ++/* If this is not a compressed image, return DWFL_E_BADELF. ++ If we uncompressed it into *WHOLE, *WHOLE_SIZE, return DWFL_E_NOERROR. ++ Otherwise return an error for bad compressed data or I/O failure. ++ If we return an error after reading the first part of the file, ++ leave that portion malloc'd in *WHOLE, *WHOLE_SIZE. If *WHOLE ++ is not null on entry, we'll use it in lieu of repeating a read. */ ++ ++Dwfl_Error internal_function ++unzip (int fd, off64_t start_offset, ++ void *mapped, size_t mapped_size, ++ void **whole, size_t *whole_size) ++{ ++ void *buffer = NULL; ++ size_t size = 0; ++ inline bool bigger_buffer (size_t start) ++ { ++ size_t more = size ? size * 2 : start; ++ char *b = realloc (buffer, more); ++ while (unlikely (b == NULL) && more >= size + 1024) ++ b = realloc (buffer, more -= 1024); ++ if (unlikely (b == NULL)) ++ return false; ++ buffer = b; ++ size = more; ++ return true; ++ } ++ inline void smaller_buffer (size_t end) ++ { ++ buffer = realloc (buffer, end) ?: end == 0 ? NULL : buffer; ++ size = end; ++ } ++ ++ void *input_buffer = NULL; ++ off_t input_pos = 0; ++ ++ inline Dwfl_Error fail (Dwfl_Error failure) ++ { ++ if (input_pos == (off_t) mapped_size) ++ *whole = input_buffer; ++ else ++ { ++ free (input_buffer); ++ *whole = NULL; ++ } ++ free (buffer); ++ return failure; ++ } ++ ++ inline Dwfl_Error zlib_fail (int result) ++ { ++ switch (result) ++ { ++ case Z (MEM_ERROR): ++ return fail (DWFL_E_NOMEM); ++ case Z (ERRNO): ++ return fail (DWFL_E_ERRNO); ++ default: ++ return fail (DWFL_E_ZLIB); ++ } ++ } ++ ++ if (mapped == NULL) ++ { ++ if (*whole == NULL) ++ { ++ input_buffer = malloc (READ_SIZE); ++ if (unlikely (input_buffer == NULL)) ++ return DWFL_E_NOMEM; ++ ++ ssize_t n = pread_retry (fd, input_buffer, READ_SIZE, start_offset); ++ if (unlikely (n < 0)) ++ return zlib_fail (Z (ERRNO)); ++ ++ input_pos = n; ++ mapped = input_buffer; ++ mapped_size = n; ++ } ++ else ++ { ++ input_buffer = *whole; ++ input_pos = mapped_size = *whole_size; ++ } ++ } ++ ++#define NOMAGIC(magic) \ ++ (mapped_size <= sizeof magic || memcmp (mapped, magic, sizeof magic - 1)) ++ ++ /* First, look at the header. */ ++ if (NOMAGIC (MAGIC) ++#ifdef MAGIC2 ++ && NOMAGIC (MAGIC2) ++#endif ++ ) ++ /* Not a compressed file. */ ++ return DWFL_E_BADELF; ++ ++#if USE_INFLATE ++ ++ /* This style actually only works with bzlib and liblzma. ++ The stupid zlib interface has nothing to grok the ++ gzip file headers except the slow gzFile interface. */ ++ ++ z_stream z = { .next_in = mapped, .avail_in = mapped_size }; ++ int result = inflateInit (&z); ++ if (result != Z (OK)) ++ { ++ inflateEnd (&z); ++ return zlib_fail (result); ++ } ++ ++ do ++ { ++ if (z.avail_in == 0 && input_buffer != NULL) ++ { ++ ssize_t n = pread_retry (fd, input_buffer, READ_SIZE, ++ start_offset + input_pos); ++ if (unlikely (n < 0)) ++ { ++ inflateEnd (&z); ++ return zlib_fail (Z (ERRNO)); ++ } ++ z.next_in = input_buffer; ++ z.avail_in = n; ++ input_pos += n; ++ } ++ if (z.avail_out == 0) ++ { ++ ptrdiff_t pos = (void *) z.next_out - buffer; ++ if (!bigger_buffer (z.avail_in)) ++ { ++ result = Z (MEM_ERROR); ++ break; ++ } ++ z.next_out = buffer + pos; ++ z.avail_out = size - pos; ++ } ++ } ++ while ((result = do_inflate (&z)) == Z (OK)); ++ ++#ifdef BZLIB ++ uint64_t total_out = (((uint64_t) z.total_out_hi32 << 32) ++ | z.total_out_lo32); ++ smaller_buffer (total_out); ++#else ++ smaller_buffer (z.total_out); ++#endif ++ ++ inflateEnd (&z); ++ ++ if (result != Z (STREAM_END)) ++ return zlib_fail (result); ++ ++#else /* gzip only. */ ++ ++ /* Let the decompression library read the file directly. */ ++ ++ gzFile zf; ++ Dwfl_Error open_stream (void) ++ { ++ int d = dup (fd); ++ if (unlikely (d < 0)) ++ return DWFL_E_BADELF; ++ if (start_offset != 0) ++ { ++ off64_t off = lseek (d, start_offset, SEEK_SET); ++ if (off != start_offset) ++ { ++ close (d); ++ return DWFL_E_BADELF; ++ } ++ } ++ zf = gzdopen (d, "r"); ++ if (unlikely (zf == NULL)) ++ { ++ close (d); ++ return zlib_fail (Z (MEM_ERROR)); ++ } ++ ++ /* From here on, zlib will close D. */ ++ ++ return DWFL_E_NOERROR; ++ } ++ ++ Dwfl_Error result = open_stream (); ++ ++ if (result == DWFL_E_NOERROR && gzdirect (zf)) ++ { ++ gzclose (zf); ++ return fail (DWFL_E_BADELF); ++ } ++ ++ if (result != DWFL_E_NOERROR) ++ return fail (result); ++ ++ ptrdiff_t pos = 0; ++ while (1) ++ { ++ if (!bigger_buffer (1024)) ++ { ++ gzclose (zf); ++ return zlib_fail (Z (MEM_ERROR)); ++ } ++ int n = gzread (zf, buffer + pos, size - pos); ++ if (n < 0) ++ { ++ int code; ++ gzerror (zf, &code); ++ gzclose (zf); ++ return zlib_fail (code); ++ } ++ if (n == 0) ++ break; ++ pos += n; ++ } ++ ++ gzclose (zf); ++ smaller_buffer (pos); ++#endif ++ ++ free (input_buffer); ++ ++ *whole = buffer; ++ *whole_size = size; ++ ++ return DWFL_E_NOERROR; ++} +diff --git a/libdwfl/image-header.c b/libdwfl/image-header.c +new file mode 100644 +index 0000000..6341fc8 +--- /dev/null ++++ b/libdwfl/image-header.c +@@ -0,0 +1,124 @@ ++/* Linux kernel image support for libdwfl. ++ Copyright (C) 2009 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 ++ . */ ++ ++#include "libdwflP.h" ++#include "system.h" ++ ++#include ++#include ++ ++#if BYTE_ORDER == LITTLE_ENDIAN ++# define LE16(x) (x) ++# define LE32(x) (x) ++#else ++# define LE16(x) bswap_16 (x) ++# define LE32(x) bswap_32 (x) ++#endif ++ ++/* See Documentation/x86/boot.txt in Linux kernel sources ++ for an explanation of these format details. */ ++ ++#define MAGIC1 0xaa55 ++#define MAGIC2 0x53726448 /* "HdrS" little-endian */ ++#define MIN_VERSION 0x0208 ++ ++#define H_START (H_SETUP_SECTS & -4) ++#define H_SETUP_SECTS 0x1f1 ++#define H_MAGIC1 0x1fe ++#define H_MAGIC2 0x202 ++#define H_VERSION 0x206 ++#define H_PAYLOAD_OFFSET 0x248 ++#define H_PAYLOAD_LENGTH 0x24c ++#define H_END 0x250 ++#define H_READ_SIZE (H_END - H_START) ++ ++Dwfl_Error ++internal_function ++__libdw_image_header (int fd, off64_t *start_offset, ++ void *mapped, size_t mapped_size) ++{ ++ if (likely (mapped_size > H_END)) ++ { ++ const void *header = mapped; ++ char header_buffer[H_READ_SIZE]; ++ if (header == NULL) ++ { ++ ssize_t n = pread_retry (fd, header_buffer, H_READ_SIZE, ++ *start_offset + H_START); ++ if (n < 0) ++ return DWFL_E_ERRNO; ++ if (n < H_READ_SIZE) ++ return DWFL_E_BADELF; ++ ++ header = header_buffer - H_START; ++ } ++ ++ if (*(uint16_t *) (header + H_MAGIC1) == LE16 (MAGIC1) ++ && *(uint32_t *) (header + H_MAGIC2) == LE32 (MAGIC2) ++ && LE16 (*(uint16_t *) (header + H_VERSION)) >= MIN_VERSION) ++ { ++ /* The magic numbers match and the version field is sufficient. ++ Extract the payload bounds. */ ++ ++ uint32_t offset = LE32 (*(uint32_t *) (header + H_PAYLOAD_OFFSET)); ++ uint32_t length = LE32 (*(uint32_t *) (header + H_PAYLOAD_LENGTH)); ++ ++ offset += ((*(uint8_t *) (header + H_SETUP_SECTS) ?: 4) + 1) * 512; ++ ++ if (offset > H_END && offset < mapped_size ++ && mapped_size - offset >= length) ++ { ++ /* It looks kosher. Use it! */ ++ *start_offset += offset; ++ return DWFL_E_NOERROR; ++ } ++ } ++ } ++ return DWFL_E_BADELF; ++} +diff --git a/libdwfl/libdwfl.h b/libdwfl/libdwfl.h +index 5438ee2..fafc75e 100644 +--- a/libdwfl/libdwfl.h ++++ b/libdwfl/libdwfl.h +@@ -1,5 +1,5 @@ + /* Interfaces for libdwfl. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -116,10 +116,42 @@ extern int dwfl_errno (void); + extern const char *dwfl_errmsg (int err); + + +-/* Start reporting the current set of modules to the library. No calls but +- dwfl_report_* can be made on DWFL until dwfl_report_end is called. */ ++/* 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. */ +@@ -193,6 +225,13 @@ extern ptrdiff_t dwfl_getmodules (Dwfl *dwfl, + /* 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 +@@ -384,10 +423,11 @@ 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). */ ++ 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); +@@ -512,6 +552,20 @@ extern int dwfl_module_register_names (Dwfl_Module *mod, + 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/libdwfl/libdwflP.h b/libdwfl/libdwflP.h +index bbb56aa..d08d8a7 100644 +--- a/libdwfl/libdwflP.h ++++ b/libdwfl/libdwflP.h +@@ -1,5 +1,5 @@ + /* Internal definitions for libdwfl. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2007, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -74,6 +74,9 @@ + 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 (ZLIB, N_("gzip decompression failed")) \ ++ DWFL_ERROR (BZLIB, N_("bzip2 decompression failed")) \ ++ DWFL_ERROR (LZMA, N_("LZMA decompression failed")) \ + 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")) \ +@@ -99,8 +102,8 @@ typedef enum { DWFL_ERRORS DWFL_E_NUM } 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 error) internal_function; +-extern void __libdwfl_seterrno (Dwfl_Error error) internal_function; ++extern int __libdwfl_canon_error (Dwfl_Error) internal_function; ++extern void __libdwfl_seterrno (Dwfl_Error) internal_function; + + struct Dwfl + { +@@ -108,10 +111,22 @@ struct Dwfl + + Dwfl_Module *modulelist; /* List in order used by full traversals. */ + +- Dwfl_Module **modules; +- size_t nmodules; +- + 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 +@@ -137,10 +152,6 @@ struct Dwfl_Module + 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. */ +@@ -153,21 +164,31 @@ struct Dwfl_Module + 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. */ ++ ++ Dwfl_Error symerr; /* Previous failure to load symbols. */ ++ Dwfl_Error dwerr; /* Previous failure to load DWARF. */ + + /* 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. */ ++ ++ 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. */ ++ ++ unsigned int ncu; ++ unsigned int lazycu; /* Possible users, deleted when none left. */ + unsigned int naranges; + ++ Dwarf_CFI *dwarf_cfi; /* Cached DWARF CFI for this module. */ ++ Dwarf_CFI *eh_cfi; /* Cached EH CFI for this module. */ ++ ++ int segment; /* Index of first segment table entry. */ + bool gc; /* Mark/sweep flag. */ + }; + +@@ -226,6 +247,8 @@ struct dwfl_arange + + extern void __libdwfl_module_free (Dwfl_Module *mod) internal_function; + ++/* Find the main ELF file, update MOD->elferr and/or MOD->main.elf. */ ++extern void __libdwfl_getelf (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, +@@ -257,6 +280,11 @@ extern Dwfl_Error __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, + /* Ensure that MOD->ebl is set up. */ + extern Dwfl_Error __libdwfl_module_getebl (Dwfl_Module *mod) internal_function; + ++/* Install a new Dwarf_CFI in *SLOT (MOD->eh_cfi or MOD->dwarf_cfi). */ ++extern Dwarf_CFI *__libdwfl_set_cfi (Dwfl_Module *mod, Dwarf_CFI **slot, ++ Dwarf_CFI *cfi) ++ 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. */ +@@ -291,7 +319,7 @@ extern int __libdwfl_crc32_file (int fd, uint32_t *resp) attribute_hidden; + 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) ++ Elf *elf, GElf_Addr base, bool sanity) + internal_function; + + /* Meat of dwfl_report_offline. */ +@@ -302,14 +330,92 @@ extern Dwfl_Module *__libdwfl_report_offline (Dwfl *dwfl, const char *name, + const char *)) + internal_function; + ++/* Decompression wrappers: decompress whole file into memory. */ ++extern Dwfl_Error __libdw_gunzip (int fd, off64_t start_offset, ++ void *mapped, size_t mapped_size, ++ void **whole, size_t *whole_size) ++ internal_function; ++extern Dwfl_Error __libdw_bunzip2 (int fd, off64_t start_offset, ++ void *mapped, size_t mapped_size, ++ void **whole, size_t *whole_size) ++ internal_function; ++extern Dwfl_Error __libdw_unlzma (int fd, off64_t start_offset, ++ void *mapped, size_t mapped_size, ++ void **whole, size_t *whole_size) ++ internal_function; ++ ++/* Skip the image header before a file image: updates *START_OFFSET. */ ++extern Dwfl_Error __libdw_image_header (int fd, off64_t *start_offset, ++ void *mapped, size_t mapped_size) ++ internal_function; ++ ++/* Open Elf handle on *FDP. This handles decompression and checks ++ elf_kind. Succeed only for ELF_K_ELF, or also ELF_K_AR if ARCHIVE_OK. ++ Returns DWFL_E_NOERROR and sets *ELFP on success, resets *FDP to -1 if ++ it's no longer used. Resets *FDP on failure too iff CLOSE_ON_FAIL. */ ++extern Dwfl_Error __libdw_open_file (int *fdp, Elf **elfp, ++ bool close_on_fail, bool archive_ok) ++ 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) +@@ -322,11 +428,13 @@ 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) +@@ -337,6 +445,8 @@ INTDECL (dwfl_linux_kernel_report_modules) + INTDECL (dwfl_linux_kernel_report_offline) + INTDECL (dwfl_offline_section_address) + INTDECL (dwfl_module_relocate_address) ++INTDECL (dwfl_module_dwarf_cfi) ++INTDECL (dwfl_module_eh_cfi) + + /* Leading arguments standard to callbacks passed a Dwfl_Module. */ + #define MODCB_ARGS(mod) (mod), &(mod)->userdata, (mod)->name, (mod)->low_addr +diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c +new file mode 100644 +index 0000000..ecb4990 +--- /dev/null ++++ b/libdwfl/link_map.c +@@ -0,0 +1,865 @@ ++/* Report modules by examining dynamic linker data structures. ++ Copyright (C) 2008, 2009 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 ++ . */ ++ ++#include ++#include "libdwflP.h" ++ ++#include ++#include ++ ++/* 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]; ++ ++ /* If a clobbered or truncated memory image has no useful pointer, ++ just skip this element. */ ++ if (l_ld == 0) ++ continue; ++ ++ /* 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 = INTUSE(dwfl_addrmodule) (dwfl, l_ld); ++ 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]); ++ ++ int segndx = INTUSE(dwfl_addrsegment) (mod->dwfl, d_val_vaddr, NULL); ++ ++ 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 +index b113806..e07073c 100644 +--- a/libdwfl/linux-kernel-modules.c ++++ b/libdwfl/linux-kernel-modules.c +@@ -1,5 +1,5 @@ + /* Standard libdwfl callbacks for debugging the running Linux kernel. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -47,8 +47,12 @@ + Network licensing program, please visit 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 ++ + #include +-#undef _FILE_OFFSET_BITS /* Doesn't jibe with fts. */ + + #include "libdwflP.h" + #include +@@ -60,7 +64,6 @@ + #include + #include + #include +-#include + + + #define KERNEL_MODNAME "kernel" +@@ -192,9 +195,9 @@ report_kernel (Dwfl *dwfl, const char **release, + fname, fd, 0); + if (mod == NULL) + result = -1; +- +- /* The kernel is ET_EXEC, but always treat it as relocatable. */ +- mod->e_type = ET_DYN; ++ else ++ /* The kernel is ET_EXEC, but always treat it as relocatable. */ ++ mod->e_type = ET_DYN; + } + + if (!report || result < 0) +@@ -251,6 +254,29 @@ report_kernel_archive (Dwfl *dwfl, const char **release, + return result; + } + ++static size_t ++check_suffix (const FTSENT *f, size_t namelen) ++{ ++#define TRY(sfx) \ ++ if ((namelen ? f->fts_namelen == namelen + sizeof sfx - 1 \ ++ : f->fts_namelen >= sizeof sfx) \ ++ && !memcmp (f->fts_name + f->fts_namelen - (sizeof sfx - 1), \ ++ sfx, sizeof sfx)) \ ++ return sizeof sfx - 1 ++ ++ TRY (".ko"); ++#if USE_ZLIB ++ TRY (".ko.gz"); ++#endif ++#if USE_BZLIB ++ TRY (".ko.bz2"); ++#endif ++ ++ return 0; ++ ++#undef TRY ++} ++ + /* 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/; +@@ -281,7 +307,7 @@ dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, + return errno; + } + +- FTS *fts = fts_open (modulesdir, FTS_NOSTAT, NULL); ++ FTS *fts = fts_open (modulesdir, FTS_NOSTAT | FTS_LOGICAL, NULL); + if (modulesdir[0] == (char *) release) + modulesdir[0] = NULL; + if (fts == NULL) +@@ -293,13 +319,23 @@ dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, + FTSENT *f; + while ((f = fts_read (fts)) != NULL) + { ++ /* Skip a "source" subtree, which tends to be large. ++ This insane hard-coding of names is what depmod does too. */ ++ if (f->fts_namelen == sizeof "source" - 1 ++ && !strcmp (f->fts_name, "source")) ++ { ++ fts_set (fts, f, FTS_SKIP); ++ continue; ++ } ++ + switch (f->fts_info) + { + case FTS_F: +- case FTS_NSOK: ++ 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)) ++ const size_t suffix = check_suffix (f, 0); ++ if (suffix) + { + /* We have a .ko file to report. Following the algorithm + by which the kernel makefiles set KBUILD_MODNAME, we +@@ -309,13 +345,13 @@ dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, + 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]; ++ char name[f->fts_namelen - suffix + 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'; ++ name[f->fts_namelen - suffix] = '\0'; + + if (predicate != NULL) + { +@@ -330,8 +366,7 @@ dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, + continue; + } + +- if (dwfl_report_offline (dwfl, name, +- f->fts_path, -1) == NULL) ++ if (dwfl_report_offline (dwfl, name, f->fts_path, -1) == NULL) + { + result = -1; + break; +@@ -345,6 +380,7 @@ dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, + result = f->fts_errno; + break; + ++ case FTS_SLNONE: + default: + continue; + } +@@ -494,7 +530,7 @@ check_module_notes (Dwfl_Module *mod) + if (asprintf (&dirs[0], MODNOTESFMT, mod->name) < 0) + return ENOMEM; + +- FTS *fts = fts_open (dirs, FTS_NOSTAT, NULL); ++ FTS *fts = fts_open (dirs, FTS_NOSTAT | FTS_LOGICAL, NULL); + if (fts == NULL) + { + free (dirs[0]); +@@ -508,6 +544,7 @@ check_module_notes (Dwfl_Module *mod) + 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. */ +@@ -523,6 +560,7 @@ check_module_notes (Dwfl_Module *mod) + break; + + case FTS_NS: ++ case FTS_SLNONE: + default: + continue; + } +@@ -607,7 +645,7 @@ dwfl_linux_kernel_find_elf (Dwfl_Module *mod, + if (asprintf (&modulesdir[0], MODULEDIRFMT, release) < 0) + return -1; + +- FTS *fts = fts_open (modulesdir, FTS_NOSTAT, NULL); ++ FTS *fts = fts_open (modulesdir, FTS_NOSTAT | FTS_LOGICAL, NULL); + if (fts == NULL) + { + free (modulesdir[0]); +@@ -653,14 +691,23 @@ dwfl_linux_kernel_find_elf (Dwfl_Module *mod, + int error = ENOENT; + while ((f = fts_read (fts)) != NULL) + { ++ /* Skip a "source" subtree, which tends to be large. ++ This insane hard-coding of names is what depmod does too. */ ++ if (f->fts_namelen == sizeof "source" - 1 ++ && !strcmp (f->fts_name, "source")) ++ { ++ fts_set (fts, f, FTS_SKIP); ++ continue; ++ } ++ + 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) ++ if (check_suffix (f, namelen) + && (!memcmp (f->fts_name, module_name, namelen) + || !memcmp (f->fts_name, alternate_name, namelen))) + { +@@ -685,6 +732,7 @@ dwfl_linux_kernel_find_elf (Dwfl_Module *mod, + error = f->fts_errno; + break; + ++ case FTS_SLNONE: + default: + break; + } +diff --git a/libdwfl/linux-proc-maps.c b/libdwfl/linux-proc-maps.c +index 6eaed39..2206f63 100644 +--- a/libdwfl/linux-proc-maps.c ++++ b/libdwfl/linux-proc-maps.c +@@ -1,5 +1,5 @@ + /* Standard libdwfl callbacks for debugging a live Linux process. +- Copyright (C) 2005, 2007 Red Hat, Inc. ++ 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 +@@ -138,12 +138,12 @@ proc_maps_report (Dwfl *dwfl, FILE *f, GElf_Addr sysinfo_ehdr, pid_t pid) + { + if (last_file != NULL) + { +- if (INTUSE(dwfl_report_module) (dwfl, last_file, low, high) == NULL) +- { +- free (last_file); +- return true; +- } ++ 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; + } +@@ -267,6 +267,9 @@ read_proc_memory (void *arg, void *data, GElf_Addr address, + { + 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; +diff --git a/libdwfl/lzma.c b/libdwfl/lzma.c +new file mode 100644 +index 0000000..3edfdc2 +--- /dev/null ++++ b/libdwfl/lzma.c +@@ -0,0 +1,4 @@ ++/* liblzma is pretty close to zlib and bzlib. */ ++ ++#define LZMA ++#include "gzip.c" +diff --git a/libdwfl/offline.c b/libdwfl/offline.c +index ff7b793..34aa9f8 100644 +--- a/libdwfl/offline.c ++++ b/libdwfl/offline.c +@@ -1,5 +1,5 @@ + /* Recover relocatibility for addresses computed from debug information. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2007, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -148,7 +148,7 @@ 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); ++ dwfl->offline_next_address, false); + if (mod != NULL) + { + /* If this is an ET_EXEC file with fixed addresses, the address range +@@ -259,16 +259,23 @@ process_archive (Dwfl *dwfl, const char *name, const char *file_name, int fd, + + { + 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, elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, +- archive), &mod) != ELF_C_NULL) +- ; ++ 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 (elf_end (archive) == 0) ++ if (mod != NULL /* If no modules, caller will clean up. */ ++ && elf_end (archive) == 0) + close (fd); + + return mod; +@@ -281,7 +288,13 @@ __libdwfl_report_offline (Dwfl *dwfl, const char *name, + int (*predicate) (const char *module, + const char *file)) + { +- Elf *elf = elf_begin (fd, ELF_C_READ_MMAP_PRIVATE, NULL); ++ Elf *elf; ++ Dwfl_Error error = __libdw_open_file (&fd, &elf, closefd, true); ++ if (error != DWFL_E_NOERROR) ++ { ++ __libdwfl_seterrno (error); ++ return NULL; ++ } + Dwfl_Module *mod = process_file (dwfl, name, file_name, fd, elf, predicate); + if (mod == NULL) + { +diff --git a/libdwfl/open.c b/libdwfl/open.c +new file mode 100644 +index 0000000..397af35 +--- /dev/null ++++ b/libdwfl/open.c +@@ -0,0 +1,203 @@ ++/* Decompression support for libdwfl: zlib (gzip) and/or bzlib (bzip2). ++ Copyright (C) 2009 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 ++ . */ ++ ++#include "../libelf/libelfP.h" ++#undef _ ++#include "libdwflP.h" ++ ++#include ++ ++#if !USE_ZLIB ++# define __libdw_gunzip(...) false ++#endif ++ ++#if !USE_BZLIB ++# define __libdw_bunzip2(...) false ++#endif ++ ++#if !USE_LZMA ++# define __libdw_unlzma(...) false ++#endif ++ ++/* Consumes and replaces *ELF only on success. */ ++static Dwfl_Error ++decompress (int fd __attribute__ ((unused)), Elf **elf) ++{ ++ Dwfl_Error error = DWFL_E_BADELF; ++ void *buffer = NULL; ++ size_t size = 0; ++ ++#if USE_ZLIB || USE_BZLIB || USE_LZMA ++ const off64_t offset = (*elf)->start_offset; ++ void *const mapped = ((*elf)->map_address == NULL ? NULL ++ : (*elf)->map_address + offset); ++ const size_t mapped_size = (*elf)->maximum_size; ++ if (mapped_size == 0) ++ return error; ++ ++ error = __libdw_gunzip (fd, offset, mapped, mapped_size, &buffer, &size); ++ if (error == DWFL_E_BADELF) ++ error = __libdw_bunzip2 (fd, offset, mapped, mapped_size, &buffer, &size); ++ if (error == DWFL_E_BADELF) ++ error = __libdw_unlzma (fd, offset, mapped, mapped_size, &buffer, &size); ++#endif ++ ++ if (error == DWFL_E_NOERROR) ++ { ++ if (unlikely (size == 0)) ++ { ++ error = DWFL_E_BADELF; ++ free (buffer); ++ } ++ else ++ { ++ Elf *memelf = elf_memory (buffer, size); ++ if (memelf == NULL) ++ { ++ error = DWFL_E_LIBELF; ++ free (buffer); ++ } ++ else ++ { ++ memelf->flags |= ELF_F_MALLOCED; ++ elf_end (*elf); ++ *elf = memelf; ++ } ++ } ++ } ++ else ++ free (buffer); ++ ++ return error; ++} ++ ++static Dwfl_Error ++what_kind (int fd, Elf **elfp, Elf_Kind *kind, bool *close_fd) ++{ ++ Dwfl_Error error = DWFL_E_NOERROR; ++ *kind = elf_kind (*elfp); ++ if (unlikely (*kind == ELF_K_NONE)) ++ { ++ if (unlikely (*elfp == NULL)) ++ error = DWFL_E_LIBELF; ++ else ++ { ++ error = decompress (fd, elfp); ++ if (error == DWFL_E_NOERROR) ++ { ++ *close_fd = true; ++ *kind = elf_kind (*elfp); ++ } ++ } ++ } ++ return error; ++} ++ ++Dwfl_Error internal_function ++__libdw_open_file (int *fdp, Elf **elfp, bool close_on_fail, bool archive_ok) ++{ ++ bool close_fd = false; ++ ++ Elf *elf = elf_begin (*fdp, ELF_C_READ_MMAP_PRIVATE, NULL); ++ ++ Elf_Kind kind; ++ Dwfl_Error error = what_kind (*fdp, &elf, &kind, &close_fd); ++ if (error == DWFL_E_BADELF) ++ { ++ /* It's not an ELF file or a compressed file. ++ See if it's an image with a header preceding the real file. */ ++ ++ off64_t offset = elf->start_offset; ++ error = __libdw_image_header (*fdp, &offset, ++ (elf->map_address == NULL ? NULL ++ : elf->map_address + offset), ++ elf->maximum_size); ++ if (error == DWFL_E_NOERROR) ++ { ++ /* Pure evil. libelf needs some better interfaces. */ ++ elf->kind = ELF_K_AR; ++ elf->state.ar.elf_ar_hdr.ar_name = "libdwfl is faking you out"; ++ elf->state.ar.elf_ar_hdr.ar_size = elf->maximum_size - offset; ++ elf->state.ar.offset = offset - sizeof (struct ar_hdr); ++ Elf *subelf = elf_begin (-1, ELF_C_READ_MMAP_PRIVATE, elf); ++ elf->kind = ELF_K_NONE; ++ if (unlikely (subelf == NULL)) ++ error = DWFL_E_LIBELF; ++ else ++ { ++ subelf->parent = NULL; ++ subelf->flags |= elf->flags & (ELF_F_MMAPPED | ELF_F_MALLOCED); ++ elf->flags &= ~(ELF_F_MMAPPED | ELF_F_MALLOCED); ++ elf_end (elf); ++ elf = subelf; ++ error = what_kind (*fdp, &elf, &kind, &close_fd); ++ } ++ } ++ } ++ ++ if (error == DWFL_E_NOERROR ++ && kind != ELF_K_ELF ++ && !(archive_ok && kind == ELF_K_AR)) ++ error = DWFL_E_BADELF; ++ ++ if (error != DWFL_E_NOERROR) ++ { ++ elf_end (elf); ++ elf = NULL; ++ } ++ ++ if (error == DWFL_E_NOERROR ? close_fd : close_on_fail) ++ { ++ close (*fdp); ++ *fdp = -1; ++ } ++ ++ *elfp = elf; ++ return error; ++} +diff --git a/libdwfl/relocate.c b/libdwfl/relocate.c +index abacc04..121a481 100644 +--- a/libdwfl/relocate.c ++++ b/libdwfl/relocate.c +@@ -1,5 +1,5 @@ + /* Relocate debug information. +- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2005-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -59,6 +59,8 @@ internal_function + __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx, + Elf32_Word shndx, GElf_Addr *value) + { ++ assert (mod->e_type == ET_REL); ++ + Elf_Scn *refscn = elf_getscn (elf, shndx); + GElf_Shdr refshdr_mem, *refshdr = gelf_getshdr (refscn, &refshdr_mem); + if (refshdr == NULL) +@@ -70,7 +72,7 @@ __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx, + address and update the section header. */ + + if (*shstrndx == SHN_UNDEF +- && unlikely (elf_getshstrndx (elf, shstrndx) < 0)) ++ && unlikely (elf_getshdrstrndx (elf, shstrndx) < 0)) + return DWFL_E_LIBELF; + + const char *name = elf_strptr (elf, *shstrndx, refshdr->sh_name); +@@ -95,8 +97,10 @@ __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx, + return DWFL_E_LIBELF; + } + +- /* Apply the adjustment. */ +- *value += refshdr->sh_addr; ++ if (refshdr->sh_flags & SHF_ALLOC) ++ /* Apply the adjustment. */ ++ *value += refshdr->sh_addr + mod->main.bias; ++ + return DWFL_E_NOERROR; + } + +@@ -183,11 +187,14 @@ relocate_getsym (Dwfl_Module *mod, + if (sym->st_shndx != SHN_XINDEX) + *shndx = sym->st_shndx; + +- switch (*shndx) ++ switch (sym->st_shndx) + { + case SHN_ABS: + case SHN_UNDEF: ++ return DWFL_E_NOERROR; ++ + case SHN_COMMON: ++ sym->st_value = 0; /* Value is size, not helpful. */ + return DWFL_E_NOERROR; + } + +@@ -263,9 +270,15 @@ resolve_symbol (Dwfl_Module *referer, struct reloc_symtab_cache *symtab, + continue; + + /* We found it! */ +- if (shndx == SHN_ABS) ++ if (shndx == SHN_ABS) /* XXX maybe should apply bias? */ + return DWFL_E_NOERROR; + ++ if (m->e_type != ET_REL) ++ { ++ sym->st_value += m->symfile->bias; ++ 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; +@@ -292,6 +305,10 @@ relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr, + if (tname == NULL) + return DWFL_E_LIBELF; + ++ if (unlikely (tshdr->sh_type == SHT_NOBITS) || unlikely (tshdr->sh_size == 0)) ++ /* No contents to relocate. */ ++ return DWFL_E_NOERROR; ++ + if (debugscn && ! ebl_debugscn_p (mod->ebl, tname)) + /* This relocation section is not for a debugging section. + Nothing to do here. */ +@@ -336,7 +353,8 @@ relocate_section (Dwfl_Module *mod, Elf *relocated, const GElf_Ehdr *ehdr, + { + /* Maybe we can figure it out anyway. */ + error = resolve_symbol (mod, reloc_symtab, &sym, shndx); +- if (error != DWFL_E_NOERROR) ++ if (error != DWFL_E_NOERROR ++ && !(error == DWFL_E_RELUNDEF && shndx == SHN_COMMON)) + return error; + } + +@@ -572,7 +590,7 @@ __libdwfl_relocate (Dwfl_Module *mod, Elf *debugfile, bool debug) + return DWFL_E_LIBELF; + + size_t d_shstrndx; +- if (elf_getshstrndx (debugfile, &d_shstrndx) < 0) ++ if (elf_getshdrstrndx (debugfile, &d_shstrndx) < 0) + return DWFL_E_LIBELF; + + RELOC_SYMTAB_CACHE (reloc_symtab); +@@ -616,7 +634,7 @@ __libdwfl_relocate_section (Dwfl_Module *mod, Elf *relocated, + RELOC_SYMTAB_CACHE (reloc_symtab); + + size_t shstrndx; +- if (elf_getshstrndx (relocated, &shstrndx) < 0) ++ if (elf_getshdrstrndx (relocated, &shstrndx) < 0) + return DWFL_E_LIBELF; + + return (__libdwfl_module_getebl (mod) +diff --git a/libdwfl/segment.c b/libdwfl/segment.c +new file mode 100644 +index 0000000..36c850f +--- /dev/null ++++ b/libdwfl/segment.c +@@ -0,0 +1,322 @@ ++/* Manage address space lookup table for libdwfl. ++ Copyright (C) 2008, 2009 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 ++ . */ ++ ++#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/ChangeLog b/libebl/ChangeLog +index 8ebc6c1..ed9361c 100644 +--- a/libebl/ChangeLog ++++ b/libebl/ChangeLog +@@ -1,3 +1,100 @@ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++2010-01-04 Roland McGrath ++ ++ * eblcorenote.c (ebl_core_note): Take GElf_Nhdr * and name data ++ pointer instead of only n_type and n_descsz. ++ * libebl.h: Update declaration. ++ * ebl-hooks.h: Update core_note hook signature. ++ * eblopenbackend.c (default_core_note): Likewise. ++ ++2009-10-14 Roland McGrath ++ ++ * eblobjnote.c (ebl_object_note): Clean up NT_GNU_GOLD_VERSION printing. ++ ++2009-10-05 Roland McGrath ++ ++ * eblopenbackend.c (default_debugscn_p): Match .debug_pubtypes and ++ .debug_types too. ++ ++2009-09-02 Petr Machata ++ ++ * libebl/eblstrtab.c (morememory): Allocate memory in multiples of ++ pagesize. ++ ++2009-08-06 Petr Machata ++ ++ * libebl/eblstrtab.c (ebl_strtabfinalize): Only call copystrings ++ if we have any strings to copy. ++ ++2009-07-26 Mark Wielaard ++ ++ * eblobjnote.c (ebl_object_note): Handle NT_GNU_GOLD_VERSION. ++ ++ * eblobjnotetypename.c (ebl_object_note_type_name): Recognize ++ NT_GNU_GOLD_VERSION. ++ ++2009-07-08 Roland McGrath ++ ++ * ebl-hooks.h: Add abi_cfi hook. ++ * eblopenbackend.c (default_abi_cfi): New function. ++ (fill_defaults): Add initializer. ++ * eblabicfi.c: New file. ++ * Makefile.am (gen_SOURCES): Add it. ++ * libebl.h: Declare ebl_abi_cfi. ++ ++2009-07-08 Ulrich Drepper ++ ++ * eblsymbolbindingname.c (ebl_symbol_binding_name): Handle ++ STB_GNU_UNIQUE. ++ ++ * eblsymboltypename.c (ebl_symbol_type_name): Only handle STT_GNU_IFUNC ++ if the binary is marked as being for Linux. ++ ++2009-04-01 Roland McGrath ++ ++ * eblsymboltypename.c (ebl_symbol_type_name): Add STT_GNU_IFUNC. ++ ++ * eblauxvinfo.c (AUXV_TYPES): Add RANDOM and BASE_PLATFORM. ++ ++2009-02-01 Ulrich Drepper ++ ++ * eblreloctypename.c (ebl_reloc_type_name): Return "" ++ instead of "???" for invalid relocations. ++ ++2008-08-01 Roland McGrath ++ ++ * eblcorenotetypename.c: Handle NT_386_IOPERM. ++ ++2008-07-28 Roland McGrath ++ ++ * eblauxvinfo.c (AUXV_TYPES): Add EXECFN. ++ ++ * eblauxvinfo.c (ebl_auxv_info): Handle missing elements of standard ++ table. ++ ++2008-07-04 Roland McGrath ++ ++ * 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 ++ ++ * 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 + + * libebl.h: Declare ebl_check_object_attribute. +diff --git a/libebl/Makefile.am b/libebl/Makefile.am +index 1e36b33..d157195 100644 +--- a/libebl/Makefile.am ++++ b/libebl/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc. ++## Copyright (C) 2000-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 +@@ -24,19 +24,10 @@ + ## Network licensing program, please visit 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 ++include $(top_srcdir)/config/eu.am ++AM_CFLAGS += -fpic ++INCLUDES += -I$(srcdir)/../libelf -I$(srcdir)/../libdw -I$(srcdir)/../libasm + VERSION = 1 +-PACKAGE_VERSION = @PACKAGE_VERSION@ + LIBEBL_SUBDIR = @LIBEBL_SUBDIR@ + + lib_LIBRARIES = libebl.a +@@ -58,19 +49,11 @@ gen_SOURCES = eblopenbackend.c eblclosebackend.c eblstrtab.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 ++ eblsysvhashentrysize.c eblauxvinfo.c eblcheckobjattr.c \ ++ ebl_check_special_section.c ebl_syscall_abi.c eblabicfi.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 ++CLEANFILES += $(am_libebl_pic_a_OBJECTS) +diff --git a/libebl/ebl-hooks.h b/libebl/ebl-hooks.h +index c236b35..59e73c5 100644 +--- a/libebl/ebl-hooks.h ++++ b/libebl/ebl-hooks.h +@@ -1,5 +1,5 @@ + /* Backend hook signatures internal interface for libebl. +- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2000-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 +@@ -83,6 +83,12 @@ 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); + +@@ -108,8 +114,8 @@ const char *EBLHOOK(core_note_type_name) (uint32_t, char *, size_t); + 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 **, ++int EBLHOOK(core_note) (const GElf_Nhdr *, const char *, ++ GElf_Word *, size_t *, const Ebl_Register_Location **, + size_t *, const Ebl_Core_Item **); + + /* Handle object file note. */ +@@ -152,11 +158,17 @@ ssize_t EBLHOOK(register_info) (Ebl *ebl, + 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); + ++/* Supply the machine-specific state of CFI before CIE initial programs. */ ++int EBLHOOK(abi_cfi) (Ebl *ebl, Dwarf_CIE *abi_info); + + /* 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 +new file mode 100644 +index 0000000..d1f3c6e +--- /dev/null ++++ b/libebl/ebl_check_special_section.c +@@ -0,0 +1,65 @@ ++/* 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++ ++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_syscall_abi.c b/libebl/ebl_syscall_abi.c +new file mode 100644 +index 0000000..2d9a26b +--- /dev/null ++++ b/libebl/ebl_syscall_abi.c +@@ -0,0 +1,66 @@ ++/* 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++ ++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/eblabicfi.c b/libebl/eblabicfi.c +new file mode 100644 +index 0000000..221e83f +--- /dev/null ++++ b/libebl/eblabicfi.c +@@ -0,0 +1,63 @@ ++/* Return ABI-specific DWARF CFI details. ++ Copyright (C) 2009 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++ ++int ++ebl_abi_cfi (ebl, abi_info) ++ Ebl *ebl; ++ Dwarf_CIE *abi_info; ++{ ++ return ebl == NULL ? -1 : ebl->abi_cfi (ebl, abi_info); ++} +diff --git a/libebl/eblauxvinfo.c b/libebl/eblauxvinfo.c +index 54583f9..6e02403 100644 +--- a/libebl/eblauxvinfo.c ++++ b/libebl/eblauxvinfo.c +@@ -1,5 +1,5 @@ + /* Describe known auxv types. +- Copyright (C) 2007 Red Hat, Inc. ++ Copyright (C) 2007, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -63,6 +63,7 @@ + TYPE (NULL, "") \ + TYPE (IGNORE, "") \ + TYPE (EXECFD, "d") \ ++ TYPE (EXECFN, "s") \ + TYPE (PHDR, "p") \ + TYPE (PHENT, "u") \ + TYPE (PHNUM, "u") \ +@@ -77,6 +78,7 @@ + TYPE (EGID, "u") \ + TYPE (CLKTCK, "u") \ + TYPE (PLATFORM, "s") \ ++ TYPE (BASE_PLATFORM, "s") \ + TYPE (HWCAP, "x") \ + TYPE (FPUCW, "x") \ + TYPE (DCACHEBSIZE, "d") \ +@@ -89,7 +91,8 @@ + TYPE (L1I_CACHESHAPE, "d") \ + TYPE (L1D_CACHESHAPE, "d") \ + TYPE (L2_CACHESHAPE, "d") \ +- TYPE (L3_CACHESHAPE, "d") ++ TYPE (L3_CACHESHAPE, "d") \ ++ TYPE (RANDOM, "p") + + static const struct + { +@@ -110,7 +113,7 @@ ebl_auxv_info (ebl, a_type, name, format) + const char **format; + { + int result = ebl->auxv_info (a_type, name, format); +- if (result == 0 && a_type < nauxv_types) ++ 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; +diff --git a/libebl/eblcorenote.c b/libebl/eblcorenote.c +index 553d5ba..7549ca6 100644 +--- a/libebl/eblcorenote.c ++++ b/libebl/eblcorenote.c +@@ -1,5 +1,5 @@ + /* Describe known core note formats. +- Copyright (C) 2007 Red Hat, Inc. ++ Copyright (C) 2007, 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 +@@ -61,19 +61,19 @@ + + + int +-ebl_core_note (ebl, n_type, descsz, ++ebl_core_note (ebl, nhdr, name, + regs_offset, nregloc, reglocs, nitems, items) + Ebl *ebl; +- GElf_Word n_type; +- GElf_Word descsz; ++ const GElf_Nhdr *nhdr; ++ const char *name; + 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); ++ int result = ebl->core_note (nhdr, name, ++ regs_offset, nregloc, reglocs, nitems, items); + if (result == 0) + { + /* The machine specific function did not know this type. */ +@@ -81,7 +81,7 @@ ebl_core_note (ebl, n_type, descsz, + *regs_offset = 0; + *nregloc = 0; + *reglocs = NULL; +- switch (n_type) ++ switch (nhdr->n_type) + { + #define ITEMS(type, table) \ + case type: \ +diff --git a/libebl/eblcorenotetypename.c b/libebl/eblcorenotetypename.c +index d01932f..9376cf5 100644 +--- a/libebl/eblcorenotetypename.c ++++ b/libebl/eblcorenotetypename.c +@@ -56,7 +56,6 @@ + #include + #include + +- + const char * + ebl_core_note_type_name (ebl, type, buf, len) + Ebl *ebl; +@@ -101,6 +100,7 @@ ebl_core_note_type_name (ebl, type, buf, len) + KNOWNSTYPE (PPC_VMX); + KNOWNSTYPE (PPC_SPE); + KNOWNSTYPE (386_TLS); ++ KNOWNSTYPE (386_IOPERM); + #undef KNOWNSTYPE + + default: +diff --git a/libebl/ebldynamictagname.c b/libebl/ebldynamictagname.c +index d9aa7df..e0972ed 100644 +--- a/libebl/ebldynamictagname.c ++++ b/libebl/ebldynamictagname.c +@@ -1,5 +1,5 @@ + /* Return dynamic tag name. +- Copyright (C) 2001, 2002, 2006 Red Hat, Inc. ++ Copyright (C) 2001, 2002, 2006, 2008 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -123,7 +123,7 @@ ebl_dynamic_tag_name (ebl, tag, buf, len) + res = "FILTER"; + else + { +- snprintf (buf, len, gettext (": %" PRId64), tag); ++ snprintf (buf, len, gettext (": %#" PRIx64), tag); + + res = buf; + +diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c +index 836ac8d..b56c6cb 100644 +--- a/libebl/eblobjnote.c ++++ b/libebl/eblobjnote.c +@@ -1,5 +1,5 @@ + /* Print contents of object file note. +- Copyright (C) 2002, 2007 Red Hat, Inc. ++ Copyright (C) 2002, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -81,6 +81,13 @@ ebl_object_note (ebl, name, type, descsz, desc) + } + break; + ++ case NT_GNU_GOLD_VERSION: ++ if (strcmp (name, "GNU") == 0 && descsz > 0) ++ /* A non-null terminated version string. */ ++ printf (gettext (" Linker version: %.*s\n"), ++ (int) descsz, desc); ++ break; ++ + case NT_GNU_ABI_TAG: + if (strcmp (name, "GNU") == 0 && descsz >= 8 && descsz % 4 == 0) + { +diff --git a/libebl/eblobjnotetypename.c b/libebl/eblobjnotetypename.c +index ff9330f..8e99dbb 100644 +--- a/libebl/eblobjnotetypename.c ++++ b/libebl/eblobjnotetypename.c +@@ -1,5 +1,5 @@ + /* Return note type name. +- Copyright (C) 2002, 2007 Red Hat, Inc. ++ Copyright (C) 2002, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -74,6 +74,7 @@ ebl_object_note_type_name (ebl, type, buf, len) + KNOWNSTYPE (VERSION), + KNOWNSTYPE (GNU_HWCAP), + KNOWNSTYPE (GNU_BUILD_ID), ++ KNOWNSTYPE (GNU_GOLD_VERSION), + }; + + /* Handle standard names. */ +diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c +index 08817f6..edd8c4a 100644 +--- a/libebl/eblopenbackend.c ++++ b/libebl/eblopenbackend.c +@@ -1,5 +1,5 @@ + /* Generate ELF backend handle. +- Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc. ++ Copyright (C) 2000-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 +@@ -186,7 +186,7 @@ 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, ++static int default_core_note (const GElf_Nhdr *nhdr, const char *name, + GElf_Word *regs_offset, size_t *nregloc, + const Ebl_Register_Location **reglocs, + size_t *nitems, const Ebl_Core_Item **); +@@ -202,6 +202,8 @@ 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); +@@ -210,10 +212,13 @@ static ssize_t default_register_info (Ebl *ebl, + 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 int default_abi_cfi (Ebl *ebl, Dwarf_CIE *abi_info); + + + static void +@@ -231,6 +236,7 @@ fill_defaults (Ebl *result) + 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; +@@ -250,8 +256,10 @@ fill_defaults (Ebl *result) + 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->abi_cfi = default_abi_cfi; + result->destr = default_destr; + result->sysvhash_entrysize = sizeof (Elf32_Word); + } +@@ -521,6 +529,15 @@ 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)), +@@ -587,8 +604,8 @@ default_auxv_info (GElf_Xword a_type __attribute__ ((unused)), + } + + static int +-default_core_note (GElf_Word n_type __attribute__ ((unused)), +- GElf_Word descsz __attribute__ ((unused)), ++default_core_note (const GElf_Nhdr *nhdr __attribute__ ((unused)), ++ const char *name __attribute__ ((unused)), + GElf_Word *ro __attribute__ ((unused)), + size_t *nregloc __attribute__ ((unused)), + const Ebl_Register_Location **reglocs +@@ -642,6 +659,9 @@ default_debugscn_p (const char *name) + ".debug_macinfo", + /* DWARF 3 */ + ".debug_ranges", ++ ".debug_pubtypes", ++ /* DWARF 4 */ ++ ".debug_types", + /* SGI/MIPS DWARF 2 extensions */ + ".debug_weaknames", + ".debug_funcnames", +@@ -706,6 +726,20 @@ default_register_info (Ebl *ebl __attribute__ ((unused)), + 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)), +@@ -717,3 +751,10 @@ default_check_object_attribute (Ebl *ebl __attribute__ ((unused)), + *value_name = NULL; + return false; + } ++ ++static int ++default_abi_cfi (Ebl *ebl __attribute__ ((unused)), ++ Dwarf_CIE *abi_info __attribute__ ((unused))) ++{ ++ return 0; ++} +diff --git a/libebl/eblreloctypename.c b/libebl/eblreloctypename.c +index c715b06..3f2c7d9 100644 +--- a/libebl/eblreloctypename.c ++++ b/libebl/eblreloctypename.c +@@ -1,5 +1,5 @@ + /* Return relocation type name. +- Copyright (C) 2001, 2002 Red Hat, Inc. ++ Copyright (C) 2001, 2002, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -68,7 +68,7 @@ ebl_reloc_type_name (ebl, reloc, buf, len) + res = ebl != NULL ? ebl->reloc_type_name (reloc, buf, len) : NULL; + if (res == NULL) + /* There are no generic relocation type names. */ +- res = "???"; ++ res = ""; + + return res; + } +diff --git a/libebl/eblstrtab.c b/libebl/eblstrtab.c +index d6ce94a..4222cfd 100644 +--- a/libebl/eblstrtab.c ++++ b/libebl/eblstrtab.c +@@ -101,9 +101,11 @@ struct Ebl_Strtab + }; + + +-/* Cache for the pagesize. We correct this value a bit so that `malloc' +- is not allocating more than a page. */ ++/* Cache for the pagesize. */ + static size_t ps; ++/* We correct this value a bit so that `malloc' is not allocating more ++ than a page. */ ++#define MALLOC_OVERHEAD (2 * sizeof (void *)) + + + struct Ebl_Strtab * +@@ -111,8 +113,8 @@ ebl_strtabinit (bool nullstr) + { + if (ps == 0) + { +- ps = sysconf (_SC_PAGESIZE) - 2 * sizeof (void *); +- assert (sizeof (struct memoryblock) < ps); ++ ps = sysconf (_SC_PAGESIZE); ++ assert (sizeof (struct memoryblock) < ps - MALLOC_OVERHEAD); + } + + struct Ebl_Strtab *ret +@@ -135,8 +137,11 @@ ebl_strtabinit (bool nullstr) + static int + morememory (struct Ebl_Strtab *st, size_t len) + { +- if (len < ps) +- len = ps; ++ size_t overhead = offsetof (struct memoryblock, memory); ++ len += overhead + MALLOC_OVERHEAD; ++ ++ /* Allocate nearest multiple of pagesize >= len. */ ++ len = ((len / ps) + (len % ps != 0)) * ps - MALLOC_OVERHEAD; + + struct memoryblock *newmem = (struct memoryblock *) malloc (len); + if (newmem == NULL) +@@ -145,7 +150,7 @@ morememory (struct Ebl_Strtab *st, size_t len) + newmem->next = st->memory; + st->memory = newmem; + st->backp = newmem->memory; +- st->left = len - offsetof (struct memoryblock, memory); ++ st->left = len - overhead; + + return 0; + } +@@ -352,7 +357,8 @@ ebl_strtabfinalize (struct Ebl_Strtab *st, Elf_Data *data) + the offset members of the elfstrent records. */ + char *endp = (char *) data->d_buf + nulllen; + size_t copylen = nulllen; +- copystrings (st->root, &endp, ©len); ++ if (st->root) ++ copystrings (st->root, &endp, ©len); + assert (copylen == st->total + nulllen); + } + +diff --git a/libebl/eblsymbolbindingname.c b/libebl/eblsymbolbindingname.c +index c4412c9..334a9c3 100644 +--- a/libebl/eblsymbolbindingname.c ++++ b/libebl/eblsymbolbindingname.c +@@ -1,5 +1,5 @@ + /* Return symbol binding name. +- Copyright (C) 2001, 2002 Red Hat, Inc. ++ Copyright (C) 2001, 2002, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -78,8 +78,14 @@ ebl_symbol_binding_name (ebl, binding, buf, len) + res = stb_names[binding]; + else + { ++ char *ident; ++ + if (binding >= STB_LOPROC && binding <= STB_HIPROC) + snprintf (buf, len, "LOPROC+%d", binding - STB_LOPROC); ++ else if (binding == STB_GNU_UNIQUE ++ && (ident = elf_getident (ebl->elf, NULL)) != NULL ++ && ident[EI_OSABI] == ELFOSABI_LINUX) ++ return "GNU_UNIQUE"; + else if (binding >= STB_LOOS && binding <= STB_HIOS) + snprintf (buf, len, "LOOS+%d", binding - STB_LOOS); + else +diff --git a/libebl/eblsymboltypename.c b/libebl/eblsymboltypename.c +index c7cb2cb..f2ac622 100644 +--- a/libebl/eblsymboltypename.c ++++ b/libebl/eblsymboltypename.c +@@ -1,5 +1,5 @@ + /* Return symbol type name. +- Copyright (C) 2001, 2002 Red Hat, Inc. ++ Copyright (C) 2001, 2002, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -84,8 +84,14 @@ ebl_symbol_type_name (ebl, symbol, buf, len) + res = stt_names[symbol]; + else + { ++ char *ident; ++ + if (symbol >= STT_LOPROC && symbol <= STT_HIPROC) + snprintf (buf, len, "LOPROC+%d", symbol - STT_LOPROC); ++ else if (symbol == STT_GNU_IFUNC ++ && (ident = elf_getident (ebl->elf, NULL)) != NULL ++ && ident[EI_OSABI] == ELFOSABI_LINUX) ++ return "GNU_IFUNC"; + else if (symbol >= STT_LOOS && symbol <= STT_HIOS) + snprintf (buf, len, "LOOS+%d", symbol - STT_LOOS); + else +diff --git a/libebl/libebl.h b/libebl/libebl.h +index 083de03..c94ad78 100644 +--- a/libebl/libebl.h ++++ b/libebl/libebl.h +@@ -1,5 +1,5 @@ + /* Interface for libebl. +- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2000-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 +@@ -141,6 +141,12 @@ 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); +@@ -242,6 +248,45 @@ extern ssize_t ebl_register_info (Ebl *ebl, + 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]); ++ ++/* Supply the ABI-specified state of DWARF CFI before CIE initial programs. ++ ++ The DWARF 3.0 spec says that the default initial states of all registers ++ are "undefined", unless otherwise specified by the machine/compiler ABI. ++ ++ This default is wrong for every machine with the CFI generated by GCC. ++ The EH unwinder does not really distinguish "same_value" and "undefined", ++ since it doesn't matter for unwinding (in either case there is no change ++ to make for that register). GCC generates CFI that says nothing at all ++ about registers it hasn't spilled somewhere. For our unwinder to give ++ the true story, the backend must supply an initial state that uses ++ "same_value" rules for all the callee-saves registers. ++ ++ This can fill in the initial_instructions, initial_instructions_end ++ members of *ABI_INFO to point at a CFI instruction stream to process ++ before each CIE's initial instructions. It should set the ++ data_alignment_factor member if it affects the initial instructions. ++ ++ As a shorthand for some common cases, for this instruction stream ++ we overload some CFI instructions that cannot be used in a CIE: ++ ++ DW_CFA_restore -- Change default rule for all unmentioned ++ registers from undefined to same_value. ++ ++ This function can also fill in ABI_INFO->return_address_register with the ++ DWARF register number that identifies the actual PC in machine state. ++ If there is no canonical DWARF register number with that meaning, it's ++ left unchanged (callers usually initialize with (Dwarf_Word) -1). ++ This value is not used by CFI per se. */ ++extern int ebl_abi_cfi (Ebl *ebl, Dwarf_CIE *abi_info) ++ __nonnull_attribute__ (2); + + /* ELF string table handling. */ + struct Ebl_Strtab; +@@ -334,13 +379,13 @@ typedef struct + 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, ++/* Describe the format of a core file note with the given header and NAME. ++ NAME is not guaranteed terminated, it's NHDR->n_namesz raw bytes. */ ++extern int ebl_core_note (Ebl *ebl, const GElf_Nhdr *nhdr, const char *name, + 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); ++ __nonnull_attribute__ (1, 2, 3, 4, 5, 6, 7, 8); + + /* Describe the auxv type number. */ + extern int ebl_auxv_info (Ebl *ebl, GElf_Xword a_type, +diff --git a/libebl/libeblP.h b/libebl/libeblP.h +index 7bfa650..32a4372 100644 +--- a/libebl/libeblP.h ++++ b/libebl/libeblP.h +@@ -1,5 +1,5 @@ + /* Internal definitions for interface for libebl. +- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006 Red Hat, Inc. ++ Copyright (C) 2000-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -94,4 +94,10 @@ typedef const char *(*ebl_bhinit_t) (Elf *, GElf_Half, Ebl *, size_t); + #undef _ + #define _(Str) dgettext ("elfutils", Str) + ++ ++/* LEB128 constant helper macros. */ ++#define ULEB128_7(x) (BUILD_BUG_ON_ZERO ((x) >= (1U << 7)) + (x)) ++ ++#define BUILD_BUG_ON_ZERO(x) (sizeof (char [(x) ? -1 : 1]) - 1) ++ + #endif /* libeblP.h */ +diff --git a/libelf/ChangeLog b/libelf/ChangeLog +index ef7b37a..3814208 100644 +--- a/libelf/ChangeLog ++++ b/libelf/ChangeLog +@@ -1,3 +1,264 @@ ++2010-02-17 Roland McGrath ++ ++ * elf_begin.c (file_read_elf): Leave section rawdata_base and ++ data_base pointers null when [sh_offset,sh_size) points outside ++ the mapped file. ++ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++2010-01-07 Roland McGrath ++ ++ * elf32_getphdr.c: Use __elf_getphdrnum_rdlock. ++ * gelf_getphdr.c: Likewise. ++ * gelf_update_phdr.c: Likewise. ++ * elf32_updatefile.c (__elf32_updatemmap, __elf32_updatefile): Likewise. ++ * elf32_updatenull.c (__elf32_updatenull_wrlock): Likewise. ++ * elf32_newphdr.c: Clear section 0's sh_info when resetting e_phnum. ++ If COUNT is too large, use store PN_XNUM instead and set sh_info. ++ * elf_begin.c (file_read_elf): Always allocate space we can use later ++ for section 0 if doing RDWR. ++ ++ * elf_getphdrnum.c: New file. ++ * Makefile.am (libelf_a_SOURCES): Add it. ++ * libelf.h: Declare elf_getphdrnum. ++ * libelfP.h: Declare __elf_getphdrnum_rdlock. ++ * libelf.map (ELFUTILS_1.6): New set, add elf_getphdrnum. ++ ++ * elf.h: Update from glibc. ++ ++2009-10-23 Lubomir Rintel ++ ++ * elf32_updatefile.c (fill_mmap): When starting past shdr_end, start ++ filling from section start, not shdr_end. ++ ++2009-11-10 Roland McGrath ++ ++ * elf_readall.c (__libelf_readall): Fetch file size if not yet known. ++ ++2009-11-06 Mark Wielaard ++ ++ * elf_next.c (elf_next): Mark the archive header as unusable when ++ there is no next ar element. ++ ++2009-08-12 Mark Wielaard ++ ++ * Makefile.am (libelf.so): Use -Wl,-z,defs not -defs. ++ ++2009-07-26 Ulrich Drepper ++ ++ * elf.h: Update from glibc. ++ ++2009-07-21 Ulrich Drepper ++ ++ * elf32_updatefile.c (__elfXX_updatemmap): Fix handling of gaps between ++ sections. Patch by Lubomir Rintel . ++ ++2009-07-08 Roland McGrath ++ ++ * libelfP.h (struct Elf): Remove unused ar.has_index field. ++ Reorder various members for optimal packing. ++ ++2009-07-08 Ulrich Drepper ++ ++ * elf.h: Update from glibc. ++ ++2009-06-13 Ulrich Drepper ++ ++ * Makefile.am (libelf_a_SOURCES): Replace elf_getshnum.c and ++ elf_getshstrndx.c with elf_getshdrnum.c and elf_getshdrstrndx.c. ++ * elf_getshnum.c: Renamed to... ++ * elf_getshdrnum.c: ...this. Rename function and add old name as ++ alias. Likewise for internal functions with derived names. ++ * elf_getshstrndx.c: Renamed to... ++ * elf_getshdrstrndx.c: ...this. Rename function and add old name as ++ alias. Likewise for internal functions with derived names. ++ * libelf.h: Add prototypes for new names. Make old names as ++ deprecated. ++ * libelfP.h: Rename internal function prototypes. ++ * libelf.map: Export for names. ++ * elf32_checksum.c: Don't use deprecated functions. ++ * elf32_getshdr.c: Likewise. ++ ++2009-06-01 Ulrich Drepper ++ ++ * elf.h: Update from glibc. ++ ++2009-04-14 Roland McGrath ++ ++ * elf.h: Update from glibc. ++ ++2009-04-01 Roland McGrath ++ ++ * elf.h: Update from glibc. ++ ++2009-02-10 Ulrich Drepper ++ ++ * elf32_updatefile.c (updatefile): For the zeroth section we still ++ have to copy the section header. ++ ++2009-02-01 Ulrich Drepper ++ ++ * elf_strptr.c: Add comment re possible problem. ++ ++2009-01-26 Ulrich Drepper ++ ++ * elf32_updatenull.c (updatenull_wrlock): Fix comment of ++ ELF_F_LAYOUT behaviour re section header table. ++ ++2009-01-22 Ulrich Drepper ++ ++ * elf32_updatefile.c (__elfXX_updatemmap): Fill the gap between ++ sections even if only the section at the start of the gap has been ++ changed. ++ (__elfXX_updatefile): Likewise. ++ ++2009-01-21 Ulrich Drepper ++ ++ * elf32_updatefile.c (__elfXX_updatemmap): Skip most of the loop to ++ handle sections for NOBITS sections. ++ (elfXX_updatefile): Likewise. ++ ++ * elf32_updatefile.c (__elfXX_updatemmap): When skipping non-NOBITS ++ sections we haven't loaded, update last_position based on scn_start, ++ not based on old value. Don't run the loop for the dummy section 0. ++ (elfXX_updatefile): Don't run the loop for the dummy section 0. ++ ++2009-01-10 Ulrich Drepper ++ ++ * libelfP.h (_): We only have one translation domain, elfutils. ++ ++ * Makefile.am: Use USE_LOCKS instead of USE_TLS. ++ * elf_error.c: Always use __thread. Remove all !USE_TLS code. ++ ++2009-01-04 Roland McGrath ++ ++ * note_xlate.h (elf_cvt_note): Don't examine a size too small to ++ container a note header. ++ ++2008-12-11 Roland McGrath ++ ++ * 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 ++ ++ * elf_getarhdr.c (elf_getarhdr): Fix missing rename in last change. ++ ++2008-10-22 Petr Machata ++ ++ * elf_rawfile.c (elf_rawfile): Lock around elf-> references. ++ ++2008-10-21 Petr Machata ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * elf_getdata.c (__elf_getdata_rdlock): Lock before converting. ++ ++2008-11-26 Roland McGrath ++ ++ * elf.h: Update from glibc. ++ ++2008-10-06 Roland McGrath ++ ++ * elf_getarhdr.c (elf_getarhdr): Return NULL when passed NULL. ++ ++2008-08-27 Roland McGrath ++ ++ * 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 ++ ++ * Makefile.am (libelf_so_LDLIBS): New variable. ++ (libelf.so): Use it in the link. ++ ++2008-08-21 Petr Machata ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * libelfP.h (RWLOCK_RDLOCK, RWLOCK_WRLOCK, RWLOCK_UNLOCK): New macros. ++ ++2008-07-28 Roland McGrath ++ ++ * elf.h: Update from glibc. ++ ++2008-03-31 Roland McGrath ++ ++ * elf32_offscn.c: Make sure shdrs have been read in. ++ + 2008-02-19 Roland McGrath + + * elf.h: Update from glibc. +diff --git a/libelf/Makefile.am b/libelf/Makefile.am +index 5bbb422..c7c83f3 100644 +--- a/libelf/Makefile.am ++++ b/libelf/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 1996-2006, 2007, 2008 Red Hat, Inc. ++## Copyright (C) 1996-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 +@@ -24,24 +24,12 @@ + ## Network licensing program, please visit www.openinventionnetwork.com + ## . + ## +-DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H +-if MUDFLAP +-AM_CFLAGS = -fmudflap +-else +-AM_CFLAGS = +-endif ++include $(top_srcdir)/config/eu.am + 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 +@@ -91,7 +79,7 @@ libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.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 \ ++ elf_getphdrnum.c elf_getshdrnum.c elf_getshdrstrndx.c \ + gelf_checksum.c elf32_checksum.c elf64_checksum.c \ + libelf_crc32.c libelf_next_prime.c \ + elf_clone.c \ +@@ -105,22 +93,19 @@ if !MUDFLAP + libelf_pic_a_SOURCES = + am_libelf_pic_a_OBJECTS = $(libelf_a_SOURCES:.c=.os) + ++libelf_so_LDLIBS = ++if USE_LOCKS ++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 ++ -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 +@@ -137,4 +122,4 @@ 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) ++CLEANFILES += $(am_libelf_pic_a_OBJECTS) libelf.so.$(VERSION) +diff --git a/libelf/common.h b/libelf/common.h +index 757188c..8eef2a7 100644 +--- a/libelf/common.h ++++ b/libelf/common.h +@@ -57,6 +57,7 @@ + #include + #include + ++#include "libelfP.h" + + static inline Elf_Kind + __attribute__ ((unused)) +diff --git a/libelf/elf.h b/libelf/elf.h +index 928e9ec..1bc8ef3 100644 +--- a/libelf/elf.h ++++ b/libelf/elf.h +@@ -1,5 +1,5 @@ + /* This file defines standard ELF types, structures, and macros. +- Copyright (C) 1995-2003,2004,2005,2006,2007,2008 ++ Copyright (C) 1995-2003,2004,2005,2006,2007,2008,2009,2010 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + +@@ -444,6 +444,7 @@ typedef struct + #define STB_WEAK 2 /* Weak symbol */ + #define STB_NUM 3 /* Number of defined types. */ + #define STB_LOOS 10 /* Start of OS-specific */ ++#define STB_GNU_UNIQUE 10 /* Unique symbol. */ + #define STB_HIOS 12 /* End of OS-specific */ + #define STB_LOPROC 13 /* Start of processor-specific */ + #define STB_HIPROC 15 /* End of processor-specific */ +@@ -459,6 +460,7 @@ typedef struct + #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_GNU_IFUNC 10 /* Symbol is indirect code object */ + #define STT_HIOS 12 /* End of OS-specific */ + #define STT_LOPROC 13 /* Start of processor-specific */ + #define STT_HIPROC 15 /* End of processor-specific */ +@@ -556,6 +558,12 @@ typedef struct + Elf64_Xword p_align; /* Segment alignment */ + } Elf64_Phdr; + ++/* Special value for e_phnum. This indicates that the real number of ++ program headers is too large to fit into e_phnum. Instead the real ++ value is in the field sh_info of section 0. */ ++ ++#define PN_XNUM 0xffff ++ + /* Legal values for p_type (segment type). */ + + #define PT_NULL 0 /* Program header table entry unused */ +@@ -608,7 +616,9 @@ typedef 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. */ + +@@ -970,6 +980,12 @@ typedef struct + + #define AT_SECURE 23 /* Boolean, was exec setuid-like? */ + ++#define AT_BASE_PLATFORM 24 /* String identifying real platforms.*/ ++ ++#define AT_RANDOM 25 /* Address of 16 random bytes. */ ++ ++#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 +@@ -1044,6 +1060,9 @@ typedef struct + The descriptor consists of any nonzero number of bytes. */ + #define NT_GNU_BUILD_ID 3 + ++/* Version note generated by GNU gold containing a version string. */ ++#define NT_GNU_GOLD_VERSION 4 ++ + + /* Move records. */ + typedef struct +@@ -1159,8 +1178,18 @@ typedef struct + #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. */ ++#define R_386_IRELATIVE 42 /* Adjust indirectly by program base */ + /* Keep this the last entry. */ +-#define R_386_NUM 38 ++#define R_386_NUM 43 + + /* SUN SPARC specific definitions. */ + +@@ -1228,6 +1257,7 @@ typedef struct + #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_GLOB_JMP 42 /* was part of v9 ABI but was removed */ + #define R_SPARC_7 43 /* Direct 7 bit */ + #define R_SPARC_5 44 /* Direct 5 bit */ + #define R_SPARC_6 45 /* Direct 6 bit */ +@@ -1265,8 +1295,19 @@ typedef struct + #define R_SPARC_TLS_DTPOFF64 77 + #define R_SPARC_TLS_TPOFF32 78 + #define R_SPARC_TLS_TPOFF64 79 ++#define R_SPARC_GOTDATA_HIX22 80 ++#define R_SPARC_GOTDATA_LOX10 81 ++#define R_SPARC_GOTDATA_OP_HIX22 82 ++#define R_SPARC_GOTDATA_OP_LOX10 83 ++#define R_SPARC_GOTDATA_OP 84 ++#define R_SPARC_H34 85 ++#define R_SPARC_SIZE32 86 ++#define R_SPARC_SIZE64 87 ++#define R_SPARC_GNU_VTINHERIT 250 ++#define R_SPARC_GNU_VTENTRY 251 ++#define R_SPARC_REV32 252 + /* Keep this the last entry. */ +-#define R_SPARC_NUM 80 ++#define R_SPARC_NUM 253 + + /* For Sparc64, legal values for d_tag of Elf64_Dyn. */ + +@@ -1386,6 +1427,7 @@ typedef struct + #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'. */ +@@ -1532,8 +1574,10 @@ typedef struct + #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 52 ++#define R_MIPS_NUM 128 + + /* Legal values for p_type field of Elf32_Phdr. */ + +@@ -1599,7 +1643,13 @@ typedef struct + #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. */ +-#define DT_MIPS_NUM 0x32 ++/* 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. */ + +@@ -1997,9 +2047,6 @@ typedef Elf32_Addr Elf32_Conflict; + #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 +@@ -2027,11 +2074,14 @@ typedef Elf32_Addr Elf32_Conflict; + #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 extension to support local ifunc. */ ++#define R_PPC_IRELATIVE 248 ++ + /* 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 */ ++#define R_PPC_REL16 249 /* half16 (sym+add-.) */ ++#define R_PPC_REL16_LO 250 /* half16 (sym+add-.)@l */ ++#define R_PPC_REL16_HI 251 /* half16 (sym+add-.)@h */ ++#define R_PPC_REL16_HA 252 /* half16 (sym+add-.)@ha */ + + /* This is a phony reloc to handle any old fashioned TOC16 references + that may still be in object files. */ +@@ -2153,8 +2203,13 @@ typedef Elf32_Addr Elf32_Conflict; + #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 ++/* GNU extension to support local ifunc. */ ++#define R_PPC64_JMP_IREL 247 ++#define R_PPC64_IRELATIVE 248 ++#define R_PPC64_REL16 249 /* half16 (sym+add-.) */ ++#define R_PPC64_REL16_LO 250 /* half16 (sym+add-.)@l */ ++#define R_PPC64_REL16_HI 251 /* half16 (sym+add-.)@h */ ++#define R_PPC64_REL16_HA 252 /* half16 (sym+add-.)@ha */ + + /* PowerPC64 specific values for the Dyn d_tag field. */ + #define DT_PPC64_GLINK (DT_LOPROC + 0) +@@ -2166,42 +2221,62 @@ typedef Elf32_Addr Elf32_Conflict; + /* 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 ++#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 ++#define EF_ARM_SOFT_FLOAT 0x200 ++#define EF_ARM_VFP_FLOAT 0x400 ++#define EF_ARM_MAVERICK_FLOAT 0x800 ++ + + /* 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_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 ++/* Constants defined in AAELF. */ ++#define EF_ARM_BE8 0x00800000 ++#define EF_ARM_LE8 0x00400000 + +-/* Additional symbol types for Thumb */ +-#define STT_ARM_TFUNC 0xd ++#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 ++#define EF_ARM_EABI_VER3 0x03000000 ++#define EF_ARM_EABI_VER4 0x04000000 ++#define EF_ARM_EABI_VER5 0x05000000 ++ ++/* Additional symbol types for Thumb. */ ++#define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */ ++#define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */ + + /* 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 */ ++#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 */ ++#define PF_ARM_SB 0x10000000 /* Segment contains the location ++ addressed by the static base. */ ++#define PF_ARM_PI 0x20000000 /* Position-independent segment. */ ++#define PF_ARM_ABS 0x40000000 /* Absolute segment. */ + + /* Processor specific values for the Phdr p_type field. */ +-#define PT_ARM_EXIDX 0x70000001 /* .ARM.exidx segment */ ++#define PT_ARM_EXIDX (PT_LOPROC + 1) /* ARM unwind segment. */ ++ ++/* Processor specific values for the Shdr sh_type field. */ ++#define SHT_ARM_EXIDX (SHT_LOPROC + 1) /* ARM unwind section. */ ++#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) /* Preemption details. */ ++#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */ ++ + + /* ARM relocs. */ + +@@ -2557,8 +2632,18 @@ typedef Elf32_Addr Elf32_Conflict; + #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_NUM 24 ++#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_IRELATIVE 37 /* Adjust indirectly by program base */ ++ ++#define R_X86_64_NUM 38 + + + /* AM33 relocations. */ +diff --git a/libelf/elf32_checksum.c b/libelf/elf32_checksum.c +index 0e4ab9f..ad040b8 100644 +--- a/libelf/elf32_checksum.c ++++ b/libelf/elf32_checksum.c +@@ -1,5 +1,5 @@ + /* Compute simple checksum from permanent parts of the ELF file. +- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc. ++ Copyright (C) 2002, 2003, 2004, 2005, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -90,7 +90,7 @@ elfw2(LIBELFBITS,checksum) (elf) + return -1l; + + /* Find the section header string table. */ +- if (INTUSE(elf_getshstrndx) (elf, &shstrndx) < 0) ++ if (INTUSE(elf_getshdrstrndx) (elf, &shstrndx) < 0) + { + /* This can only happen if the ELF handle is not for real. */ + __libelf_seterrno (ELF_E_INVALID_HANDLE); +@@ -105,6 +105,14 @@ elfw2(LIBELFBITS,checksum) (elf) + || (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) +@@ -118,7 +126,8 @@ elfw2(LIBELFBITS,checksum) (elf) + if (shdr == NULL) + { + __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); +- return -1l; ++ result = -1l; ++ goto out; + } + + if (SECTION_STRIP_P (shdr, +@@ -162,17 +171,25 @@ elfw2(LIBELFBITS,checksum) (elf) + /* Convert the data to file byte order. */ + if (INTUSE(elfw2(LIBELFBITS,xlatetof)) (data, data, ident[EI_DATA]) + == NULL) +- return -1l; ++ { ++ result = -1l; ++ goto out; ++ } + + result = process_block (result, data); + + /* And convert it back. */ + if (INTUSE(elfw2(LIBELFBITS,xlatetom)) (data, data, ident[EI_DATA]) + == NULL) +- return -1l; ++ { ++ result = -1l; ++ goto out; ++ } + } + } + ++ out: ++ rwlock_unlock (elf->lock); + return result; + } + INTDEF(elfw2(LIBELFBITS,checksum)) +diff --git a/libelf/elf32_getehdr.c b/libelf/elf32_getehdr.c +index bdb2cc4..8009133 100644 +--- a/libelf/elf32_getehdr.c ++++ b/libelf/elf32_getehdr.c +@@ -62,12 +62,11 @@ + #endif + + +-ElfW2(LIBELFBITS,Ehdr) * +-elfw2(LIBELFBITS,getehdr) (elf) ++static ElfW2(LIBELFBITS,Ehdr) * ++getehdr_impl (elf, wrlock) + Elf *elf; ++ int wrlock; + { +- ElfW2(LIBELFBITS,Ehdr) *result; +- + if (elf == NULL) + return NULL; + +@@ -77,22 +76,45 @@ elfw2(LIBELFBITS,getehdr) (elf) + return NULL; + } + +- rwlock_rdlock (elf->lock); +- ++ again: + if (elf->class == 0) +- elf->class = ELFW(ELFCLASS,LIBELFBITS); ++ { ++ 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); +- result = NULL; +- goto out; ++ return NULL; + } + +- result = elf->state.ELFW(elf,LIBELFBITS).ehdr; ++ 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; + +- out: ++ rwlock_rdlock (elf->lock); ++ result = getehdr_impl (elf, 0); + rwlock_unlock (elf->lock); + + return result; + } +-INTDEF(elfw2(LIBELFBITS,getehdr)) +diff --git a/libelf/elf32_getphdr.c b/libelf/elf32_getphdr.c +index 6908724..0a617a6 100644 +--- a/libelf/elf32_getphdr.c ++++ b/libelf/elf32_getphdr.c +@@ -1,5 +1,5 @@ + /* Get ELF program header table. +- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006 Red Hat, Inc. ++ Copyright (C) 1998-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 1998. + +@@ -53,6 +53,7 @@ + #endif + + #include ++#include + #include + #include + #include +@@ -65,22 +66,12 @@ + # define LIBELFBITS 32 + #endif + +- + ElfW2(LIBELFBITS,Phdr) * +-elfw2(LIBELFBITS,getphdr) (elf) ++__elfw2(LIBELFBITS,getphdr_wrlock) (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 + below must already have been run. So the class is set, too. No + need to waste any more time here. */ +@@ -88,8 +79,6 @@ elfw2(LIBELFBITS,getphdr) (elf) + if (likely (result != NULL)) + return result; + +- rwlock_wrlock (elf->lock); +- + if (elf->class == 0) + elf->class = ELFW(ELFCLASS,LIBELFBITS); + else if (elf->class != ELFW(ELFCLASS,LIBELFBITS)) +@@ -105,7 +94,9 @@ elfw2(LIBELFBITS,getphdr) (elf) + ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr; + + /* If no program header exists return NULL. */ +- size_t phnum = ehdr->e_phnum; ++ size_t phnum; ++ if (__elf_getphdrnum_rdlock (elf, &phnum) != 0) ++ goto out; + if (phnum == 0) + { + __libelf_seterrno (ELF_E_NO_PHDR); +@@ -234,6 +225,33 @@ elfw2(LIBELFBITS,getphdr) (elf) + } + + 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; +diff --git a/libelf/elf32_getshdr.c b/libelf/elf32_getshdr.c +index c7f75bb..8d650d9 100644 +--- a/libelf/elf32_getshdr.c ++++ b/libelf/elf32_getshdr.c +@@ -1,5 +1,5 @@ + /* Return section header. +- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2007 Red Hat, Inc. ++ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 1998. + +@@ -54,6 +54,7 @@ + + #include + #include ++#include + #include + + #include +@@ -65,179 +66,229 @@ + #endif + + +-ElfW2(LIBELFBITS,Shdr) * +-elfw2(LIBELFBITS,getshdr) (scn) +- Elf_Scn *scn; ++static ElfW2(LIBELFBITS,Shdr) * ++load_shdr_wrlock (Elf_Scn *scn) + { + ElfW2(LIBELFBITS,Shdr) *result; + +- if (scn == NULL) +- return NULL; ++ /* Read the section header table. */ ++ Elf *elf = scn->elf; ++ ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr; + +- if (unlikely (scn->elf->state.elf.ehdr == NULL)) ++ /* Try again, maybe the data is there now. */ ++ result = scn->shdr.ELFW(e,LIBELFBITS); ++ if (result != NULL) ++ goto out; ++ ++ size_t shnum; ++ if (__elf_getshdrnum_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_WRONG_ORDER_EHDR); +- return NULL; ++ __libelf_seterrno (ELF_E_NOMEM); ++ goto out; + } ++ elf->state.ELFW(elf,LIBELFBITS).shdr_malloced = 1; + +- if (unlikely (scn->elf->class != ELFW(ELFCLASS,LIBELFBITS))) ++ if (elf->map_address != NULL) + { +- __libelf_seterrno (ELF_E_INVALID_CLASS); +- return NULL; +- } ++ ElfW2(LIBELFBITS,Shdr) *notcvt; + +- result = scn->shdr.ELFW(e,LIBELFBITS); +- if (result == NULL) +- { +- /* Read the section header table. */ +- Elf *elf = scn->elf; +- ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr; ++ /* 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); + +- rwlock_wrlock (elf->lock); ++ assert (ehdr->e_ident[EI_DATA] != MY_ELFDATA ++ || (! ALLOW_UNALIGNED ++ && ((uintptr_t) file_shdr ++ & (__alignof__ (ElfW2(LIBELFBITS,Shdr)) - 1)) != 0)); + +- /* Try again, maybe the data is there now. */ +- result = scn->shdr.ELFW(e,LIBELFBITS); +- if (result != NULL) +- goto out; +- +- size_t shnum; +- if (INTUSE (elf_getshnum) (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) ++ /* Now copy the data and at the same time convert the byte order. */ ++ if (ehdr->e_ident[EI_DATA] == MY_ELFDATA) + { +- __libelf_seterrno (ELF_E_NOMEM); +- goto out; ++ assert (! ALLOW_UNALIGNED); ++ memcpy (shdr, file_shdr, size); + } +- elf->state.ELFW(elf,LIBELFBITS).shdr_malloced = 1; +- +- if (elf->map_address != NULL) ++ else + { +- 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); +- } ++ 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 + { +- 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; +- } ++ notcvt = (ElfW2(LIBELFBITS,Shdr) *) alloca (size); ++ memcpy (notcvt, ((char *) elf->map_address ++ + elf->start_offset + ehdr->e_shoff), ++ size); + } +- } +- 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)) ++ ++ for (size_t cnt = 0; cnt < shnum; ++cnt) + { +- /* Severe problems. We cannot read the data. */ +- __libelf_seterrno (ELF_E_READ_ERROR); +- goto free_and_out; ++ 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; + } +- +- /* 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 ++ } ++ 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)) + { +- /* The file descriptor was already enabled and not all data was +- read. Undo the allocation. */ +- __libelf_seterrno (ELF_E_FD_DISABLED); ++ /* Severe problems. We cannot read the data. */ ++ __libelf_seterrno (ELF_E_READ_ERROR); ++ goto free_and_out; ++ } + +- free_and_out: +- free (shdr); +- elf->state.ELFW(elf,LIBELFBITS).shdr = NULL; +- elf->state.ELFW(elf,LIBELFBITS).shdr_malloced = 0; ++ /* 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); + +- goto out; +- } ++ free_and_out: ++ free (shdr); ++ elf->state.ELFW(elf,LIBELFBITS).shdr = NULL; ++ elf->state.ELFW(elf,LIBELFBITS).shdr_malloced = 0; + +- /* 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]; ++ goto out; ++ } + +- result = scn->shdr.ELFW(e,LIBELFBITS); +- assert (result != NULL); ++ /* 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]; + +- out: +- rwlock_unlock (elf->lock); ++ 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; + } +-INTDEF(elfw2(LIBELFBITS,getshdr)) +diff --git a/libelf/elf32_newphdr.c b/libelf/elf32_newphdr.c +index d1b1608..03ff100 100644 +--- a/libelf/elf32_newphdr.c ++++ b/libelf/elf32_newphdr.c +@@ -1,5 +1,5 @@ + /* Create new ELF program header table. +- Copyright (C) 1999, 2000, 2002 Red Hat, Inc. ++ Copyright (C) 1999-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 1998. + +@@ -79,6 +79,12 @@ elfw2(LIBELFBITS,newphdr) (elf, count) + return NULL; + } + ++ if (unlikely ((ElfW2(LIBELFBITS,Word)) count != count)) ++ { ++ __libelf_seterrno (ELF_E_INVALID_OPERAND); ++ return NULL; ++ } ++ + rwlock_wrlock (elf->lock); + + if (elf->class == 0) +@@ -110,6 +116,10 @@ elfw2(LIBELFBITS,newphdr) (elf, count) + 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 clear any old PN_XNUM extended value. */ ++ if (elf->state.ELFW(elf,LIBELFBITS).scns.cnt > 0) ++ elf->state.ELFW(elf,LIBELFBITS).scns.data[0] ++ .shdr.ELFW(e,LIBELFBITS)->sh_info = 0; + /* Also set the size. */ + elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phentsize = + sizeof (ElfW2(LIBELFBITS,Phdr)); +@@ -122,6 +132,7 @@ elfw2(LIBELFBITS,newphdr) (elf, count) + result = NULL; + } + else if (elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phnum != count ++ || count == PN_XNUM + || elf->state.ELFW(elf,LIBELFBITS).phdr == NULL) + { + /* Allocate a new program header with the appropriate number of +@@ -135,10 +146,24 @@ elfw2(LIBELFBITS,newphdr) (elf, count) + { + /* Now set the result. */ + elf->state.ELFW(elf,LIBELFBITS).phdr = result; ++ if (count >= PN_XNUM) ++ { ++ /* We have to write COUNT into the zeroth section's sh_info. */ ++ Elf_Scn *scn0 = &elf->state.ELFW(elf,LIBELFBITS).scns.data[0]; ++ if (elf->state.ELFW(elf,LIBELFBITS).scns.cnt == 0) ++ { ++ assert (elf->state.ELFW(elf,LIBELFBITS).scns.max > 0); ++ elf->state.ELFW(elf,LIBELFBITS).scns.cnt = 1; ++ } ++ scn0->shdr.ELFW(e,LIBELFBITS)->sh_info = count; ++ scn0->shdr_flags |= ELF_F_DIRTY; ++ elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phnum = PN_XNUM; ++ } ++ else ++ /* Set the `e_phnum' member to the new value. */ ++ elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phnum = count; + /* 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); +@@ -161,6 +186,7 @@ elfw2(LIBELFBITS,newphdr) (elf, count) + elf->state.ELFW(elf,LIBELFBITS).phdr_flags |= ELF_F_DIRTY; + + result = elf->state.ELFW(elf,LIBELFBITS).phdr; ++ memset (result, '\0', count * sizeof (ElfW2(LIBELFBITS,Phdr))); + } + + out: +diff --git a/libelf/elf32_offscn.c b/libelf/elf32_offscn.c +index cdfdfad..86eff8b 100644 +--- a/libelf/elf32_offscn.c ++++ b/libelf/elf32_offscn.c +@@ -1,5 +1,5 @@ + /* Get section at specific index. +- Copyright (C) 2005 Red Hat, Inc. ++ Copyright (C) 2005, 2008 Red Hat, Inc. + This file is part of Red Hat elfutils. + Contributed by Ulrich Drepper , 2005. + +@@ -77,12 +77,20 @@ elfw2(LIBELFBITS,offscn) (elf, offset) + 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. */ +- Elf_ScnList *runp = &elf->state.ELFW(elf,LIBELFBITS).scns; + while (1) + { + for (unsigned int i = 0; i < runp->cnt; ++i) +diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c +index e94de83..898cf1a 100644 +--- a/libelf/elf32_updatefile.c ++++ b/libelf/elf32_updatefile.c +@@ -1,5 +1,5 @@ + /* Write changed data structures. +- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2000-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -126,11 +126,10 @@ int + internal_function + __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) + { +- ElfW2(LIBELFBITS,Ehdr) *ehdr; +- char *last_position; ++ bool previous_scn_changed = false; + + /* We need the ELF header several times. */ +- ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr; ++ 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) +@@ -160,8 +159,16 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) + sizeof (ElfW2(LIBELFBITS,Ehdr))); + + elf->state.ELFW(elf,LIBELFBITS).ehdr_flags &= ~ELF_F_DIRTY; ++ ++ /* We start writing sections after the ELF header only if there is ++ no program header. */ ++ previous_scn_changed = elf->state.ELFW(elf,LIBELFBITS).phdr == NULL; + } + ++ size_t phnum; ++ if (unlikely (__elf_getphdrnum_rdlock (elf, &phnum) != 0)) ++ return -1; ++ + /* Write out the program header table. */ + if (elf->state.ELFW(elf,LIBELFBITS).phdr != NULL + && ((elf->state.ELFW(elf,LIBELFBITS).phdr_flags | elf->flags) +@@ -192,22 +199,26 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) + /* 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); ++ sizeof (ElfW2(LIBELFBITS,Phdr)) * 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); ++ sizeof (ElfW2(LIBELFBITS,Phdr)) * phnum); + + elf->state.ELFW(elf,LIBELFBITS).phdr_flags &= ~ELF_F_DIRTY; ++ ++ /* We modified the program header. Maybe this created a gap so ++ we have to write fill bytes, if necessary. */ ++ previous_scn_changed = true; + } + + /* 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)); ++ char *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, phnum)); + + /* Write all the sections. Well, only those which are modified. */ + if (shnum > 0) +@@ -283,45 +294,70 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) + for (size_t cnt = 0; cnt < shnum; ++cnt) + { + Elf_Scn *scn = scns[cnt]; ++ if (scn->index == 0) ++ { ++ /* The dummy section header entry. It should not be ++ possible to mark this "section" as dirty. */ ++ assert ((scn->flags & ELF_F_DIRTY) == 0); ++ continue; ++ } + + ElfW2(LIBELFBITS,Shdr) *shdr = scn->shdr.ELFW(e,LIBELFBITS); ++ if (shdr->sh_type == SHT_NOBITS) ++ goto next; + + char *scn_start = ((char *) elf->map_address + + elf->start_offset + shdr->sh_offset); + Elf_Data_List *dl = &scn->data_list; ++ bool scn_changed = false; + +- if (shdr->sh_type != SHT_NOBITS && scn->data_list_rear != NULL) +- do ++ void fill_mmap (size_t offset) ++ { ++ size_t written = 0; ++ ++ if (last_position < shdr_start) + { +- if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY) +- { +- if (scn_start + dl->data.d.d_off != last_position) +- { +- 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; ++ written = MIN (scn_start + offset - last_position, ++ shdr_start - last_position); + +- 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); ++ } + +- memset (last_position, __libelf_fill_byte, +- written); +- } ++ if (last_position + written != scn_start + offset ++ && shdr_end < scn_start + offset) ++ { ++ char *fill_start = MAX (shdr_end, scn_start); ++ memset (fill_start, __libelf_fill_byte, ++ scn_start + offset - fill_start); ++ } ++ } + +- 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); ++ if (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 there is a gap, fill it. */ ++ if (scn_start + dl->data.d.d_off > last_position ++ && (dl->data.d.d_off == 0 ++ || ((scn->flags | dl->flags | elf->flags) ++ & ELF_F_DIRTY) != 0)) ++ { ++ fill_mmap (dl->data.d.d_off); ++ last_position = scn_start + dl->data.d.d_off; ++ } + +- last_position = scn_start + dl->data.d.d_off; +- } +- } ++ if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY) ++ { ++ /* 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)) + { +@@ -343,19 +379,34 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) + last_position = mempcpy (last_position, + dl->data.d.d_buf, + dl->data.d.d_size); ++ ++ scn_changed = true; + } + 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; ++ else ++ { ++ /* If the previous section (or the ELF/program ++ header) changed we might have to fill the gap. */ ++ if (scn_start > last_position && previous_scn_changed) ++ fill_mmap (0); ++ ++ /* We have to trust the existing section header information. */ ++ last_position = scn_start + shdr->sh_size; ++ } ++ + ++ previous_scn_changed = scn_changed; ++ next: + scn->flags &= ~ELF_F_DIRTY; + } + +@@ -460,6 +511,7 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + { + char fillbuf[FILLBUFSIZE]; + size_t filled = 0; ++ bool previous_scn_changed = false; + + /* We need the ELF header several times. */ + ElfW2(LIBELFBITS,Ehdr) *ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr; +@@ -503,6 +555,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + } + + elf->state.ELFW(elf,LIBELFBITS).ehdr_flags &= ~ELF_F_DIRTY; ++ ++ /* We start writing sections after the ELF header only if there is ++ no program header. */ ++ previous_scn_changed = elf->state.ELFW(elf,LIBELFBITS).phdr == NULL; + } + + /* If the type sizes should be different at some time we have to +@@ -510,6 +566,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + assert (sizeof (ElfW2(LIBELFBITS,Phdr)) + == elf_typesize (LIBELFBITS, ELF_T_PHDR, 1)); + ++ size_t phnum; ++ if (unlikely (__elf_getphdrnum_rdlock (elf, &phnum) != 0)) ++ return -1; ++ + /* Write out the program header table. */ + if (elf->state.ELFW(elf,LIBELFBITS).phdr != NULL + && ((elf->state.ELFW(elf,LIBELFBITS).phdr_flags | elf->flags) +@@ -539,7 +599,7 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + + /* Allocate sufficient memory. */ + tmp_phdr = (ElfW2(LIBELFBITS,Phdr) *) +- malloc (sizeof (ElfW2(LIBELFBITS,Phdr)) * ehdr->e_phnum); ++ malloc (sizeof (ElfW2(LIBELFBITS,Phdr)) * phnum); + if (tmp_phdr == NULL) + { + __libelf_seterrno (ELF_E_NOMEM); +@@ -548,14 +608,14 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + + /* 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); ++ sizeof (ElfW2(LIBELFBITS,Phdr)) * 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; ++ size_t phdr_size = sizeof (ElfW2(LIBELFBITS,Phdr)) * phnum; + if (unlikely ((size_t) pwrite_retry (elf->fildes, out_phdr, + phdr_size, ehdr->e_phoff) + != phdr_size)) +@@ -568,6 +628,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + free (tmp_phdr); + + elf->state.ELFW(elf,LIBELFBITS).phdr_flags &= ~ELF_F_DIRTY; ++ ++ /* We modified the program header. Maybe this created a gap so ++ we have to write fill bytes, if necessary. */ ++ previous_scn_changed = true; + } + + /* From now on we have to keep track of the last position to eventually +@@ -576,8 +640,7 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + 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); ++ last_offset = (ehdr->e_phoff + sizeof (ElfW2(LIBELFBITS,Phdr)) * phnum); + + /* Write all the sections. Well, only those which are modified. */ + if (shnum > 0) +@@ -606,33 +669,49 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + for (size_t cnt = 0; cnt < shnum; ++cnt) + { + Elf_Scn *scn = scns[cnt]; ++ if (scn->index == 0) ++ { ++ /* The dummy section header entry. It should not be ++ possible to mark this "section" as dirty. */ ++ assert ((scn->flags & ELF_F_DIRTY) == 0); ++ goto next; ++ } + + ElfW2(LIBELFBITS,Shdr) *shdr = scn->shdr.ELFW(e,LIBELFBITS); ++ if (shdr->sh_type == SHT_NOBITS) ++ goto next; + + off_t scn_start = elf->start_offset + shdr->sh_offset; + Elf_Data_List *dl = &scn->data_list; ++ bool scn_changed = false; + +- if (shdr->sh_type != SHT_NOBITS && scn->data_list_rear != NULL +- && scn->index != 0) ++ if (scn->data_list_rear != NULL) + do + { ++ /* If there is a gap, fill it. */ ++ if (scn_start + dl->data.d.d_off > last_offset ++ && ((previous_scn_changed && dl->data.d.d_off == 0) ++ || ((scn->flags | dl->flags | elf->flags) ++ & ELF_F_DIRTY) != 0)) ++ { ++ if (unlikely (fill (elf->fildes, last_offset, ++ (scn_start + dl->data.d.d_off) ++ - last_offset, fillbuf, ++ &filled) != 0)) ++ return 1; ++ } ++ + 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) +- { +- assert (last_offset < scn_start + dl->data.d.d_off); +- +- 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; +- } ++ last_offset = scn_start + dl->data.d.d_off; + + if (unlikely (change_bo)) + { +@@ -673,6 +752,8 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + + if (buf != dl->data.d.d_buf && buf != tmpbuf) + free (buf); ++ ++ scn_changed = true; + } + + last_offset += dl->data.d.d_size; +@@ -682,9 +763,23 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) + dl = dl->next; + } + while (dl != NULL); +- else if (shdr->sh_type != SHT_NOBITS && scn->index != 0) +- last_offset = scn_start + shdr->sh_size; ++ else ++ { ++ /* If the previous section (or the ELF/program ++ header) changed we might have to fill the gap. */ ++ if (scn_start > last_offset && previous_scn_changed) ++ { ++ if (unlikely (fill (elf->fildes, last_offset, ++ scn_start - last_offset, fillbuf, ++ &filled) != 0)) ++ return 1; ++ } ++ ++ last_offset = scn_start + shdr->sh_size; ++ } + ++ previous_scn_changed = scn_changed; ++ next: + /* Collect the section header table information. */ + if (unlikely (change_bo)) + (*shdr_fctp) (&shdr_data[scn->index], +diff --git a/libelf/elf32_updatenull.c b/libelf/elf32_updatenull.c +index b3299fe..ca9a870 100644 +--- a/libelf/elf32_updatenull.c ++++ b/libelf/elf32_updatenull.c +@@ -1,5 +1,5 @@ + /* Update data structures for changes. +- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc. ++ Copyright (C) 2000-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -133,12 +133,14 @@ ELFW(default_ehdr,LIBELFBITS) (Elf *elf, ElfW2(LIBELFBITS,Ehdr) *ehdr, + + off_t + internal_function +-__elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum) ++__elfw2(LIBELFBITS,updatenull_wrlock) (Elf *elf, int *change_bop, size_t shnum) + { +- ElfW2(LIBELFBITS,Ehdr) *ehdr = INTUSE(elfw2(LIBELFBITS,getehdr)) (elf); ++ 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; +@@ -150,7 +152,7 @@ __elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum) + if (elf->state.ELFW(elf,LIBELFBITS).phdr == NULL + && (ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN + || ehdr->e_type == ET_CORE)) +- (void) INTUSE(elfw2(LIBELFBITS,getphdr)) (elf); ++ (void) __elfw2(LIBELFBITS,getphdr_wrlock) (elf); + if (elf->state.ELFW(elf,LIBELFBITS).phdr != NULL) + { + /* Only executables, shared objects, and core files have a program +@@ -162,13 +164,17 @@ __elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum) + return -1; + } + ++ size_t phnum; ++ if (unlikely (__elf_getphdrnum_rdlock (elf, &phnum) != 0)) ++ 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)); ++ + elf_typesize (LIBELFBITS, ELF_T_PHDR, phnum)); + } + else + { +@@ -177,7 +183,7 @@ __elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum) + ehdr_flags); + + /* We need no alignment here. */ +- size += elf_typesize (LIBELFBITS, ELF_T_PHDR, ehdr->e_phnum); ++ size += elf_typesize (LIBELFBITS, ELF_T_PHDR, phnum); + } + } + +@@ -204,7 +210,7 @@ __elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum) + /* Load the section headers if necessary. This loads the + headers for all sections. */ + if (list->data[1].shdr.ELFW(e,LIBELFBITS) == NULL) +- (void) INTUSE(elfw2(LIBELFBITS,getshdr)) (&list->data[1]); ++ (void) __elfw2(LIBELFBITS,getshdr_wrlock) (&list->data[1]); + + do + { +@@ -265,7 +271,8 @@ __elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum) + update_if_changed (shdr->sh_entsize, sh_entsize, + scn->shdr_flags); + +- if (scn->data_read == 0 && __libelf_set_rawdata (scn) != 0) ++ if (scn->data_read == 0 ++ && __libelf_set_rawdata_wrlock (scn) != 0) + /* Something went wrong. The error value is already set. */ + return -1; + +@@ -364,7 +371,7 @@ __elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum) + { + /* The position of the section in the file + changed. Create the section data list. */ +- if (INTUSE(elf_getdata) (scn, NULL) == NULL) ++ if (__elf_getdata_rdlock (scn, NULL) == NULL) + return -1; + } + +@@ -398,8 +405,9 @@ __elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum) + /* 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. */ ++ /* The user is supposed to fill out e_shoff. Use it and ++ e_shnum (or sh_size of the dummy, first section header) ++ to determine the maximum extend. */ + size = MAX ((GElf_Word) size, + (ehdr->e_shoff + + (elf_typesize (LIBELFBITS, ELF_T_SHDR, shnum)))); +diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c +index b95b06b..0b9583b 100644 +--- a/libelf/elf_begin.c ++++ b/libelf/elf_begin.c +@@ -1,5 +1,5 @@ + /* Create descriptor for processing file. +- Copyright (C) 1998-2005, 2006, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 1998-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 1998. + +@@ -111,7 +111,11 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, off_t offset, + bool is32 = e_ident[EI_CLASS] == ELFCLASS32; + + /* Make the ELF header available. */ +- if (e_ident[EI_DATA] == MY_ELFDATA) ++ 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 + { +@@ -130,8 +134,11 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, off_t offset, + else + memcpy (&ehdr_mem, e_ident, sizeof (Elf32_Ehdr)); + +- CONVERT (ehdr_mem.e32.e_shnum); +- CONVERT (ehdr_mem.e32.e_shoff); ++ if (e_ident[EI_DATA] != MY_ELFDATA) ++ { ++ CONVERT (ehdr_mem.e32.e_shnum); ++ CONVERT (ehdr_mem.e32.e_shoff); ++ } + } + else + { +@@ -143,8 +150,11 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, off_t offset, + else + memcpy (&ehdr_mem, e_ident, sizeof (Elf64_Ehdr)); + +- CONVERT (ehdr_mem.e64.e_shnum); +- CONVERT (ehdr_mem.e64.e_shoff); ++ if (e_ident[EI_DATA] != MY_ELFDATA) ++ { ++ CONVERT (ehdr_mem.e64.e_shnum); ++ CONVERT (ehdr_mem.e64.e_shoff); ++ } + } + } + +@@ -275,13 +285,22 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, + /* Could not determine the number of sections. */ + return NULL; + +- /* We can now allocate the memory. */ ++ /* We can now allocate the memory. Even if there are no section headers, ++ we allocate space for a zeroth section in case we need it later. */ ++ const size_t scnmax = (scncnt ?: (cmd == ELF_C_RDWR || cmd == ELF_C_RDWR_MMAP) ++ ? 1 : 0); + Elf *elf = allocate_elf (fildes, map_address, offset, maxsize, cmd, parent, +- ELF_K_ELF, scncnt * sizeof (Elf_Scn)); ++ ELF_K_ELF, scnmax * sizeof (Elf_Scn)); + if (elf == NULL) + /* Not enough memory. */ + return NULL; + ++ assert ((unsigned int) scncnt == scncnt); ++ assert (offsetof (struct Elf, state.elf32.scns) ++ == offsetof (struct Elf, state.elf64.scns)); ++ elf->state.elf32.scns.cnt = scncnt; ++ elf->state.elf32.scns.max = scnmax; ++ + /* Some more or less arbitrary value. */ + elf->state.elf.scnincr = 10; + +@@ -294,9 +313,6 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, + 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 +@@ -322,10 +338,13 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, + 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); ++ if (likely (elf->state.elf32.shdr[cnt].sh_offset < maxsize) ++ && likely (maxsize - elf->state.elf32.shdr[cnt].sh_offset ++ <= elf->state.elf32.shdr[cnt].sh_size)) ++ 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 +@@ -382,9 +401,6 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, + 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 +@@ -410,10 +426,13 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, + 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); ++ if (likely (elf->state.elf64.shdr[cnt].sh_offset < maxsize) ++ && likely (maxsize - elf->state.elf64.shdr[cnt].sh_offset ++ <= elf->state.elf64.shdr[cnt].sh_size)) ++ 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 +@@ -740,7 +759,7 @@ read_long_names (Elf *elf) + /* Read the next archive header. */ + int + internal_function +-__libelf_next_arhdr (elf) ++__libelf_next_arhdr_wrlock (elf) + Elf *elf; + { + struct ar_hdr *ar_hdr; +@@ -939,7 +958,7 @@ dup_elf (int fildes, Elf_Cmd cmd, Elf *ref) + 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 (ref) != 0) ++ && __libelf_next_arhdr_wrlock (ref) != 0) + /* Something went wrong. Maybe there is no member left. */ + return NULL; + +@@ -1013,6 +1032,19 @@ elf_begin (fildes, cmd, ref) + 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: +@@ -1033,8 +1065,7 @@ elf_begin (fildes, cmd, ref) + case ELF_C_READ: + case ELF_C_READ_MMAP: + if (ref != NULL) +- /* Duplicate the descriptor. */ +- retval = dup_elf (fildes, cmd, ref); ++ retval = lock_dup_elf (); + else + /* Create descriptor for existing file. */ + retval = read_file (fildes, 0, ~((size_t) 0), cmd, NULL); +@@ -1055,8 +1086,7 @@ elf_begin (fildes, cmd, ref) + retval = NULL; + } + else +- /* Duplicate this descriptor. */ +- retval = dup_elf (fildes, cmd, ref); ++ retval = lock_dup_elf (); + } + else + /* Create descriptor for existing file. */ +diff --git a/libelf/elf_error.c b/libelf/elf_error.c +index 5e00372..dc58782 100644 +--- a/libelf/elf_error.c ++++ b/libelf/elf_error.c +@@ -1,5 +1,5 @@ + /* Error handling in libelf. +- Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc. ++ Copyright (C) 1998,1999,2000,2002,2003,2004,2005,2006,2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 1998. + +@@ -61,46 +61,14 @@ + #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; ++ int result = global_error; + global_error = ELF_E_NOERROR; + return result; + } +@@ -339,16 +307,6 @@ 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; + } + +@@ -357,19 +315,7 @@ 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; ++ int last_error = global_error; + + if (error == 0) + { +@@ -382,26 +328,3 @@ elf_errmsg (error) + 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_getarhdr.c b/libelf/elf_getarhdr.c +index deeb56d..61e4e0a 100644 +--- a/libelf/elf_getarhdr.c ++++ b/libelf/elf_getarhdr.c +@@ -1,5 +1,5 @@ + /* Read header of next archive member. +- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc. ++ Copyright (C) 1998, 1999, 2000, 2002, 2008 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 1998. + +@@ -63,6 +63,9 @@ 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. */ +@@ -74,10 +77,16 @@ elf_getarhdr (elf) + + /* Make sure we have read the archive header. */ + if (parent->state.ar.elf_ar_hdr.ar_name == NULL +- && __libelf_next_arhdr (parent) != 0) +- /* Something went wrong. Maybe there is no member left. */ +- return 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); +diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c +index ae5b41d..e083b03 100644 +--- a/libelf/elf_getdata.c ++++ b/libelf/elf_getdata.c +@@ -189,7 +189,7 @@ convert_data (Elf_Scn *scn, int version __attribute__ ((unused)), int eclass, + /* Store the information for the raw data in the `rawdata' element. */ + int + internal_function +-__libelf_set_rawdata (Elf_Scn *scn) ++__libelf_set_rawdata_wrlock (Elf_Scn *scn) + { + size_t offset; + size_t size; +@@ -199,7 +199,8 @@ __libelf_set_rawdata (Elf_Scn *scn) + + if (elf->class == ELFCLASS32) + { +- Elf32_Shdr *shdr = scn->shdr.e32 ?: INTUSE(elf32_getshdr) (scn); ++ Elf32_Shdr *shdr ++ = scn->shdr.e32 ?: __elf32_getshdr_wrlock (scn); + + if (shdr == NULL) + /* Something went terribly wrong. */ +@@ -212,7 +213,8 @@ __libelf_set_rawdata (Elf_Scn *scn) + } + else + { +- Elf64_Shdr *shdr = scn->shdr.e64 ?: INTUSE(elf64_getshdr) (scn); ++ Elf64_Shdr *shdr ++ = scn->shdr.e64 ?: __elf64_getshdr_wrlock (scn); + + if (shdr == NULL) + /* Something went terribly wrong. */ +@@ -234,8 +236,8 @@ __libelf_set_rawdata (Elf_Scn *scn) + if (type == SHT_HASH) + { + GElf_Ehdr ehdr_mem; +- +- entsize = SH_ENTSIZE_HASH (INTUSE(gelf_getehdr) (elf, &ehdr_mem)); ++ GElf_Ehdr *ehdr = __gelf_getehdr_rdlock (elf, &ehdr_mem); ++ entsize = SH_ENTSIZE_HASH (ehdr); + } + else + { +@@ -311,10 +313,9 @@ __libelf_set_rawdata (Elf_Scn *scn) + 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 (INTUSE(gelf_getehdr) (elf, &ehdr_mem)) == 4 +- ? ELF_T_WORD : ELF_T_XWORD); ++ = (SH_ENTSIZE_HASH (ehdr) == 4 ? ELF_T_WORD : ELF_T_XWORD); + } + else + scn->rawdata.d.d_type = shtype_map[LIBELF_EV_IDX][TYPEIDX (type)]; +@@ -339,14 +340,31 @@ __libelf_set_rawdata (Elf_Scn *scn) + 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 * +-elf_getdata (scn, 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; +@@ -360,8 +378,6 @@ elf_getdata (scn, data) + /* We will need this multiple times later on. */ + elf = scn->elf; + +- rwlock_rdlock (elf->lock); +- + /* 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) +@@ -416,11 +432,12 @@ elf_getdata (scn, data) + 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 (scn) != 0) ++ if (scn->data_read == 0 && __libelf_set_rawdata_wrlock (scn) != 0) + /* Something went wrong. The error value is already set. */ + goto out; + } +@@ -431,14 +448,24 @@ elf_getdata (scn, data) + if (scn->data_list_rear == NULL) + { + if (scn->rawdata.d.d_buf != NULL && scn->rawdata.d.d_size > 0) +- /* 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); ++ { ++ 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. */ +@@ -449,11 +476,27 @@ elf_getdata (scn, data) + + /* 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: +- rwlock_unlock (elf->lock); ++ 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; + } +diff --git a/libelf/elf_getdata_rawchunk.c b/libelf/elf_getdata_rawchunk.c +index bea0f3f..5af0f7f 100644 +--- a/libelf/elf_getdata_rawchunk.c ++++ b/libelf/elf_getdata_rawchunk.c +@@ -95,6 +95,9 @@ elf_getdata_rawchunk (elf, offset, size, type) + /* 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) +@@ -107,7 +110,7 @@ elf_getdata_rawchunk (elf, offset, size, type) + { + nomem: + __libelf_seterrno (ELF_E_NOMEM); +- return NULL; ++ goto out; + } + + /* Read the file content. */ +@@ -118,7 +121,7 @@ elf_getdata_rawchunk (elf, offset, size, type) + /* Something went wrong. */ + free (rawchunk); + __libelf_seterrno (ELF_E_READ_ERROR); +- return NULL; ++ goto out; + } + + flags = ELF_F_MALLOCED; +@@ -181,8 +184,14 @@ elf_getdata_rawchunk (elf, offset, size, 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; + +- return &chunk->data.d; ++ out: ++ rwlock_unlock (elf->lock); ++ return result; + } +diff --git a/libelf/elf_getphdrnum.c b/libelf/elf_getphdrnum.c +new file mode 100644 +index 0000000..edf073e +--- /dev/null ++++ b/libelf/elf_getphdrnum.c +@@ -0,0 +1,116 @@ ++/* Return number of program headers in the ELF file. ++ Copyright (C) 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 ++ it under the terms of the GNU General Public License as published by the ++ Free Software Foundation; version 2 of the License. ++ ++ Red Hat elfutils is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with Red Hat elfutils; if not, write to the Free Software Foundation, ++ Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. ++ ++ In addition, as a special exception, Red Hat, Inc. gives You the ++ additional right to link the code of Red Hat elfutils with code licensed ++ under any Open Source Initiative certified open source license ++ (http://www.opensource.org/licenses/index.php) which requires the ++ distribution of source code with any binary distribution and to ++ distribute linked combinations of the two. Non-GPL Code permitted under ++ this exception must only link to the code of Red Hat elfutils through ++ those well defined interfaces identified in the file named EXCEPTION ++ found in the source code files (the "Approved Interfaces"). The files ++ of Non-GPL Code may instantiate templates or use macros or inline ++ functions from the Approved Interfaces without causing the resulting ++ work to be covered by the GNU General Public License. Only Red Hat, ++ Inc. may make changes or additions to the list of Approved Interfaces. ++ Red Hat's grant of this exception is conditioned upon your not adding ++ any new exceptions. If you wish to add a new Approved Interface or ++ exception, please contact Red Hat. You must obey the GNU General Public ++ License in all respects for all of the Red Hat elfutils code and other ++ code used in conjunction with Red Hat elfutils except the Non-GPL Code ++ covered by this exception. If you modify this file, you may extend this ++ exception to your version of the file, but you are not obligated to do ++ so. If you do not wish to provide this exception without modification, ++ you must delete this exception statement from your version and license ++ this file solely under the GPL without exception. ++ ++ Red Hat elfutils is an included package of the Open Invention Network. ++ An included package of the Open Invention Network is a package for which ++ Open Invention Network licensees cross-license their patents. No patent ++ license is granted, either expressly or impliedly, by designation as an ++ included package. Should you wish to participate in the Open Invention ++ Network licensing program, please visit www.openinventionnetwork.com ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++#include ++ ++#include "libelfP.h" ++ ++ ++int ++__elf_getphdrnum_rdlock (elf, dst) ++ Elf *elf; ++ size_t *dst; ++{ ++ if (unlikely (elf->state.elf64.ehdr == NULL)) ++ { ++ /* Maybe no ELF header was created yet. */ ++ __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR); ++ return -1; ++ } ++ ++ *dst = (elf->class == ELFCLASS32 ++ ? elf->state.elf32.ehdr->e_phnum ++ : elf->state.elf64.ehdr->e_phnum); ++ ++ if (*dst == PN_XNUM) ++ { ++ const Elf_ScnList *const scns = (elf->class == ELFCLASS32 ++ ? &elf->state.elf32.scns ++ : &elf->state.elf64.scns); ++ ++ /* If there are no section headers, perhaps this is really just 65536 ++ written without PN_XNUM support. Either that or it's bad data. */ ++ ++ if (likely (scns->cnt > 0)) ++ *dst = (elf->class == ELFCLASS32 ++ ? scns->data[0].shdr.e32->sh_info ++ : scns->data[0].shdr.e64->sh_info); ++ } ++ ++ return 0; ++} ++ ++int ++elf_getphdrnum (elf, dst) ++ Elf *elf; ++ size_t *dst; ++{ ++ int result; ++ ++ if (elf == NULL) ++ return -1; ++ ++ if (unlikely (elf->kind != ELF_K_ELF)) ++ { ++ __libelf_seterrno (ELF_E_INVALID_HANDLE); ++ return -1; ++ } ++ ++ rwlock_rdlock (elf->lock); ++ result = __elf_getphdrnum_rdlock (elf, dst); ++ rwlock_unlock (elf->lock); ++ ++ return result; ++} +diff --git a/libelf/elf_getshdrnum.c b/libelf/elf_getshdrnum.c +new file mode 100644 +index 0000000..ed1149b +--- /dev/null ++++ b/libelf/elf_getshdrnum.c +@@ -0,0 +1,111 @@ ++/* Return number of sections in the ELF file. ++ Copyright (C) 2002, 2009 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ Written by Ulrich Drepper , 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++#include ++ ++#include "libelfP.h" ++ ++ ++int ++__elf_getshdrnum_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_getshdrnum (elf, dst) ++ Elf *elf; ++ size_t *dst; ++{ ++ int result; ++ ++ if (elf == NULL) ++ return -1; ++ ++ rwlock_rdlock (elf->lock); ++ result = __elf_getshdrnum_rdlock (elf, dst); ++ rwlock_unlock (elf->lock); ++ ++ return result; ++} ++/* Alias for the deprecated name. */ ++strong_alias (elf_getshdrnum, elf_getshnum) +diff --git a/libelf/elf_getshdrstrndx.c b/libelf/elf_getshdrstrndx.c +new file mode 100644 +index 0000000..5e89b34 +--- /dev/null ++++ b/libelf/elf_getshdrstrndx.c +@@ -0,0 +1,205 @@ ++/* Return section index of section header string table. ++ Copyright (C) 2002, 2005, 2009 Red Hat, Inc. ++ This file is part of Red Hat elfutils. ++ Written by Ulrich Drepper , 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include "libelfP.h" ++#include "common.h" ++ ++ ++int ++elf_getshdrstrndx (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_getshdrstrndx) ++/* Alias for the deprecated name. */ ++strong_alias (elf_getshdrstrndx, elf_getshstrndx) +diff --git a/libelf/elf_getshnum.c b/libelf/elf_getshnum.c +deleted file mode 100644 +index bf26a9b..0000000 +--- a/libelf/elf_getshnum.c ++++ /dev/null +@@ -1,97 +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 , 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 +- . */ +- +-#ifdef HAVE_CONFIG_H +-# include +-#endif +- +-#include +-#include +-#include +- +-#include "libelfP.h" +- +- +-int +-elf_getshnum (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; +- } +- +- rwlock_rdlock (elf->lock); +- +- 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; +- +- rwlock_unlock (elf->lock); +- +- return result; +-} +-INTDEF(elf_getshnum) +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 , 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 +- . */ +- +-#ifdef HAVE_CONFIG_H +-# include +-#endif +- +-#include +-#include +-#include +-#include +-#include +- +-#include +-#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_next.c b/libelf/elf_next.c +index ec80fad..196c65a 100644 +--- a/libelf/elf_next.c ++++ b/libelf/elf_next.c +@@ -1,5 +1,5 @@ + /* Advance in archive to next element. +- Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc. ++ Copyright (C) 1998-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Contributed by Ulrich Drepper , 1998. + +@@ -64,6 +64,7 @@ elf_next (elf) + Elf *elf; + { + Elf *parent; ++ Elf_Cmd ret; + + /* Be gratious, the specs demand it. */ + if (elf == NULL || elf->parent == NULL) +@@ -73,14 +74,21 @@ elf_next (elf) + 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. */ +- if (__libelf_next_arhdr (parent) != 0) +- return ELF_C_NULL; ++ ret = __libelf_next_arhdr_wrlock (parent) != 0 ? ELF_C_NULL : elf->cmd; ++ ++ /* If necessary, mark the archive header as unusable. */ ++ if (ret == ELF_C_NULL) ++ parent->state.ar.elf_ar_hdr.ar_name = NULL; ++ ++ rwlock_unlock (parent->lock); + +- return elf->cmd; ++ return ret; + } +diff --git a/libelf/elf_rand.c b/libelf/elf_rand.c +index 9ba631f..a766d38 100644 +--- a/libelf/elf_rand.c ++++ b/libelf/elf_rand.c +@@ -67,16 +67,20 @@ elf_rand (elf, offset) + 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 (elf) != 0) ++ 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_rawfile.c b/libelf/elf_rawfile.c +index a1c6a1d..a62a354 100644 +--- a/libelf/elf_rawfile.c ++++ b/libelf/elf_rawfile.c +@@ -63,6 +63,8 @@ elf_rawfile (elf, ptr) + Elf *elf; + size_t *ptr; + { ++ char *result; ++ + if (elf == NULL) + { + /* No valid descriptor. */ +@@ -77,8 +79,12 @@ elf_rawfile (elf, ptr) + if (elf->map_address == NULL && __libelf_readall (elf) == NULL) + goto error_out; + ++ rwlock_rdlock (elf->lock); + if (ptr != NULL) + *ptr = elf->maximum_size; + +- return (char *) elf->map_address + elf->start_offset; ++ 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 +index 8f171b2..1f59932 100644 +--- a/libelf/elf_readall.c ++++ b/libelf/elf_readall.c +@@ -1,5 +1,5 @@ + /* Read all of the file associated with the descriptor. +- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005 Red Hat, Inc. ++ Copyright (C) 1998-2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Contributed by Ulrich Drepper , 1998. + +@@ -54,6 +54,7 @@ + + #include + #include ++#include + + #include + #include "libelfP.h" +@@ -102,12 +103,30 @@ __libelf_readall (elf) + /* If the file is not mmap'ed and not previously loaded, do it now. */ + if (elf->map_address == NULL) + { +- char *mem; ++ char *mem = NULL; + + /* If this is an archive and we have derived descriptors get the + locks for all of them. */ + libelf_acquire_all (elf); + ++ if (elf->maximum_size == ~((size_t) 0)) ++ { ++ /* We don't yet know how large the file is. Determine that now. */ ++ struct stat st; ++ ++ if (fstat (elf->fildes, &st) < 0) ++ goto read_error; ++ ++ if (sizeof (size_t) >= sizeof (st.st_size) ++ || st.st_size <= ~((size_t) 0)) ++ elf->maximum_size = (size_t) st.st_size; ++ else ++ { ++ errno = EOVERFLOW; ++ goto read_error; ++ } ++ } ++ + /* Allocate all the memory we need. */ + mem = (char *) malloc (elf->maximum_size); + if (mem != NULL) +@@ -119,6 +138,7 @@ __libelf_readall (elf) + != elf->maximum_size)) + { + /* Something went wrong. */ ++ read_error: + __libelf_seterrno (ELF_E_READ_ERROR); + free (mem); + } +diff --git a/libelf/elf_strptr.c b/libelf/elf_strptr.c +index c1ea60d..7b837b0 100644 +--- a/libelf/elf_strptr.c ++++ b/libelf/elf_strptr.c +@@ -1,5 +1,5 @@ + /* Return string pointer from string section. +- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2008 Red Hat, Inc. ++ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Contributed by Ulrich Drepper , 1998. + +@@ -140,12 +140,21 @@ elf_strptr (elf, idx, offset) + } + } + +- if (strscn->rawdata_base == NULL && ! strscn->data_read +- /* Read the section data. */ +- && __libelf_set_rawdata (strscn) != 0) +- 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)) ++ // XXX Is this correct if a file is read and then new data is added ++ // XXX to the string section? Likely needs to check offset against ++ // XXX size of rawdata_base buffer and then iterate over rest of the ++ // XXX list. + result = &strscn->rawdata_base[offset]; + else + { +diff --git a/libelf/elf_update.c b/libelf/elf_update.c +index 24e813f..5daece4 100644 +--- a/libelf/elf_update.c ++++ b/libelf/elf_update.c +@@ -193,8 +193,8 @@ elf_update (elf, cmd) + 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 (elf, &change_bo, shnum) +- : __elf64_updatenull (elf, &change_bo, shnum)); ++ ? __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)) +diff --git a/libelf/gelf_getehdr.c b/libelf/gelf_getehdr.c +index f56d65a..34b5db3 100644 +--- a/libelf/gelf_getehdr.c ++++ b/libelf/gelf_getehdr.c +@@ -61,7 +61,7 @@ + + + GElf_Ehdr * +-gelf_getehdr (elf, dest) ++__gelf_getehdr_rdlock (elf, dest) + Elf *elf; + GElf_Ehdr *dest; + { +@@ -76,8 +76,6 @@ gelf_getehdr (elf, dest) + return NULL; + } + +- rwlock_rdlock (elf->lock); +- + /* 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) +@@ -114,8 +112,21 @@ gelf_getehdr (elf, 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; + } +-INTDEF(gelf_getehdr) +diff --git a/libelf/gelf_getphdr.c b/libelf/gelf_getphdr.c +index da83ccf..7b04b39 100644 +--- a/libelf/gelf_getphdr.c ++++ b/libelf/gelf_getphdr.c +@@ -1,5 +1,5 @@ + /* Return program header table entry. +- Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. ++ Copyright (C) 1998-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 1998. + +@@ -54,6 +54,7 @@ + + #include + #include ++#include + + #include "libelfP.h" + +@@ -90,14 +91,20 @@ gelf_getphdr (elf, ndx, dst) + + if (phdr == NULL) + { ++ rwlock_unlock (elf->lock); + phdr = INTUSE(elf32_getphdr) (elf); + if (phdr == NULL) + /* The error number is already set. */ +- goto out; ++ return NULL; ++ rwlock_rdlock (elf->lock); + } + + /* Test whether the index is ok. */ +- if (ndx >= elf->state.elf32.ehdr->e_phnum) ++ size_t phnum; ++ if (ndx >= elf->state.elf32.ehdr->e_phnum ++ && (elf->state.elf32.ehdr->e_phnum != PN_XNUM ++ || __elf_getphdrnum_rdlock (elf, &phnum) != 0 ++ || (size_t) ndx >= phnum)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -126,14 +133,20 @@ gelf_getphdr (elf, ndx, dst) + + if (phdr == NULL) + { ++ rwlock_unlock (elf->lock); + phdr = INTUSE(elf64_getphdr) (elf); + if (phdr == NULL) + /* The error number is already set. */ +- goto out; ++ return NULL; ++ rwlock_rdlock (elf->lock); + } + + /* Test whether the index is ok. */ +- if (ndx >= elf->state.elf64.ehdr->e_phnum) ++ size_t phnum; ++ if (ndx >= elf->state.elf64.ehdr->e_phnum ++ && (elf->state.elf64.ehdr->e_phnum != PN_XNUM ++ || __elf_getphdrnum_rdlock (elf, &phnum) != 0 ++ || (size_t) ndx >= phnum)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff --git a/libelf/gelf_getshdr.c b/libelf/gelf_getshdr.c +index 7f01a8f..8b46dfa 100644 +--- a/libelf/gelf_getshdr.c ++++ b/libelf/gelf_getshdr.c +@@ -79,7 +79,8 @@ gelf_getshdr (scn, dst) + if (scn->elf->class == ELFCLASS32) + { + /* Copy the elements one-by-one. */ +- Elf32_Shdr *shdr = scn->shdr.e32 ?: INTUSE(elf32_getshdr) (scn); ++ Elf32_Shdr *shdr ++ = scn->shdr.e32 ?: __elf32_getshdr_rdlock (scn); + + if (shdr == NULL) + { +@@ -104,7 +105,8 @@ gelf_getshdr (scn, dst) + } + else + { +- Elf64_Shdr *shdr = scn->shdr.e64 ?: INTUSE(elf64_getshdr) (scn); ++ Elf64_Shdr *shdr ++ = scn->shdr.e64 ?: __elf64_getshdr_rdlock (scn); + + if (shdr == NULL) + { +diff --git a/libelf/gelf_update_phdr.c b/libelf/gelf_update_phdr.c +index 70bf0a5..d6d5f5a 100644 +--- a/libelf/gelf_update_phdr.c ++++ b/libelf/gelf_update_phdr.c +@@ -1,5 +1,5 @@ + /* Update program header program header table entry. +- Copyright (C) 2000, 2001, 2002 Red Hat, Inc. ++ Copyright (C) 2000-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -94,14 +94,18 @@ gelf_update_phdr (Elf *elf, int ndx, GElf_Phdr *src) + + if (phdr == NULL) + { +- phdr = INTUSE(elf32_getphdr) (elf); ++ 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)) ++ size_t phnum; ++ if (ndx >= elf->state.elf32.ehdr->e_phnum ++ && (elf->state.elf32.ehdr->e_phnum != PN_XNUM ++ || __elf_getphdrnum_rdlock (elf, &phnum) != 0 ++ || (size_t) ndx >= phnum)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -127,14 +131,18 @@ gelf_update_phdr (Elf *elf, int ndx, GElf_Phdr *src) + + if (phdr == NULL) + { +- phdr = INTUSE(elf64_getphdr) (elf); ++ 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)) ++ size_t phnum; ++ if (ndx >= elf->state.elf64.ehdr->e_phnum ++ && (elf->state.elf64.ehdr->e_phnum != PN_XNUM ++ || __elf_getphdrnum_rdlock (elf, &phnum) != 0 ++ || (size_t) ndx >= phnum)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff --git a/libelf/gelf_update_shdr.c b/libelf/gelf_update_shdr.c +index 50ef454..c57eab8 100644 +--- a/libelf/gelf_update_shdr.c ++++ b/libelf/gelf_update_shdr.c +@@ -72,7 +72,8 @@ gelf_update_shdr (Elf_Scn *scn, GElf_Shdr *src) + + if (elf->class == ELFCLASS32) + { +- Elf32_Shdr *shdr = scn->shdr.e32 ?: INTUSE(elf32_getshdr) (scn); ++ Elf32_Shdr *shdr ++ = scn->shdr.e32 ?: __elf32_getshdr_wrlock (scn); + + if (shdr == NULL) + { +@@ -106,7 +107,8 @@ gelf_update_shdr (Elf_Scn *scn, GElf_Shdr *src) + } + else + { +- Elf64_Shdr *shdr = scn->shdr.e64 ?: INTUSE(elf64_getshdr) (scn); ++ Elf64_Shdr *shdr ++ = scn->shdr.e64 ?: __elf64_getshdr_wrlock (scn); + + if (shdr == NULL) + { +diff --git a/libelf/libelf.h b/libelf/libelf.h +index 5427122..b0b3a8d 100644 +--- a/libelf/libelf.h ++++ b/libelf/libelf.h +@@ -1,5 +1,5 @@ + /* Interface for libelf. +- Copyright (C) 1998, 1999, 2000, 2002, 2004, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 1998-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 +@@ -95,7 +95,7 @@ typedef struct + Elf_Type d_type; /* Type of this piece of data. */ + unsigned int d_version; /* ELF version. */ + size_t d_size; /* Size in bytes. */ +- loff_t d_off; /* Offset into section. */ ++ loff_t d_off; /* Offset into section. */ + size_t d_align; /* Alignment in section. */ + } Elf_Data; + +@@ -220,6 +220,12 @@ extern Elf32_Ehdr *elf32_newehdr (Elf *__elf); + /* Similar but this time the binary calls is ELFCLASS64. */ + extern Elf64_Ehdr *elf64_newehdr (Elf *__elf); + ++/* Get the number of program headers in the ELF file. If the file uses ++ more headers than can be represented in the e_phnum field of the ELF ++ header the information from the sh_info field in the zeroth section ++ header is used. */ ++extern int elf_getphdrnum (Elf *__elf, size_t *__dst); ++ + /* Retrieve class-dependent program header table. */ + extern Elf32_Phdr *elf32_getphdr (Elf *__elf); + /* Similar but this time the binary calls is ELFCLASS64. */ +@@ -256,14 +262,24 @@ extern int elf_scnshndx (Elf_Scn *__scn); + 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); ++extern int elf_getshdrnum (Elf *__elf, size_t *__dst); ++/* Sun messed up the implementation of 'elf_getshnum' in their implementation. ++ It was agreed to make the same functionality available under a different ++ name and obsolete the old name. */ ++extern int elf_getshnum (Elf *__elf, size_t *__dst) ++ __attribute__ ((__deprecated__)); + + + /* 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); ++extern int elf_getshdrstrndx (Elf *__elf, size_t *__dst); ++/* Sun messed up the implementation of 'elf_getshnum' in their implementation. ++ It was agreed to make the same functionality available under a different ++ name and obsolete the old name. */ ++extern int elf_getshstrndx (Elf *__elf, size_t *__dst) ++ __attribute__ ((__deprecated__)); + + + /* Retrieve section header of ELFCLASS32 binary. */ +diff --git a/libelf/libelf.map b/libelf/libelf.map +index c253777..de6d912 100644 +--- a/libelf/libelf.map ++++ b/libelf/libelf.map +@@ -128,3 +128,13 @@ ELFUTILS_1.4 { + global: + elf_scnshndx; + } ELFUTILS_1.3; ++ ++ELFUTILS_1.5 { ++ global: ++ elf_getshdrnum; elf_getshdrstrndx; ++} ELFUTILS_1.4; ++ ++ELFUTILS_1.6 { ++ global: ++ elf_getphdrnum; ++} ELFUTILS_1.5; +diff --git a/libelf/libelfP.h b/libelf/libelfP.h +index 5e3d57c..2b8391b 100644 +--- a/libelf/libelfP.h ++++ b/libelf/libelfP.h +@@ -1,5 +1,5 @@ + /* Internal interfaces for libelf. +- Copyright (C) 1998-2003, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 1998-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Contributed by Ulrich Drepper , 1998. + +@@ -51,12 +51,20 @@ + #ifndef _LIBELFP_H + #define _LIBELFP_H 1 + ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ + #include + #include ++ ++#include + #include ++#include ++#include + + /* gettext helper macros. */ +-#define _(Str) dgettext ("libelf", Str) ++#define _(Str) dgettext ("elfutils", Str) + + + /* Helper Macros to write 32 bit and 64 bit functions. */ +@@ -273,6 +281,14 @@ typedef struct Elf_Data_Chunk + /* The ELF descriptor. */ + struct Elf + { ++ /* Address to which the file was mapped. NULL if not mapped. */ ++ void *map_address; ++ ++ /* When created for an archive member this points to the descriptor ++ for the archive. */ ++ Elf *parent; ++ Elf *next; /* Used in list of archive descriptors. */ ++ + /* What kind of file is underneath (ELF file, archive...). */ + Elf_Kind kind; + +@@ -292,34 +308,21 @@ struct Elf + 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. */ ++ /* Lock to handle multithreaded programs. */ ++ rwlock_define (,lock); + + 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; +@@ -331,16 +334,15 @@ struct Elf + Elf_Data_Chunk *rawchunks; /* List of elf_getdata_rawchunk results. */ + unsigned int scnincr; /* Number of sections allocate the last + time. */ ++ 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. */ + 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. */ +@@ -351,6 +353,9 @@ struct Elf + Elf_Data_Chunk *rawchunks; /* List of elf_getdata_rawchunk results. */ + unsigned int scnincr; /* Number of sections allocate the last + time. */ ++ 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. */ + 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 +@@ -363,10 +368,6 @@ struct 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. */ +- + Elf64_Ehdr *ehdr; /* Pointer to the ELF header. This is + never malloced. */ + Elf64_Shdr *shdr; /* Used when reading from a file. */ +@@ -377,6 +378,9 @@ struct Elf + Elf_Data_Chunk *rawchunks; /* List of elf_getdata_rawchunk results. */ + unsigned int scnincr; /* Number of sections allocate the last + time. */ ++ 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. */ + 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 +@@ -388,8 +392,7 @@ struct Elf + + struct + { +- int has_index; /* Set when file has index. 0 means +- undecided, > 0 means it has one. */ ++ Elf *children; /* List of all descriptors for this archive. */ + 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 +@@ -403,14 +406,12 @@ struct Elf + 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); +@@ -453,7 +454,7 @@ extern int __libelf_version_initialized attribute_hidden; + 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][type] ?: 1) ++ (__libelf_type_aligns[LIBELF_EV_IDX][class - 1][type] ?: 1) + #else + # define __libelf_type_align(class, type) 1 + #endif +@@ -479,7 +480,7 @@ extern Elf *__libelf_read_mmaped_file (int fildes, void *map_address, + extern void __libelf_seterrno (int value) internal_function; + + /* Get the next archive header. */ +-extern int __libelf_next_arhdr (Elf *elf) internal_function; ++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; +@@ -489,13 +490,14 @@ 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 (Elf *elf, int *change_bop, size_t shnum) +- internal_function; +-extern off_t __elf64_updatenull (Elf *elf, int *change_bop, size_t shnum) +- internal_function; ++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; +@@ -507,30 +509,37 @@ extern int __elf64_updatefile (Elf *elf, int change_bo, size_t shnum) + internal_function; + + +-/* Alias for exported functions to avoid PLT entries. */ +-extern int __elf_end_internal (Elf *__elf); ++/* 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_internal (Elf *__elf) attribute_hidden; +-extern Elf64_Ehdr *__elf64_getehdr_internal (Elf *__elf) 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; ++ attribute_hidden; + extern Elf_Scn *__elf64_offscn_internal (Elf *__elf, Elf64_Off __offset) +- attribute_hidden; +-extern int __elf_getshnum_internal (Elf *__elf, size_t *__dst) + attribute_hidden; +-extern int __elf_getshstrndx_internal (Elf *__elf, size_t *__dst) ++extern int __elf_getphdrnum_rdlock (Elf *__elf, size_t *__dst) ++ internal_function; ++extern int __elf_getshdrnum_rdlock (Elf *__elf, size_t *__dst) ++ internal_function; ++extern int __elf_getshdrstrndx_internal (Elf *__elf, size_t *__dst) + attribute_hidden; +-extern Elf32_Shdr *__elf32_getshdr_internal (Elf_Scn *__scn) attribute_hidden; +-extern Elf64_Shdr *__elf64_getshdr_internal (Elf_Scn *__scn) 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) +@@ -538,6 +547,8 @@ extern Elf_Scn *__elf_nextscn_internal (Elf *__elf, Elf_Scn *__scn) + 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, +@@ -566,7 +577,8 @@ 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_internal (Elf *__elf, GElf_Ehdr *__dest); ++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; +diff --git a/libelf/note_xlate.h b/libelf/note_xlate.h +index 6e8b78c..a72fe86 100644 +--- a/libelf/note_xlate.h ++++ b/libelf/note_xlate.h +@@ -1,5 +1,5 @@ + /* Conversion functions for notes. +- Copyright (C) 2007 Red Hat, Inc. ++ Copyright (C) 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -52,7 +52,7 @@ elf_cvt_note (void *dest, const void *src, size_t len, int encode) + { + assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr)); + +- while (len > 0) ++ while (len >= sizeof (Elf32_Nhdr)) + { + (1 ? Elf32_cvt_Nhdr : Elf64_cvt_Nhdr) (dest, src, sizeof (Elf32_Nhdr), + encode); +diff --git a/m4/ChangeLog b/m4/ChangeLog +index e285a0e..d116ccd 100644 +--- a/m4/ChangeLog ++++ b/m4/ChangeLog +@@ -1,3 +1,16 @@ ++2009-08-26 Roland McGrath ++ ++ * zip.m4 (eu_ZIPLIB): Don't apply lib/LIB suffix to args. ++ ++2009-02-01 Roland McGrath ++ ++ * zip.m4: Fix --with/--without argument handling. ++ ++2009-01-08 Roland McGrath ++ ++ * zip.am: New file. ++ * Makefile.am (EXTRA_DIST): Add it. ++ + 2007-06-05 Ulrich Drepper + + * gettext.m4: Update from gettext 0.16.1. +diff --git a/m4/Makefile.am b/m4/Makefile.am +index dd955e6..156010c 100644 +--- a/m4/Makefile.am ++++ b/m4/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to produce Makefile.in -*-Makefile-*- + ## +-## Copyright (C) 2000, 2001, 2002, 2004, 2005 Red Hat, Inc. ++## Copyright (C) 2000-2009 Red Hat, Inc. + ## This file is part of Red Hat elfutils. + ## + ## Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -26,4 +26,4 @@ + ## + + ##m4-files-begin +-EXTRA_DIST = codeset.m4 gettext.m4 iconv.m4 lcmessage.m4 progtest.m4 ++EXTRA_DIST = codeset.m4 gettext.m4 iconv.m4 lcmessage.m4 progtest.m4 zip.m4 +diff --git a/m4/zip.m4 b/m4/zip.m4 +new file mode 100644 +index 0000000..8e4d545 +--- /dev/null ++++ b/m4/zip.m4 +@@ -0,0 +1,18 @@ ++dnl -*- Autoconf -*- test for either zlib or bzlib. ++dnl Defines --with-$1 argument, $2 automake conditional, ++dnl and sets AC_DEFINE(USE_$2) and LIBS. ++ ++AC_DEFUN([eu_ZIPLIB], [dnl ++AC_ARG_WITH([[$1]], ++AC_HELP_STRING([--with-[$1]], [support [$1] compression in libdwfl]),, ++ [with_[$1]=default]) ++if test $with_[$1] != no; then ++ AC_SEARCH_LIBS([$4], [$3], [with_[$1]=yes], ++ [test $with_[$1] = default || ++ AC_MSG_ERROR([missing -l[$3] for --with-[$1]])]) ++fi ++AM_CONDITIONAL([$2], test $with_[$1] = yes) ++if test $with_[$1] = yes; then ++ AC_DEFINE(USE_[$2]) ++fi ++AH_TEMPLATE(USE_[$2], [Support $5 decompression via -l$3.])]) +diff --git a/po/ChangeLog b/po/ChangeLog +index bbb72fa..1e10320 100644 +--- a/po/ChangeLog ++++ b/po/ChangeLog +@@ -1,3 +1,9 @@ ++2009-01-23 Ulrich Drepper ++ ++ * Makevars (XGETTEXT_OPTIONS): Add --flag option for argp_error. ++ ++ * POTFILES.in: Add more files with translatable strings. ++ + 2007-06-05 Ulrich Drepper + + * Makefile.in.in: Update from gettext 0.16.1. +diff --git a/po/Makevars b/po/Makevars +index b8ea702..8a8ebc6 100644 +--- a/po/Makevars ++++ b/po/Makevars +@@ -9,7 +9,7 @@ top_builddir = .. + + # These options get passed to xgettext. + XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --flag=error:3:c-format \ +- --flag=ERROR:1:c-format ++ --flag=ERROR:1:c-format --flag=argp_error:2: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 +diff --git a/po/POTFILES.in b/po/POTFILES.in +index e3a192b..5ac4cde 100644 +--- a/po/POTFILES.in ++++ b/po/POTFILES.in +@@ -1,5 +1,5 @@ + # List of files which containing translatable strings. +-# Copyright (C) 2000, 2005 Red Hat, Inc. ++# Copyright (C) 2000, 2005, 2009 Red Hat, Inc. + + # Files from the compatibility library + lib/xmalloc.c +@@ -10,14 +10,30 @@ lib/xstrndup.c + libelf/elf_error.c + libasm/asm_error.c + libdw/dwarf_error.c ++libdwfl/argp-std.c ++libebl/eblbackendname.c ++libebl/eblcorenotetypename.c ++libebl/ebldynamictagname.c ++libebl/eblobjecttypename.c ++libebl/eblobjnote.c ++libebl/eblobjnotetypename.c ++libebl/eblosabiname.c ++libebl/eblsectionname.c ++libebl/eblsectiontypename.c ++libebl/eblsegmenttypename.c ++libebl/eblsymbolbindingname.c ++libebl/eblsymboltypename.c + + # Program sources ++src/ar.c ++src/arlib.c + src/nm.c + src/readelf.c + src/size.c + src/strip.c + src/ld.c + src/ldgeneric.c ++src/i386_ld.c + src/ldscript.y + src/elflint.c + src/addr2line.c +@@ -25,3 +41,5 @@ src/findtextrel.c + src/elfcmp.c + src/ranlib.c + src/strings.c ++src/unstrip.c ++src/objdump.c +diff --git a/po/de.po b/po/de.po +new file mode 100644 +index 0000000..1e9f1d6 +--- /dev/null ++++ b/po/de.po +@@ -0,0 +1,5629 @@ ++# German translation of elfutils. ++# Copyright (C) 2009 THE elfutils'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the elfutils package. ++# , fuzzy ++# ++# ++# Thomas Spura , 2009. ++# Cornelius Neckenig , 2009. ++# Michael Münch , 2009. ++msgid "" ++msgstr "" ++"Project-Id-Version: elfutils VERSION\n" ++"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" ++"POT-Creation-Date: 2009-06-29 08:35+0000\n" ++"PO-Revision-Date: 2009-06-29 15:15+0200\n" ++"Last-Translator: Michael Münch \n" ++"Language-Team: German\n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: Lokalize 0.3\n" ++ ++#: ../lib/xmalloc.c:51 ../lib/xmalloc.c:65 ../lib/xmalloc.c:79 ++#: ../src/readelf.c:2796 ../src/readelf.c:3135 ../src/unstrip.c:2086 ++#: ../src/unstrip.c:2294 ++#, c-format ++msgid "memory exhausted" ++msgstr "Kein Speicher mehr verfügbar" ++ ++#: ../libelf/elf_error.c:81 ../libasm/asm_error.c:62 ../libdw/dwarf_error.c:79 ++msgid "no error" ++msgstr "kein Fehler" ++ ++#: ../libelf/elf_error.c:84 ../libasm/asm_error.c:81 ../libdw/dwarf_error.c:80 ++msgid "unknown error" ++msgstr "unbekannter Fehler" ++ ++#: ../libelf/elf_error.c:88 ++msgid "unknown version" ++msgstr "unbekannte Version" ++ ++#: ../libelf/elf_error.c:92 ++msgid "unknown type" ++msgstr "unbekannter Typ" ++ ++#: ../libelf/elf_error.c:96 ++msgid "invalid `Elf' handle" ++msgstr "ungültiges `Elf'-Handle" ++ ++#: ../libelf/elf_error.c:100 ++msgid "invalid size of source operand" ++msgstr "ungültige Grösse des Quell-Operanden" ++ ++#: ../libelf/elf_error.c:104 ++msgid "invalid size of destination operand" ++msgstr "ungültige Grösse des Ziel-Operanden" ++ ++#: ../libelf/elf_error.c:108 ../src/readelf.c:4686 ++#, c-format ++msgid "invalid encoding" ++msgstr "ungültige Kodierung" ++ ++#: ../libelf/elf_error.c:112 ../libasm/asm_error.c:63 ++#: ../libdw/dwarf_error.c:88 ++msgid "out of memory" ++msgstr "nicht genügend Speicher" ++ ++#: ../libelf/elf_error.c:116 ++msgid "invalid file descriptor" ++msgstr "ungültiger Datei-Deskriptor" ++ ++#: ../libelf/elf_error.c:120 ++msgid "invalid operation" ++msgstr "ungültige Operation" ++ ++#: ../libelf/elf_error.c:124 ++msgid "ELF version not set" ++msgstr "ELF-Version nicht gesetzt" ++ ++#: ../libelf/elf_error.c:128 ../libelf/elf_error.c:176 ++#: ../libdw/dwarf_error.c:90 ++msgid "invalid command" ++msgstr "Ungültiger Befehl" ++ ++#: ../libelf/elf_error.c:132 ../libelf/elf_error.c:192 ++msgid "offset out of range" ++msgstr "Offset ausserhalb des Bereichs" ++ ++#: ../libelf/elf_error.c:136 ++msgid "invalid fmag field in archive header" ++msgstr "ungültiges fmag-Feld im Archivheader" ++ ++#: ../libelf/elf_error.c:140 ++msgid "invalid archive file" ++msgstr "Ungültige Archiv-Datei" ++ ++#: ../libelf/elf_error.c:144 ++msgid "descriptor is not for an archive" ++msgstr "" ++ ++#: ../libelf/elf_error.c:148 ++msgid "no index available" ++msgstr "kein Index verfügbar" ++ ++#: ../libelf/elf_error.c:152 ++msgid "cannot read data from file" ++msgstr "Daten aus der Datei konnten nicht gelesen werden" ++ ++#: ../libelf/elf_error.c:156 ++msgid "cannot write data to file" ++msgstr "Daten konnten nicht in die Datei geschrieben werden" ++ ++#: ../libelf/elf_error.c:160 ++msgid "invalid binary class" ++msgstr "ungültige Binärklasse" ++ ++#: ../libelf/elf_error.c:164 ++msgid "invalid section index" ++msgstr "ungültiger Abschnittsindex" ++ ++#: ../libelf/elf_error.c:168 ++msgid "invalid operand" ++msgstr "ungültiger Operand" ++ ++#: ../libelf/elf_error.c:172 ++msgid "invalid section" ++msgstr "ungültiger Abschnitt" ++ ++#: ../libelf/elf_error.c:180 ++msgid "executable header not created first" ++msgstr "ausführbarer Header wurde nicht zuerst erstellt" ++ ++#: ../libelf/elf_error.c:184 ++msgid "file descriptor disabled" ++msgstr "Datei-Deskriptor deaktiviert" ++ ++#: ../libelf/elf_error.c:188 ++msgid "archive/member fildes mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:196 ++msgid "cannot manipulate null section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:200 ++#, fuzzy ++msgid "data/scn mismatch" ++msgstr "data/scn Unterschied" ++ ++#: ../libelf/elf_error.c:204 ++msgid "invalid section header" ++msgstr "ungültiger Abschnitts-Header" ++ ++#: ../libelf/elf_error.c:208 ../src/readelf.c:6156 ../src/readelf.c:6257 ++#, c-format ++msgid "invalid data" ++msgstr "Ungültige Daten" ++ ++#: ../libelf/elf_error.c:212 ++msgid "unknown data encoding" ++msgstr "Unbekannte Datenkodierung" ++ ++#: ../libelf/elf_error.c:216 ++msgid "section `sh_size' too small for data" ++msgstr "Abschnitt `sh_size' zu klein für Daten" ++ ++#: ../libelf/elf_error.c:220 ++msgid "invalid section alignment" ++msgstr "ungültige Abschnittsausrichtung" ++ ++#: ../libelf/elf_error.c:224 ++msgid "invalid section entry size" ++msgstr "" ++ ++#: ../libelf/elf_error.c:228 ++msgid "update() for write on read-only file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:232 ++msgid "no such file" ++msgstr "Datei nicht gefunden" ++ ++#: ../libelf/elf_error.c:236 ++msgid "only relocatable files can contain section groups" ++msgstr "" ++ ++#: ../libelf/elf_error.c:241 ++msgid "" ++"program header only allowed in executables, shared objects, and core files" ++msgstr "" ++ ++#: ../libelf/elf_error.c:248 ++msgid "file has no program header" ++msgstr "Datei hat keinen Programm-Kopf" ++ ++#: ../libelf/elf_error.c:253 ../libdw/dwarf_error.c:112 ++msgid "invalid offset" ++msgstr "ungültiger Offset" ++ ++#: ../libasm/asm_error.c:64 ../src/ldgeneric.c:2687 ++#, c-format ++msgid "cannot create output file" ++msgstr "Ausgangsdatei konnte nicht erstellt werden" ++ ++#: ../libasm/asm_error.c:65 ++msgid "invalid parameter" ++msgstr "ungültiger Parameter" ++ ++#: ../libasm/asm_error.c:66 ++msgid "cannot change mode of output file" ++msgstr "konnte Modus der Ausgabedatei nicht ändern" ++ ++#. Something went wrong. ++#: ../libasm/asm_error.c:67 ../src/ldgeneric.c:7001 ++#, c-format ++msgid "cannot rename output file" ++msgstr "Ausgangsdatei konnte nicht umbenannt werden" ++ ++#: ../libasm/asm_error.c:68 ++msgid "duplicate symbol" ++msgstr "Symbol doppelt vorhanden" ++ ++#: ../libasm/asm_error.c:69 ++msgid "invalid section type for operation" ++msgstr "ungültiger Abschnittstyp für Operation" ++ ++#: ../libasm/asm_error.c:70 ++msgid "error during output of data" ++msgstr "Fehler bei Datenausgabe" ++ ++#: ../libasm/asm_error.c:71 ++msgid "no backend support available" ++msgstr "keine Backend-Unterstützung verfügbar" ++ ++#: ../libdw/dwarf_error.c:81 ++msgid "invalid access" ++msgstr "Ungültiger Zugriff" ++ ++#: ../libdw/dwarf_error.c:82 ++msgid "no regular file" ++msgstr "Keine reguläre Date" ++ ++#: ../libdw/dwarf_error.c:83 ++msgid "I/O error" ++msgstr "I/O Fehler" ++ ++#: ../libdw/dwarf_error.c:84 ++msgid "invalid ELF file" ++msgstr "Ungültige ELF Datei" ++ ++#: ../libdw/dwarf_error.c:85 ++msgid "no DWARF information" ++msgstr "keine DWARF Information" ++ ++#: ../libdw/dwarf_error.c:86 ++msgid "no ELF file" ++msgstr "keine ELF Datei" ++ ++#: ../libdw/dwarf_error.c:87 ++msgid "cannot get ELF header" ++msgstr "ELF Kopf konnte nicht ausgelesen werden" ++ ++#: ../libdw/dwarf_error.c:89 ++msgid "not implemented" ++msgstr "Nicht implementiert" ++ ++#: ../libdw/dwarf_error.c:91 ++msgid "invalid version" ++msgstr "Ungültige Version" ++ ++#: ../libdw/dwarf_error.c:92 ++msgid "invalid file" ++msgstr "Ungültige Datei" ++ ++#: ../libdw/dwarf_error.c:93 ++msgid "no entries found" ++msgstr "Keine Einträge gefunden" ++ ++#: ../libdw/dwarf_error.c:94 ++msgid "invalid DWARF" ++msgstr "DWARF ungültig" ++ ++#: ../libdw/dwarf_error.c:95 ++msgid "no string data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:96 ++msgid "no address value" ++msgstr "Kein Adress-Wert" ++ ++#: ../libdw/dwarf_error.c:97 ++msgid "no constant value" ++msgstr "Kein Konstanten-Wert" ++ ++#: ../libdw/dwarf_error.c:98 ++msgid "no reference value" ++msgstr "Kein Referenz-Wert" ++ ++#: ../libdw/dwarf_error.c:99 ++msgid "invalid reference value" ++msgstr "Ungültiger Referenz-Wert" ++ ++#: ../libdw/dwarf_error.c:100 ++msgid ".debug_line section missing" ++msgstr ".debug_line Sektion fehlt" ++ ++#: ../libdw/dwarf_error.c:101 ++msgid "invalid .debug_line section" ++msgstr "ungültige .debug_line Sektion" ++ ++#: ../libdw/dwarf_error.c:102 ++msgid "debug information too big" ++msgstr "Debug Information zu groß" ++ ++#: ../libdw/dwarf_error.c:103 ++msgid "invalid DWARF version" ++msgstr "Ungültige DWARF Version" ++ ++#: ../libdw/dwarf_error.c:104 ++msgid "invalid directory index" ++msgstr "ungültiger Verzeichnisindex" ++ ++#: ../libdw/dwarf_error.c:105 ++msgid "address out of range" ++msgstr "Außerhalb des Adressbereiches" ++ ++#: ../libdw/dwarf_error.c:106 ++msgid "no location list value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:107 ++msgid "no block data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:108 ++msgid "invalid line index" ++msgstr "Ungültiger Zeilenindex" ++ ++#: ../libdw/dwarf_error.c:109 ++msgid "invalid address range index" ++msgstr "Ungültiger Adressbereichs Index" ++ ++#: ../libdw/dwarf_error.c:110 ++msgid "no matching address range" ++msgstr "Kein passender Adressbereich" ++ ++#: ../libdw/dwarf_error.c:111 ++msgid "no flag value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:113 ++msgid ".debug_ranges section missing" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:67 ../src/unstrip.c:2236 ++msgid "Input selection options:" ++msgstr "Eingabeauswahloptionen:" ++ ++#: ../libdwfl/argp-std.c:68 ++msgid "Find addresses in FILE" ++msgstr "Finde Adressen in FILE" ++ ++#: ../libdwfl/argp-std.c:70 ++msgid "Find addresses from signatures found in COREFILE" ++msgstr "Finde Adressen von Signatur aus COREFILE" ++ ++#: ../libdwfl/argp-std.c:72 ++msgid "Find addresses in files mapped into process PID" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:74 ++msgid "" ++"Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " ++"format" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:76 ++msgid "Find addresses in the running kernel" ++msgstr "Finde Adressen im laufenden Kernel" ++ ++#: ../libdwfl/argp-std.c:78 ++msgid "Kernel with all modules" ++msgstr "Kernel mit allen Modulen" ++ ++#: ../libdwfl/argp-std.c:80 ++msgid "Search path for separate debuginfo files" ++msgstr "Dateisuchpfad für separate Debug-Informationen" ++ ++#: ../libdwfl/argp-std.c:163 ++msgid "only one of -e, -p, -k, -K, or --core allowed" ++msgstr "Nur eine Option von -e, -p, -k, -K, oder --core erlaubt" ++ ++#: ../libdwfl/argp-std.c:223 ++#, c-format ++msgid "cannot read ELF core file: %s" ++msgstr "Konnte ELF Kerndatei %s nicht lesen" ++ ++#: ../libdwfl/argp-std.c:243 ++msgid "No modules recognized in core file" ++msgstr "Keine Module in der Kerndatei gefunden" ++ ++#: ../libdwfl/argp-std.c:255 ++msgid "cannot load kernel symbols" ++msgstr "Konnte Kernel Symbole nicht laden" ++ ++#. Non-fatal to have no modules since we do have the kernel. ++#: ../libdwfl/argp-std.c:259 ++msgid "cannot find kernel modules" ++msgstr "Konnte Kernel Module nicht finden" ++ ++#: ../libdwfl/argp-std.c:273 ++msgid "cannot find kernel or modules" ++msgstr "Konnte Kernel oder Module nicht finden" ++ ++#: ../libebl/eblbackendname.c:63 ++msgid "No backend" ++msgstr "Kein Backend" ++ ++#: ../libebl/eblcorenotetypename.c:107 ../libebl/eblobjecttypename.c:78 ++#: ../libebl/eblobjnotetypename.c:85 ../libebl/eblosabiname.c:98 ++#: ../libebl/eblsectionname.c:110 ../libebl/eblsectiontypename.c:140 ++#: ../libebl/eblsegmenttypename.c:104 ++msgid "" ++msgstr "" ++ ++#: ../libebl/ebldynamictagname.c:126 ++#, c-format ++msgid ": %#" ++msgstr ": %#" ++ ++#: ../libebl/eblobjnote.c:76 ++#, c-format ++msgid " Build ID: " ++msgstr " Build ID: " ++ ++#: ../libebl/eblobjnote.c:129 ++#, c-format ++msgid " OS: %s, ABI: " ++msgstr " OS: %s, ABI: " ++ ++#: ../libebl/eblosabiname.c:95 ++msgid "Stand alone" ++msgstr "" ++ ++#: ../libebl/eblsymbolbindingname.c:86 ../libebl/eblsymboltypename.c:94 ++#, c-format ++msgid ": %d" ++msgstr ": %d" ++ ++#: ../src/ar.c:76 ++msgid "Commands:" ++msgstr "Befehle:" ++ ++#: ../src/ar.c:77 ++msgid "Delete files from archive." ++msgstr "Dateien aus dem Archiv löschen." ++ ++#: ../src/ar.c:78 ++msgid "Move files in archive." ++msgstr "Dateien zum Archiv hinzufügen." ++ ++#: ../src/ar.c:79 ++msgid "Print files in archive." ++msgstr "Packe Dateien in Archiv" ++ ++#: ../src/ar.c:80 ++msgid "Quick append files to archive." ++msgstr "Hänge Dateien an ein Archiv" ++ ++#: ../src/ar.c:82 ++msgid "Replace existing or insert new file into archive." ++msgstr "Ersetze existierende oder füge neue Datei in das Archiv ein." ++ ++#: ../src/ar.c:83 ++msgid "Display content of archive." ++msgstr "Zeige Archivinhalt an." ++ ++#: ../src/ar.c:84 ++msgid "Extract files from archive." ++msgstr "Entpacke Dateien aus dem Archiv" ++ ++#: ../src/ar.c:86 ++msgid "Command Modifiers:" ++msgstr "" ++ ++#: ../src/ar.c:87 ++msgid "Preserve original dates." ++msgstr "Erhalte ursprüngliche Daten." ++ ++#: ../src/ar.c:88 ++msgid "Use instance [COUNT] of name." ++msgstr "" ++ ++#: ../src/ar.c:90 ++msgid "Do not replace existing files with extracted files." ++msgstr "Ersetze existierende Dateien nicht mit entpackten Dateien" ++ ++#: ../src/ar.c:91 ++msgid "Allow filename to be truncated if necessary." ++msgstr "Erlaube angehängte Dateinamen, wenn nötig" ++ ++#: ../src/ar.c:93 ++msgid "Provide verbose output." ++msgstr "Zeige detaillierte Ausgabe." ++ ++#: ../src/ar.c:94 ++msgid "Force regeneration of symbol table." ++msgstr "Erzwinge Regenerierung der Symboltabelle." ++ ++#: ../src/ar.c:95 ++msgid "Insert file after [MEMBER]." ++msgstr "Füge Datei nach [MEMBER] ein." ++ ++#: ../src/ar.c:96 ++msgid "Insert file before [MEMBER]." ++msgstr "Füge Datei vor [MEMBER] ein." ++ ++#: ../src/ar.c:97 ++msgid "Same as -b." ++msgstr "Genau wie -b." ++ ++#: ../src/ar.c:98 ++msgid "Suppress message when library has to be created." ++msgstr "Unterdrücke Nachricht wenn Bibliothek erstellt werden muss." ++ ++#: ../src/ar.c:100 ++#, fuzzy ++msgid "Use full path for file matching." ++msgstr "Vollständigen Pfad für Dateiabgleich verwenden." ++ ++#: ../src/ar.c:101 ++msgid "Update only older files in archive." ++msgstr "Nur ältere Datein im Archiv aktualisieren" ++ ++#. Short description of program. ++#: ../src/ar.c:107 ++msgid "Create, modify, and extract from archives." ++msgstr "Erstelle, ändere, extrahiere von Archiven" ++ ++#. Strings for arguments in help texts. ++#: ../src/ar.c:110 ++msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++msgstr "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++ ++#: ../src/ar.c:192 ++#, c-format ++msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" ++msgstr "'a', 'b', und 'i' nur zusammen mit 'm' and 'r Optionen" ++ ++#: ../src/ar.c:197 ++#, c-format ++msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" ++msgstr "" ++ ++#: ../src/ar.c:213 ++#, c-format ++msgid "'N' is only meaningful with the 'x' and 'd' options" ++msgstr "'N' ist nur mit den Optionen 'x' und 'd' von Bedeutung." ++ ++#: ../src/ar.c:218 ++#, c-format ++msgid "COUNT parameter required" ++msgstr "COUNT Parameter erforderlich" ++ ++#: ../src/ar.c:230 ++#, c-format ++msgid "invalid COUNT parameter %s" ++msgstr "Ungültiger COUNT Parameter %s" ++ ++#: ../src/ar.c:237 ++#, c-format ++msgid "'%' is only meaningful with the 'x' option" ++msgstr "'%' ist nur mit der Option 'x' von Bedeutung" ++ ++#: ../src/ar.c:243 ++#, c-format ++msgid "archive name required" ++msgstr "Archivname erforderlich" ++ ++#: ../src/ar.c:289 ../src/nm.c:253 ../src/readelf.c:442 ../src/size.c:219 ++#: ../src/strip.c:203 ../src/ld.c:957 ../src/elflint.c:238 ++#: ../src/addr2line.c:185 ../src/findtextrel.c:170 ../src/elfcmp.c:522 ++#: ../src/ranlib.c:136 ../src/strings.c:227 ../src/unstrip.c:233 ++#: ../src/objdump.c:181 ++#, 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 "" ++"Copyright (C) %s Red Hat, Inc.\n" ++"Dies ist freie Software, siehe Quellcode für Kopierbedingungen. KEINE " ++"GARANTIE,\n" ++"auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n" ++ ++#: ../src/ar.c:294 ../src/nm.c:258 ../src/readelf.c:447 ../src/size.c:224 ++#: ../src/strip.c:208 ../src/ld.c:962 ../src/elflint.c:243 ++#: ../src/addr2line.c:190 ../src/findtextrel.c:175 ../src/elfcmp.c:527 ++#: ../src/ranlib.c:141 ../src/strings.c:232 ../src/unstrip.c:238 ++#: ../src/objdump.c:186 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "Geschrieben von %s.\n" ++ ++#: ../src/ar.c:314 ++#, c-format ++msgid "More than one operation specified" ++msgstr "Mehr als eine Operation angegeben" ++ ++#: ../src/ar.c:404 ++#, c-format ++msgid "cannot open archive '%s'" ++msgstr "Konnte Archiv '%s' nicht öffnen" ++ ++#: ../src/ar.c:414 ++#, c-format ++msgid "cannot open archive '%s': %s" ++msgstr "Konnte Archiv '%s': %s nicht öffnen" ++ ++#: ../src/ar.c:418 ++#, c-format ++msgid "%s: not an archive file" ++msgstr "%s: Keine Archiv-Datei" ++ ++#: ../src/ar.c:422 ++#, c-format ++msgid "cannot stat archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:434 ++#, c-format ++msgid "no entry %s in archive\n" ++msgstr "Kein Eintrag %s in Archiv\n" ++ ++#: ../src/ar.c:474 ../src/ar.c:918 ../src/ar.c:1118 ++#, c-format ++msgid "cannot create hash table" ++msgstr "Konnte Hash-Tabelle nicht erstellen" ++ ++#: ../src/ar.c:481 ../src/ar.c:925 ../src/ar.c:1127 ++#, c-format ++msgid "cannot insert into hash table" ++msgstr "Konnte nicht in Hash-Tabelle einfügen" ++ ++#: ../src/ar.c:489 ../src/ranlib.c:176 ++#, c-format ++msgid "cannot stat '%s'" ++msgstr "" ++ ++#: ../src/ar.c:585 ++#, c-format ++msgid "cannot read content of %s: %s" ++msgstr "Konnte Inhalt von %s: %s nicht lesen" ++ ++#: ../src/ar.c:629 ++#, c-format ++msgid "cannot open %.*s" ++msgstr "Konnte %.*s nicht öffnen" ++ ++#: ../src/ar.c:651 ++#, c-format ++msgid "failed to write %s" ++msgstr "Konnte %s nicht schreiben" ++ ++#: ../src/ar.c:663 ++#, c-format ++msgid "cannot change mode of %s" ++msgstr "" ++ ++#: ../src/ar.c:679 ++#, c-format ++msgid "cannot change modification time of %s" ++msgstr "Konnte Bearbeitungszeit von %s nicht ändern" ++ ++#: ../src/ar.c:726 ++#, c-format ++msgid "cannot rename temporary file to %.*s" ++msgstr "Konnte temporäre Datei nicht in %.*s umbenennen" ++ ++#: ../src/ar.c:762 ../src/ar.c:1010 ../src/ar.c:1408 ../src/ranlib.c:250 ++#, c-format ++msgid "cannot create new file" ++msgstr "neue Datei konnte nicht angelegt werden" ++ ++#: ../src/ar.c:1209 ++#, c-format ++msgid "position member %s not found" ++msgstr "" ++ ++#: ../src/ar.c:1219 ++#, c-format ++msgid "%s: no entry %s in archive!\n" ++msgstr "%s: Kein Eintrag %s in dem Archiv!\n" ++ ++#: ../src/ar.c:1248 ../src/ldgeneric.c:519 ../src/objdump.c:257 ++#, c-format ++msgid "cannot open %s" ++msgstr "Konnte %s nicht öffnen" ++ ++#: ../src/ar.c:1253 ++#, c-format ++msgid "cannot stat %s" ++msgstr "" ++ ++#: ../src/ar.c:1259 ++#, c-format ++msgid "%s is no regular file" ++msgstr "%s ist keine reguläre Datei" ++ ++#: ../src/ar.c:1272 ++#, c-format ++msgid "cannot get ELF descriptor for %s: %s\n" ++msgstr "" ++ ++#: ../src/ar.c:1291 ++#, c-format ++msgid "cannot read %s: %s" ++msgstr "Konnte %s: %s nicht lesen" ++ ++#. The archive is too big. ++#: ../src/arlib.c:215 ++#, c-format ++msgid "the archive '%s' is too large" ++msgstr "Das Archiv '%s' ist zu groß" ++ ++#: ../src/arlib.c:228 ++#, c-format ++msgid "cannot read ELF header of %s(%s): %s" ++msgstr "\"Konnte ELF-Kopf von %s(%s): %s nicht lesen" ++ ++#: ../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 "Zeige nur definierte Symbole" ++ ++#: ../src/nm.c:79 ++msgid "Display dynamic symbols instead of normal symbols" ++msgstr "Zeige dynamische Symbole anstelle normaler Symbole" ++ ++#: ../src/nm.c:80 ++msgid "Display only external symbols" ++msgstr "Zeige nur externe Symbole" ++ ++#: ../src/nm.c:81 ++msgid "Display only undefined symbols" ++msgstr "Zeige nur undefinierte Symbole" ++ ++#: ../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 "Ausgabeformat:" ++ ++#: ../src/nm.c:87 ++#, fuzzy ++msgid "Print name of the input file before every symbol" ++msgstr "Zeige Name der Eingabedatei vor jedem Symbol" ++ ++#: ../src/nm.c:90 ++msgid "" ++"Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The " ++"default is `sysv'" ++msgstr "" ++"Benutze das Ausgabeformat FORMAT. FORMAT kann `bsd', `sysv' or `posix' sein. " ++"Der Standard ist `sysv'" ++ ++#: ../src/nm.c:92 ++msgid "Same as --format=bsd" ++msgstr "Genau wie --format=bsd" ++ ++#: ../src/nm.c:93 ++msgid "Same as --format=posix" ++msgstr "Genau wie --format=posix" ++ ++#: ../src/nm.c:94 ../src/size.c:72 ++msgid "Use RADIX for printing symbol values" ++msgstr "Benutze RADIX zur Ausgabe von Symbolwerten" ++ ++#: ../src/nm.c:95 ++msgid "Mark weak symbols" ++msgstr "Kennzeichne schwache Symbole" ++ ++#: ../src/nm.c:96 ++#, fuzzy ++msgid "Print size of defined symbols" ++msgstr "Zeige Grösse der definierten Symbole" ++ ++#: ../src/nm.c:98 ../src/size.c:80 ../src/strip.c:77 ../src/unstrip.c:80 ++msgid "Output options:" ++msgstr "Ausgabeoptionen:" ++ ++#: ../src/nm.c:99 ++msgid "Sort symbols numerically by address" ++msgstr "Symbole anhand der Adresse numerisch sortieren" ++ ++#: ../src/nm.c:101 ++msgid "Do not sort the symbols" ++msgstr "Symbole nicht sortieren" ++ ++#: ../src/nm.c:102 ++msgid "Reverse the sense of the sort" ++msgstr "Sortierreihenfolge umkehren" ++ ++#: ../src/nm.c:103 ../src/addr2line.c:75 ../src/findtextrel.c:75 ++#: ../src/elfcmp.c:75 ../src/strings.c:83 ++msgid "Miscellaneous:" ++msgstr "Verschiedenes:" ++ ++#. Short description of program. ++#: ../src/nm.c:108 ++msgid "List symbols from FILEs (a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/nm.c:111 ../src/size.c:92 ../src/strip.c:96 ../src/findtextrel.c:84 ++#: ../src/strings.c:92 ../src/objdump.c:80 ++msgid "[FILE...]" ++msgstr "" ++ ++#: ../src/nm.c:136 ../src/size.c:117 ../src/strip.c:120 ../src/objdump.c:105 ++#, c-format ++msgid "%s: INTERNAL ERROR %d (%s-%s): %s" ++msgstr "%s: INTERNER FEHLER %d (%s-%s): %s" ++ ++#: ../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:229 ++#: ../src/elfcmp.c:574 ../src/ranlib.c:169 ../src/strings.c:183 ++#: ../src/unstrip.c:1899 ../src/unstrip.c:1928 ++#, c-format ++msgid "cannot open '%s'" ++msgstr "'%s' kann nicht geöffnet werden" ++ ++#: ../src/nm.c:380 ../src/nm.c:392 ../src/size.c:317 ../src/size.c:326 ++#: ../src/size.c:337 ../src/strip.c:1815 ++#, c-format ++msgid "while closing '%s'" ++msgstr "beim Schliessen von '%s'" ++ ++#: ../src/nm.c:402 ../src/strip.c:358 ../src/objdump.c:296 ++#, c-format ++msgid "%s: File format not recognized" ++msgstr "%s: Dateiformat nicht erkannt" ++ ++#. Note: 0 is no valid offset. ++#: ../src/nm.c:442 ++msgid "" ++"\n" ++"Archive index:" ++msgstr "" ++"\n" ++"Archiv-Index:" ++ ++#: ../src/nm.c:451 ++#, c-format ++msgid "invalid offset %zu for symbol %s" ++msgstr "ungültiger Offset %zu für Symbol %s" ++ ++#: ../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 ../src/objdump.c:344 ++#, c-format ++msgid "%s%s%s: file format not recognized" ++msgstr "%s%s%s: Dateiformat nicht erkannt" ++ ++#: ../src/nm.c:700 ++#, c-format ++msgid "cannot create search tree" ++msgstr "Kann Suchbaum nicht erstellen" ++ ++#: ../src/nm.c:740 ../src/nm.c:1002 ../src/readelf.c:860 ../src/readelf.c:1003 ++#: ../src/readelf.c:1144 ../src/readelf.c:1326 ../src/readelf.c:1524 ++#: ../src/readelf.c:1710 ../src/readelf.c:1920 ../src/readelf.c:2174 ++#: ../src/readelf.c:2240 ../src/readelf.c:2318 ../src/readelf.c:2815 ++#: ../src/readelf.c:2851 ../src/readelf.c:2913 ../src/readelf.c:6406 ++#: ../src/readelf.c:7272 ../src/readelf.c:7417 ../src/readelf.c:7486 ++#: ../src/size.c:425 ../src/size.c:499 ../src/strip.c:482 ../src/objdump.c:744 ++#, 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 "" ++"\n" ++"\n" ++"Symbole aus %s:\n" ++"\n" ++ ++#: ../src/nm.c:768 ++#, c-format ++msgid "" ++"\n" ++"\n" ++"Symbols from %s[%s]:\n" ++"\n" ++msgstr "" ++"\n" ++"\n" ++"Symbole aus %s[%s]:\n" ++"\n" ++ ++#. The header line. ++#: ../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 "%s: entry size in section `%s' is not what we expect" ++ ++#: ../src/nm.c:1016 ++#, c-format ++msgid "%s: size of section `%s' is not multiple of entry size" ++msgstr "" ++ ++#. XXX Add machine specific object file types. ++#: ../src/nm.c:1255 ++#, c-format ++msgid "%s%s%s%s: Invalid operation" ++msgstr "%s%s%s%s: Ungültige Operation" ++ ++#: ../src/nm.c:1312 ++#, c-format ++msgid "%s%s%s: no symbols" ++msgstr "%s%s%s: keine Symbole" ++ ++#: ../src/readelf.c:73 ++msgid "Equivalent to: -e -h -l" ++msgstr "Entspricht: -e -h -l" ++ ++#: ../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 "Programm-Köpfe anzeigen" ++ ++#: ../src/readelf.c:80 ++msgid "Display relocations" ++msgstr "Relocations anzeigen" ++ ++#: ../src/readelf.c:81 ++msgid "Display the sections' header" ++msgstr "" ++ ++#: ../src/readelf.c:83 ++msgid "Display the symbol table" ++msgstr "Symboltabelle anzeigen" ++ ++#: ../src/readelf.c:84 ++msgid "Display versioning information" ++msgstr "Versionierungsinformationen anzeigen" ++ ++#: ../src/readelf.c:86 ++msgid "" ++"Display DWARF section content. SECTION can be one of abbrev, aranges, " ++"frame, info, loc, line, ranges, pubnames, str, macinfo, or exception" ++msgstr "" ++ ++#: ../src/readelf.c:89 ++msgid "Display the core notes" ++msgstr "Kernnotizen anzeigen" ++ ++#: ../src/readelf.c:91 ++msgid "Display architecture specific information (if any)" ++msgstr "Architekturspezifische Informationen anzeigen (falls vorhanden)" ++ ++#: ../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 "Symbolindex des Archivs anzeigen" ++ ++#: ../src/readelf.c:99 ++msgid "Display sections for exception handling" ++msgstr "Abschnitte für Ausnahmebehandlung anzeigen" ++ ++#: ../src/readelf.c:102 ++msgid "Output control:" ++msgstr "Ausgabekontrolle:" ++ ++#: ../src/readelf.c:104 ++msgid "Do not find symbol names for addresses in DWARF data" ++msgstr "Keine symbolischen Namen für Adressen in DWARF-Daten suchen" ++ ++#. Short description of program. ++#: ../src/readelf.c:110 ++msgid "Print information from ELF file in human-readable form." ++msgstr "Informationen aus der ELF-Datei in menschenlesbarer Form ausgeben." ++ ++#. Strings for arguments in help texts. ++#: ../src/readelf.c:114 ../src/elflint.c:85 ++msgid "FILE..." ++msgstr "DATEI..." ++ ++#: ../src/readelf.c:266 ../src/elflint.c:158 ++#, c-format ++msgid "cannot open input file" ++msgstr "Kann Eingabedatei nicht öffnen" ++ ++#: ../src/readelf.c:394 ++#, c-format ++msgid "Unknown DWARF debug section `%s'.\n" ++msgstr "" ++ ++#: ../src/readelf.c:418 ../src/elflint.c:222 ++msgid "Missing file name.\n" ++msgstr "Dateiname fehlt.\n" ++ ++#: ../src/readelf.c:423 ../src/objdump.c:236 ++msgid "No operation specified.\n" ++msgstr "Keine Operation angegeben.\n" ++ ++#: ../src/readelf.c:458 ++#, c-format ++msgid "cannot generate Elf descriptor: %s" ++msgstr "konnte Elf-Deskriptor nicht erzeugen: %s" ++ ++#: ../src/readelf.c:470 ++#, c-format ++msgid "'%s' is not an archive, cannot print archive index" ++msgstr "" ++ ++#: ../src/readelf.c:475 ++#, c-format ++msgid "error while closing Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:567 ++#, c-format ++msgid "cannot stat input file" ++msgstr "" ++ ++#: ../src/readelf.c:569 ++#, c-format ++msgid "input file is empty" ++msgstr "" ++ ++#: ../src/readelf.c:571 ++#, c-format ++msgid "failed reading '%s': %s" ++msgstr "Konnte '%s' nicht lesen: %s" ++ ++#: ../src/readelf.c:606 ++#, c-format ++msgid "cannot read ELF header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:614 ++#, c-format ++msgid "cannot create EBL handle" ++msgstr "" ++ ++#: ../src/readelf.c:621 ../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:707 ++msgid "NONE (None)" ++msgstr "" ++ ++#: ../src/readelf.c:708 ++msgid "REL (Relocatable file)" ++msgstr "" ++ ++#: ../src/readelf.c:709 ++msgid "EXEC (Executable file)" ++msgstr "" ++ ++#: ../src/readelf.c:710 ++msgid "DYN (Shared object file)" ++msgstr "" ++ ++#: ../src/readelf.c:711 ++msgid "CORE (Core file)" ++msgstr "" ++ ++#: ../src/readelf.c:716 ++#, c-format ++msgid "OS Specific: (%x)\n" ++msgstr "" ++ ++#. && e_type <= ET_HIPROC always true ++#: ../src/readelf.c:718 ++#, c-format ++msgid "Processor Specific: (%x)\n" ++msgstr "" ++ ++#: ../src/readelf.c:728 ++msgid "" ++"ELF Header:\n" ++" Magic: " ++msgstr "" ++ ++#: ../src/readelf.c:732 ++#, c-format ++msgid "" ++"\n" ++" Class: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:737 ++#, fuzzy, c-format ++msgid " Data: %s\n" ++msgstr " Daten: %s\n" ++ ++#: ../src/readelf.c:743 ++#, c-format ++msgid " Ident Version: %hhd %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:745 ../src/readelf.c:762 ++msgid "(current)" ++msgstr "(aktuell)" ++ ++#: ../src/readelf.c:749 ++#, c-format ++msgid " OS/ABI: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:752 ++#, c-format ++msgid " ABI Version: %hhd\n" ++msgstr "" ++ ++#: ../src/readelf.c:755 ++msgid " Type: " ++msgstr " Typ: " ++ ++#: ../src/readelf.c:758 ++#, c-format ++msgid " Machine: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:760 ++#, c-format ++msgid " Version: %d %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:764 ++#, c-format ++msgid " Entry point address: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:767 ++#, c-format ++msgid " Start of program headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:768 ../src/readelf.c:771 ++msgid "(bytes into file)" ++msgstr "" ++ ++#: ../src/readelf.c:770 ++#, c-format ++msgid " Start of section headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:773 ++#, c-format ++msgid " Flags: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:776 ++#, c-format ++msgid " Size of this header: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:777 ../src/readelf.c:780 ../src/readelf.c:786 ++msgid "(bytes)" ++msgstr "(Bytes)" ++ ++#: ../src/readelf.c:779 ++#, c-format ++msgid " Size of program header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:782 ++#, c-format ++msgid " Number of program headers entries: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:785 ++#, c-format ++msgid " Size of section header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:788 ++#, c-format ++msgid " Number of section headers entries: %" ++msgstr "" ++ ++#: ../src/readelf.c:795 ++#, c-format ++msgid " (% in [0].sh_size)" ++msgstr "" ++ ++#: ../src/readelf.c:798 ../src/readelf.c:812 ++msgid " ([0] not available)" ++msgstr "" ++ ++#. We managed to get the zeroth section. ++#: ../src/readelf.c:808 ++#, c-format ++msgid " (% in [0].sh_link)" ++msgstr "" ++ ++#: ../src/readelf.c:816 ++#, c-format ++msgid "" ++" Section header string table index: XINDEX%s\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:820 ++#, c-format ++msgid "" ++" Section header string table index: %\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:852 ++#, c-format ++msgid "" ++"There are %d section headers, starting at offset %#:\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:862 ++msgid "Section Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:865 ++msgid "" ++"[Nr] Name Type Addr Off Size ES Flags Lk " ++"Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:867 ++msgid "" ++"[Nr] Name Type Addr Off Size ES " ++"Flags Lk Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:874 ../src/readelf.c:1027 ++#, c-format ++msgid "cannot get section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:881 ../src/readelf.c:1035 ../src/readelf.c:7437 ++#: ../src/unstrip.c:352 ../src/unstrip.c:376 ../src/unstrip.c:426 ++#: ../src/unstrip.c:535 ../src/unstrip.c:552 ../src/unstrip.c:590 ++#: ../src/unstrip.c:788 ../src/unstrip.c:1056 ../src/unstrip.c:1243 ++#: ../src/unstrip.c:1304 ../src/unstrip.c:1426 ../src/unstrip.c:1479 ++#: ../src/unstrip.c:1587 ../src/unstrip.c:1777 ++#, c-format ++msgid "cannot get section header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:939 ++msgid "Program Headers:" ++msgstr "Programm-Köpfe:" ++ ++#: ../src/readelf.c:941 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:944 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz " ++"MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:984 ++#, c-format ++msgid "\t[Requesting program interpreter: %s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1005 ++msgid "" ++"\n" ++" Section to Segment mapping:\n" ++" Segment Sections..." ++msgstr "" ++ ++#: ../src/readelf.c:1016 ../src/unstrip.c:1823 ../src/unstrip.c:1862 ++#: ../src/unstrip.c:1869 ++#, c-format ++msgid "cannot get program header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:1150 ++#, 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:1155 ++#, 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:1163 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1177 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1328 ++#, c-format ++msgid "" ++"\n" ++"Dynamic segment contains %lu entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Dynamic segment contains %lu entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1340 ++msgid " Type Value\n" ++msgstr "" ++ ++#: ../src/readelf.c:1364 ++#, c-format ++msgid "Shared library: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1369 ++#, c-format ++msgid "Library soname: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1374 ++#, c-format ++msgid "Library rpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1379 ++#, c-format ++msgid "Library runpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1399 ++#, c-format ++msgid "% (bytes)\n" ++msgstr "" ++ ++#: ../src/readelf.c:1509 ../src/readelf.c:1695 ++#, c-format ++msgid "" ++"\n" ++"Invalid symbol table at offset %#0\n" ++msgstr "" ++ ++#: ../src/readelf.c:1527 ../src/readelf.c:1712 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#. 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. ++#: ../src/readelf.c:1542 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1552 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1554 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1607 ../src/readelf.c:1618 ../src/readelf.c:1631 ++#: ../src/readelf.c:1649 ../src/readelf.c:1661 ../src/readelf.c:1780 ++#: ../src/readelf.c:1792 ../src/readelf.c:1806 ../src/readelf.c:1825 ++#: ../src/readelf.c:1838 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1619 ../src/readelf.c:1793 ../src/objdump.c:379 ++msgid "INVALID SYMBOL" ++msgstr "" ++ ++#: ../src/readelf.c:1650 ../src/readelf.c:1826 ../src/objdump.c:394 ++msgid "INVALID SECTION" ++msgstr "" ++ ++#: ../src/readelf.c:1724 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1726 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1927 ++#, 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:1933 ++#, 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:1943 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1945 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1965 ++#, c-format ++msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++msgstr "" ++ ++#: ../src/readelf.c:2053 ++#, c-format ++msgid "bad dynamic symbol" ++msgstr "" ++ ++#: ../src/readelf.c:2135 ++msgid "none" ++msgstr "keine" ++ ++#: ../src/readelf.c:2152 ++msgid "| " ++msgstr "| " ++ ++#: ../src/readelf.c:2177 ++#, c-format ++msgid "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2200 ++#, fuzzy, c-format ++msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" ++msgstr " %#06x: Version: %hu Datei: %s Cnt: %hu\n" ++ ++#: ../src/readelf.c:2213 ++#, c-format ++msgid " %#06x: Name: %s Flags: %s Version: %hu\n" ++msgstr " %#06x: Name: %s Flags: %s Version: %hu\n" ++ ++#: ../src/readelf.c:2244 ++#, c-format ++msgid "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2274 ++#, c-format ++msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2289 ++#, c-format ++msgid " %#06x: Parent %d: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2521 ++#, c-format ++msgid "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgid_plural "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2551 ++msgid " 0 *local* " ++msgstr " 0 *lokal* " ++ ++#: ../src/readelf.c:2556 ++msgid " 1 *global* " ++msgstr " 1 *global* " ++ ++#: ../src/readelf.c:2587 ++#, c-format ++msgid "" ++"\n" ++"Histogram for bucket list length in section [%2u] '%s' (total of %d " ++"bucket):\n" ++" Addr: %#0* Offset: %#08 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* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2610 ++#, c-format ++msgid " Length Number % of total Coverage\n" ++msgstr "" ++ ++#: ../src/readelf.c:2612 ++#, c-format ++msgid " 0 %6 %5.1f%%\n" ++msgstr " 0 %6 %5.1f%%\n" ++ ++#: ../src/readelf.c:2619 ++#, c-format ++msgid "%7d %6 %5.1f%% %5.1f%%\n" ++msgstr "%7d %6 %5.1f%% %5.1f%%\n" ++ ++#: ../src/readelf.c:2632 ++#, c-format ++msgid "" ++" Average number of tests: successful lookup: %f\n" ++" unsuccessful lookup: %f\n" ++msgstr "" ++ ++#: ../src/readelf.c:2650 ../src/readelf.c:2692 ../src/readelf.c:2733 ++#, c-format ++msgid "cannot get data for section %d: %s" ++msgstr "" ++ ++#: ../src/readelf.c:2787 ++#, c-format ++msgid "" ++" Symbol Bias: %u\n" ++" Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:2861 ++#, c-format ++msgid "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2875 ++msgid "" ++" Library Time Stamp Checksum Version " ++"Flags" ++msgstr "" ++ ++#: ../src/readelf.c:2925 ++#, c-format ++msgid "" ++"\n" ++"Object attributes section [%2zu] '%s' of % bytes at offset %" ++"#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:2941 ++msgid " Owner Size\n" ++msgstr "" ++ ++#: ../src/readelf.c:2967 ++#, c-format ++msgid " %-13s %4\n" ++msgstr " %-13s %4\n" ++ ++#: ../src/readelf.c:2999 ++#, c-format ++msgid " %-4u %12\n" ++msgstr " %-4u %12\n" ++ ++#. Tag_File ++#: ../src/readelf.c:3004 ++#, c-format ++msgid " File: %11\n" ++msgstr " File: %11\n" ++ ++#: ../src/readelf.c:3039 ++#, c-format ++msgid " %s: %, %s\n" ++msgstr " %s: %, %s\n" ++ ++#: ../src/readelf.c:3042 ++#, c-format ++msgid " %s: %\n" ++msgstr " %s: %\n" ++ ++#: ../src/readelf.c:3045 ++#, c-format ++msgid " %s: %s\n" ++msgstr " %s: %s\n" ++ ++#: ../src/readelf.c:3052 ++#, c-format ++msgid " %u: %\n" ++msgstr " %u: %\n" ++ ++#: ../src/readelf.c:3055 ++#, c-format ++msgid " %u: %s\n" ++msgstr " %u: %s\n" ++ ++#: ../src/readelf.c:3091 ++#, c-format ++msgid "%s+%# <%s+%#>" ++msgstr "%s+%# <%s+%#>" ++ ++#: ../src/readelf.c:3094 ++#, c-format ++msgid "%s+%#0* <%s+%#>" ++msgstr "%s+%#0* <%s+%#>" ++ ++#: ../src/readelf.c:3099 ++#, c-format ++msgid "%# <%s+%#>" ++msgstr "%# <%s+%#>" ++ ++#: ../src/readelf.c:3102 ++#, c-format ++msgid "%#0* <%s+%#>" ++msgstr "%#0* <%s+%#>" ++ ++#: ../src/readelf.c:3108 ++#, c-format ++msgid "%s+%# <%s>" ++msgstr "%s+%# <%s>" ++ ++#: ../src/readelf.c:3111 ++#, c-format ++msgid "%s+%#0* <%s>" ++msgstr "%s+%#0* <%s>" ++ ++#: ../src/readelf.c:3115 ++#, c-format ++msgid "%# <%s>" ++msgstr "%# <%s>" ++ ++#: ../src/readelf.c:3118 ++#, c-format ++msgid "%#0* <%s>" ++msgstr "%#0* <%s>" ++ ++#: ../src/readelf.c:3123 ++#, c-format ++msgid "%s+%#" ++msgstr "%s+%#" ++ ++#: ../src/readelf.c:3126 ++#, c-format ++msgid "%s+%#0*" ++msgstr "%s+%#0*" ++ ++#: ../src/readelf.c:3234 ++#, c-format ++msgid "unknown tag %hx" ++msgstr "unbekannter Tag %hx" ++ ++#: ../src/readelf.c:3236 ++#, c-format ++msgid "unknown user tag %hx" ++msgstr "unbekannter Benutzer-Tag %hx" ++ ++#: ../src/readelf.c:3446 ++#, c-format ++msgid "unknown attribute %hx" ++msgstr "unbekanntes Attribut %hx" ++ ++#: ../src/readelf.c:3449 ++#, c-format ++msgid "unknown user attribute %hx" ++msgstr "unbekanntes Benutzer-Attribut %hx" ++ ++#: ../src/readelf.c:3495 ++#, c-format ++msgid "unknown form %" ++msgstr "unbekannte Form %" ++ ++#: ../src/readelf.c:4111 ++#, c-format ++msgid "%*s[%4] %s \n" ++msgstr "" ++ ++#: ../src/readelf.c:4124 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [ Code]\n" ++msgstr "" ++ ++#: ../src/readelf.c:4131 ++#, c-format ++msgid "" ++"\n" ++"Abbreviation section at offset %:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4144 ++#, c-format ++msgid " *** error while reading abbreviation: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4160 ++#, c-format ++msgid " [%5u] offset: %, children: %s, tag: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4163 ++msgid "yes" ++msgstr "ja" ++ ++#: ../src/readelf.c:4163 ++msgid "no" ++msgstr "nein" ++ ++#: ../src/readelf.c:4199 ++#, c-format ++msgid "cannot get .debug_aranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4204 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entry:\n" ++msgid_plural "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:4234 ++#, c-format ++msgid " [%*zu] ???\n" ++msgstr " [%*zu] ???\n" ++ ++#: ../src/readelf.c:4236 ++#, c-format ++msgid "" ++" [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" ++msgstr "" ++ ++#: ../src/readelf.c:4255 ++#, c-format ++msgid "cannot get .debug_ranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4260 ../src/readelf.c:4717 ../src/readelf.c:5366 ++#: ../src/readelf.c:5811 ../src/readelf.c:5906 ../src/readelf.c:6078 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4274 ../src/readelf.c:5825 ++#, c-format ++msgid " [%6tx] \n" ++msgstr "" ++ ++#: ../src/readelf.c:4296 ../src/readelf.c:5847 ++#, c-format ++msgid " [%6tx] base address %s\n" ++msgstr "" ++ ++#. We have an address range entry. ++#. First address range entry in a list. ++#: ../src/readelf.c:4307 ++#, c-format ++msgid " [%6tx] %s..%s\n" ++msgstr " [%6tx] %s..%s\n" ++ ++#: ../src/readelf.c:4309 ++#, c-format ++msgid " %s..%s\n" ++msgstr " %s..%s\n" ++ ++#: ../src/readelf.c:4706 ../src/readelf.c:6144 ../src/readelf.c:6246 ++#, c-format ++msgid "cannot get %s content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4713 ++#, c-format ++msgid "" ++"\n" ++"Call frame information section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4740 ../src/readelf.c:5400 ++#, c-format ++msgid "invalid data in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:4762 ++#, c-format ++msgid "" ++"\n" ++" [%6tx] Zero terminator\n" ++msgstr "" ++ ++#: ../src/readelf.c:4840 ++msgid "FDE address encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4846 ++msgid "LSDA pointer encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4891 ++#, c-format ++msgid "invalid augmentation encoding" ++msgstr "" ++ ++#: ../src/readelf.c:4962 ++#, c-format ++msgid " (offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:4969 ++#, c-format ++msgid " (end offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:4996 ++#, c-format ++msgid " %-26sLSDA pointer: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:5042 ++#, c-format ++msgid "cannot get attribute code: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5050 ++#, c-format ++msgid "cannot get attribute form: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5063 ++#, c-format ++msgid "cannot get attribute value: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5245 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [Offset]\n" ++msgstr "" ++ ++#: ../src/readelf.c:5270 ++#, c-format ++msgid "" ++" Compilation unit at offset %:\n" ++" Version: %, Abbreviation section offset: %, Address size: %" ++", Offset size: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5288 ++#, c-format ++msgid "cannot get DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5299 ++#, c-format ++msgid "cannot get DIE offset: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5307 ++#, c-format ++msgid "cannot get tag of DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5336 ++#, c-format ++msgid "cannot get next DIE: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5343 ++#, c-format ++msgid "cannot get next DIE: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5378 ++#, c-format ++msgid "cannot get line data section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5391 ++#, c-format ++msgid "" ++"\n" ++"Table at offset %Zu:\n" ++msgstr "" ++ ++#. Print what we got so far. ++#: ../src/readelf.c:5443 ++#, c-format ++msgid "" ++"\n" ++" Length: %\n" ++" DWARF version: %\n" ++" Prologue length: %\n" ++" Minimum instruction length: %\n" ++" Initial value if '%s': %\n" ++" Line base: %\n" ++" Line range: %\n" ++" Opcode base: %\n" ++"\n" ++"Opcodes:\n" ++msgstr "" ++ ++#: ../src/readelf.c:5462 ++#, c-format ++msgid "invalid data at offset %tu in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:5477 ++#, c-format ++msgid " [%*] %hhu argument\n" ++msgid_plural " [%*] %hhu arguments\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5485 ++msgid "" ++"\n" ++"Directory table:" ++msgstr "" ++ ++#: ../src/readelf.c:5501 ++msgid "" ++"\n" ++"File name table:\n" ++" Entry Dir Time Size Name" ++msgstr "" ++ ++#: ../src/readelf.c:5530 ++msgid "" ++"\n" ++"Line number statements:" ++msgstr "" ++ ++#: ../src/readelf.c:5591 ++#, c-format ++msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" ++msgstr "" ++ ++#: ../src/readelf.c:5611 ++#, c-format ++msgid " extended opcode %u: " ++msgstr "" ++ ++#: ../src/readelf.c:5616 ++msgid "end of sequence" ++msgstr "" ++ ++#: ../src/readelf.c:5631 ++#, c-format ++msgid "set address to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5652 ++#, c-format ++msgid "define new file: dir=%u, mtime=%, length=%, name=%s\n" ++msgstr "" ++ ++#. Unknown, ignore it. ++#: ../src/readelf.c:5661 ++msgid "unknown opcode" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5673 ++msgid " copy" ++msgstr "" ++ ++#: ../src/readelf.c:5683 ++#, c-format ++msgid "advance address by %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5694 ++#, c-format ++msgid " advance line by constant %d to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5702 ++#, c-format ++msgid " set file to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5712 ++#, c-format ++msgid " set column to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5719 ++#, c-format ++msgid " set '%s' to %\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5725 ++msgid " set basic block flag" ++msgstr "" ++ ++#: ../src/readelf.c:5735 ++#, c-format ++msgid "advance address by constant %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5751 ++#, c-format ++msgid "advance address by fixed value %u to %s\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5760 ++msgid " set prologue end flag" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5765 ++msgid " set epilogue begin flag" ++msgstr "" ++ ++#. 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. ++#: ../src/readelf.c:5774 ++#, c-format ++msgid " unknown opcode with % parameter:" ++msgid_plural " unknown opcode with % parameters:" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5806 ++#, c-format ++msgid "cannot get .debug_loc content: %s" ++msgstr "" ++ ++#. First entry in a list. ++#: ../src/readelf.c:5861 ++#, c-format ++msgid " [%6tx] %s..%s" ++msgstr " [%6tx] %s..%s" ++ ++#: ../src/readelf.c:5863 ++#, c-format ++msgid " %s..%s" ++msgstr " %s..%s" ++ ++#: ../src/readelf.c:5916 ++#, c-format ++msgid "cannot get macro information section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5995 ++#, c-format ++msgid "%*s*** non-terminated string at end of section" ++msgstr "" ++ ++#: ../src/readelf.c:6063 ++#, c-format ++msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6102 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" %*s String\n" ++msgstr "" ++ ++#: ../src/readelf.c:6116 ++#, c-format ++msgid " *** error while reading strings: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6136 ++#, c-format ++msgid "" ++"\n" ++"Call frame search table section [%2zu] '.eh_frame_hdr':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6238 ++#, c-format ++msgid "" ++"\n" ++"Exception handling table section [%2zu] '.gcc_except_table':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6261 ++#, c-format ++msgid " LPStart encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6273 ++#, c-format ++msgid " TType encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6287 ++#, c-format ++msgid " Call site encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6300 ++msgid "" ++"\n" ++" Call site table:" ++msgstr "" ++ ++#: ../src/readelf.c:6314 ++#, c-format ++msgid "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:6374 ++#, c-format ++msgid "invalid TType encoding" ++msgstr "" ++ ++#: ../src/readelf.c:6397 ++#, c-format ++msgid "cannot get debug context descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6532 ../src/readelf.c:7110 ++#, c-format ++msgid "cannot convert core note data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6837 ++#, c-format ++msgid "" ++"\n" ++"%*s... ..." ++msgstr "" ++ ++#: ../src/readelf.c:6879 ++#, c-format ++msgid "unable to handle register number %d" ++msgstr "" ++ ++#: ../src/readelf.c:7026 ++#, c-format ++msgid "cannot get register info: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7050 ++#, c-format ++msgid "cannot register info: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7208 ++msgid " Owner Data size Type\n" ++msgstr "" ++ ++#: ../src/readelf.c:7226 ++#, c-format ++msgid " %-13.*s %9 %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:7257 ++#, c-format ++msgid "cannot get content of note section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7284 ++#, c-format ++msgid "" ++"\n" ++"Note section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7307 ++#, c-format ++msgid "" ++"\n" ++"Note segment of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7353 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no data to dump.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7359 ../src/readelf.c:7381 ++#, c-format ++msgid "cannot get data for section [%Zu] '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7363 ++#, c-format ++msgid "" ++"\n" ++"Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7376 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' is empty.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7385 ++#, c-format ++msgid "" ++"\n" ++"String section [%Zu] '%s' contains % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7432 ++#, c-format ++msgid "" ++"\n" ++"section [%lu] does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7458 ++#, c-format ++msgid "" ++"\n" ++"section '%s' does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7519 ++#, c-format ++msgid "cannot get symbol index of archive '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7522 ++#, c-format ++msgid "" ++"\n" ++"Archive '%s' has no symbol index\n" ++msgstr "" ++ ++#: ../src/readelf.c:7526 ++#, c-format ++msgid "" ++"\n" ++"Index of archive '%s' has %Zu entries:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7544 ++#, c-format ++msgid "cannot extract member at offset %Zu in '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7549 ++#, 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 "Genau wie `--format=sysv'" ++ ++#: ../src/size.c:71 ++msgid "Same as `--format=bsd'" ++msgstr "Genau wie `--format=bsd'" ++ ++#: ../src/size.c:74 ++msgid "Same as `--radix=10'" ++msgstr "Genau wie `--radix=10'" ++ ++#: ../src/size.c:75 ++msgid "Same as `--radix=8'" ++msgstr "Genau wie `--radix=8'" ++ ++#: ../src/size.c:76 ++msgid "Same as `--radix=16'" ++msgstr "Genau wie `--radix=16'" ++ ++#: ../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 "" ++ ++#. Short description of program. ++#: ../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 "Ungültiges Format: %s" ++ ++#: ../src/size.c:280 ++#, c-format ++msgid "Invalid radix: %s" ++msgstr "" ++ ++#: ../src/size.c:339 ++#, c-format ++msgid "%s: file format not recognized" ++msgstr "" ++ ++#: ../src/size.c:446 ../src/size.c:589 ++#, c-format ++msgid " (ex %s)" ++msgstr "" ++ ++#: ../src/size.c:614 ++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 "" ++ ++#. Short description of program. ++#: ../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 ../src/unstrip.c:124 ++#, c-format ++msgid "-o option specified twice" ++msgstr "" ++ ++#: ../src/strip.c:259 ++#, c-format ++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:868 ../src/strip.c:955 ++#, c-format ++msgid "while generating output file: %s" ++msgstr "" ++ ++#: ../src/strip.c:928 ../src/strip.c:1667 ++#, c-format ++msgid "%s: error while creating ELF header: %s" ++msgstr "" ++ ++#: ../src/strip.c:942 ++#, c-format ++msgid "while preparing output for '%s'" ++msgstr "" ++ ++#: ../src/strip.c:993 ../src/strip.c:1049 ++#, c-format ++msgid "while create section header section: %s" ++msgstr "" ++ ++#: ../src/strip.c:999 ++#, c-format ++msgid "cannot allocate section data: %s" ++msgstr "" ++ ++#: ../src/strip.c:1058 ++#, c-format ++msgid "while create section header string table: %s" ++msgstr "" ++ ++#: ../src/strip.c:1592 ../src/strip.c:1689 ++#, c-format ++msgid "while writing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1603 ++#, c-format ++msgid "while creating '%s'" ++msgstr "" ++ ++#: ../src/strip.c:1615 ++#, c-format ++msgid "while computing checksum for debug information" ++msgstr "" ++ ++#: ../src/strip.c:1675 ++#, c-format ++msgid "%s: error while reading the file: %s" ++msgstr "" ++ ++#: ../src/strip.c:1721 ../src/strip.c:1728 ++#, c-format ++msgid "error while finishing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1751 ../src/strip.c:1808 ++#, 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 "DATEI" ++ ++#: ../src/ld.c:93 ++msgid "Start a group." ++msgstr "Eine Gruppe starten." ++ ++#: ../src/ld.c:94 ++msgid "End a group." ++msgstr "Eine Gruppe beenden." ++ ++#: ../src/ld.c:95 ++msgid "PATH" ++msgstr "PFAD" ++ ++#: ../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 "Genau wie --whole-archive." ++ ++#: ../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 "ADRESSE" ++ ++#: ../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 "" ++ ++#. Short description of program. ++#: ../src/ld.c:197 ++msgid "Combine object and archive files." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ld.c:200 ++msgid "[FILE]..." ++msgstr "[DATEI]..." ++ ++#: ../src/ld.c:333 ++#, c-format ++msgid "At least one input file needed" ++msgstr "Mindestens eine Eingabedatei benötigt" ++ ++#: ../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 "-( ohne Übereinstimmung -)" ++ ++#: ../src/ld.c:572 ../src/ld.c:610 ++#, c-format ++msgid "only one option of -G and -r is allowed" ++msgstr "nur eine Option aus -G und -r erlaubt" ++ ++#: ../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 "Mehr als ein Name der Ausgabedatei angegeben." ++ ++#: ../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 "-) ohne Übereinstimmung -(" ++ ++#: ../src/ld.c:1046 ++#, c-format ++msgid "unknown option '-%c %s'" ++msgstr "unbekannte Option '-%c %s'" ++ ++#: ../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:1446 ++#, c-format ++msgid "cannot read version script '%s'" ++msgstr "" ++ ++#. The symbol is already defined and now again ++#. in the linker script. This is an error. ++#: ../src/ld.c:1512 ../src/ld.c:1551 ++#, 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: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 % in %s to % in %s" ++msgstr "" ++ ++#: ../src/ldgeneric.c:677 ++#, c-format ++msgid "(%s+%#): multiple definition of %s `%s'\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:700 ++#, c-format ++msgid "(%s+%#): first defined here\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:819 ++#, c-format ++msgid "%s: cannot get section group data: %s" ++msgstr "" ++ ++#. If we come here no section group contained the given section ++#. despite the SHF_GROUP flag. This is an error in the input ++#. file. ++#: ../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 "" ++ ++#. This should never happen. ++#: ../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: %" ++"" ++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 "Eingabedatei '%s' ignoriert" ++ ++#. 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. ++#: ../src/ldgeneric.c:2372 ++#, c-format ++msgid "undefined symbol `%s' in %s" ++msgstr "undefiniertes Symbol `%s' in %s" ++ ++#: ../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 '%' 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*" ++msgstr "" ++ ++#: ../src/ldgeneric.c:3690 ++#, c-format ++msgid "no entry symbol specified: defaulting to %#0*" ++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 "konnte Versionierungsabschnitt nicht erstellen: %s" ++ ++#: ../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 "konnte Versionierungsdaten nicht erstellen: %s" ++ ++#: ../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 "konnte Programm-Kopf nicht erstellen: %s" ++ ++#: ../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 ../src/unstrip.c:1807 ++#, 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 "" ++ ++#. This cannot be implemented generally. There should have been a ++#. machine dependent implementation and we should never have arrived ++#. here. ++#: ../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/i386_ld.c:210 ++#, c-format ++msgid "cannot allocate PLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:232 ++#, c-format ++msgid "cannot allocate PLTREL section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:253 ++#, c-format ++msgid "cannot allocate GOT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:274 ++#, c-format ++msgid "cannot allocate GOTPLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:661 ++#, c-format ++msgid "initial-executable TLS relocation cannot be used " ++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 "Standard-Sichtbarkeit auf lokal und global gesetzt" ++ ++#: ../src/elflint.c:71 ++msgid "Be extremely strict, flag level 2 features." ++msgstr "" ++ ++#: ../src/elflint.c:72 ++msgid "Do not print anything if successful" ++msgstr "Gebe nichts aus, wenn erfolgreich" ++ ++#: ../src/elflint.c:73 ++msgid "Binary is a separate debuginfo file" ++msgstr "" ++ ++#: ../src/elflint.c:75 ++msgid "" ++"Binary has been created with GNU ld and is therefore known to be broken in " ++"certain ways" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elflint.c:81 ++msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." ++msgstr "" ++ ++#: ../src/elflint.c:165 ++#, c-format ++msgid "cannot generate Elf descriptor: %s\n" ++msgstr "kann Elf-Deskriptor nicht erzeugen: %s\n" ++ ++#: ../src/elflint.c:184 ++#, c-format ++msgid "error while closing Elf descriptor: %s\n" ++msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" ++ ++#: ../src/elflint.c:188 ++msgid "No errors" ++msgstr "Keine Fehler" ++ ++#: ../src/elflint.c:301 ++#, c-format ++msgid " error while freeing sub-ELF descriptor: %s\n" ++msgstr "" ++ ++#. We cannot do anything. ++#: ../src/elflint.c:309 ++#, fuzzy, c-format ++msgid "Not an ELF file - it has the wrong magic bytes at the start\n" ++msgstr "Keine ELF-Datei - sie hat die falschen Magic Bytes am Anfang\n" ++ ++#: ../src/elflint.c:368 ++#, c-format ++msgid "e_ident[%d] == %d is no known class\n" ++msgstr "" ++ ++#: ../src/elflint.c:373 ++#, c-format ++msgid "e_ident[%d] == %d is no known data encoding\n" ++msgstr "" ++ ++#: ../src/elflint.c:377 ++#, c-format ++msgid "unknown ELF header version number e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:382 ++#, c-format ++msgid "unsupported OS ABI e_ident[%d] == '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:388 ++#, c-format ++msgid "unsupport ABI version e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:393 ++#, c-format ++msgid "e_ident[%zu] is not zero\n" ++msgstr "e_ident[%zu] ist nicht null\n" ++ ++#: ../src/elflint.c:398 ++#, c-format ++msgid "unknown object file type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:405 ++#, c-format ++msgid "unknown machine type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:409 ++#, c-format ++msgid "unknown object file version\n" ++msgstr "" ++ ++#: ../src/elflint.c:415 ++#, c-format ++msgid "invalid program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:417 ++#, c-format ++msgid "executables and DSOs cannot have zero program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:421 ++#, c-format ++msgid "invalid number of program header entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:429 ++#, c-format ++msgid "invalid section header table offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:432 ++#, c-format ++msgid "section header table must be present\n" ++msgstr "" ++ ++#: ../src/elflint.c:446 ++#, c-format ++msgid "invalid number of section header table entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:463 ++#, c-format ++msgid "invalid section header index\n" ++msgstr "" ++ ++#: ../src/elflint.c:468 ++#, c-format ++msgid "invalid machine flags: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:475 ../src/elflint.c:492 ++#, c-format ++msgid "invalid ELF header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:478 ../src/elflint.c:495 ++#, c-format ++msgid "invalid program header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:481 ../src/elflint.c:498 ++#, c-format ++msgid "invalid program header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:484 ../src/elflint.c:501 ++#, c-format ++msgid "invalid section header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:487 ../src/elflint.c:504 ++#, c-format ++msgid "invalid section header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:548 ++#, c-format ++msgid "" ++"section [%2d] '%s': section with SHF_GROUP flag set not part of a section " ++"group\n" ++msgstr "" ++ ++#: ../src/elflint.c:552 ++#, c-format ++msgid "" ++"section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n" ++msgstr "" ++ ++#: ../src/elflint.c:568 ../src/elflint.c:1404 ../src/elflint.c:1454 ++#: ../src/elflint.c:1563 ../src/elflint.c:2157 ../src/elflint.c:2671 ++#: ../src/elflint.c:2832 ../src/elflint.c:2962 ../src/elflint.c:3134 ++#: ../src/elflint.c:4031 ++#, c-format ++msgid "section [%2d] '%s': cannot get section data\n" ++msgstr "" ++ ++#: ../src/elflint.c:581 ../src/elflint.c:1570 ++#, 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:604 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol table cannot have more than one extended index " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:615 ++#, c-format ++msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" ++msgstr "" ++ ++#: ../src/elflint.c:624 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:629 ../src/elflint.c:632 ../src/elflint.c:635 ++#: ../src/elflint.c:638 ../src/elflint.c:641 ../src/elflint.c:644 ++#, c-format ++msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:647 ++#, c-format ++msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:657 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:666 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid name value\n" ++msgstr "" ++ ++#: ../src/elflint.c:679 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: too large section index but no extended " ++"section index section\n" ++msgstr "" ++ ++#: ../src/elflint.c:685 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " ++"st_shndx (%)\n" ++msgstr "" ++ ++#. || sym->st_shndx > SHN_HIRESERVE always false ++#: ../src/elflint.c:697 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:705 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown type\n" ++msgstr "" ++ ++#: ../src/elflint.c:709 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" ++msgstr "" ++ ++#: ../src/elflint.c:717 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" ++msgstr "" ++ ++#: ../src/elflint.c:721 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:725 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:757 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:763 ../src/elflint.c:788 ../src/elflint.c:831 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu does not fit completely in referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:772 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " ++"SHF_TLS flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:782 ../src/elflint.c:824 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:809 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:817 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:844 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:851 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: non-local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:858 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" ++msgstr "" ++ ++#: ../src/elflint.c:908 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%" ++"2d]\n" ++msgstr "" ++ ++#: ../src/elflint.c:915 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#. 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. ++#: ../src/elflint.c:931 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " ++"match %s section address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:938 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " ++"match %s section size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:946 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:962 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " ++"segment address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:969 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " ++"segment size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:982 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" ++"default visibility\n" ++msgstr "" ++ ++#: ../src/elflint.c:986 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" ++msgstr "" ++ ++#: ../src/elflint.c:1031 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1040 ../src/elflint.c:1092 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1065 ../src/elflint.c:1117 ++#, c-format ++msgid "" ++"section [%2d] '%s': relative relocations after index %d as specified by " ++"DT_RELCOUNT\n" ++msgstr "" ++ ++#: ../src/elflint.c:1071 ../src/elflint.c:1123 ++#, c-format ++msgid "" ++"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " ++"specified %d relative relocations\n" ++msgstr "" ++ ++#: ../src/elflint.c:1083 ++#, c-format ++msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1165 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1178 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1186 ++#, c-format ++msgid "section [%2d] '%s': sh_info should be zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1193 ++#, c-format ++msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" ++msgstr "" ++ ++#: ../src/elflint.c:1200 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" ++msgstr "" ++ ++#: ../src/elflint.c:1260 ++#, c-format ++msgid "text relocation flag set but there is no read-only segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1287 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1295 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: relocation type invalid for the file " ++"type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1303 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1321 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " ++"be used with %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1338 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1353 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: copy relocation against symbol of type %" ++"s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1374 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: read-only section modified but text " ++"relocation flag not set\n" ++msgstr "" ++ ++#: ../src/elflint.c:1389 ++#, c-format ++msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" ++msgstr "" ++ ++#: ../src/elflint.c:1428 ../src/elflint.c:1478 ++#, c-format ++msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1558 ++#, c-format ++msgid "more than one dynamic section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1576 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" ++msgstr "" ++ ++#: ../src/elflint.c:1581 ../src/elflint.c:1873 ++#, c-format ++msgid "section [%2d] '%s': sh_info not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1591 ++#, c-format ++msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1599 ++#, c-format ++msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:1606 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: unknown tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:1617 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1627 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" ++msgstr "" ++ ++#: ../src/elflint.c:1645 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" ++msgstr "" ++ ++#: ../src/elflint.c:1667 ++#, 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:1710 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1725 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must be valid offset in section [%" ++"2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:1745 ../src/elflint.c:1773 ++#, c-format ++msgid "section [%2d] '%s': contains %s entry but not %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1757 ++#, c-format ++msgid "section [%2d] '%s': mandatory tag %s not present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1766 ++#, c-format ++msgid "section [%2d] '%s': no hash section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1781 ../src/elflint.c:1788 ++#, c-format ++msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1798 ../src/elflint.c:1802 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" ++msgstr "" ++ ++#: ../src/elflint.c:1808 ++#, c-format ++msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" ++msgstr "" ++ ++#: ../src/elflint.c:1819 ../src/elflint.c:1823 ../src/elflint.c:1827 ++#: ../src/elflint.c:1831 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:1843 ++#, c-format ++msgid "" ++"section [%2d] '%s': only relocatable files can have extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1853 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index section not for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1858 ++#, c-format ++msgid "cannot get data for symbol section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1861 ++#, c-format ++msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" ++msgstr "" ++ ++#: ../src/elflint.c:1868 ++#, c-format ++msgid "section [%2d] '%s': extended index table too small for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1883 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " ++"same symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1894 ++#, c-format ++msgid "symbol 0 should have zero extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1906 ++#, c-format ++msgid "cannot get data for symbol %zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:1911 ++#, c-format ++msgid "extended section index is % but symbol index is not XINDEX\n" ++msgstr "" ++ ++#: ../src/elflint.c:1927 ../src/elflint.c:1968 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:1939 ../src/elflint.c:1980 ++#, c-format ++msgid "section [%2d] '%s': chain array too large\n" ++msgstr "" ++ ++#: ../src/elflint.c:1948 ../src/elflint.c:1989 ++#, c-format ++msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1954 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1995 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference % out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2010 ++#, c-format ++msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2021 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected at " ++"least%ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2029 ++#, c-format ++msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2061 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" ++msgstr "" ++ ++#: ../src/elflint.c:2082 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " ++"undefined\n" ++msgstr "" ++ ++#: ../src/elflint.c:2093 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" ++msgstr "" ++ ++#: ../src/elflint.c:2124 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2129 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2135 ++#, c-format ++msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2148 ++#, c-format ++msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:2166 ++#, c-format ++msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2174 ++#, c-format ++msgid "section [%2d] '%s': hash table entry size incorrect\n" ++msgstr "" ++ ++#: ../src/elflint.c:2179 ++#, c-format ++msgid "section [%2d] '%s': not marked to be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:2184 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table has not even room for initial administrative " ++"entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:2232 ++#, c-format ++msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" ++msgstr "" ++ ++#: ../src/elflint.c:2310 ../src/elflint.c:2314 ++#, c-format ++msgid "section [%2zu] '%s': reference to symbol index 0\n" ++msgstr "" ++ ++#: ../src/elflint.c:2321 ++#, 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:2333 ++#, 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:2349 ++#, c-format ++msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:2369 ++#, c-format ++msgid "" ++"section [%2d] '%s': section groups only allowed in relocatable object files\n" ++msgstr "" ++ ++#: ../src/elflint.c:2380 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol table: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2385 ++#, c-format ++msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2391 ++#, c-format ++msgid "section [%2d] '%s': invalid symbol index in sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:2396 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:2403 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol for signature\n" ++msgstr "" ++ ++#: ../src/elflint.c:2408 ++#, c-format ++msgid "section [%2d] '%s': signature symbol canot be empty string\n" ++msgstr "" ++ ++#: ../src/elflint.c:2414 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not set correctly\n" ++msgstr "" ++ ++#: ../src/elflint.c:2420 ++#, c-format ++msgid "section [%2d] '%s': cannot get data: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2429 ++#, c-format ++msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2434 ++#, c-format ++msgid "section [%2d] '%s': section group without flags word\n" ++msgstr "" ++ ++#: ../src/elflint.c:2440 ++#, c-format ++msgid "section [%2d] '%s': section group without member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2444 ++#, c-format ++msgid "section [%2d] '%s': section group with only one member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2455 ++#, c-format ++msgid "section [%2d] '%s': unknown section group flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:2467 ++#, c-format ++msgid "section [%2d] '%s': section index %Zu out of range\n" ++msgstr "" ++ ++#: ../src/elflint.c:2476 ++#, c-format ++msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2483 ++#, c-format ++msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2489 ++#, c-format ++msgid "" ++"section [%2d] '%s': element %Zu references section [%2d] '%s' without " ++"SHF_GROUP flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:2496 ++#, c-format ++msgid "section [%2d] '%s' is contained in more than one section group\n" ++msgstr "" ++ ++#: ../src/elflint.c:2685 ++#, 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:2696 ++#, c-format ++msgid "" ++"section [%2d] '%s' has different number of entries than symbol table [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2712 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: cannot read version data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2728 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" ++msgstr "" ++ ++#: ../src/elflint.c:2736 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2750 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2755 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for defined version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2765 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for requested version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2817 ++#, c-format ++msgid "more than one version reference section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2825 ../src/elflint.c:2954 ++#, c-format ++msgid "section [%2d] '%s': sh_link does not link to string table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2848 ../src/elflint.c:3006 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong version %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2854 ../src/elflint.c:3012 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2862 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid file reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2870 ++#, c-format ++msgid "section [%2d] '%s': entry %d references unknown dependency\n" ++msgstr "" ++ ++#: ../src/elflint.c:2882 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:2889 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " ++"reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2896 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %" ++"#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:2906 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " ++"name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2917 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" ++msgstr "" ++ ++#: ../src/elflint.c:2933 ../src/elflint.c:3091 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:2946 ++#, c-format ++msgid "more than one version definition section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2991 ++#, c-format ++msgid "section [%2d] '%s': more than one BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:2995 ++#, c-format ++msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" ++msgstr "" ++ ++#: ../src/elflint.c:3001 ++#, c-format ++msgid "section [%2d] '%s': entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3025 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:3032 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:3041 ++#, c-format ++msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3060 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3075 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3097 ++#, c-format ++msgid "section [%2d] '%s': no BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3113 ++#, c-format ++msgid "section [%2d] '%s': unknown parent version '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3126 ++#, c-format ++msgid "section [%2d] '%s': empty object attributes section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3147 ++#, c-format ++msgid "section [%2d] '%s': unrecognized attribute format\n" ++msgstr "" ++ ++#: ../src/elflint.c:3163 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3172 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3184 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" ++msgstr "" ++ ++#: ../src/elflint.c:3201 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3210 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3219 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" ++msgstr "" ++ ++#: ../src/elflint.c:3232 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/elflint.c:3243 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3261 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3272 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" ++msgstr "" ++ ++#: ../src/elflint.c:3285 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3289 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3299 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" ++msgstr "" ++ ++#: ../src/elflint.c:3305 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3394 ++#, c-format ++msgid "cannot get section header of zeroth section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3398 ++#, c-format ++msgid "zeroth section has nonzero name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3400 ++#, c-format ++msgid "zeroth section has nonzero type\n" ++msgstr "" ++ ++#: ../src/elflint.c:3402 ++#, c-format ++msgid "zeroth section has nonzero flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:3404 ++#, c-format ++msgid "zeroth section has nonzero address\n" ++msgstr "" ++ ++#: ../src/elflint.c:3406 ++#, c-format ++msgid "zeroth section has nonzero offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:3408 ++#, c-format ++msgid "zeroth section has nonzero info field\n" ++msgstr "" ++ ++#: ../src/elflint.c:3410 ++#, c-format ++msgid "zeroth section has nonzero align value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3412 ++#, c-format ++msgid "zeroth section has nonzero entry size value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3415 ++#, c-format ++msgid "" ++"zeroth section has nonzero size value while ELF header has nonzero shnum " ++"value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3419 ++#, c-format ++msgid "" ++"zeroth section has nonzero link value while ELF header does not signal " ++"overflow in shstrndx\n" ++msgstr "" ++ ++#: ../src/elflint.c:3436 ++#, c-format ++msgid "cannot get section header for section [%2zu] '%s': %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3445 ++#, c-format ++msgid "section [%2zu]: invalid name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3472 ++#, c-format ++msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3488 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3505 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3523 ++#, c-format ++msgid "section [%2zu] '%s' present in object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3529 ../src/elflint.c:3561 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3534 ../src/elflint.c:3566 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " ++"segments\n" ++msgstr "" ++ ++#: ../src/elflint.c:3542 ++#, c-format ++msgid "" ++"section [%2zu] '%s' is extension section index table in non-object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3585 ++#, c-format ++msgid "section [%2zu] '%s': size not multiple of entry size\n" ++msgstr "" ++ ++#: ../src/elflint.c:3590 ++#, c-format ++msgid "cannot get section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:3600 ++#, c-format ++msgid "section [%2zu] '%s' has unsupported type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3614 ++#, c-format ++msgid "" ++"section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3621 ++#, c-format ++msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3629 ++#, c-format ++msgid "section [%2zu] '%s': thread-local data sections address not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3637 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in link value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3642 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in info value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3649 ++#, c-format ++msgid "section [%2zu] '%s': strings flag set without merge flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3654 ++#, c-format ++msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3672 ++#, c-format ++msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3681 ++#, c-format ++msgid "section [%2zu] '%s' is both executable and writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:3708 ++#, c-format ++msgid "" ++"section [%2zu] '%s' not fully contained in segment of program header entry %" ++"d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3716 ++#, 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:3725 ++#, 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:3736 ++#, c-format ++msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3746 ++#, c-format ++msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3756 ++#, c-format ++msgid "" ++"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3762 ++#, 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:3770 ++#, c-format ++msgid "" ++"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:3821 ++#, c-format ++msgid "more than one version symbol table present\n" ++msgstr "" ++ ++#: ../src/elflint.c:3844 ++#, c-format ++msgid "INTERP program header entry but no .interp section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3855 ++#, c-format ++msgid "" ++"loadable segment [%u] is executable but contains no executable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3861 ++#, c-format ++msgid "loadable segment [%u] is writable but contains no writable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3872 ++#, c-format ++msgid "" ++"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " ++"exist\n" ++msgstr "" ++ ++#: ../src/elflint.c:3885 ++#, c-format ++msgid "duplicate version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3899 ++#, c-format ++msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" ++msgstr "" ++ ++#: ../src/elflint.c:3948 ++#, c-format ++msgid "phdr[%d]: unknown core file note type % at offset %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3952 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown core file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3974 ++#, c-format ++msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3978 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3995 ++#, c-format ++msgid "phdr[%d]: no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4014 ++#, c-format ++msgid "phdr[%d]: cannot get content of note section: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4017 ++#, c-format ++msgid "phdr[%d]: extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4038 ++#, c-format ++msgid "section [%2d] '%s': no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4045 ++#, c-format ++msgid "section [%2d] '%s': cannot get content of note section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4048 ++#, c-format ++msgid "section [%2d] '%s': extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4066 ++#, c-format ++msgid "" ++"only executables, shared objects, and core files can have program headers\n" ++msgstr "" ++ ++#: ../src/elflint.c:4081 ++#, c-format ++msgid "cannot get program header entry %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4090 ++#, c-format ++msgid "program header entry %d: unknown program header entry type %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:4101 ++#, c-format ++msgid "more than one INTERP entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4109 ++#, c-format ++msgid "more than one TLS entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4116 ++#, c-format ++msgid "static executable cannot have dynamic sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:4130 ++#, c-format ++msgid "dynamic section reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4133 ++#, c-format ++msgid "dynamic section size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4143 ++#, c-format ++msgid "more than one GNU_RELRO entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4164 ++#, c-format ++msgid "loadable segment GNU_RELRO applies to is not writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4167 ++#, c-format ++msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:4175 ../src/elflint.c:4198 ++#, c-format ++msgid "%s segment not contained in a loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4204 ++#, c-format ++msgid "program header offset in ELF header and PHDR entry do not match" ++msgstr "" ++ ++#: ../src/elflint.c:4228 ++#, c-format ++msgid "call frame search table reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4231 ++#, c-format ++msgid "call frame search table size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4244 ++#, c-format ++msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4252 ++#, c-format ++msgid "call frame search table must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4255 ++#, c-format ++msgid "section [%2zu] '%s' must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4259 ++#, c-format ++msgid "call frame search table must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4262 ++#, c-format ++msgid "section [%2zu] '%s' must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4267 ++#, c-format ++msgid "call frame search table must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4270 ++#, c-format ++msgid "section [%2zu] '%s' must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4281 ++#, c-format ++msgid "program header entry %d: file size greater than memory size\n" ++msgstr "" ++ ++#: ../src/elflint.c:4288 ++#, c-format ++msgid "program header entry %d: alignment not a power of 2\n" ++msgstr "" ++ ++#: ../src/elflint.c:4291 ++#, c-format ++msgid "" ++"program header entry %d: file offset and virtual address not module of " ++"alignment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4304 ++#, c-format ++msgid "" ++"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " ++"program header entry" ++msgstr "" ++ ++#: ../src/elflint.c:4338 ++#, c-format ++msgid "cannot read ELF header: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4364 ++#, c-format ++msgid "text relocation flag set but not needed\n" ++msgstr "" ++ ++#: ../src/addr2line.c:66 ++msgid "Output selection options:" ++msgstr "" ++ ++#: ../src/addr2line.c:67 ++msgid "Show only base names of source files" ++msgstr "" ++ ++#: ../src/addr2line.c:69 ++msgid "Show absolute file names using compilation directory" ++msgstr "" ++ ++#: ../src/addr2line.c:70 ++msgid "Also show function names" ++msgstr "" ++ ++#: ../src/addr2line.c:71 ++msgid "Also show symbol or section names" ++msgstr "" ++ ++#: ../src/addr2line.c:73 ++msgid "Treat addresses as offsets relative to NAME section." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/addr2line.c:84 ++msgid "" ++"Locate source files and line information for ADDRs (in a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/addr2line.c:88 ++msgid "[ADDR...]" ++msgstr "" ++ ++#: ../src/addr2line.c:405 ++#, fuzzy, c-format ++msgid "Section syntax requires exactly one module" ++msgstr "Abschnitt syntax benötigt genau ein Modul" ++ ++#: ../src/addr2line.c:428 ++#, c-format ++msgid "offset %# lies outside section '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:461 ++#, c-format ++msgid "cannot find symbol '%s'" ++msgstr "Konnte Symbol '%s' nicht finden" ++ ++#: ../src/addr2line.c:466 ++#, c-format ++msgid "offset %# lies outside contents of '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:70 ++msgid "Input Selection:" ++msgstr "" ++ ++#: ../src/findtextrel.c:71 ++msgid "Prepend PATH to all file names" ++msgstr "" ++ ++#: ../src/findtextrel.c:73 ++msgid "Use PATH as root of debuginfo hierarchy" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/findtextrel.c:80 ++msgid "Locate source of text relocations in FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/findtextrel.c:236 ../src/elfcmp.c:578 ../src/ranlib.c:186 ++#, c-format ++msgid "cannot create ELF descriptor for '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:246 ++#, c-format ++msgid "cannot get ELF header '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:257 ++#, c-format ++msgid "'%s' is not a DSO or PIE" ++msgstr "" ++ ++#: ../src/findtextrel.c:274 ++#, c-format ++msgid "getting get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:292 ++#, c-format ++msgid "cannot read dynamic section: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:307 ++#, c-format ++msgid "no text relocations reported in '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:319 ++#, c-format ++msgid "while reading ELF file" ++msgstr "" ++ ++#: ../src/findtextrel.c:328 ../src/findtextrel.c:345 ++#, c-format ++msgid "cannot get program header index at offset %d: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:397 ++#, c-format ++msgid "cannot get section header of section %Zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:409 ++#, c-format ++msgid "cannot get symbol table section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:429 ../src/findtextrel.c:452 ++#, c-format ++msgid "cannot get relocation at index %d in section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:517 ++#, c-format ++msgid "%s not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:570 ++#, c-format ++msgid "" ++"the file containing the function '%s' is not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:577 ../src/findtextrel.c:597 ++#, c-format ++msgid "" ++"the file containing the function '%s' might not be compiled with -fpic/-" ++"fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:585 ++#, 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:605 ++#, c-format ++msgid "" ++"a relocation modifies memory at offset %llu in a write-protected segment\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:69 ++msgid "Control options:" ++msgstr "" ++ ++#: ../src/elfcmp.c:70 ++msgid "" ++"Control treatment of gaps in loadable segments [ignore|match] (default: " ++"ignore)" ++msgstr "" ++ ++#: ../src/elfcmp.c:72 ++msgid "Ignore permutation of buckets in SHT_HASH section" ++msgstr "" ++ ++#: ../src/elfcmp.c:73 ++msgid "Output nothing; yield exit status only" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elfcmp.c:80 ++msgid "Compare relevant parts of two ELF files for equality." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/elfcmp.c:84 ++#, fuzzy ++msgid "FILE1 FILE2" ++msgstr "DATEI1 DATEI2" ++ ++#: ../src/elfcmp.c:140 ++msgid "Invalid number of parameters.\n" ++msgstr "Ungültige Anzahl von Parametern.\n" ++ ++#: ../src/elfcmp.c:168 ../src/elfcmp.c:173 ++#, c-format ++msgid "cannot get ELF header of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:190 ++#, c-format ++msgid "%s %s diff: ELF header" ++msgstr "" ++ ++#: ../src/elfcmp.c:248 ++#, c-format ++msgid "%s %s differ: section header" ++msgstr "" ++ ++#: ../src/elfcmp.c:276 ../src/elfcmp.c:282 ++#, c-format ++msgid "cannot get content of section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:298 ../src/elfcmp.c:304 ++#, c-format ++msgid "cannot get symbol in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:325 ++#, c-format ++msgid "%s %s differ: symbol table [%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:328 ++#, c-format ++msgid "%s %s differ: symbol table [%zu,%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:376 ++#, c-format ++msgid "%s %s differ: section [%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:380 ++#, c-format ++msgid "%s %s differ: section [%zu,%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:396 ++#, c-format ++msgid "%s %s differ: unequal amount of important sections" ++msgstr "" ++ ++#: ../src/elfcmp.c:430 ../src/elfcmp.c:435 ++#, c-format ++msgid "cannot load data of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:454 ../src/elfcmp.c:460 ++#, c-format ++msgid "cannot get program header entry %d of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:466 ++#, c-format ++msgid "%s %s differ: program header %d" ++msgstr "" ++ ++#: ../src/elfcmp.c:491 ++#, c-format ++msgid "%s %s differ: gap" ++msgstr "" ++ ++#: ../src/elfcmp.c:550 ++#, c-format ++msgid "Invalid value '%s' for --gaps parameter." ++msgstr "" ++ ++#: ../src/elfcmp.c:583 ++#, c-format ++msgid "cannot create EBL descriptor for '%s'" ++msgstr "" ++ ++#: ../src/elfcmp.c:601 ++#, c-format ++msgid "cannot get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:611 ++#, c-format ++msgid "cannot get content of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:621 ../src/elfcmp.c:635 ++#, c-format ++msgid "cannot get relocation: %s" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ranlib.c:74 ++msgid "Generate an index to speed access to archives." ++msgstr "Erstelle einen Index zur Beschleunigung des Zugriffs auf Archive." ++ ++#. Strings for arguments in help texts. ++#: ../src/ranlib.c:77 ++msgid "ARCHIVE" ++msgstr "ARCHIV" ++ ++#: ../src/ranlib.c:116 ++#, c-format ++msgid "Archive name required" ++msgstr "Archivname benötigt" ++ ++#: ../src/ranlib.c:194 ++#, c-format ++msgid "'%s' is no archive" ++msgstr "'%s' ist kein Archiv" ++ ++#: ../src/ranlib.c:229 ++#, c-format ++msgid "error while freeing sub-ELF descriptor: %s" ++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 "Alias für --radix=o" ++ ++#. Short description of program. ++#: ../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 "lseek64 fehlgeschlagen" ++ ++#: ../src/strings.c:616 ../src/strings.c:680 ++#, c-format ++msgid "re-mmap failed" ++msgstr "re-mmap fehlgeschlagen" ++ ++#: ../src/strings.c:653 ++#, c-format ++msgid "mprotect failed" ++msgstr "mprotect fehlgeschlagen" ++ ++#: ../src/unstrip.c:77 ++msgid "Match MODULE against file names, not module names" ++msgstr "" ++ ++#: ../src/unstrip.c:78 ++msgid "Silently skip unfindable files" ++msgstr "" ++ ++#: ../src/unstrip.c:81 ++msgid "Place output into FILE" ++msgstr "" ++ ++#: ../src/unstrip.c:83 ++msgid "Create multiple output files under DIRECTORY" ++msgstr "" ++ ++#: ../src/unstrip.c:84 ++msgid "Use module rather than file names" ++msgstr "" ++ ++#: ../src/unstrip.c:86 ++msgid "Create output for modules that have no separate debug information" ++msgstr "" ++ ++#: ../src/unstrip.c:89 ++msgid "Apply relocations to section contents in ET_REL files" ++msgstr "" ++ ++#: ../src/unstrip.c:91 ++msgid "Only list module and file names, build IDs" ++msgstr "" ++ ++#: ../src/unstrip.c:133 ++#, c-format ++msgid "-d option specified twice" ++msgstr "Option -d zweimal angegeben" ++ ++#: ../src/unstrip.c:165 ++#, c-format ++msgid "only one of -o or -d allowed" ++msgstr "nur entweder -o oder -d erlaubt" ++ ++#: ../src/unstrip.c:174 ++#, c-format ++msgid "-n cannot be used with explicit files or -o or -d" ++msgstr "-n kann nicht mit expliziten Dateien oder -o oder -d verwendet werden" ++ ++#: ../src/unstrip.c:189 ++#, c-format ++msgid "output directory '%s'" ++msgstr "Ausgabeverzeichnis '%s'" ++ ++#: ../src/unstrip.c:198 ++#, c-format ++msgid "exactly two file arguments are required" ++msgstr "genau zwei Datei-Argumente werden benötigt" ++ ++#: ../src/unstrip.c:204 ++#, c-format ++msgid "-m, -a, -R, and -i options not allowed with explicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:217 ++#, c-format ++msgid "-o or -d is required when using implicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:253 ++#, c-format ++msgid "cannot create ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:258 ++#, c-format ++msgid "cannot copy ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:263 ../src/unstrip.c:1816 ++#, c-format ++msgid "cannot create program headers: %s" ++msgstr "konnte Programm-Kopf nicht erstellen: %s" ++ ++#: ../src/unstrip.c:269 ++#, c-format ++msgid "cannot copy program header: %s" ++msgstr "konnte Programm-Kopf nicht kopieren: %s" ++ ++#: ../src/unstrip.c:279 ++#, c-format ++msgid "cannot copy section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:282 ../src/unstrip.c:1504 ++#, c-format ++msgid "cannot get section data: %s" ++msgstr "konnte Abschnittsdaten nicht holen: %s" ++ ++#: ../src/unstrip.c:284 ../src/unstrip.c:1506 ++#, c-format ++msgid "cannot copy section data: %s" ++msgstr "konnte Abschnittsdaten nicht kopieren: %s" ++ ++#: ../src/unstrip.c:308 ++#, c-format ++msgid "cannot create directory '%s'" ++msgstr "konnte Verzeichnis nicht erstellen: %s" ++ ++#: ../src/unstrip.c:348 ../src/unstrip.c:762 ../src/unstrip.c:1539 ++#, c-format ++msgid "cannot get symbol table entry: %s" ++msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" ++ ++#: ../src/unstrip.c:364 ../src/unstrip.c:579 ../src/unstrip.c:600 ++#: ../src/unstrip.c:612 ../src/unstrip.c:1560 ../src/unstrip.c:1690 ++#: ../src/unstrip.c:1714 ++#, c-format ++msgid "cannot update symbol table: %s" ++msgstr "konnte Symboltabelle nicht aktualisieren: %s" ++ ++#: ../src/unstrip.c:381 ../src/unstrip.c:431 ../src/unstrip.c:561 ++#: ../src/unstrip.c:1208 ../src/unstrip.c:1524 ../src/unstrip.c:1719 ++#: ../src/unstrip.c:1790 ++#, c-format ++msgid "cannot update section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:407 ../src/unstrip.c:418 ++#, c-format ++msgid "cannot update relocation: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:506 ++#, c-format ++msgid "cannot get symbol version: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:518 ++#, c-format ++msgid "unexpected section type in [%Zu] with sh_link to symtab" ++msgstr "" ++ ++#: ../src/unstrip.c:768 ++#, c-format ++msgid "invalid string offset in symbol [%Zu]" ++msgstr "" ++ ++#: ../src/unstrip.c:910 ../src/unstrip.c:1247 ++#, c-format ++msgid "cannot read section [%Zu] name: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:951 ../src/unstrip.c:970 ../src/unstrip.c:1003 ++#, c-format ++msgid "cannot read '.gnu.prelink_undo' section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:991 ++#, c-format ++msgid "invalid contents in '%s' section" ++msgstr "" ++ ++#: ../src/unstrip.c:1046 ../src/unstrip.c:1369 ++#, c-format ++msgid "cannot find matching section for [%Zu] '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:1170 ../src/unstrip.c:1185 ../src/unstrip.c:1450 ++#, c-format ++msgid "cannot add section name to string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1194 ++#, c-format ++msgid "cannot update section header string table data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1222 ../src/unstrip.c:1226 ++#, c-format ++msgid "cannot get section header string table section index: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1230 ../src/unstrip.c:1234 ../src/unstrip.c:1465 ++#, c-format ++msgid "cannot get section count: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1292 ../src/unstrip.c:1384 ++#, c-format ++msgid "cannot read section header string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1444 ++#, c-format ++msgid "cannot add new section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1547 ++#, c-format ++msgid "symbol [%Zu] has invalid section index" ++msgstr "" ++ ++#: ../src/unstrip.c:1799 ++#, c-format ++msgid "cannot get ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1826 ++#, c-format ++msgid "cannot update program header: %s" ++msgstr "konnte Programm-Kopf nicht aktualisieren: %s" ++ ++#: ../src/unstrip.c:1831 ../src/unstrip.c:1910 ++#, c-format ++msgid "cannot write output file: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1879 ++#, c-format ++msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1882 ++#, c-format ++msgid "" ++"DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1901 ../src/unstrip.c:1941 ../src/unstrip.c:1953 ++#: ../src/unstrip.c:2033 ++#, c-format ++msgid "cannot create ELF descriptor: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1959 ++#, c-format ++msgid "'%s' and '%s' do not seem to match" ++msgstr "" ++ ++#: ../src/unstrip.c:1990 ++#, c-format ++msgid "cannot find stripped file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1994 ++#, c-format ++msgid "cannot open stripped file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2009 ++#, c-format ++msgid "cannot find debug file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2013 ++#, c-format ++msgid "cannot open debug file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2026 ++#, c-format ++msgid "module '%s' file '%s' is not stripped" ++msgstr "" ++ ++#: ../src/unstrip.c:2057 ++#, c-format ++msgid "cannot cache section addresses for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2190 ++#, c-format ++msgid "no matching modules found" ++msgstr "kein passendes Modul gefunden" ++ ++#: ../src/unstrip.c:2199 ++#, c-format ++msgid "matched more than one module" ++msgstr "mehr als ein passendes Modul" ++ ++#: ../src/unstrip.c:2246 ++msgid "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++msgstr "" ++ ++#: ../src/unstrip.c:2247 ++msgid "" ++"Combine stripped files with separate symbols and debug information.\vThe " ++"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." ++msgstr "" ++ ++#: ../src/objdump.c:61 ++msgid "Mode selection:" ++msgstr "" ++ ++#: ../src/objdump.c:62 ++msgid "Display relocation information." ++msgstr "" ++ ++#: ../src/objdump.c:64 ++msgid "Display the full contents of all sections requested" ++msgstr "" ++ ++#: ../src/objdump.c:66 ++msgid "Display assembler code of executable sections" ++msgstr "" ++ ++#: ../src/objdump.c:68 ++msgid "Output option selection:" ++msgstr "" ++ ++#: ../src/objdump.c:70 ++msgid "Only display information for section NAME." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/objdump.c:76 ++msgid "Show information from FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/objdump.c:274 ../src/objdump.c:286 ++#, c-format ++msgid "while close `%s'" ++msgstr "" ++ ++#: ../src/objdump.c:510 ++#, c-format ++msgid "" ++"\n" ++"RELOCATION RECORDS FOR [%s]:\n" ++"%-*s TYPE VALUE\n" ++msgstr "" ++ ++#: ../src/objdump.c:513 ++msgid "OFFSET" ++msgstr "OFFSET" ++ ++#: ../src/objdump.c:576 ++#, c-format ++msgid "Contents of section %s:\n" ++msgstr "Inhalt des Abschnitts %s:\n" ++ ++#: ../src/objdump.c:676 ++#, c-format ++msgid "cannot disassemble" ++msgstr "Disassemblieren nicht möglich" ++ +diff --git a/po/es.po b/po/es.po +new file mode 100644 +index 0000000..9b46fca +--- /dev/null ++++ b/po/es.po +@@ -0,0 +1,5932 @@ ++# Fedora Spanish Translation of elfutils.master. ++# This file is distributed under the same license as the elfutils.master package. ++# ++# Domingo Becker , 2009. ++# Gladys Guerrero Lozano , 2009. ++# Héctor Daniel Cabrera , 2009, 2010. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: elfutils.master.es\n" ++"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" ++"POT-Creation-Date: 2010-02-19 09:13+0000\n" ++"PO-Revision-Date: 2010-02-19 12:47-0300\n" ++"Last-Translator: Héctor Daniel Cabrera \n" ++"Language-Team: Fedora Spanish \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Poedit-Language: Spanish\n" ++"X-Generator: Lokalize 1.0\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Poedit-Country: ARGENTINA\n" ++ ++#: ../lib/xmalloc.c:51 ++#: ../lib/xmalloc.c:65 ++#: ../lib/xmalloc.c:79 ++#: ../src/readelf.c:2820 ++#: ../src/readelf.c:3159 ++#: ../src/unstrip.c:2087 ++#: ../src/unstrip.c:2295 ++#, c-format ++msgid "memory exhausted" ++msgstr "memoria agotada" ++ ++#: ../libelf/elf_error.c:81 ++#: ../libasm/asm_error.c:62 ++#: ../libdw/dwarf_error.c:79 ++msgid "no error" ++msgstr "ningún error" ++ ++#: ../libelf/elf_error.c:84 ++#: ../libasm/asm_error.c:81 ++#: ../libdw/dwarf_error.c:80 ++msgid "unknown error" ++msgstr "error desconocido" ++ ++#: ../libelf/elf_error.c:88 ++msgid "unknown version" ++msgstr "versión desconocida" ++ ++#: ../libelf/elf_error.c:92 ++msgid "unknown type" ++msgstr "tipo desconocido" ++ ++#: ../libelf/elf_error.c:96 ++msgid "invalid `Elf' handle" ++msgstr "manejo`ELF' inválido" ++ ++#: ../libelf/elf_error.c:100 ++msgid "invalid size of source operand" ++msgstr "tamaño inválido del operando fuente" ++ ++#: ../libelf/elf_error.c:104 ++msgid "invalid size of destination operand" ++msgstr "tamaño inválido del operando destino" ++ ++#: ../libelf/elf_error.c:108 ++#: ../src/readelf.c:4777 ++#, c-format ++msgid "invalid encoding" ++msgstr "codificación inválida" ++ ++#: ../libelf/elf_error.c:112 ++#: ../libasm/asm_error.c:63 ++#: ../libdw/dwarf_error.c:88 ++msgid "out of memory" ++msgstr "memoria agotada" ++ ++#: ../libelf/elf_error.c:116 ++msgid "invalid file descriptor" ++msgstr "descriptor de archivo inválido" ++ ++#: ../libelf/elf_error.c:120 ++msgid "invalid operation" ++msgstr "operación inválida" ++ ++#: ../libelf/elf_error.c:124 ++msgid "ELF version not set" ++msgstr "no se estableció la versión de ELF" ++ ++#: ../libelf/elf_error.c:128 ++#: ../libelf/elf_error.c:176 ++#: ../libdw/dwarf_error.c:90 ++msgid "invalid command" ++msgstr "comando inválido" ++ ++#: ../libelf/elf_error.c:132 ++#: ../libelf/elf_error.c:192 ++msgid "offset out of range" ++msgstr "desplazamiento fuera de rango" ++ ++#: ../libelf/elf_error.c:136 ++msgid "invalid fmag field in archive header" ++msgstr "campo fmag no válido en el encabezamiento del archivo" ++ ++#: ../libelf/elf_error.c:140 ++msgid "invalid archive file" ++msgstr "fichero de archivo inválido" ++ ++#: ../libelf/elf_error.c:144 ++msgid "descriptor is not for an archive" ++msgstr "el descriptor no es de un archivo" ++ ++#: ../libelf/elf_error.c:148 ++msgid "no index available" ++msgstr "no hay índice disponible" ++ ++#: ../libelf/elf_error.c:152 ++msgid "cannot read data from file" ++msgstr "no se pueden leer los datos del archivo" ++ ++#: ../libelf/elf_error.c:156 ++msgid "cannot write data to file" ++msgstr "no se puede escribir los datos al archivo" ++ ++#: ../libelf/elf_error.c:160 ++msgid "invalid binary class" ++msgstr "clase de binario inválida" ++ ++#: ../libelf/elf_error.c:164 ++msgid "invalid section index" ++msgstr "índice de sección inválido" ++ ++#: ../libelf/elf_error.c:168 ++msgid "invalid operand" ++msgstr "operando inválido" ++ ++#: ../libelf/elf_error.c:172 ++msgid "invalid section" ++msgstr "sección inválida" ++ ++#: ../libelf/elf_error.c:180 ++msgid "executable header not created first" ++msgstr "no se ha creado primero el encabezamiento ejecutable" ++ ++#: ../libelf/elf_error.c:184 ++msgid "file descriptor disabled" ++msgstr "descriptor de archivo inhabilitada" ++ ++#: ../libelf/elf_error.c:188 ++msgid "archive/member fildes mismatch" ++msgstr "archivo/miembro no coinciden" ++ ++#: ../libelf/elf_error.c:196 ++msgid "cannot manipulate null section" ++msgstr "no se pudo manipular una sección nula" ++ ++#: ../libelf/elf_error.c:200 ++msgid "data/scn mismatch" ++msgstr "no coinciden los datos/scn" ++ ++#: ../libelf/elf_error.c:204 ++msgid "invalid section header" ++msgstr "encabezamiento de sección inválida" ++ ++#: ../libelf/elf_error.c:208 ++#: ../src/readelf.c:6240 ++#: ../src/readelf.c:6341 ++#, c-format ++msgid "invalid data" ++msgstr "datos inválidos" ++ ++#: ../libelf/elf_error.c:212 ++msgid "unknown data encoding" ++msgstr "codificación de caracteres desconocida" ++ ++#: ../libelf/elf_error.c:216 ++msgid "section `sh_size' too small for data" ++msgstr "el tamaño de la sección `sh_size' es demasiado pequeño para los datos " ++ ++#: ../libelf/elf_error.c:220 ++msgid "invalid section alignment" ++msgstr "alineación de la sección inválida" ++ ++#: ../libelf/elf_error.c:224 ++msgid "invalid section entry size" ++msgstr "tamaño de la entrada de la sección inválida" ++ ++#: ../libelf/elf_error.c:228 ++msgid "update() for write on read-only file" ++msgstr "update() para escribir sobre archivo de sólo lectura" ++ ++#: ../libelf/elf_error.c:232 ++msgid "no such file" ++msgstr "no hay tal archivo" ++ ++#: ../libelf/elf_error.c:236 ++msgid "only relocatable files can contain section groups" ++msgstr "solo los archivos reubicables pueden contener grupos de sección" ++ ++#: ../libelf/elf_error.c:241 ++msgid "program header only allowed in executables, shared objects, and core files" ++msgstr "los encabezamientos de los programas solo son permitidos en archivos ejecutables, archivos principales, u objetos compartidos" ++ ++#: ../libelf/elf_error.c:248 ++msgid "file has no program header" ++msgstr "el archivo no tiene encabezamiento de programa" ++ ++#: ../libelf/elf_error.c:253 ++#: ../libdw/dwarf_error.c:112 ++msgid "invalid offset" ++msgstr "desplazamiento inválido" ++ ++#: ../libasm/asm_error.c:64 ++#: ../src/ldgeneric.c:2687 ++#, c-format ++msgid "cannot create output file" ++msgstr "no se puede crear el archivo de salida" ++ ++#: ../libasm/asm_error.c:65 ++msgid "invalid parameter" ++msgstr "Parámetro inválido" ++ ++#: ../libasm/asm_error.c:66 ++msgid "cannot change mode of output file" ++msgstr "no sepuede cambiar modo de archivo de salida" ++ ++#. Something went wrong. ++#: ../libasm/asm_error.c:67 ++#: ../src/ldgeneric.c:7001 ++#, c-format ++msgid "cannot rename output file" ++msgstr "no se puede renombrar el archivo de salida" ++ ++#: ../libasm/asm_error.c:68 ++msgid "duplicate symbol" ++msgstr "Duplicar símbolo" ++ ++#: ../libasm/asm_error.c:69 ++msgid "invalid section type for operation" ++msgstr "tipo de sección inválido para operación" ++ ++#: ../libasm/asm_error.c:70 ++msgid "error during output of data" ++msgstr "error durante salida de datos" ++ ++#: ../libasm/asm_error.c:71 ++msgid "no backend support available" ++msgstr "No hay soporte de segundo plano" ++ ++#: ../libdw/dwarf_error.c:81 ++msgid "invalid access" ++msgstr "Acceso inválido" ++ ++#: ../libdw/dwarf_error.c:82 ++msgid "no regular file" ++msgstr "no es un archivo regular" ++ ++#: ../libdw/dwarf_error.c:83 ++msgid "I/O error" ++msgstr "Error de E/S" ++ ++#: ../libdw/dwarf_error.c:84 ++msgid "invalid ELF file" ++msgstr "Archivo ELF inválido" ++ ++#: ../libdw/dwarf_error.c:85 ++msgid "no DWARF information" ++msgstr "Sin información de DWARF" ++ ++#: ../libdw/dwarf_error.c:86 ++msgid "no ELF file" ++msgstr "No hay archivo ELF" ++ ++#: ../libdw/dwarf_error.c:87 ++msgid "cannot get ELF header" ++msgstr "no se puede obtener el encabezamiento ELF" ++ ++#: ../libdw/dwarf_error.c:89 ++msgid "not implemented" ++msgstr "sin implementar" ++ ++#: ../libdw/dwarf_error.c:91 ++msgid "invalid version" ++msgstr "versión inválida" ++ ++#: ../libdw/dwarf_error.c:92 ++msgid "invalid file" ++msgstr "Archivo inválido" ++ ++#: ../libdw/dwarf_error.c:93 ++msgid "no entries found" ++msgstr "No se hallaron entradas" ++ ++#: ../libdw/dwarf_error.c:94 ++msgid "invalid DWARF" ++msgstr "DWARF inválido" ++ ++#: ../libdw/dwarf_error.c:95 ++msgid "no string data" ++msgstr "no hay datos de cadena" ++ ++#: ../libdw/dwarf_error.c:96 ++msgid "no address value" ++msgstr "no hay valor de dirección" ++ ++#: ../libdw/dwarf_error.c:97 ++msgid "no constant value" ++msgstr "no hay valor constante" ++ ++#: ../libdw/dwarf_error.c:98 ++msgid "no reference value" ++msgstr "no hay valor de referencia" ++ ++#: ../libdw/dwarf_error.c:99 ++msgid "invalid reference value" ++msgstr "valor de la referencia inválido" ++ ++#: ../libdw/dwarf_error.c:100 ++msgid ".debug_line section missing" ++msgstr ".debug_line section faltante" ++ ++#: ../libdw/dwarf_error.c:101 ++msgid "invalid .debug_line section" ++msgstr ".debug_line section inválida" ++ ++#: ../libdw/dwarf_error.c:102 ++msgid "debug information too big" ++msgstr "información de depuración muy grande" ++ ++#: ../libdw/dwarf_error.c:103 ++msgid "invalid DWARF version" ++msgstr "versión DWARF inválida" ++ ++#: ../libdw/dwarf_error.c:104 ++msgid "invalid directory index" ++msgstr "Índice de directorio inválido" ++ ++#: ../libdw/dwarf_error.c:105 ++msgid "address out of range" ++msgstr "dirección fuera de rango" ++ ++#: ../libdw/dwarf_error.c:106 ++msgid "no location list value" ++msgstr "valor de lista sin ubicación" ++ ++#: ../libdw/dwarf_error.c:107 ++msgid "no block data" ++msgstr "sin datos de bloque " ++ ++#: ../libdw/dwarf_error.c:108 ++msgid "invalid line index" ++msgstr "Índice de línea inválido" ++ ++#: ../libdw/dwarf_error.c:109 ++msgid "invalid address range index" ++msgstr "Índice de dirección de rango inválido" ++ ++#: ../libdw/dwarf_error.c:110 ++msgid "no matching address range" ++msgstr "dirección de rango no coincidente" ++ ++#: ../libdw/dwarf_error.c:111 ++msgid "no flag value" ++msgstr "sin valor de bandera" ++ ++#: ../libdw/dwarf_error.c:113 ++msgid ".debug_ranges section missing" ++msgstr ".debug_ranges section faltante" ++ ++#: ../libdw/dwarf_error.c:114 ++msgid "invalid CFI section" ++msgstr "sección CFI inválida" ++ ++#: ../libdwfl/argp-std.c:67 ++#: ../src/unstrip.c:2237 ++msgid "Input selection options:" ++msgstr "Opciones de selección de entrada:" ++ ++#: ../libdwfl/argp-std.c:68 ++msgid "Find addresses in FILE" ++msgstr "Hallar direcciones en FICHERO" ++ ++#: ../libdwfl/argp-std.c:70 ++msgid "Find addresses from signatures found in COREFILE" ++msgstr "Buscar direcciones desde firmas encontradas en COREFILE" ++ ++#: ../libdwfl/argp-std.c:72 ++msgid "Find addresses in files mapped into process PID" ++msgstr "Busca direcciones en archivos mapeados sobre procesos PID" ++ ++#: ../libdwfl/argp-std.c:74 ++msgid "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps format" ++msgstr "Busca direcciones en archivos asignados como leídos desde FILE en formato Linux /proc/PID/maps" ++ ++#: ../libdwfl/argp-std.c:76 ++msgid "Find addresses in the running kernel" ++msgstr "Busca direcciones en el kernel que está ejecutándose" ++ ++#: ../libdwfl/argp-std.c:78 ++msgid "Kernel with all modules" ++msgstr "Kernel con todos los módulos" ++ ++#: ../libdwfl/argp-std.c:80 ++msgid "Search path for separate debuginfo files" ++msgstr "Ruta de búsqueda para archivos debugingfo independientes" ++ ++#: ../libdwfl/argp-std.c:163 ++msgid "only one of -e, -p, -k, -K, or --core allowed" ++msgstr "Sólo uno de -e, -p, -k, -K, ó --core está permitido" ++ ++#: ../libdwfl/argp-std.c:223 ++#, c-format ++msgid "cannot read ELF core file: %s" ++msgstr "No se puede leer archivo core ELF: %s" ++ ++#: ../libdwfl/argp-std.c:243 ++msgid "No modules recognized in core file" ++msgstr "No hay módulos reconocidos en el archivo core" ++ ++#: ../libdwfl/argp-std.c:255 ++msgid "cannot load kernel symbols" ++msgstr "No se pueden cargar símbolos de kernel" ++ ++#. Non-fatal to have no modules since we do have the kernel. ++#: ../libdwfl/argp-std.c:259 ++msgid "cannot find kernel modules" ++msgstr "no se pueden hallar módulos de kernel" ++ ++#: ../libdwfl/argp-std.c:273 ++msgid "cannot find kernel or modules" ++msgstr "imposible encontrar kernel o módulos" ++ ++#: ../libebl/eblbackendname.c:63 ++msgid "No backend" ++msgstr "No hay segundo plano (Backend)" ++ ++#: ../libebl/eblcorenotetypename.c:107 ++#: ../libebl/eblobjecttypename.c:78 ++#: ../libebl/eblobjnotetypename.c:86 ++#: ../libebl/eblosabiname.c:98 ++#: ../libebl/eblsectionname.c:110 ++#: ../libebl/eblsectiontypename.c:140 ++#: ../libebl/eblsegmenttypename.c:104 ++msgid "" ++msgstr "" ++ ++#: ../libebl/ebldynamictagname.c:126 ++#, c-format ++msgid ": %#" ++msgstr ": %#" ++ ++#: ../libebl/eblobjnote.c:76 ++#, c-format ++msgid " Build ID: " ++msgstr " Build ID: " ++ ++#. A non-null terminated version string. ++#: ../libebl/eblobjnote.c:87 ++#, c-format ++msgid " Linker version: %.*s\n" ++msgstr " Versión del Enlazador: %.*s\n" ++ ++#: ../libebl/eblobjnote.c:136 ++#, c-format ++msgid " OS: %s, ABI: " ++msgstr " OS: %s, ABI: " ++ ++#: ../libebl/eblosabiname.c:95 ++msgid "Stand alone" ++msgstr "Autónomo" ++ ++#: ../libebl/eblsymbolbindingname.c:92 ++#: ../libebl/eblsymboltypename.c:98 ++#, c-format ++msgid ": %d" ++msgstr ": %d" ++ ++#: ../src/ar.c:76 ++msgid "Commands:" ++msgstr "Comandos:" ++ ++#: ../src/ar.c:77 ++msgid "Delete files from archive." ++msgstr "Borrar archivos de un archivo" ++ ++#: ../src/ar.c:78 ++msgid "Move files in archive." ++msgstr "Desplazar ficheros en archivo." ++ ++#: ../src/ar.c:79 ++msgid "Print files in archive." ++msgstr "Imprimir ficheros en archivo." ++ ++#: ../src/ar.c:80 ++msgid "Quick append files to archive." ++msgstr "Adición rápida de ficheros para archivar" ++ ++#: ../src/ar.c:82 ++msgid "Replace existing or insert new file into archive." ++msgstr "Remplazar fichero existente o insertar uno nuevo en el archivo." ++ ++#: ../src/ar.c:83 ++msgid "Display content of archive." ++msgstr "Mostrar contenido de archivo" ++ ++#: ../src/ar.c:84 ++msgid "Extract files from archive." ++msgstr "extraer ficheros de un archivo" ++ ++#: ../src/ar.c:86 ++msgid "Command Modifiers:" ++msgstr "Modificadores de comandos:" ++ ++#: ../src/ar.c:87 ++msgid "Preserve original dates." ++msgstr "Preservar fechas originales." ++ ++#: ../src/ar.c:88 ++msgid "Use instance [COUNT] of name." ++msgstr "Usar instancia [COUNT] de nombre." ++ ++#: ../src/ar.c:90 ++msgid "Do not replace existing files with extracted files." ++msgstr "No remplazar los archivos existentes por los archivos extractados." ++ ++#: ../src/ar.c:91 ++msgid "Allow filename to be truncated if necessary." ++msgstr "Permitir truncamiento del nombre de archivo de ser necesario." ++ ++#: ../src/ar.c:93 ++msgid "Provide verbose output." ++msgstr "Proporcionar salida detallada" ++ ++#: ../src/ar.c:94 ++msgid "Force regeneration of symbol table." ++msgstr "Forzar regeneración de tabla de símbolos." ++ ++#: ../src/ar.c:95 ++msgid "Insert file after [MEMBER]." ++msgstr "Insertar archivo después de [MIEMBRO]." ++ ++#: ../src/ar.c:96 ++msgid "Insert file before [MEMBER]." ++msgstr "Introducir fichero antes de [MIEMBRO]." ++ ++#: ../src/ar.c:97 ++msgid "Same as -b." ++msgstr "Igual que -b." ++ ++#: ../src/ar.c:98 ++msgid "Suppress message when library has to be created." ++msgstr "Suprimir mensaje cuando se tenga que crear la biblioteca." ++ ++#: ../src/ar.c:100 ++msgid "Use full path for file matching." ++msgstr "Usar la ruta total para fichero coincidente." ++ ++#: ../src/ar.c:101 ++msgid "Update only older files in archive." ++msgstr "Actualizar sólo ficheros antiguos en archivo." ++ ++#. Short description of program. ++#: ../src/ar.c:107 ++msgid "Create, modify, and extract from archives." ++msgstr "Crear, modificar, y extraer de archivos." ++ ++#. Strings for arguments in help texts. ++#: ../src/ar.c:110 ++msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++msgstr "[MIEMBRO] [CONTAR] ARCHIVO [FICHERO...]" ++ ++#: ../src/ar.c:192 ++#, c-format ++msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" ++msgstr "'a', 'b', é 'i' sólo se permiten con las opciones 'm' y 'r'." ++ ++#: ../src/ar.c:197 ++#, c-format ++msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" ++msgstr "Parámetro MIEMBRO requerido para modificadores 'a', 'b', e 'i'" ++ ++#: ../src/ar.c:213 ++#, c-format ++msgid "'N' is only meaningful with the 'x' and 'd' options" ++msgstr "'N' sólo es significativa con las opciones `x' y `d'." ++ ++#: ../src/ar.c:218 ++#, c-format ++msgid "COUNT parameter required" ++msgstr "Parámetro CONTAR requerido" ++ ++#: ../src/ar.c:230 ++#, c-format ++msgid "invalid COUNT parameter %s" ++msgstr "Parámetro CONTAR inválido %s" ++ ++#: ../src/ar.c:237 ++#, c-format ++msgid "'%c' is only meaningful with the 'x' option" ++msgstr "'%c' es sólo significativo con la opción 'x'" ++ ++#: ../src/ar.c:243 ++#, c-format ++msgid "archive name required" ++msgstr "nombre de archivo requerido" ++ ++#: ../src/ar.c:289 ++#: ../src/nm.c:253 ++#: ../src/readelf.c:449 ++#: ../src/size.c:219 ++#: ../src/strip.c:204 ++#: ../src/ld.c:957 ++#: ../src/elflint.c:239 ++#: ../src/addr2line.c:185 ++#: ../src/findtextrel.c:170 ++#: ../src/elfcmp.c:555 ++#: ../src/ranlib.c:136 ++#: ../src/strings.c:227 ++#: ../src/unstrip.c:234 ++#: ../src/objdump.c:181 ++#, 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 "" ++"Copyright (C) %s Red Hat, Inc.\n" ++"El siguiente es un software libre; consulte el código para conocer las condiciones de copiado. NO tiene\n" ++"garantía, ni siquiera para SU COMERCIALIZACIÓN o PARA SER USADO CON UN FIN DETERMINADO.\n" ++ ++#: ../src/ar.c:294 ++#: ../src/nm.c:258 ++#: ../src/readelf.c:454 ++#: ../src/size.c:224 ++#: ../src/strip.c:209 ++#: ../src/ld.c:962 ++#: ../src/elflint.c:244 ++#: ../src/addr2line.c:190 ++#: ../src/findtextrel.c:175 ++#: ../src/elfcmp.c:560 ++#: ../src/ranlib.c:141 ++#: ../src/strings.c:232 ++#: ../src/unstrip.c:239 ++#: ../src/objdump.c:186 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "Escrito por %s.\n" ++ ++#: ../src/ar.c:314 ++#, c-format ++msgid "More than one operation specified" ++msgstr "Más de una operación especificada" ++ ++#: ../src/ar.c:404 ++#, c-format ++msgid "cannot open archive '%s'" ++msgstr "Imposible abrir el archivo '%s'" ++ ++#: ../src/ar.c:414 ++#, c-format ++msgid "cannot open archive '%s': %s" ++msgstr "Imposible abrir el archivo '%s': %s" ++ ++#: ../src/ar.c:418 ++#, c-format ++msgid "%s: not an archive file" ++msgstr "%s: no es un fichero de archivo" ++ ++#: ../src/ar.c:422 ++#, c-format ++msgid "cannot stat archive '%s'" ++msgstr "no sepuede stat el archivo '%s'" ++ ++#: ../src/ar.c:434 ++#, c-format ++msgid "no entry %s in archive\n" ++msgstr "no hay entrada %s en archivo\n" ++ ++#: ../src/ar.c:487 ++#: ../src/ar.c:929 ++#: ../src/ar.c:1129 ++#, c-format ++msgid "cannot create hash table" ++msgstr "Falló al crear la tabla de dispersión" ++ ++#: ../src/ar.c:494 ++#: ../src/ar.c:936 ++#: ../src/ar.c:1138 ++#, c-format ++msgid "cannot insert into hash table" ++msgstr "no sepuede insertar en tabla de dispersión" ++ ++#: ../src/ar.c:502 ++#: ../src/ranlib.c:176 ++#, c-format ++msgid "cannot stat '%s'" ++msgstr "no se puede stat '%s'" ++ ++#: ../src/ar.c:598 ++#, c-format ++msgid "cannot read content of %s: %s" ++msgstr "no se puede leer el contenido de %s: %s" ++ ++#: ../src/ar.c:641 ++#, c-format ++msgid "cannot open %.*s" ++msgstr " Imposible abrir %.*s" ++ ++#: ../src/ar.c:663 ++#, c-format ++msgid "failed to write %s" ++msgstr "Falló al escribir %s" ++ ++#: ../src/ar.c:675 ++#, c-format ++msgid "cannot change mode of %s" ++msgstr "No se puede cambiar el modo de %s" ++ ++#: ../src/ar.c:691 ++#, c-format ++msgid "cannot change modification time of %s" ++msgstr "No puede cambiar tiempo de modificación de %s" ++ ++#: ../src/ar.c:737 ++#, c-format ++msgid "cannot rename temporary file to %.*s" ++msgstr "no sepuede renombrar fichero temporal para %.*s" ++ ++#: ../src/ar.c:773 ++#: ../src/ar.c:1021 ++#: ../src/ar.c:1419 ++#: ../src/ranlib.c:250 ++#, c-format ++msgid "cannot create new file" ++msgstr "no sepuede crear fichero nuevo" ++ ++#: ../src/ar.c:1220 ++#, c-format ++msgid "position member %s not found" ++msgstr "no se encuentra miembro de posición %s " ++ ++#: ../src/ar.c:1230 ++#, c-format ++msgid "%s: no entry %s in archive!\n" ++msgstr "%s: ¡no hay entrada %s en archive!\n" ++ ++#: ../src/ar.c:1259 ++#: ../src/ldgeneric.c:519 ++#: ../src/objdump.c:257 ++#, c-format ++msgid "cannot open %s" ++msgstr "no sepuede abrir %s" ++ ++#: ../src/ar.c:1264 ++#, c-format ++msgid "cannot stat %s" ++msgstr "no sepuede efectuar stat %s" ++ ++#: ../src/ar.c:1270 ++#, c-format ++msgid "%s is no regular file" ++msgstr " %s no es un fichero ordinario " ++ ++#: ../src/ar.c:1283 ++#, c-format ++msgid "cannot get ELF descriptor for %s: %s\n" ++msgstr "no sepuede obtener descriptor ELF para %s: %s\n" ++ ++#: ../src/ar.c:1302 ++#, c-format ++msgid "cannot read %s: %s" ++msgstr "no sepuede leer %s: %s" ++ ++#. The archive is too big. ++#: ../src/arlib.c:215 ++#, c-format ++msgid "the archive '%s' is too large" ++msgstr " El archivo '%s' es demasiado grande" ++ ++#: ../src/arlib.c:228 ++#, c-format ++msgid "cannot read ELF header of %s(%s): %s" ++msgstr "no se puede leer el encabezamiento ELF de %s(%s): %s" ++ ++#: ../src/nm.c:74 ++#: ../src/strip.c:73 ++msgid "Output selection:" ++msgstr "Selección de salida:" ++ ++#: ../src/nm.c:75 ++msgid "Display debugger-only symbols" ++msgstr "Mostrar sólo símbolos del depurador" ++ ++#: ../src/nm.c:76 ++msgid "Display only defined symbols" ++msgstr "Mostrar sólo símbolos definidos" ++ ++#: ../src/nm.c:79 ++msgid "Display dynamic symbols instead of normal symbols" ++msgstr "Mostrar símbolos dinámicos en lugar de símbolos normales" ++ ++#: ../src/nm.c:80 ++msgid "Display only external symbols" ++msgstr "Mostrar sólo símbolos externos" ++ ++#: ../src/nm.c:81 ++msgid "Display only undefined symbols" ++msgstr "Mostrar sólo símbolos indefinidos" ++ ++#: ../src/nm.c:83 ++msgid "Include index for symbols from archive members" ++msgstr "Incluir índices para símbolos de miembros de archivo" ++ ++#: ../src/nm.c:85 ++#: ../src/size.c:66 ++msgid "Output format:" ++msgstr "Formato de salida:" ++ ++#: ../src/nm.c:87 ++msgid "Print name of the input file before every symbol" ++msgstr "Imprimir nombre de archivo de entrada antes de cada símbolo" ++ ++#: ../src/nm.c:90 ++msgid "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The default is `sysv'" ++msgstr "Usar el formato de salida FORMATO. FORMATO puede ser o bien `bsd', o `sysv', o `posix'. El establecido por defecto es `sysv'" ++ ++#: ../src/nm.c:92 ++msgid "Same as --format=bsd" ++msgstr "lo mismo que --format=bsd" ++ ++#: ../src/nm.c:93 ++msgid "Same as --format=posix" ++msgstr "lo mismo que --format=posix" ++ ++#: ../src/nm.c:94 ++#: ../src/size.c:72 ++msgid "Use RADIX for printing symbol values" ++msgstr "Utilizar RADIX para imprimir valores de símbolo" ++ ++#: ../src/nm.c:95 ++msgid "Mark weak symbols" ++msgstr "Marcar símbolos débiles" ++ ++#: ../src/nm.c:96 ++msgid "Print size of defined symbols" ++msgstr "Tamaño de impresión de símbolos definidos" ++ ++#: ../src/nm.c:98 ++#: ../src/size.c:80 ++#: ../src/strip.c:78 ++#: ../src/unstrip.c:81 ++msgid "Output options:" ++msgstr "Opciones de salida:" ++ ++#: ../src/nm.c:99 ++msgid "Sort symbols numerically by address" ++msgstr "Ordenar los símbolos numéricos por dirección" ++ ++#: ../src/nm.c:101 ++msgid "Do not sort the symbols" ++msgstr "No ordenar los símbolos" ++ ++#: ../src/nm.c:102 ++msgid "Reverse the sense of the sort" ++msgstr "Invertir el orden" ++ ++#: ../src/nm.c:103 ++#: ../src/addr2line.c:75 ++#: ../src/findtextrel.c:75 ++#: ../src/elfcmp.c:75 ++#: ../src/strings.c:83 ++msgid "Miscellaneous:" ++msgstr "Misceláneos:" ++ ++#. Short description of program. ++#: ../src/nm.c:108 ++msgid "List symbols from FILEs (a.out by default)." ++msgstr "Listar símbolos de FICHEROS (a.out por defecto)." ++ ++#. Strings for arguments in help texts. ++#: ../src/nm.c:111 ++#: ../src/size.c:92 ++#: ../src/strip.c:97 ++#: ../src/findtextrel.c:84 ++#: ../src/strings.c:92 ++#: ../src/objdump.c:80 ++msgid "[FILE...]" ++msgstr "[FICHERO...]" ++ ++#: ../src/nm.c:136 ++#: ../src/size.c:117 ++#: ../src/strip.c:121 ++#: ../src/objdump.c:105 ++#, c-format ++msgid "%s: INTERNAL ERROR %d (%s-%s): %s" ++msgstr "%s: ERROR INTERNO %d (%s-%s): %s" ++ ++#: ../src/nm.c:363 ++#: ../src/size.c:301 ++#: ../src/strip.c:433 ++#: ../src/strip.c:468 ++#: ../src/ldgeneric.c:1767 ++#: ../src/ldgeneric.c:4257 ++#: ../src/findtextrel.c:229 ++#: ../src/elfcmp.c:607 ++#: ../src/ranlib.c:169 ++#: ../src/strings.c:183 ++#: ../src/unstrip.c:1900 ++#: ../src/unstrip.c:1929 ++#, c-format ++msgid "cannot open '%s'" ++msgstr "Imposible abrir '%s'" ++ ++#: ../src/nm.c:380 ++#: ../src/nm.c:392 ++#: ../src/size.c:317 ++#: ../src/size.c:326 ++#: ../src/size.c:337 ++#: ../src/strip.c:1816 ++#, c-format ++msgid "while closing '%s'" ++msgstr "error al cerrar '%s'" ++ ++#: ../src/nm.c:402 ++#: ../src/strip.c:359 ++#: ../src/objdump.c:296 ++#, c-format ++msgid "%s: File format not recognized" ++msgstr "%s: No se reconoce el formato del fichero" ++ ++#. Note: 0 is no valid offset. ++#: ../src/nm.c:442 ++msgid "" ++"\n" ++"Archive index:" ++msgstr "" ++"\n" ++"Índice de archivo:" ++ ++#: ../src/nm.c:451 ++#, c-format ++msgid "invalid offset %zu for symbol %s" ++msgstr "Compensación %zu inválida para símbolo %s" ++ ++#: ../src/nm.c:456 ++#, c-format ++msgid "%s in %s\n" ++msgstr "%s en %s\n" ++ ++#: ../src/nm.c:464 ++#, c-format ++msgid "cannot reset archive offset to beginning" ++msgstr "imposible restablecer compensación de archivo al inicio" ++ ++#: ../src/nm.c:488 ++#: ../src/objdump.c:344 ++#, c-format ++msgid "%s%s%s: file format not recognized" ++msgstr "%s%s%s: no se reconoció el formato de fichero" ++ ++#: ../src/nm.c:700 ++#, c-format ++msgid "cannot create search tree" ++msgstr "No se puede crear el árbol de búsqueda" ++ ++#: ../src/nm.c:740 ++#: ../src/nm.c:1002 ++#: ../src/readelf.c:884 ++#: ../src/readelf.c:1027 ++#: ../src/readelf.c:1168 ++#: ../src/readelf.c:1350 ++#: ../src/readelf.c:1548 ++#: ../src/readelf.c:1734 ++#: ../src/readelf.c:1944 ++#: ../src/readelf.c:2198 ++#: ../src/readelf.c:2264 ++#: ../src/readelf.c:2342 ++#: ../src/readelf.c:2839 ++#: ../src/readelf.c:2875 ++#: ../src/readelf.c:2937 ++#: ../src/readelf.c:6491 ++#: ../src/readelf.c:7376 ++#: ../src/readelf.c:7523 ++#: ../src/readelf.c:7593 ++#: ../src/size.c:425 ++#: ../src/size.c:499 ++#: ../src/strip.c:483 ++#: ../src/objdump.c:744 ++#, c-format ++msgid "cannot get section header string table index" ++msgstr "no se puede obtener índice de cadena de encabezamiento de sección" ++ ++#: ../src/nm.c:766 ++#, c-format ++msgid "" ++"\n" ++"\n" ++"Symbols from %s:\n" ++"\n" ++msgstr "" ++"\n" ++"\n" ++"Símbolos de %s:\n" ++"\n" ++ ++#: ../src/nm.c:768 ++#, c-format ++msgid "" ++"\n" ++"\n" ++"Symbols from %s[%s]:\n" ++"\n" ++msgstr "" ++"\n" ++"\n" ++"Símbolos de %s[%s]:\n" ++"\n" ++ ++#. The header line. ++#: ../src/nm.c:771 ++#, c-format ++msgid "" ++"%*s%-*s %-*s Class Type %-*s %*s Section\n" ++"\n" ++msgstr "" ++"%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n" ++"\n" ++ ++#: ../src/nm.c:1012 ++#, c-format ++msgid "%s: entry size in section `%s' is not what we expect" ++msgstr "%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos " ++ ++#: ../src/nm.c:1016 ++#, c-format ++msgid "%s: size of section `%s' is not multiple of entry size" ++msgstr "%s: Tamaño de sección `%s' no es múltiplo de tamaño de entrada" ++ ++#. XXX Add machine specific object file types. ++#: ../src/nm.c:1255 ++#, c-format ++msgid "%s%s%s%s: Invalid operation" ++msgstr "%s%s%s%s: Operación inválida" ++ ++#: ../src/nm.c:1312 ++#, c-format ++msgid "%s%s%s: no symbols" ++msgstr "%s%s%s: No hay símbolos" ++ ++#: ../src/readelf.c:73 ++msgid "ELF output selection:" ++msgstr "Selección de salida de ELF:" ++ ++#: ../src/readelf.c:75 ++msgid "All these plus -p .strtab -p .dynstr -p .comment" ++msgstr "Todo esto mas -p .strtab -p .dynstr -p .comment" ++ ++#: ../src/readelf.c:76 ++msgid "Display the dynamic segment" ++msgstr "Mostrar el segmento dinámico" ++ ++#: ../src/readelf.c:77 ++msgid "Display the ELF file header" ++msgstr "Mostrar el encabezamiento del fichero ELF" ++ ++#: ../src/readelf.c:79 ++msgid "Display histogram of bucket list lengths" ++msgstr "Mostrar histograma de las longitudes de las listas de cubetas" ++ ++#: ../src/readelf.c:80 ++msgid "Display the program headers" ++msgstr "Mostrar encabezamientos de programa" ++ ++#: ../src/readelf.c:82 ++msgid "Display relocations" ++msgstr "Mostrar reubicaciones" ++ ++#: ../src/readelf.c:83 ++msgid "Display the sections' headers" ++msgstr "Mostrar los encabezados de las secciones" ++ ++#: ../src/readelf.c:85 ++msgid "Display the symbol table" ++msgstr "Mostrar la tabla de símbolos" ++ ++#: ../src/readelf.c:86 ++msgid "Display versioning information" ++msgstr "Mostrar información de versión" ++ ++#: ../src/readelf.c:87 ++msgid "Display the ELF notes" ++msgstr "Mostrar las notas ELF" ++ ++#: ../src/readelf.c:89 ++msgid "Display architecture specific information, if any" ++msgstr "Mostrar información específica de la arquitectura (si es que la hay)" ++ ++#: ../src/readelf.c:91 ++msgid "Display sections for exception handling" ++msgstr "Muestra secciones para manejo de excepciones" ++ ++#: ../src/readelf.c:93 ++msgid "Additional output selection:" ++msgstr "Selección de salida adicional:" ++ ++#: ../src/readelf.c:95 ++msgid "Display DWARF section content. SECTION can be one of abbrev, aranges, frame, info, loc, line, ranges, pubnames, str, macinfo, or exception" ++msgstr "Mostrar el contenido de la sección DWARF. SECCIÓN puede ser algo de lo siguiente: abbrev, aranges, frame, info, loc, line, ranges, pubnames, str, macinfo, o exception" ++ ++#: ../src/readelf.c:99 ++msgid "Dump the uninterpreted contents of SECTION, by number or name" ++msgstr "Vuelca los contenidos no interpretados de SECCIÓN, por número o nombre" ++ ++#: ../src/readelf.c:101 ++msgid "Print string contents of sections" ++msgstr "Imprime contenido de cadena de secciones" ++ ++#: ../src/readelf.c:104 ++msgid "Display the symbol index of an archive" ++msgstr "Muestra el índice de símbolos de un archivo" ++ ++#: ../src/readelf.c:106 ++msgid "Output control:" ++msgstr "Control de salida:" ++ ++#: ../src/readelf.c:108 ++msgid "Do not find symbol names for addresses in DWARF data" ++msgstr "No se encuentran los nombres de símbolos para direcciones en datos DWARF" ++ ++#. Short description of program. ++#: ../src/readelf.c:114 ++msgid "Print information from ELF file in human-readable form." ++msgstr "Imprimir información del fichero ELF en una forma comprensible para los seres humanos." ++ ++#. Strings for arguments in help texts. ++#: ../src/readelf.c:118 ++#: ../src/elflint.c:86 ++msgid "FILE..." ++msgstr "FICHERO..." ++ ++#: ../src/readelf.c:272 ++#: ../src/elflint.c:159 ++#, c-format ++msgid "cannot open input file" ++msgstr "no se puede abrir el fichero de entrada" ++ ++#: ../src/readelf.c:401 ++#, c-format ++msgid "Unknown DWARF debug section `%s'.\n" ++msgstr "Sección de depuración DWARF desconocida `%s'.\n" ++ ++#: ../src/readelf.c:425 ++#: ../src/elflint.c:223 ++msgid "Missing file name.\n" ++msgstr "Falta el nombre de archivo.\n" ++ ++#: ../src/readelf.c:430 ++#: ../src/objdump.c:236 ++msgid "No operation specified.\n" ++msgstr "No se especificó una operación.\n" ++ ++#: ../src/readelf.c:465 ++#, c-format ++msgid "cannot generate Elf descriptor: %s" ++msgstr "no se puede crear descriptor ELF: %s" ++ ++#: ../src/readelf.c:477 ++#, c-format ++msgid "'%s' is not an archive, cannot print archive index" ++msgstr "'%s' no es un archivo, no se puede imprimir índice de archivo" ++ ++#: ../src/readelf.c:482 ++#, c-format ++msgid "error while closing Elf descriptor: %s" ++msgstr "error al cerrar el descriptor ELF: %s" ++ ++#: ../src/readelf.c:574 ++#, c-format ++msgid "cannot stat input file" ++msgstr "no sepudo stat archivo de entrada" ++ ++#: ../src/readelf.c:576 ++#, c-format ++msgid "input file is empty" ++msgstr "archivo de entrada vacío" ++ ++#: ../src/readelf.c:578 ++#, c-format ++msgid "failed reading '%s': %s" ++msgstr "Falló lectura de '%s': %s" ++ ++#: ../src/readelf.c:613 ++#, c-format ++msgid "cannot read ELF header: %s" ++msgstr "no se pudo leer encabezamiento ELF: %s" ++ ++#: ../src/readelf.c:621 ++#, c-format ++msgid "cannot create EBL handle" ++msgstr "no se puede crear EBL" ++ ++#: ../src/readelf.c:628 ++#: ../src/strip.c:543 ++#: ../src/ldgeneric.c:661 ++#: ../src/ldgeneric.c:1122 ++#, c-format ++msgid "cannot determine number of sections: %s" ++msgstr "no se pudieron determinar el número de secciones: %s" ++ ++#: ../src/readelf.c:634 ++#, c-format ++msgid "cannot determine number of program headers: %s" ++msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" ++ ++#: ../src/readelf.c:720 ++msgid "NONE (None)" ++msgstr "NONE (Ninguno)" ++ ++#: ../src/readelf.c:721 ++msgid "REL (Relocatable file)" ++msgstr "REL (Fichero reubicable)" ++ ++#: ../src/readelf.c:722 ++msgid "EXEC (Executable file)" ++msgstr "EXEC (Fichero ejecutable)" ++ ++#: ../src/readelf.c:723 ++msgid "DYN (Shared object file)" ++msgstr "DYN (Fichero objeto compartido)" ++ ++#: ../src/readelf.c:724 ++msgid "CORE (Core file)" ++msgstr "CORE (Fichero núcleo)" ++ ++#: ../src/readelf.c:729 ++#, c-format ++msgid "OS Specific: (%x)\n" ++msgstr "OS Specific: (%x)\n" ++ ++#. && e_type <= ET_HIPROC always true ++#: ../src/readelf.c:731 ++#, c-format ++msgid "Processor Specific: (%x)\n" ++msgstr "Específico del procesador: (%x)\n" ++ ++#: ../src/readelf.c:741 ++msgid "" ++"ELF Header:\n" ++" Magic: " ++msgstr "" ++"Encabezamiento ELF:\n" ++" Mágico: " ++ ++#: ../src/readelf.c:745 ++#, c-format ++msgid "" ++"\n" ++" Class: %s\n" ++msgstr "" ++"\n" ++" Clase: %s\n" ++ ++#: ../src/readelf.c:750 ++#, c-format ++msgid " Data: %s\n" ++msgstr " Datos: %s\n" ++ ++#: ../src/readelf.c:756 ++#, c-format ++msgid " Ident Version: %hhd %s\n" ++msgstr " Versión ident: %hhd %s\n" ++ ++#: ../src/readelf.c:758 ++#: ../src/readelf.c:775 ++msgid "(current)" ++msgstr "(actual)" ++ ++#: ../src/readelf.c:762 ++#, c-format ++msgid " OS/ABI: %s\n" ++msgstr " OS/ABI: %s\n" ++ ++#: ../src/readelf.c:765 ++#, c-format ++msgid " ABI Version: %hhd\n" ++msgstr " Versión ABI: %hhd\n" ++ ++#: ../src/readelf.c:768 ++msgid " Type: " ++msgstr " Tipo: " ++ ++#: ../src/readelf.c:771 ++#, c-format ++msgid " Machine: %s\n" ++msgstr " Máquina: %s\n" ++ ++#: ../src/readelf.c:773 ++#, c-format ++msgid " Version: %d %s\n" ++msgstr " Versión: %d %s\n" ++ ++#: ../src/readelf.c:777 ++#, c-format ++msgid " Entry point address: %#\n" ++msgstr " Dirección de punto de entrada: %#\n" ++ ++#: ../src/readelf.c:780 ++#, c-format ++msgid " Start of program headers: % %s\n" ++msgstr " Inicio de encabezamientos de programa: % %s\n" ++ ++#: ../src/readelf.c:781 ++#: ../src/readelf.c:784 ++msgid "(bytes into file)" ++msgstr " (bytes en el archivo)" ++ ++#: ../src/readelf.c:783 ++#, c-format ++msgid " Start of section headers: % %s\n" ++msgstr " Inicio de encabezamientos de sección: % %s\n" ++ ++#: ../src/readelf.c:786 ++#, c-format ++msgid " Flags: %s\n" ++msgstr " Indicadores: %s\n" ++ ++#: ../src/readelf.c:789 ++#, c-format ++msgid " Size of this header: % %s\n" ++msgstr " Tamaño de este encabezamiento: % %s\n" ++ ++#: ../src/readelf.c:790 ++#: ../src/readelf.c:793 ++#: ../src/readelf.c:810 ++msgid "(bytes)" ++msgstr "(bytes)" ++ ++#: ../src/readelf.c:792 ++#, c-format ++msgid " Size of program header entries: % %s\n" ++msgstr " Tamaño de las entradas en encabezamiento del programa: % %s\n" ++ ++#: ../src/readelf.c:795 ++#, c-format ++msgid " Number of program headers entries: %" ++msgstr " Cantidad de entradas de encabezados de programa: %" ++ ++#: ../src/readelf.c:802 ++#, c-format ++msgid " (% in [0].sh_info)" ++msgstr " (% in [0].sh_info)" ++ ++#: ../src/readelf.c:805 ++#: ../src/readelf.c:822 ++#: ../src/readelf.c:836 ++msgid " ([0] not available)" ++msgstr " ([0] no disponible)" ++ ++#: ../src/readelf.c:809 ++#, c-format ++msgid " Size of section header entries: % %s\n" ++msgstr " Tamaño de las entradas en el encabezamiento de sección: % %s\n" ++ ++#: ../src/readelf.c:812 ++#, c-format ++msgid " Number of section headers entries: %" ++msgstr " Cantidad de entradas en los encabezamientos de sección: %" ++ ++#: ../src/readelf.c:819 ++#, c-format ++msgid " (% in [0].sh_size)" ++msgstr " (% en [0].sh_size)" ++ ++#. We managed to get the zeroth section. ++#: ../src/readelf.c:832 ++#, c-format ++msgid " (% in [0].sh_link)" ++msgstr " (% en [0].sh_link)" ++ ++#: ../src/readelf.c:840 ++#, c-format ++msgid "" ++" Section header string table index: XINDEX%s\n" ++"\n" ++msgstr "" ++" Índice de tabla de cadenas de sección de encabezamiento de : XINDEX%s\n" ++"\n" ++ ++#: ../src/readelf.c:844 ++#, c-format ++msgid "" ++" Section header string table index: %\n" ++"\n" ++msgstr " Índice de tabla de cadenas de sección de encabezamiento: %\n" ++ ++#: ../src/readelf.c:876 ++#, c-format ++msgid "" ++"There are %d section headers, starting at offset %#:\n" ++"\n" ++msgstr "" ++"Hay %d encabezamientos de sección, comenzando en compensación %#:\n" ++"\n" ++ ++#: ../src/readelf.c:886 ++msgid "Section Headers:" ++msgstr "encabezamientos de sección:" ++ ++#: ../src/readelf.c:889 ++msgid "[Nr] Name Type Addr Off Size ES Flags Lk Inf Al" ++msgstr "[Nr] Nombre Tipo Dirección Off Tamaño Inf Al Enlace banderas ES" ++ ++#: ../src/readelf.c:891 ++msgid "[Nr] Name Type Addr Off Size ES Flags Lk Inf Al" ++msgstr "[Nr] Name Type Addr Off Size ES Flags Lk Inf Al" ++ ++#: ../src/readelf.c:898 ++#: ../src/readelf.c:1051 ++#, c-format ++msgid "cannot get section: %s" ++msgstr "No se puede encontrar la sección: %s" ++ ++#: ../src/readelf.c:905 ++#: ../src/readelf.c:1059 ++#: ../src/readelf.c:7543 ++#: ../src/unstrip.c:353 ++#: ../src/unstrip.c:377 ++#: ../src/unstrip.c:427 ++#: ../src/unstrip.c:536 ++#: ../src/unstrip.c:553 ++#: ../src/unstrip.c:591 ++#: ../src/unstrip.c:789 ++#: ../src/unstrip.c:1057 ++#: ../src/unstrip.c:1244 ++#: ../src/unstrip.c:1305 ++#: ../src/unstrip.c:1427 ++#: ../src/unstrip.c:1480 ++#: ../src/unstrip.c:1588 ++#: ../src/unstrip.c:1778 ++#, c-format ++msgid "cannot get section header: %s" ++msgstr "No se puede obtener encabezamiento de sección: %s" ++ ++#: ../src/readelf.c:963 ++msgid "Program Headers:" ++msgstr "encabezamientos de programa:" ++ ++#: ../src/readelf.c:965 ++msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr " Tipo Compensación Dirección Virtual Dirección Física Tamaño de Fichero Tamaño de Memoria Alineación de bandera" ++ ++#: ../src/readelf.c:968 ++msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr " Tipo Compensación Dirección Virtual Dirección Física Tamaño de Fichero Tamaño de Memoria Alineación de bandera" ++ ++#: ../src/readelf.c:1008 ++#, c-format ++msgid "\t[Requesting program interpreter: %s]\n" ++msgstr "\t[Solicitando intérprete de programa: %s]\n" ++ ++#: ../src/readelf.c:1029 ++msgid "" ++"\n" ++" Section to Segment mapping:\n" ++" Segment Sections..." ++msgstr "" ++"\n" ++" Sección para asignación de segmento:\n" ++" Secciones de segmento..." ++ ++#: ../src/readelf.c:1040 ++#: ../src/unstrip.c:1824 ++#: ../src/unstrip.c:1863 ++#: ../src/unstrip.c:1870 ++#, c-format ++msgid "cannot get program header: %s" ++msgstr "no se puede obtener memoria para encabezamiento del programa: %s" ++ ++#: ../src/readelf.c:1174 ++#, 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] "" ++"\n" ++"Grupo de sección COMDAT [%2zu] '%s' con firma '%s' contiene entrada %zu:\n" ++msgstr[1] "" ++"\n" ++"Grupo de sección COMDAT [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" ++ ++#: ../src/readelf.c:1179 ++#, 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] "" ++"\n" ++"Grupo de sección [%2zu] '%s' con firma '%s' contiene entrada %zu:\n" ++msgstr[1] "" ++"\n" ++"Grupo de sección [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" ++ ++#: ../src/readelf.c:1187 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1201 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1352 ++#, c-format ++msgid "" ++"\n" ++"Dynamic segment contains %lu entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Dynamic segment contains %lu entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++"\n" ++"Segmento dinámico contiene entrada %lu:\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'\n" ++msgstr[1] "" ++"\n" ++"Segmento dinámico contiene entradas %lu:\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'\n" ++ ++#: ../src/readelf.c:1364 ++msgid " Type Value\n" ++msgstr " Tipo Valor\n" ++ ++#: ../src/readelf.c:1388 ++#, c-format ++msgid "Shared library: [%s]\n" ++msgstr "Biblioteca compartida: [%s]\n" ++ ++#: ../src/readelf.c:1393 ++#, c-format ++msgid "Library soname: [%s]\n" ++msgstr "Nombre-so de la biblioteca: [%s]\n" ++ ++#: ../src/readelf.c:1398 ++#, c-format ++msgid "Library rpath: [%s]\n" ++msgstr "Rpath de la biblioteca: [%s]\n" ++ ++#: ../src/readelf.c:1403 ++#, c-format ++msgid "Library runpath: [%s]\n" ++msgstr "Ruta de ejecución de la biblioteca: [%s]\n" ++ ++#: ../src/readelf.c:1423 ++#, c-format ++msgid "% (bytes)\n" ++msgstr "% (bytes)\n" ++ ++#: ../src/readelf.c:1533 ++#: ../src/readelf.c:1719 ++#, c-format ++msgid "" ++"\n" ++"Invalid symbol table at offset %#0\n" ++msgstr "" ++"\n" ++"Tabla de símbolos inválida en compensación %#0\n" ++ ++#: ../src/readelf.c:1551 ++#: ../src/readelf.c:1736 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++"\n" ++"Sección de reubicación [%2zu] '%s' para sección [%2u] '%s' en compensación %#0 contiene entrada %d:\n" ++msgstr[1] "" ++"\n" ++"Sección de reubicación [%2zu] '%s' para sección [%2u] '%s' en compensación %#0 contiene entradas %d:\n" ++ ++#. 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. ++#: ../src/readelf.c:1566 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++"\n" ++"Sección de reubicación[%2u] '%s' en compensación %#0 contiene entrada %d:\n" ++msgstr[1] "" ++"\n" ++"Sección de reubicación [%2u] '%s' en compensación %#0 contiene entradas %d:\n" ++ ++#: ../src/readelf.c:1576 ++msgid " Offset Type Value Name\n" ++msgstr " Compensación Tipo Valor Nombre\n" ++ ++#: ../src/readelf.c:1578 ++msgid " Offset Type Value Name\n" ++msgstr " Compensación Tipo Valor Nombre\n" ++ ++#: ../src/readelf.c:1631 ++#: ../src/readelf.c:1642 ++#: ../src/readelf.c:1655 ++#: ../src/readelf.c:1673 ++#: ../src/readelf.c:1685 ++#: ../src/readelf.c:1804 ++#: ../src/readelf.c:1816 ++#: ../src/readelf.c:1830 ++#: ../src/readelf.c:1849 ++#: ../src/readelf.c:1862 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1643 ++#: ../src/readelf.c:1817 ++#: ../src/objdump.c:379 ++msgid "INVALID SYMBOL" ++msgstr "SÍMBOLO INVÁLIDO" ++ ++#: ../src/readelf.c:1674 ++#: ../src/readelf.c:1850 ++#: ../src/objdump.c:394 ++msgid "INVALID SECTION" ++msgstr "SECCIÓN INVÁLIDA" ++ ++#: ../src/readelf.c:1748 ++msgid " Offset Type Value Addend Name\n" ++msgstr " Compensación Tipo Valor Nombre Adend\n" ++ ++#: ../src/readelf.c:1750 ++msgid " Offset Type Value Addend Name\n" ++msgstr " Compensación Tipo Valor Nombre Adend\n" ++ ++#: ../src/readelf.c:1951 ++#, 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] "" ++"\n" ++"La tabla de símbolos [%2u] '%s' contiene entrada %u:\n" ++msgstr[1] "" ++"\n" ++"La tabla de símbolos [%2u] '%s' contiene entradas %u:\n" ++ ++#: ../src/readelf.c:1957 ++#, c-format ++msgid " %lu local symbol String table: [%2u] '%s'\n" ++msgid_plural " %lu local symbols String table: [%2u] '%s'\n" ++msgstr[0] "símbolos locales %lu Tabla de cadena: [%2u] '%s'\n" ++msgstr[1] " Símbolos locales %lu Tabla de cadenas: [%2u] '%s'\n" ++ ++#: ../src/readelf.c:1967 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr " Núm: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" ++ ++#: ../src/readelf.c:1969 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr " Num: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" ++ ++#: ../src/readelf.c:1989 ++#, c-format ++msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++ ++#: ../src/readelf.c:2077 ++#, c-format ++msgid "bad dynamic symbol" ++msgstr "símbolo dinámico erróneo" ++ ++#: ../src/readelf.c:2159 ++msgid "none" ++msgstr "nada" ++ ++#: ../src/readelf.c:2176 ++msgid "| " ++msgstr "| " ++ ++#: ../src/readelf.c:2201 ++#, c-format ++msgid "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++"\n" ++"Sección de versión necesita [%2u] '%s' contiene entrada %d entry:\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'\n" ++msgstr[1] "" ++"\n" ++"Versión necesita sección [%2u] '%s' contiene entrada %d:\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'\n" ++ ++#: ../src/readelf.c:2224 ++#, c-format ++msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" ++msgstr " %#06x: Versión: %hu Fichero: %s Conteo: %hu\n" ++ ++#: ../src/readelf.c:2237 ++#, c-format ++msgid " %#06x: Name: %s Flags: %s Version: %hu\n" ++msgstr " %#06x: Nombre: %s Banderas: %s Versión: %hu\n" ++ ++#: ../src/readelf.c:2268 ++#, c-format ++msgid "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++"\n" ++"Sección de definición de versión [%2u] '%s' contiene entrada %d:\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'\n" ++msgstr[1] "" ++"\n" ++"Sección de definición de versión [%2u] '%s' contiene %d entrada:\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'\n" ++ ++#: ../src/readelf.c:2298 ++#, c-format ++msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" ++msgstr " %#06x: Versión: %hd Banderas: %s Índice: %hd Conteo: %hd Nombre: %s\n" ++ ++#: ../src/readelf.c:2313 ++#, c-format ++msgid " %#06x: Parent %d: %s\n" ++msgstr " %#06x: Principal %d: %s\n" ++ ++#: ../src/readelf.c:2545 ++#, c-format ++msgid "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgid_plural "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgstr[0] "" ++"\n" ++"Sección de versión de símbolos [%2u] '%s' contiene %d entrada:\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'" ++msgstr[1] "" ++"\n" ++"Sección de versión de símbolos [%2u] '%s' contiene entradas %d:\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'" ++ ++#: ../src/readelf.c:2575 ++msgid " 0 *local* " ++msgstr " 0 *local* " ++ ++#: ../src/readelf.c:2580 ++msgid " 1 *global* " ++msgstr " 1 *global* " ++ ++#: ../src/readelf.c:2611 ++#, c-format ++msgid "" ++"\n" ++"Histogram for bucket list length in section [%2u] '%s' (total of %d bucket):\n" ++" Addr: %#0* Offset: %#08 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* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++"\n" ++"Histograma para longitud de lista de cubeta en sección [%2u] '%s' (total de cubetas %d):\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'\n" ++msgstr[1] "" ++"\n" ++"Histograma para longitud de lista de cubeta en sección [%2u] '%s' (total de cubetas %d):\n" ++" Dirección: %#0* Compensación: %#08 Enlace a sección: [%2u] '%s'\n" ++ ++#: ../src/readelf.c:2634 ++#, c-format ++msgid " Length Number % of total Coverage\n" ++msgstr " Longitud Número % of total Cobertura\n" ++ ++#: ../src/readelf.c:2636 ++#, c-format ++msgid " 0 %6 %5.1f%%\n" ++msgstr " 0 %6 %5.1f%%\n" ++ ++#: ../src/readelf.c:2643 ++#, c-format ++msgid "%7d %6 %5.1f%% %5.1f%%\n" ++msgstr "%7d %6 %5.1f%% %5.1f%%\n" ++ ++#: ../src/readelf.c:2656 ++#, c-format ++msgid "" ++" Average number of tests: successful lookup: %f\n" ++" unsuccessful lookup: %f\n" ++msgstr "" ++" Número promedio de pruebas: búsqueda exitosa: %f\n" ++" búsqueda sin éxito: %f\n" ++ ++#: ../src/readelf.c:2674 ++#: ../src/readelf.c:2716 ++#: ../src/readelf.c:2757 ++#, c-format ++msgid "cannot get data for section %d: %s" ++msgstr "No se pueden obtener datos para la sección %d: %s" ++ ++#: ../src/readelf.c:2811 ++#, c-format ++msgid "" ++" Symbol Bias: %u\n" ++" Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" ++msgstr "" ++" Polarización de símbolo: %u\n" ++" Tamaño de Bitmask: %zu bytes %%% bits establecen segundo cambio de dispersión: %u\n" ++ ++#: ../src/readelf.c:2885 ++#, c-format ++msgid "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++"\n" ++"Sección de lista de biblioteca [%2zu] '%s' en compensación %#0 contiene entrada %d:\n" ++msgstr[1] "" ++"\n" ++"Sección de lista de biblioteca [%2zu] '%s' en compensación %#0 contiene entradas %d:\n" ++ ++#: ../src/readelf.c:2899 ++msgid " Library Time Stamp Checksum Version Flags" ++msgstr " Biblioteca Marca de tiempo Indicadores de versión de suma de verificación" ++ ++#: ../src/readelf.c:2949 ++#, c-format ++msgid "" ++"\n" ++"Object attributes section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"Sección de atributos de objeto [%2zu] '%s' de % bytes con desplazamiento %#0:\n" ++ ++#: ../src/readelf.c:2965 ++msgid " Owner Size\n" ++msgstr " Propietario Tamaño\n" ++ ++#: ../src/readelf.c:2991 ++#, c-format ++msgid " %-13s %4\n" ++msgstr " %-13s %4\n" ++ ++#: ../src/readelf.c:3023 ++#, c-format ++msgid " %-4u %12\n" ++msgstr " %-4u %12\n" ++ ++#. Tag_File ++#: ../src/readelf.c:3028 ++#, c-format ++msgid " File: %11\n" ++msgstr " File: %11\n" ++ ++#: ../src/readelf.c:3063 ++#, c-format ++msgid " %s: %, %s\n" ++msgstr " %s: %, %s\n" ++ ++#: ../src/readelf.c:3066 ++#, c-format ++msgid " %s: %\n" ++msgstr " %s: %\n" ++ ++#: ../src/readelf.c:3069 ++#, c-format ++msgid " %s: %s\n" ++msgstr " %s: %s\n" ++ ++#: ../src/readelf.c:3076 ++#, c-format ++msgid " %u: %\n" ++msgstr " %u: %\n" ++ ++#: ../src/readelf.c:3079 ++#, c-format ++msgid " %u: %s\n" ++msgstr " %u: %s\n" ++ ++#: ../src/readelf.c:3115 ++#, c-format ++msgid "%s+%# <%s+%#>" ++msgstr "%s+%# <%s+%#>" ++ ++#: ../src/readelf.c:3118 ++#, c-format ++msgid "%s+%#0* <%s+%#>" ++msgstr "%s+%#0* <%s+%#>" ++ ++#: ../src/readelf.c:3123 ++#, c-format ++msgid "%# <%s+%#>" ++msgstr "%# <%s+%#>" ++ ++#: ../src/readelf.c:3126 ++#, c-format ++msgid "%#0* <%s+%#>" ++msgstr "%#0* <%s+%#>" ++ ++#: ../src/readelf.c:3132 ++#, c-format ++msgid "%s+%# <%s>" ++msgstr "%s+%# <%s>" ++ ++#: ../src/readelf.c:3135 ++#, c-format ++msgid "%s+%#0* <%s>" ++msgstr "%s+%#0* <%s>" ++ ++#: ../src/readelf.c:3139 ++#, c-format ++msgid "%# <%s>" ++msgstr "%# <%s>" ++ ++#: ../src/readelf.c:3142 ++#, c-format ++msgid "%#0* <%s>" ++msgstr "%#0* <%s>" ++ ++#: ../src/readelf.c:3147 ++#, c-format ++msgid "%s+%#" ++msgstr "%s+%#" ++ ++#: ../src/readelf.c:3150 ++#, c-format ++msgid "%s+%#0*" ++msgstr "%s+%#0*" ++ ++#: ../src/readelf.c:3258 ++#, c-format ++msgid "unknown tag %hx" ++msgstr "etiqueta %hx desconocida" ++ ++#: ../src/readelf.c:3260 ++#, c-format ++msgid "unknown user tag %hx" ++msgstr "Usuario de etiqueta %hx desconocido " ++ ++#: ../src/readelf.c:3478 ++#, c-format ++msgid "unknown attribute %hx" ++msgstr "atributo de sección %hx desconocido" ++ ++#: ../src/readelf.c:3481 ++#, c-format ++msgid "unknown user attribute %hx" ++msgstr "Atributo de usuario desconocido %hx" ++ ++#: ../src/readelf.c:3527 ++#, c-format ++msgid "unknown form %" ++msgstr "Forma % desconocida" ++ ++#: ../src/readelf.c:3761 ++msgid "empty block" ++msgstr "bloque vacío" ++ ++#: ../src/readelf.c:3764 ++#, c-format ++msgid "%zu byte block:" ++msgstr "bloque de byte %zu:" ++ ++#: ../src/readelf.c:4173 ++#, c-format ++msgid "%*s[%4] %s \n" ++msgstr "%*s[%4] %s \n" ++ ++#: ../src/readelf.c:4186 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [ Code]\n" ++msgstr "" ++"\n" ++"Sección DWARF [%2zu] '%s' en compensación %#:\n" ++" [ Código]\n" ++ ++#: ../src/readelf.c:4193 ++#, c-format ++msgid "" ++"\n" ++"Abbreviation section at offset %:\n" ++msgstr "" ++"\n" ++"Sección de abreviatura en compensación %:\n" ++ ++#: ../src/readelf.c:4206 ++#, c-format ++msgid " *** error while reading abbreviation: %s\n" ++msgstr " *** error en lectura de abreviatura: %s\n" ++ ++#: ../src/readelf.c:4222 ++#, c-format ++msgid " [%5u] offset: %, children: %s, tag: %s\n" ++msgstr " [%5u] compensación: %, hijos: %s, etiqueta: %s\n" ++ ++#: ../src/readelf.c:4225 ++msgid "yes" ++msgstr "sí" ++ ++#: ../src/readelf.c:4225 ++msgid "no" ++msgstr "no" ++ ++#: ../src/readelf.c:4261 ++#, c-format ++msgid "cannot get .debug_aranges content: %s" ++msgstr "no se ha podido obtener contenido de .debug_aranges: %s" ++ ++#: ../src/readelf.c:4266 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entry:\n" ++msgid_plural "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entries:\n" ++msgstr[0] "" ++"\n" ++"Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" ++msgstr[1] "" ++"\n" ++"Sección DWARF [%2zu] '%s' en compensación %# contiene entradas %zu:\n" ++ ++#: ../src/readelf.c:4296 ++#, c-format ++msgid " [%*zu] ???\n" ++msgstr " [%*zu] ???\n" ++ ++#: ../src/readelf.c:4298 ++#, c-format ++msgid " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" ++msgstr " Inicio [%*zu]: %0#*, longitud: %5, compensación CU DIE: %6\n" ++ ++#: ../src/readelf.c:4317 ++#, c-format ++msgid "cannot get .debug_ranges content: %s" ++msgstr "no se ha podido obtener contenido de .debug_ranges: %s" ++ ++#: ../src/readelf.c:4322 ++#: ../src/readelf.c:4808 ++#: ../src/readelf.c:5450 ++#: ../src/readelf.c:5895 ++#: ../src/readelf.c:5990 ++#: ../src/readelf.c:6162 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++"\n" ++"Sección DWARF [%2zu] '%s' en compensación %#:\n" ++ ++#: ../src/readelf.c:4336 ++#: ../src/readelf.c:5909 ++#, c-format ++msgid " [%6tx] \n" ++msgstr " [%6tx] \n" ++ ++#: ../src/readelf.c:4358 ++#: ../src/readelf.c:5931 ++#, c-format ++msgid " [%6tx] base address %s\n" ++msgstr " [%6tx] (dirección base) %s\n" ++ ++#. We have an address range entry. ++#. First address range entry in a list. ++#: ../src/readelf.c:4369 ++#, c-format ++msgid " [%6tx] %s..%s\n" ++msgstr " [%6tx] %s..%s\n" ++ ++#: ../src/readelf.c:4371 ++#, c-format ++msgid " %s..%s\n" ++msgstr " %s..%s\n" ++ ++#: ../src/readelf.c:4797 ++#: ../src/readelf.c:6228 ++#: ../src/readelf.c:6330 ++#, c-format ++msgid "cannot get %s content: %s" ++msgstr "No se puede obtener el contenido %s: %s" ++ ++#: ../src/readelf.c:4804 ++#, c-format ++msgid "" ++"\n" ++"Call frame information section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++"\n" ++"Sección de información de marco de llamada [%2zu] '%s' en compensación %#:\n" ++ ++#: ../src/readelf.c:4831 ++#: ../src/readelf.c:5484 ++#, c-format ++msgid "invalid data in section [%zu] '%s'" ++msgstr "Datos inválidos en sección [%zu] '%s'" ++ ++#: ../src/readelf.c:4853 ++#, c-format ++msgid "" ++"\n" ++" [%6tx] Zero terminator\n" ++msgstr "" ++"\n" ++" [%6tx] Terminator cero\n" ++ ++#: ../src/readelf.c:4922 ++#, c-format ++msgid "invalid augmentation length" ++msgstr "longitud de aumento inválida" ++ ++#: ../src/readelf.c:4934 ++msgid "FDE address encoding: " ++msgstr "Codificación de dirección FDE:" ++ ++#: ../src/readelf.c:4940 ++msgid "LSDA pointer encoding: " ++msgstr "Codificación de puntero LSDA:" ++ ++#: ../src/readelf.c:5032 ++#, c-format ++msgid " (offset: %#)" ++msgstr " (compensación: %#)" ++ ++#: ../src/readelf.c:5039 ++#, c-format ++msgid " (end offset: %#)" ++msgstr " (fin de compensación: %#)" ++ ++#: ../src/readelf.c:5066 ++#, c-format ++msgid " %-26sLSDA pointer: %#\n" ++msgstr "Puntero %-26sLSDA: %#\n" ++ ++#: ../src/readelf.c:5112 ++#, c-format ++msgid "cannot get attribute code: %s" ++msgstr "No se puede obtener código de atributo: %s" ++ ++#: ../src/readelf.c:5120 ++#, c-format ++msgid "cannot get attribute form: %s" ++msgstr "No se puede obtener forma de atributo: %s" ++ ++#: ../src/readelf.c:5133 ++#, c-format ++msgid "cannot get attribute value: %s" ++msgstr "No se puede obtener valor: %s" ++ ++#: ../src/readelf.c:5329 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [Offset]\n" ++msgstr "" ++"\n" ++"Sección DWARF [%2zu] '%s' en compensación %#:\n" ++" [Offset]\n" ++ ++#: ../src/readelf.c:5354 ++#, c-format ++msgid "" ++" Compilation unit at offset %:\n" ++" Version: %, Abbreviation section offset: %, Address size: %, Offset size: %\n" ++msgstr "" ++"Unidad de compilación en compensación %:\n" ++" Versión: %, Compensación de sección de abreviatura: %, Tamaño de dirección: %, Tamaño de compensación: %\n" ++ ++#: ../src/readelf.c:5372 ++#, c-format ++msgid "cannot get DIE at offset % in section '%s': %s" ++msgstr "no se puede obtener DIE en compensación % en sección '%s': %s" ++ ++#: ../src/readelf.c:5383 ++#, c-format ++msgid "cannot get DIE offset: %s" ++msgstr "no se puede obtener DIE en compensación: %s" ++ ++#: ../src/readelf.c:5391 ++#, c-format ++msgid "cannot get tag of DIE at offset % in section '%s': %s" ++msgstr "no se ha podido obtener etiqueta de DIE en compensación% en sección '%s': %s" ++ ++#: ../src/readelf.c:5420 ++#, c-format ++msgid "cannot get next DIE: %s\n" ++msgstr "No se puede obtener próximo DIE: %s\n" ++ ++#: ../src/readelf.c:5427 ++#, c-format ++msgid "cannot get next DIE: %s" ++msgstr "No se puede obtener próximo DIE: %s" ++ ++#: ../src/readelf.c:5462 ++#, c-format ++msgid "cannot get line data section data: %s" ++msgstr "No se puede obtener sección de datos de línea: %s" ++ ++#: ../src/readelf.c:5475 ++#, c-format ++msgid "" ++"\n" ++"Table at offset %Zu:\n" ++msgstr "" ++"\n" ++"Tabla en compensación %Zu:\n" ++ ++#. Print what we got so far. ++#: ../src/readelf.c:5527 ++#, c-format ++msgid "" ++"\n" ++" Length: %\n" ++" DWARF version: %\n" ++" Prologue length: %\n" ++" Minimum instruction length: %\n" ++" Initial value if '%s': %\n" ++" Line base: %\n" ++" Line range: %\n" ++" Opcode base: %\n" ++"\n" ++"Opcodes:\n" ++msgstr "" ++"\n" ++" Longitud: %\n" ++" Versión DWARF: %\n" ++" Longitud de prólogo: %\n" ++" Longitud de instrucción mínima: %\n" ++" Valor inicial si '%s': %\n" ++" Base de línea: %\n" ++" Rango de línea: %\n" ++" Base de código operativo: %\n" ++"\n" ++"Códigos operativos:\n" ++ ++#: ../src/readelf.c:5546 ++#, c-format ++msgid "invalid data at offset %tu in section [%zu] '%s'" ++msgstr "datos inválidos en compensación %tu en sección [%zu] '%s'" ++ ++#: ../src/readelf.c:5561 ++#, c-format ++msgid " [%*] %hhu argument\n" ++msgid_plural " [%*] %hhu arguments\n" ++msgstr[0] " [%*] argumento %hhu \n" ++msgstr[1] " [%*] argumento %hhu\n" ++ ++#: ../src/readelf.c:5569 ++msgid "" ++"\n" ++"Directory table:" ++msgstr "" ++"\n" ++"Tabla de Directorio:" ++ ++#: ../src/readelf.c:5585 ++msgid "" ++"\n" ++"File name table:\n" ++" Entry Dir Time Size Name" ++msgstr "" ++"\n" ++"Tabla de nombre de archivo:\n" ++" Directorio de entrada Tiempo Tamaño Nombre" ++ ++#: ../src/readelf.c:5614 ++msgid "" ++"\n" ++"Line number statements:" ++msgstr "" ++"\n" ++" Declaraciones de número de Línea:" ++ ++#: ../src/readelf.c:5675 ++#, c-format ++msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" ++msgstr " opcode especial %u: dirección+%u = %s, línea%+d = %zu\n" ++ ++#: ../src/readelf.c:5695 ++#, c-format ++msgid " extended opcode %u: " ++msgstr " Código operativo extendido %u: " ++ ++#: ../src/readelf.c:5700 ++msgid "end of sequence" ++msgstr "Fin de secuencia" ++ ++#: ../src/readelf.c:5715 ++#, c-format ++msgid "set address to %s\n" ++msgstr "Establecer dirección a %s\n" ++ ++#: ../src/readelf.c:5736 ++#, c-format ++msgid "define new file: dir=%u, mtime=%, length=%, name=%s\n" ++msgstr "definir nuevo archivo: dir=%u, mtime=%, longitud=%, nombre=%s\n" ++ ++#. Unknown, ignore it. ++#: ../src/readelf.c:5745 ++msgid "unknown opcode" ++msgstr "código operativo desconocido " ++ ++#. Takes no argument. ++#: ../src/readelf.c:5757 ++msgid " copy" ++msgstr "Copiar" ++ ++#: ../src/readelf.c:5767 ++#, c-format ++msgid "advance address by %u to %s\n" ++msgstr "Dirección de avance por %u a %s\n" ++ ++#: ../src/readelf.c:5778 ++#, c-format ++msgid " advance line by constant %d to %\n" ++msgstr " línea de avance por la constante %d a %\n" ++ ++#: ../src/readelf.c:5786 ++#, c-format ++msgid " set file to %\n" ++msgstr " establecer archivo a %\n" ++ ++#: ../src/readelf.c:5796 ++#, c-format ++msgid " set column to %\n" ++msgstr " Establecer columna a %\n" ++ ++#: ../src/readelf.c:5803 ++#, c-format ++msgid " set '%s' to %\n" ++msgstr "Establecer '%s' a %\n" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5809 ++msgid " set basic block flag" ++msgstr "Establecer bandera de bloque básico" ++ ++#: ../src/readelf.c:5819 ++#, c-format ++msgid "advance address by constant %u to %s\n" ++msgstr "Dirección de avance por constante %u a %s\n" ++ ++#: ../src/readelf.c:5835 ++#, c-format ++msgid "advance address by fixed value %u to %s\n" ++msgstr "dirección de avance por valor corregido %u a %s\n" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5844 ++msgid " set prologue end flag" ++msgstr " Establecer bandera prologue_end" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5849 ++msgid " set epilogue begin flag" ++msgstr " Establecer bandera epilogue_begin" ++ ++#. 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. ++#: ../src/readelf.c:5858 ++#, c-format ++msgid " unknown opcode with % parameter:" ++msgid_plural " unknown opcode with % parameters:" ++msgstr[0] " opcódigo con parámetro % desconocido:" ++msgstr[1] " opcódigo con parámetros % desconocido:" ++ ++#: ../src/readelf.c:5890 ++#, c-format ++msgid "cannot get .debug_loc content: %s" ++msgstr "no es posible obtener contenido de .debug_loc: %s" ++ ++#. First entry in a list. ++#: ../src/readelf.c:5945 ++#, c-format ++msgid " [%6tx] %s..%s" ++msgstr " [%6tx] %s..%s" ++ ++#: ../src/readelf.c:5947 ++#, c-format ++msgid " %s..%s" ++msgstr " %s..%s" ++ ++#: ../src/readelf.c:6000 ++#, c-format ++msgid "cannot get macro information section data: %s" ++msgstr "no es posible obtener datos de la sección de macro información: %s" ++ ++#: ../src/readelf.c:6079 ++#, c-format ++msgid "%*s*** non-terminated string at end of section" ++msgstr "%*s*** cadena no finalizada al final de la sección" ++ ++#: ../src/readelf.c:6147 ++#, c-format ++msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" ++msgstr " Compensación [%5d] DIE: %6, Compensación CU DIE: %6, nombre: %s\n" ++ ++#: ../src/readelf.c:6186 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" %*s String\n" ++msgstr "" ++"\n" ++"Sección DWARF [%2zu] '%s' en compensación %#:\n" ++" %*s String\n" ++ ++#: ../src/readelf.c:6200 ++#, c-format ++msgid " *** error while reading strings: %s\n" ++msgstr " *** error en lectura de cadenas: %s\n" ++ ++#: ../src/readelf.c:6220 ++#, c-format ++msgid "" ++"\n" ++"Call frame search table section [%2zu] '.eh_frame_hdr':\n" ++msgstr "" ++"\n" ++"Sección de tabla de búsqueda de marco de llamada [%2zu] '.eh_frame_hdr':\n" ++ ++#: ../src/readelf.c:6322 ++#, c-format ++msgid "" ++"\n" ++"Exception handling table section [%2zu] '.gcc_except_table':\n" ++msgstr "" ++"\n" ++"Excepción en el manejo de la sección de tabla [%2zu] '.gcc_except_table':\n" ++ ++#: ../src/readelf.c:6345 ++#, c-format ++msgid " LPStart encoding: %#x " ++msgstr "Codificación LPStart: %#x " ++ ++#: ../src/readelf.c:6357 ++#, c-format ++msgid " TType encoding: %#x " ++msgstr "Codificación TType: %#x " ++ ++#: ../src/readelf.c:6371 ++#, c-format ++msgid " Call site encoding: %#x " ++msgstr "Codificación de sitio de llamada: %#x " ++ ++#: ../src/readelf.c:6384 ++msgid "" ++"\n" ++" Call site table:" ++msgstr "" ++"\n" ++" Tabla de sitio de llamada:" ++ ++#: ../src/readelf.c:6398 ++#, c-format ++msgid "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++msgstr "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++ ++#: ../src/readelf.c:6458 ++#, c-format ++msgid "invalid TType encoding" ++msgstr "Codificación TType inválida" ++ ++#: ../src/readelf.c:6482 ++#, c-format ++msgid "cannot get debug context descriptor: %s" ++msgstr "no se puede depurar descriptor de contexto: %s" ++ ++#: ../src/readelf.c:6618 ++#: ../src/readelf.c:7210 ++#, c-format ++msgid "cannot convert core note data: %s" ++msgstr "no es posible convertir datos de la nota principal: %s" ++ ++#: ../src/readelf.c:6950 ++#, c-format ++msgid "" ++"\n" ++"%*s... ..." ++msgstr "" ++"\n" ++"%*s... ..." ++ ++#: ../src/readelf.c:7309 ++msgid " Owner Data size Type\n" ++msgstr " Owner Data size Type\n" ++ ++#: ../src/readelf.c:7327 ++#, c-format ++msgid " %-13.*s %9 %s\n" ++msgstr " %-13.*s %9 %s\n" ++ ++#: ../src/readelf.c:7361 ++#, c-format ++msgid "cannot get content of note section: %s" ++msgstr "no se puede obtener el contenido de sección de nota: %s" ++ ++#: ../src/readelf.c:7388 ++#, c-format ++msgid "" ++"\n" ++"Note section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"Sección de nota [%2zu] '%s' de % bytes en compensación %#0:\n" ++ ++#: ../src/readelf.c:7411 ++#, c-format ++msgid "" ++"\n" ++"Note segment of % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"Segmento de nota de % bytes en compensación %#0:\n" ++ ++#: ../src/readelf.c:7457 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no data to dump.\n" ++msgstr "" ++"\n" ++"Sección [%Zu] '%s' no tiene datos para volcar.\n" ++ ++#: ../src/readelf.c:7463 ++#: ../src/readelf.c:7486 ++#, c-format ++msgid "cannot get data for section [%Zu] '%s': %s" ++msgstr "no se pueden obtener datos para sección [%Zu] '%s': %s" ++ ++#: ../src/readelf.c:7467 ++#, c-format ++msgid "" ++"\n" ++"Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"Volcado Hex de sección [%Zu] '%s', % bytes en compensación %#0:\n" ++ ++#: ../src/readelf.c:7480 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no strings to dump.\n" ++msgstr "" ++"\n" ++"Sección [%Zu] '%s' no tiene datos para volcar.\n" ++ ++#: ../src/readelf.c:7490 ++#, c-format ++msgid "" ++"\n" ++"String section [%Zu] '%s' contains % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"Sección de cadena [%Zu] '%s' contiene % bytes en compensación %#0:\n" ++ ++#: ../src/readelf.c:7538 ++#, c-format ++msgid "" ++"\n" ++"section [%lu] does not exist" ++msgstr "" ++"\n" ++"sección [%lu] no existe" ++ ++#: ../src/readelf.c:7565 ++#, c-format ++msgid "" ++"\n" ++"section '%s' does not exist" ++msgstr "" ++"\n" ++"sección '%s' no existe" ++ ++#: ../src/readelf.c:7626 ++#, c-format ++msgid "cannot get symbol index of archive '%s': %s" ++msgstr "no se puede obtener el índice de símbolo de archivo '%s': %s" ++ ++#: ../src/readelf.c:7629 ++#, c-format ++msgid "" ++"\n" ++"Archive '%s' has no symbol index\n" ++msgstr "" ++"\n" ++"Archivo '%s' no tiene índice de símbolo\n" ++ ++#: ../src/readelf.c:7633 ++#, c-format ++msgid "" ++"\n" ++"Index of archive '%s' has %Zu entries:\n" ++msgstr "" ++"\n" ++"Índice de archivo '%s' tiene %Zu entradas:\n" ++ ++#: ../src/readelf.c:7651 ++#, c-format ++msgid "cannot extract member at offset %Zu in '%s': %s" ++msgstr "no es posible extraer miembro en compensación %Zu en '%s': %s" ++ ++#: ../src/readelf.c:7656 ++#, c-format ++msgid "Archive member '%s' contains:\n" ++msgstr "Miembro de archivo contiene '%s':\n" ++ ++#: ../src/size.c:68 ++msgid "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default is `bsd'" ++msgstr "Utilice el formato de salida FORMAT. FORMAT puede ser tanto `bsd' como `sysv'. El establecido por defecto es `bsd'" ++ ++#: ../src/size.c:70 ++msgid "Same as `--format=sysv'" ++msgstr "lo mismo que `--format=sysv'" ++ ++#: ../src/size.c:71 ++msgid "Same as `--format=bsd'" ++msgstr "lo mismo que `--format=bsd'" ++ ++#: ../src/size.c:74 ++msgid "Same as `--radix=10'" ++msgstr "lo mismo que `--radix=10'" ++ ++#: ../src/size.c:75 ++msgid "Same as `--radix=8'" ++msgstr "lo mismo que `--radix=8'" ++ ++#: ../src/size.c:76 ++msgid "Same as `--radix=16'" ++msgstr "lo mismo que`--radix=16'" ++ ++#: ../src/size.c:78 ++msgid "Similar to `--format=sysv' output but in one line" ++msgstr "Similar a la salida `--format=sysv' pero en una sola línea" ++ ++#: ../src/size.c:82 ++msgid "Print size and permission flags for loadable segments" ++msgstr "Imprime el tamaño y las marcas de permiso para los segmentos que pueden ser cargados" ++ ++#: ../src/size.c:83 ++msgid "Display the total sizes (bsd only)" ++msgstr "Muestra el tamaño total (bsd solamente)" ++ ++#. Short description of program. ++#: ../src/size.c:88 ++msgid "List section sizes of FILEs (a.out by default)." ++msgstr "Lista los tamaños de sección de FICHEROS (por defecto a.out). " ++ ++#: ../src/size.c:269 ++#, c-format ++msgid "Invalid format: %s" ++msgstr "Formato de archivo inválido: %s" ++ ++#: ../src/size.c:280 ++#, c-format ++msgid "Invalid radix: %s" ++msgstr "Radical inválido: %s" ++ ++#: ../src/size.c:339 ++#, c-format ++msgid "%s: file format not recognized" ++msgstr "%s: No se reconoce el formato del fichero" ++ ++#: ../src/size.c:446 ++#: ../src/size.c:589 ++#, c-format ++msgid " (ex %s)" ++msgstr " (ex %s)" ++ ++#: ../src/size.c:614 ++msgid "(TOTALS)\n" ++msgstr "(TOTALES)\n" ++ ++#: ../src/strip.c:74 ++msgid "Place stripped output into FILE" ++msgstr "Colocar la salida obtenida en FICHERO" ++ ++#: ../src/strip.c:75 ++msgid "Extract the removed sections into FILE" ++msgstr "Extraer secciones eliminadas en FICHERO" ++ ++#: ../src/strip.c:76 ++msgid "Embed name FILE instead of -f argument" ++msgstr "Incorporar nombre FILE en lugar de argumento -f" ++ ++#: ../src/strip.c:80 ++msgid "Remove all debugging symbols" ++msgstr "Elimina todos los símbolos de depuración" ++ ++#: ../src/strip.c:84 ++msgid "Copy modified/access timestamps to the output" ++msgstr "Copiar marcas de tiempo modificadas/acceso a la salida" ++ ++#: ../src/strip.c:86 ++msgid "Remove .comment section" ++msgstr "Quitar sección de comentario" ++ ++#: ../src/strip.c:89 ++msgid "Relax a few rules to handle slightly broken ELF files" ++msgstr "Relaja algunas reglas para manejar ficheros ELF rotos" ++ ++#. Short description of program. ++#: ../src/strip.c:94 ++msgid "Discard symbols from object files." ++msgstr "Descarta símbolos de archivos objeto." ++ ++#: ../src/strip.c:186 ++#, c-format ++msgid "Only one input file allowed together with '-o' and '-f'" ++msgstr "Sólo se permite ingresar un archivo junto con '-o' y '-f'" ++ ++#: ../src/strip.c:222 ++#, c-format ++msgid "-f option specified twice" ++msgstr "opción -f especificada dos veces" ++ ++#: ../src/strip.c:231 ++#, c-format ++msgid "-F option specified twice" ++msgstr "opción -F especificada dos veces" ++ ++#: ../src/strip.c:240 ++#: ../src/unstrip.c:125 ++#, c-format ++msgid "-o option specified twice" ++msgstr "opción -o especificada dos veces" ++ ++#: ../src/strip.c:260 ++#, c-format ++msgid "-R option supports only .comment section" ++msgstr "la opción -R soporta únicamente. sección de comentario" ++ ++#: ../src/strip.c:298 ++#: ../src/strip.c:322 ++#, c-format ++msgid "cannot stat input file '%s'" ++msgstr "no sepuede stat fichero de entrada '%s'" ++ ++#: ../src/strip.c:312 ++#, c-format ++msgid "while opening '%s'" ++msgstr "mientras se abría '%s'" ++ ++#: ../src/strip.c:350 ++#, c-format ++msgid "%s: cannot use -o or -f when stripping archive" ++msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" ++ ++#: ../src/strip.c:448 ++#, c-format ++msgid "cannot open EBL backend" ++msgstr "No se puede abrir el segundo plano EBL" ++ ++#: ../src/strip.c:498 ++#: ../src/strip.c:522 ++#, c-format ++msgid "cannot create new file '%s': %s" ++msgstr "no se puede crear fichero nuevo '%s': %s" ++ ++#: ../src/strip.c:582 ++#, c-format ++msgid "illformed file '%s'" ++msgstr "Fichero illformed '%s'" ++ ++#: ../src/strip.c:869 ++#: ../src/strip.c:956 ++#, c-format ++msgid "while generating output file: %s" ++msgstr "al generar fichero de salida: %s" ++ ++#: ../src/strip.c:929 ++#: ../src/strip.c:1668 ++#, c-format ++msgid "%s: error while creating ELF header: %s" ++msgstr "%s: error al crear encabezamiento ELF: %s" ++ ++#: ../src/strip.c:943 ++#, c-format ++msgid "while preparing output for '%s'" ++msgstr "al preparar salida para '%s'" ++ ++#: ../src/strip.c:994 ++#: ../src/strip.c:1050 ++#, c-format ++msgid "while create section header section: %s" ++msgstr "al crear sección de encabezamiento de sección: %s" ++ ++#: ../src/strip.c:1000 ++#, c-format ++msgid "cannot allocate section data: %s" ++msgstr "no se puede asignar espacio para los datos: %s" ++ ++#: ../src/strip.c:1059 ++#, c-format ++msgid "while create section header string table: %s" ++msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" ++ ++#: ../src/strip.c:1593 ++#: ../src/strip.c:1690 ++#, c-format ++msgid "while writing '%s': %s" ++msgstr "al escribir '%s': %s" ++ ++#: ../src/strip.c:1604 ++#, c-format ++msgid "while creating '%s'" ++msgstr "al crear '%s'" ++ ++#: ../src/strip.c:1616 ++#, c-format ++msgid "while computing checksum for debug information" ++msgstr "al computar la suma de verificación para información de depuración" ++ ++#: ../src/strip.c:1676 ++#, c-format ++msgid "%s: error while reading the file: %s" ++msgstr "%s: error al leer el fichero: %s" ++ ++#: ../src/strip.c:1722 ++#: ../src/strip.c:1729 ++#, c-format ++msgid "error while finishing '%s': %s" ++msgstr "Error al terminar '%s': %s" ++ ++#: ../src/strip.c:1752 ++#: ../src/strip.c:1809 ++#, c-format ++msgid "cannot set access and modification date of '%s'" ++msgstr "no es posible establecer acceso y fecha de modificación de '%s'" ++ ++#: ../src/ld.c:87 ++msgid "Input File Control:" ++msgstr "Control de fichero de entrada:" ++ ++#: ../src/ld.c:89 ++msgid "Include whole archives in the output from now on." ++msgstr "A partir de ahora incluye archivos completos en la salida." ++ ++#: ../src/ld.c:91 ++msgid "Stop including the whole arhives in the output." ++msgstr "Deja de incluir archivos completos en la salida." ++ ++#: ../src/ld.c:92 ++#: ../src/ld.c:106 ++#: ../src/ld.c:184 ++msgid "FILE" ++msgstr "FICHERO" ++ ++#: ../src/ld.c:93 ++msgid "Start a group." ++msgstr "Inicia un grupo" ++ ++#: ../src/ld.c:94 ++msgid "End a group." ++msgstr "Termina un grupo." ++ ++#: ../src/ld.c:95 ++msgid "PATH" ++msgstr "RUTA" ++ ++#: ../src/ld.c:96 ++msgid "Add PATH to list of directories files are searched in." ++msgstr "Agrega RUTA a la lista de los directorios en los que se realiza la búsqueda." ++ ++#: ../src/ld.c:98 ++msgid "Only set DT_NEEDED for following dynamic libs if actually used" ++msgstr "Sólo se define DT_NEEDED para las siguientes bibliotecas dinámicas, si están siendo utilizadas" ++ ++#: ../src/ld.c:100 ++msgid "Always set DT_NEEDED for following dynamic libs" ++msgstr "Siempre establece DT_NEEDED para las siguientes bibliotecas dinámicas" ++ ++#: ../src/ld.c:102 ++msgid "Ignore LD_LIBRARY_PATH environment variable." ++msgstr "Ignora la variable de entorno LD_LIBRARY_PATH." ++ ++#: ../src/ld.c:105 ++msgid "Output File Control:" ++msgstr "Control de fichero de salida:" ++ ++#: ../src/ld.c:106 ++msgid "Place output in FILE." ++msgstr "Coloca salida en FICHERO." ++ ++#: ../src/ld.c:109 ++msgid "Object is marked to not use default search path at runtime." ++msgstr "Objeto está marcado para no usar ruta de búsqueda predeterminada en tiempo de ejecución." ++ ++#: ../src/ld.c:111 ++msgid "Same as --whole-archive." ++msgstr "Lo mismo que --whole-archive." ++ ++#: ../src/ld.c:112 ++msgid "Default rules of extracting from archive; weak references are not enough." ++msgstr "Reglas establecidas por defecto para extraer desde el archivo; las referencias débiles no son suficientes." ++ ++#: ../src/ld.c:116 ++msgid "Weak references cause extraction from archive." ++msgstr "Referencias débiles causan extracción del archivo." ++ ++#: ../src/ld.c:118 ++msgid "Allow multiple definitions; first is used." ++msgstr "Permite definiciones múltiples; se utiliza la primera." ++ ++#: ../src/ld.c:120 ++msgid "Disallow/allow undefined symbols in DSOs." ++msgstr "Habilita/inhabilita símbolos indefinidos en los DSO." ++ ++#: ../src/ld.c:123 ++msgid "Object requires immediate handling of $ORIGIN." ++msgstr "Los objetos requieren manipulación inmediata de $ORIGIN." ++ ++#: ../src/ld.c:125 ++msgid "Relocation will not be processed lazily." ++msgstr "La reubicación no se procesará de forma perezosa." ++ ++#: ../src/ld.c:127 ++msgid "Object cannot be unloaded at runtime." ++msgstr "El objeto no se puede descargar en tiempo de ejecución." ++ ++#: ../src/ld.c:129 ++msgid "Mark object to be initialized first." ++msgstr "Marcar objeto a ser inicializado primero." ++ ++#: ../src/ld.c:131 ++msgid "Enable/disable lazy-loading flag for following dependencies." ++msgstr "Activar/desactivar marca lazy-loading para las siguientes dependencias." ++ ++#: ../src/ld.c:133 ++msgid "Mark object as not loadable with 'dlopen'." ++msgstr "Marcar el objeto como no cargable con 'dlopen'" ++ ++#: ../src/ld.c:135 ++msgid "Ignore/record dependencies on unused DSOs." ++msgstr "Ignorar/registrar dependencias sobre DSO no utilizados." ++ ++#: ../src/ld.c:137 ++msgid "Generated DSO will be a system library." ++msgstr "El DSO generado será una biblioteca del sistema." ++ ++#: ../src/ld.c:138 ++msgid "ADDRESS" ++msgstr "DIRECCIÓN" ++ ++#: ../src/ld.c:138 ++msgid "Set entry point address." ++msgstr "Establecer dirección de entrada de punto" ++ ++#: ../src/ld.c:141 ++msgid "Do not link against shared libraries." ++msgstr "No enlazar con bibliotecas compartidas." ++ ++#: ../src/ld.c:144 ++msgid "Prefer linking against shared libraries." ++msgstr "No enlazar con bibliotecas compartidas." ++ ++#: ../src/ld.c:145 ++msgid "Export all dynamic symbols." ++msgstr "Exportar todos los símbolos dinámicos." ++ ++#: ../src/ld.c:146 ++msgid "Strip all symbols." ++msgstr "Descartar todos los símbolos." ++ ++#: ../src/ld.c:147 ++msgid "Strip debugging symbols." ++msgstr "Descartar los símbolos de depuración." ++ ++#: ../src/ld.c:149 ++msgid "Assume pagesize for the target system to be SIZE." ++msgstr "Asumir que pagesize para el sistema de destino sea SIZE." ++ ++#: ../src/ld.c:151 ++msgid "Set runtime DSO search path." ++msgstr "Establecer la ruta de búsqueda tiempo de ejecución DSO." ++ ++#: ../src/ld.c:154 ++msgid "Set link time DSO search path." ++msgstr "Establecer ruta de tiempo de enlace DSO." ++ ++#: ../src/ld.c:155 ++msgid "Generate dynamic shared object." ++msgstr "Generar objeto compartido dinámico." ++ ++#: ../src/ld.c:156 ++msgid "Generate relocatable object." ++msgstr "Generar objeto reubicable" ++ ++#: ../src/ld.c:159 ++msgid "Causes symbol not assigned to a version be reduced to local." ++msgstr "Hacer que un símbolo no asignado a una versión sea reducido a local." ++ ++#: ../src/ld.c:160 ++msgid "Remove unused sections." ++msgstr "Eliminar las secciones no utilizadas." ++ ++#: ../src/ld.c:163 ++msgid "Don't remove unused sections." ++msgstr "No eliminar las secciones no utilizadas." ++ ++#: ../src/ld.c:164 ++msgid "Set soname of shared object." ++msgstr "Establecer soname de objeto compartido." ++ ++#: ../src/ld.c:165 ++msgid "Set the dynamic linker name." ++msgstr "Establecer el nombre de enlazador dinámico." ++ ++#: ../src/ld.c:168 ++msgid "Add/suppress addition indentifying link-editor to .comment section." ++msgstr "Añadir/suprimir adición identificando enlace-editor para .sección de comentario." ++ ++#: ../src/ld.c:171 ++msgid "Create .eh_frame_hdr section" ++msgstr "Crear una sección .eh_frame_hdr" ++ ++#: ../src/ld.c:173 ++msgid "Set hash style to sysv, gnu or both." ++msgstr "Establecer el estilo de dispersión un sysv, gnu o ambos." ++ ++#: ../src/ld.c:175 ++msgid "Generate build ID note (md5, sha1 (default), uuid)." ++msgstr "Crear una nota del ID de compilación (md5, sha1 (por defecto), uuid)." ++ ++#: ../src/ld.c:177 ++msgid "Linker Operation Control:" ++msgstr "Control de volumen desconocido:" ++ ++#: ../src/ld.c:178 ++msgid "Verbose messages." ++msgstr "Mensajes explicativos." ++ ++#: ../src/ld.c:179 ++msgid "Trace file opens." ++msgstr "Rastrear apertura de ficheros." ++ ++#: ../src/ld.c:181 ++msgid "Trade speed for less memory usage" ++msgstr "Intercambiar velocidad por menor utilización de memoria" ++ ++#: ../src/ld.c:182 ++msgid "LEVEL" ++msgstr "NIVEL" ++ ++#: ../src/ld.c:183 ++msgid "Set optimization level to LEVEL." ++msgstr "Establecer el nivel de optimización a LEVEL." ++ ++#: ../src/ld.c:184 ++msgid "Use linker script in FILE." ++msgstr "Usar script enlazador en FICHERO." ++ ++#: ../src/ld.c:187 ++msgid "Select to get parser debug information" ++msgstr "Seleccionar para obtener análisis de información de depuración" ++ ++#: ../src/ld.c:190 ++msgid "Read version information from FILE." ++msgstr "Leer información de versión de FICHERO." ++ ++#: ../src/ld.c:191 ++msgid "Set emulation to NAME." ++msgstr "Establecer emulación a NOMBRE." ++ ++#. Short description of program. ++#: ../src/ld.c:197 ++msgid "Combine object and archive files." ++msgstr "Combinar objeto y archivos de almacenamiento." ++ ++#. Strings for arguments in help texts. ++#: ../src/ld.c:200 ++msgid "[FILE]..." ++msgstr "[FICHERO]..." ++ ++#: ../src/ld.c:333 ++#, c-format ++msgid "At least one input file needed" ++msgstr "Se necesita al menos un fichero de entrada" ++ ++#: ../src/ld.c:349 ++#, c-format ++msgid "error while preparing linking" ++msgstr "Error al preparar vinculación" ++ ++#: ../src/ld.c:356 ++#, c-format ++msgid "cannot open linker script '%s'" ++msgstr "no se puede abrir script enlazador '%s'" ++ ++#: ../src/ld.c:397 ++#, c-format ++msgid "-( without matching -)" ++msgstr "-( sin coincidir -)" ++ ++#: ../src/ld.c:572 ++#: ../src/ld.c:610 ++#, c-format ++msgid "only one option of -G and -r is allowed" ++msgstr "Solamente una opción de -G y -r es permitida" ++ ++#: ../src/ld.c:594 ++#, c-format ++msgid "more than one '-m' parameter" ++msgstr "más de un parámetro '-m'" ++ ++#: ../src/ld.c:604 ++#: ../src/ld.c:1013 ++#, c-format ++msgid "unknown option `-%c %s'" ++msgstr "opción desconocida `-%c %s'" ++ ++#: ../src/ld.c:646 ++#, c-format ++msgid "invalid page size value '%s': ignored" ++msgstr "Valor de tamaño de página'%s': ignorado" ++ ++#: ../src/ld.c:687 ++#, c-format ++msgid "invalid hash style '%s'" ++msgstr "estilo de dispersión inválido '%s'" ++ ++#: ../src/ld.c:697 ++#, c-format ++msgid "invalid build-ID style '%s'" ++msgstr "estilo de cuerpo-ID inválido '%s'" ++ ++#: ../src/ld.c:785 ++#, c-format ++msgid "More than one output file name given." ++msgstr "Se ha dado más de un nombre de archivo de salida." ++ ++#: ../src/ld.c:802 ++#, c-format ++msgid "Invalid optimization level `%s'" ++msgstr "Nivel de optimización inválido `%s'" ++ ++#: ../src/ld.c:850 ++#, c-format ++msgid "nested -( -) groups are not allowed" ++msgstr "no se permiten grupos -( -) en nido" ++ ++#: ../src/ld.c:869 ++#, c-format ++msgid "-) without matching -(" ++msgstr "-) sin coincidir -(" ++ ++#: ../src/ld.c:1046 ++#, c-format ++msgid "unknown option '-%c %s'" ++msgstr "Opción desconocida '-%c %s'" ++ ++#: ../src/ld.c:1150 ++#, c-format ++msgid "could not find input file to determine output file format" ++msgstr "no se pudo encontrar un archivo de entrada que determine el formato del archivo de salida" ++ ++#: ../src/ld.c:1152 ++#, c-format ++msgid "try again with an appropriate '-m' parameter" ++msgstr "Inténtelo con una parámetro '-m' apropiado" ++ ++#: ../src/ld.c:1446 ++#, c-format ++msgid "cannot read version script '%s'" ++msgstr "No se puede leer script de versión '%s'" ++ ++#. The symbol is already defined and now again ++#. in the linker script. This is an error. ++#: ../src/ld.c:1512 ++#: ../src/ld.c:1551 ++#, c-format ++msgid "duplicate definition of '%s' in linker script" ++msgstr "Duplicar definición de '%s' en script enlazador" ++ ++#: ../src/ldgeneric.c:209 ++#: ../src/ldgeneric.c:5151 ++#, c-format ++msgid "cannot create string table" ++msgstr "no puede crear tabla de cadenas" ++ ++#: ../src/ldgeneric.c:255 ++#, c-format ++msgid "cannot load ld backend library '%s': %s" ++msgstr "no se puede cargar biblioteca ID de segundo plano '%s': %s" ++ ++#: ../src/ldgeneric.c:265 ++#, c-format ++msgid "cannot find init function in ld backend library '%s': %s" ++msgstr "no se pudo encontrar la función init en la biblioteca ld de segundo plano '%s': %s" ++ ++#: ../src/ldgeneric.c:310 ++#, c-format ++msgid "%s listed more than once as input" ++msgstr "%s listado más de una vez como entrada" ++ ++#: ../src/ldgeneric.c:424 ++#, c-format ++msgid "%s (for -l%s)\n" ++msgstr "%s (para -l%s)\n" ++ ++#: ../src/ldgeneric.c:425 ++#, c-format ++msgid "%s (for DT_NEEDED %s)\n" ++msgstr "%s (para DT_NEEDED %s)\n" ++ ++#: ../src/ldgeneric.c:573 ++#, c-format ++msgid "Warning: type of `%s' changed from %s in %s to %s in %s" ++msgstr "Advertencia: el tipo de `%s' cambió de %s en %s a %s en %s" ++ ++#: ../src/ldgeneric.c:586 ++#, c-format ++msgid "Warning: size of `%s' changed from % in %s to % in %s" ++msgstr "Advertencia: el tamaño de `%s' cambió de % en %s a % en %s" ++ ++#: ../src/ldgeneric.c:677 ++#, c-format ++msgid "(%s+%#): multiple definition of %s `%s'\n" ++msgstr "(%s+%#): definición múltiplo de %s `%s'\n" ++ ++#: ../src/ldgeneric.c:700 ++#, c-format ++msgid "(%s+%#): first defined here\n" ++msgstr "(%s+%#): se definió primero aquí\n" ++ ++#: ../src/ldgeneric.c:819 ++#, c-format ++msgid "%s: cannot get section group data: %s" ++msgstr "%s: no se pueden obtener datos de sección de grupo: %s" ++ ++#. If we come here no section group contained the given section ++#. despite the SHF_GROUP flag. This is an error in the input ++#. file. ++#: ../src/ldgeneric.c:840 ++#, c-format ++msgid "%s: section '%s' with group flag set does not belong to any group" ++msgstr "%s: la sección '%s' con bandera de grupo establecida no pertenece a ningún grupo" ++ ++#: ../src/ldgeneric.c:885 ++#, c-format ++msgid "%s: section [%2d] '%s' is not in the correct section group" ++msgstr "%s: la sección [%2d] '%s' no se encuentra en el grupo de sección correcto" ++ ++#. This should never happen. ++#: ../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 "%s: fichero ELF inválido (%s:%d)\n" ++ ++#: ../src/ldgeneric.c:1250 ++#, c-format ++msgid "%s: only files of type ET_REL might contain section groups" ++msgstr "%s: solo archivos de tipo ET_REL pueden contener grupos de sección" ++ ++#: ../src/ldgeneric.c:1302 ++#, c-format ++msgid "%s: cannot determine signature of section group [%2zd] '%s': %s" ++msgstr "%s: no es posible determinar la firma del grupo de sección [%2zd] '%s': %s " ++ ++#: ../src/ldgeneric.c:1314 ++#, c-format ++msgid "%s: cannot get content of section group [%2zd] '%s': %s'" ++msgstr "%s: no es posible obtener el contenido de la sección del grupo [%2zd] '%s': %s'" ++ ++#: ../src/ldgeneric.c:1328 ++#, c-format ++msgid "%s: group member %zu of section group [%2zd] '%s' has too high index: %" ++msgstr "%s el miembro del grupo %zu del grupo de sección [%2zd] '%s' posee el índice demasiado alto: %" ++ ++#: ../src/ldgeneric.c:1350 ++#, c-format ++msgid "%s: section '%s' has unknown type: %d" ++msgstr "%s: sección '%s' tiene tipo desconocido: %d" ++ ++#: ../src/ldgeneric.c:1729 ++#, c-format ++msgid "cannot get descriptor for ELF file (%s:%d): %s\n" ++msgstr "no es posible obtener descriptor para el archivo ELF (%s:%d): %s\n" ++ ++#: ../src/ldgeneric.c:1899 ++#, c-format ++msgid "cannot read archive `%s': %s" ++msgstr "no se puede leer archivo `%s': %s" ++ ++#: ../src/ldgeneric.c:2020 ++#, c-format ++msgid "file of type %s cannot be linked in\n" ++msgstr "archivo de tipo %s no puede ser enlazado en\n" ++ ++#: ../src/ldgeneric.c:2032 ++#, c-format ++msgid "%s: input file incompatible with ELF machine type %s\n" ++msgstr "%s: el archivo ingresado es incompatible con una máquina ELF tipo %s\n" ++ ++#: ../src/ldgeneric.c:2044 ++#, c-format ++msgid "%s: cannot get section header string table index: %s\n" ++msgstr "%s: no se ha podido obtener un índice para la tabla de la cadena del encabezamiento de la sección: %s\n" ++ ++#: ../src/ldgeneric.c:2073 ++#, c-format ++msgid "cannot use DSO '%s' when generating relocatable object file" ++msgstr "no es posible utilizar DSO '%s' al general un archivo de objeto realojable" ++ ++#: ../src/ldgeneric.c:2158 ++#, c-format ++msgid "input file '%s' ignored" ++msgstr "archivo de entrada '%s' ignorado" ++ ++#. 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. ++#: ../src/ldgeneric.c:2372 ++#, c-format ++msgid "undefined symbol `%s' in %s" ++msgstr "símbolo indefinido `%s' en %s" ++ ++#: ../src/ldgeneric.c:2702 ++#, c-format ++msgid "cannot create ELF descriptor for output file: %s" ++msgstr "no es posible crear un descriptor ELF para el archivo de salida: %s" ++ ++#: ../src/ldgeneric.c:2709 ++#, c-format ++msgid "could not create ELF header for output file: %s" ++msgstr "no es posible crear un encabezamiento ELF para el archivo de salida: %s" ++ ++#: ../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 "no se puede crear sección para archivo de salida: %s" ++ ++#: ../src/ldgeneric.c:3444 ++#, c-format ++msgid "address computation expression contains variable '%s'" ++msgstr "la expresión de computación contiene la variable '%s'" ++ ++#: ../src/ldgeneric.c:3489 ++#, c-format ++msgid "argument '%' of ALIGN in address computation expression is no power of two" ++msgstr "el argumento '%' de ALIGN en expresión de dirección de computación no es potencia de dos" ++ ++#: ../src/ldgeneric.c:3684 ++#, c-format ++msgid "cannot find entry symbol '%s': defaulting to %#0*" ++msgstr "no se puede encontrar símbolo de entrada '%s': predeterminada para %#0*" ++ ++#: ../src/ldgeneric.c:3690 ++#, c-format ++msgid "no entry symbol specified: defaulting to %#0*" ++msgstr "no se ha especificado una entrada de símbolo: estableciendo por defecto a %#0*" ++ ++#: ../src/ldgeneric.c:3920 ++#, c-format ++msgid "cannot create GNU hash table section for output file: %s" ++msgstr "no se puede crear una tabla de dispersión GNU para archivo de salida: %s" ++ ++#: ../src/ldgeneric.c:4071 ++#, c-format ++msgid "cannot create hash table section for output file: %s" ++msgstr "no es posible crear una sección para la tabla de dispersión del archivo de salida: %s" ++ ++#: ../src/ldgeneric.c:4114 ++#, c-format ++msgid "cannot create build ID section: %s" ++msgstr "no se puede crear sección de creación de ID: %s" ++ ++#: ../src/ldgeneric.c:4191 ++#, c-format ++msgid "cannot convert section data to file format: %s" ++msgstr "no es posible convertir los datos de la sección en formato de archivo: %s" ++ ++#: ../src/ldgeneric.c:4200 ++#, c-format ++msgid "cannot convert section data to memory format: %s" ++msgstr "no es posible convertir datos de la sección en formato de memoria: %s" ++ ++#: ../src/ldgeneric.c:4261 ++#, c-format ++msgid "cannot read enough data for UUID" ++msgstr "no es posible leer suficientes datos para el UUID" ++ ++#: ../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 "no es posible crear tabla de símbolo para el comando de salida: %s" ++ ++#: ../src/ldgeneric.c:5300 ++#: ../src/ldgeneric.c:5852 ++#, c-format ++msgid "section index too large in dynamic symbol table" ++msgstr "el índice de la sección es demasiado extenso en la tabla de símbolos dinámicos" ++ ++#: ../src/ldgeneric.c:5745 ++#, c-format ++msgid "cannot create versioning section: %s" ++msgstr "no se puede crear sección de versión: %s" ++ ++#: ../src/ldgeneric.c:5818 ++#, c-format ++msgid "cannot create dynamic symbol table for output file: %s" ++msgstr "no es posible crear tabla de símbolos dinámicos para el archivo de salida: %s" ++ ++#: ../src/ldgeneric.c:5994 ++#, c-format ++msgid "cannot create versioning data: %s" ++msgstr "no se pueden crear datos de versión: %s" ++ ++#: ../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 "no se puede crear sección de cadenas de encabezamiento de sección: %s" ++ ++#: ../src/ldgeneric.c:6101 ++#, c-format ++msgid "cannot create section header string section" ++msgstr "no se puede crear sección de cadenas de encabezamiento de sección" ++ ++#: ../src/ldgeneric.c:6259 ++#, c-format ++msgid "cannot create program header: %s" ++msgstr "no se puede crear encabezamiento de programa: %s" ++ ++#: ../src/ldgeneric.c:6267 ++#, c-format ++msgid "while determining file layout: %s" ++msgstr "al determinar diseño de fichero: %s" ++ ++#: ../src/ldgeneric.c:6388 ++#, c-format ++msgid "internal error: non-nobits section follows nobits section" ++msgstr "error interno: sección non-nobits sigue a sección nobits" ++ ++#: ../src/ldgeneric.c:6925 ++#, c-format ++msgid "cannot get header of 0th section: %s" ++msgstr "No se puede obtener encabezamiento de sección 0th: %s" ++ ++#: ../src/ldgeneric.c:6941 ++#: ../src/unstrip.c:1808 ++#, c-format ++msgid "cannot update ELF header: %s" ++msgstr "No se puede actualizar encabezamiento ELF: %s" ++ ++#: ../src/ldgeneric.c:6972 ++#, c-format ++msgid "linker backend didn't specify function to relocate section" ++msgstr "enlazador de segundo plano no especificó función para reubicar sección" ++ ++#: ../src/ldgeneric.c:6984 ++#, c-format ++msgid "while writing output file: %s" ++msgstr "Ocurrió un error de fichero de salida: %s" ++ ++#: ../src/ldgeneric.c:6989 ++#, c-format ++msgid "while finishing output file: %s" ++msgstr "error al cerrar el fichero de salida: %s" ++ ++#: ../src/ldgeneric.c:6995 ++#, c-format ++msgid "cannot stat output file" ++msgstr "no se puede generar stat de fichero de salida" ++ ++#: ../src/ldgeneric.c:7011 ++#, c-format ++msgid "WARNING: temporary output file overwritten before linking finished" ++msgstr "ADVERTENCIA: archivo de salida temporal sobreescrito antes que haya concluido el enlazamiento" ++ ++#. This cannot be implemented generally. There should have been a ++#. machine dependent implementation and we should never have arrived ++#. here. ++#: ../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 "no hay máquina específica de implementación '%s'" ++ ++#: ../src/i386_ld.c:210 ++#, c-format ++msgid "cannot allocate PLT section: %s" ++msgstr "No se puede asignar sección PLT: %s" ++ ++#: ../src/i386_ld.c:232 ++#, c-format ++msgid "cannot allocate PLTREL section: %s" ++msgstr "No se puede asignar sección PLTREL: %s" ++ ++#: ../src/i386_ld.c:253 ++#, c-format ++msgid "cannot allocate GOT section: %s" ++msgstr "No se puede asignar sección GOT: %s" ++ ++#: ../src/i386_ld.c:274 ++#, c-format ++msgid "cannot allocate GOTPLT section: %s" ++msgstr "No se puede asignar sección GOTPLT: %s" ++ ++#: ../src/i386_ld.c:661 ++#, c-format ++msgid "initial-executable TLS relocation cannot be used " ++msgstr "Reubicación TLS ejecutable-inicial no se puede utilizar" ++ ++#: ../src/ldscript.y:178 ++msgid "mode for segment invalid\n" ++msgstr "modo para segmento inválido\n" ++ ++#: ../src/ldscript.y:465 ++#, c-format ++msgid "while reading version script '%s': %s at line %d" ++msgstr "al leer script de versión '%s': %s en línea %d" ++ ++#: ../src/ldscript.y:466 ++#, c-format ++msgid "while reading linker script '%s': %s at line %d" ++msgstr "al leer script de enlace '%s': %s en línea %d" ++ ++#: ../src/ldscript.y:745 ++#, c-format ++msgid "symbol '%s' in declared both local and global for unnamed version" ++msgstr "el símbolo '%s' en declarado tanto local como global para la versión sin nombre" ++ ++#: ../src/ldscript.y:747 ++#, c-format ++msgid "symbol '%s' in declared both local and global for version '%s'" ++msgstr "el símbolo '%s' en declarado tanto local como global para la versión '%s'" ++ ++#: ../src/ldscript.y:767 ++#: ../src/ldscript.y:774 ++#, c-format ++msgid "default visibility set as local and global" ++msgstr "la visibilidad establecida por defecto establecida como local y global" ++ ++#: ../src/elflint.c:72 ++msgid "Be extremely strict, flag level 2 features." ++msgstr "Sea extremadamente estricto, característica de marca de nivel 2." ++ ++#: ../src/elflint.c:73 ++msgid "Do not print anything if successful" ++msgstr "No imprime nada si está correcto" ++ ++#: ../src/elflint.c:74 ++msgid "Binary is a separate debuginfo file" ++msgstr "Binario es un archivo debuginfo independiente" ++ ++#: ../src/elflint.c:76 ++msgid "Binary has been created with GNU ld and is therefore known to be broken in certain ways" ++msgstr "Binario ha sido creado con GNU Id y por lo tanto se sabe que puede estar roto de alguna forma" ++ ++#. Short description of program. ++#: ../src/elflint.c:82 ++msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." ++msgstr "Chequeo minucioso de ficheros ELF de acuerdo con gABI/psABI " ++ ++#: ../src/elflint.c:166 ++#, c-format ++msgid "cannot generate Elf descriptor: %s\n" ++msgstr "no se puede crear descriptor ELF: %s\n" ++ ++#: ../src/elflint.c:185 ++#, c-format ++msgid "error while closing Elf descriptor: %s\n" ++msgstr "error al cerrar el descriptor ELF: %s\n" ++ ++#: ../src/elflint.c:189 ++msgid "No errors" ++msgstr "No hay errores" ++ ++#: ../src/elflint.c:302 ++#, c-format ++msgid " error while freeing sub-ELF descriptor: %s\n" ++msgstr " error al liberar descriptor sub-ELF: %s\n" ++ ++#. We cannot do anything. ++#: ../src/elflint.c:310 ++#, c-format ++msgid "Not an ELF file - it has the wrong magic bytes at the start\n" ++msgstr "No es un fichero ELF - tiene los bytes mágicos errados en el inicio\n" ++ ++#: ../src/elflint.c:370 ++#, c-format ++msgid "e_ident[%d] == %d is no known class\n" ++msgstr "e_ident[%d] == %d es una clase desconocida\n" ++ ++#: ../src/elflint.c:375 ++#, c-format ++msgid "e_ident[%d] == %d is no known data encoding\n" ++msgstr "e_ident[%d] == %d es una codificación de datos desconocida\n" ++ ++#: ../src/elflint.c:379 ++#, c-format ++msgid "unknown ELF header version number e_ident[%d] == %d\n" ++msgstr "número de versión de encabezamiento ELF desconocido e_ident[%d] == %d\n" ++ ++#: ../src/elflint.c:385 ++#, c-format ++msgid "unsupported OS ABI e_ident[%d] == '%s'\n" ++msgstr "Sistema operativo OS ABI e_ident[%d] == '%s' incompatible\n" ++ ++#: ../src/elflint.c:391 ++#, c-format ++msgid "unsupport ABI version e_ident[%d] == %d\n" ++msgstr "Versión incompatible ABI e_ident[%d] == %d\n" ++ ++#: ../src/elflint.c:396 ++#, c-format ++msgid "e_ident[%zu] is not zero\n" ++msgstr "e_ident[%zu] no es cero\n" ++ ++#: ../src/elflint.c:401 ++#, c-format ++msgid "unknown object file type %d\n" ++msgstr "tipo de fichero objeto desconocido %d\n" ++ ++#: ../src/elflint.c:408 ++#, c-format ++msgid "unknown machine type %d\n" ++msgstr "tipo de máquina desconocido %d\n" ++ ++#: ../src/elflint.c:412 ++#, c-format ++msgid "unknown object file version\n" ++msgstr "versión de fichero objeto desconocido\n" ++ ++#: ../src/elflint.c:418 ++#, c-format ++msgid "invalid program header offset\n" ++msgstr "Compensación de encabezamiento de programa inválida\n" ++ ++#: ../src/elflint.c:420 ++#, c-format ++msgid "executables and DSOs cannot have zero program header offset\n" ++msgstr "tanto los ejecutables como los DSO no pueden tener compensación de encabezamiento de programa cero\n" ++ ++#: ../src/elflint.c:424 ++#, c-format ++msgid "invalid number of program header entries\n" ++msgstr "cantidad no válida de entradas del encabezamiento del programa\n" ++ ++#: ../src/elflint.c:432 ++#, c-format ++msgid "invalid section header table offset\n" ++msgstr "compensación de sección de tabla de encabezamiento inválida\n" ++ ++#: ../src/elflint.c:435 ++#, c-format ++msgid "section header table must be present\n" ++msgstr "tabla de encabezamiento de sección debe estar presente\n" ++ ++#: ../src/elflint.c:449 ++#, c-format ++msgid "invalid number of section header table entries\n" ++msgstr "cantidad no válida de entradas en la tabla del encabezamiento de sección\n" ++ ++#: ../src/elflint.c:466 ++#, c-format ++msgid "invalid section header index\n" ++msgstr "Índice de sección de encabezamiento inválido\n" ++ ++#: ../src/elflint.c:480 ++#, c-format ++msgid "invalid number of program header table entries\n" ++msgstr "cantidad no válida de entradas de tabla de encabezado del programa\n" ++ ++#: ../src/elflint.c:489 ++#, c-format ++msgid "invalid machine flags: %s\n" ++msgstr "Indicadores de máquina inválidos: %s\n" ++ ++#: ../src/elflint.c:496 ++#: ../src/elflint.c:513 ++#, c-format ++msgid "invalid ELF header size: %hd\n" ++msgstr "tamaño inválido del encabezamiento ELF: %hd\n" ++ ++#: ../src/elflint.c:499 ++#: ../src/elflint.c:516 ++#, c-format ++msgid "invalid program header size: %hd\n" ++msgstr "tamaño inválido del encabezamiento del programa: %hd\n" ++ ++#: ../src/elflint.c:502 ++#: ../src/elflint.c:519 ++#, c-format ++msgid "invalid program header position or size\n" ++msgstr "tamaño o posición inválidos del encabezamiento del programa\n" ++ ++#: ../src/elflint.c:505 ++#: ../src/elflint.c:522 ++#, c-format ++msgid "invalid section header size: %hd\n" ++msgstr "tamaño inválido del encabezamiento de sección: %hd\n" ++ ++#: ../src/elflint.c:508 ++#: ../src/elflint.c:525 ++#, c-format ++msgid "invalid section header position or size\n" ++msgstr "tamaño o posición no válidos del encabezamiento de sección\n" ++ ++#: ../src/elflint.c:569 ++#, c-format ++msgid "section [%2d] '%s': section with SHF_GROUP flag set not part of a section group\n" ++msgstr "sección [%2d] '%s': sección con la bandera SHF_GROUP no es parte de una sección de grupo\n" ++ ++#: ../src/elflint.c:573 ++#, c-format ++msgid "section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n" ++msgstr "sección [%2d] '%s': el grupo de sección [%2zu] '%s' no precede a ningún miembro de grupo\n" ++ ++#: ../src/elflint.c:589 ++#: ../src/elflint.c:1432 ++#: ../src/elflint.c:1482 ++#: ../src/elflint.c:1591 ++#: ../src/elflint.c:2185 ++#: ../src/elflint.c:2699 ++#: ../src/elflint.c:2860 ++#: ../src/elflint.c:2990 ++#: ../src/elflint.c:3162 ++#: ../src/elflint.c:4062 ++#, c-format ++msgid "section [%2d] '%s': cannot get section data\n" ++msgstr "Sección [%2d] '%s': No se pueden obtener datos de sección\n" ++ ++#: ../src/elflint.c:602 ++#: ../src/elflint.c:1598 ++#, c-format ++msgid "section [%2d] '%s': referenced as string table for section [%2d] '%s' but type is not SHT_STRTAB\n" ++msgstr "sección [%2d] '%s': nombrado como una tabla de cadena para la sección [%2d] '%s' pero el tipo no es SHT_STRTAB\n" ++ ++#: ../src/elflint.c:625 ++#, c-format ++msgid "section [%2d] '%s': symbol table cannot have more than one extended index section\n" ++msgstr "sección [%2d] '%s': la tabla de símbolo no puede tener más de una sección de índice extendido\n" ++ ++#: ../src/elflint.c:636 ++#, c-format ++msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" ++msgstr "sección [%2u] '%s': el tamaño de la entrada no coincide con ElfXX_Sym\n" ++ ++#: ../src/elflint.c:645 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %d: %s\n" ++msgstr "Sección [%2d] '%s': no se puede obtener símbolo %d: %s\n" ++ ++#: ../src/elflint.c:650 ++#: ../src/elflint.c:653 ++#: ../src/elflint.c:656 ++#: ../src/elflint.c:659 ++#: ../src/elflint.c:662 ++#: ../src/elflint.c:665 ++#, c-format ++msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" ++msgstr "Sección [%2d] '%s': '%s' en la entrada zeroth no es cero\n" ++ ++#: ../src/elflint.c:668 ++#, c-format ++msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" ++msgstr "sección [%2d] '%s': XINDEX en la entrada zeroth no es cero\n" ++ ++#: ../src/elflint.c:678 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" ++msgstr "sección [%2d] '%s': no es posible obtener el símbolo %zu: %s\n" ++ ++#: ../src/elflint.c:687 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid name value\n" ++msgstr "sección [%2d] '%s': símbolo %zu: valor de nombre inválido\n" ++ ++#: ../src/elflint.c:700 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: too large section index but no extended section index section\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: el índice de sección es demasiado extenso, pero no la sección extendida de la sección de índice\n" ++ ++#: ../src/elflint.c:706 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in st_shndx (%)\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: XINDEX es utilizado para índice que pueda caber en st_shndx (%)\n" ++ ++#. || sym->st_shndx > SHN_HIRESERVE always false ++#: ../src/elflint.c:718 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid section index\n" ++msgstr "sección [%2d] '%s': símbolo %zu: índice de sección inválido\n" ++ ++#: ../src/elflint.c:726 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown type\n" ++msgstr "sección [%2d] '%s': símbolo %zu: tipo desconocido\n" ++ ++#: ../src/elflint.c:732 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" ++msgstr "sección [%2d] '%s': símbolo %zu: asociación de símbolo desconocida\n" ++ ++#: ../src/elflint.c:737 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: símbolo único no de tipo de objeto\n" ++ ++#: ../src/elflint.c:745 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" ++msgstr "sección [%2d] '%s': símbolo %zu: COMMON solo es permitido en archivos realojables\n" ++ ++#: ../src/elflint.c:749 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: símbolos locales COMMON no tienen sentido\n" ++ ++#: ../src/elflint.c:753 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: función en sección COMMON no tiene sentido\n" ++ ++#: ../src/elflint.c:785 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" ++msgstr "sección [%2d] '%s': símbolo %zu: st_value fuera de límites\n" ++ ++#: ../src/elflint.c:791 ++#: ../src/elflint.c:816 ++#: ../src/elflint.c:859 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2d] '%s'\n" ++msgstr "Sección [%2d] '%s': símbolo %zu no se ajusta totalmente en la sección [%2d] '%s'\n" ++ ++#: ../src/elflint.c:800 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have SHF_TLS flag set\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: sección de referencia [%2d] '%s' no tiene establecida bandera SHF_TLS\n" ++ ++#: ../src/elflint.c:810 ++#: ../src/elflint.c:852 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section [%2d] '%s'\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: st_value fuera de límites de sección de referencia [%2d] '%s'\n" ++ ++#: ../src/elflint.c:837 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: símbolo TLS, pero no hay entrada de programa TLS\n" ++ ++#: ../src/elflint.c:845 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%s'\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: st_value falta sección de referencia [%2d] '%s'\n" ++ ++#: ../src/elflint.c:872 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local symbol outside range described in sh_info\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: símbolo local fuera del rango descrito en sh_info\n" ++ ++#: ../src/elflint.c:879 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local symbol outside range described in sh_info\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: símbolo non-local fuera del rango descrito en sh_info\n" ++ ++#: ../src/elflint.c:886 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: símbolo de sección non-local\n" ++ ++#: ../src/elflint.c:936 ++#, c-format ++msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%2d]\n" ++msgstr "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ se refiere a sección errada [%2d]\n" ++ ++#: ../src/elflint.c:943 ++#, c-format ++msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%s'\n" ++msgstr "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ se refiere a sección [%2d] '%s'\n" ++ ++#. 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. ++#: ../src/elflint.c:959 ++#, c-format ++msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not match %s section address %#\n" ++msgstr "Sección [%2d] '%s': valor del símbolo _GLOBAL_OFFSET_TABLE_ %# no coincide con dirección de sección %s %#\n" ++ ++#: ../src/elflint.c:966 ++#, c-format ++msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not match %s section size %\n" ++msgstr "Sección [%2d] '%s': tamaño de símbolo _GLOBAL_OFFSET_TABLE_ % no coincide con tamaño de sección %s %\n" ++ ++#: ../src/elflint.c:974 ++#, c-format ++msgid "section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got section\n" ++msgstr "Sección [%2d] '%s': símbolo _GLOBAL_OFFSET_TABLE_ presente, pero no. sección got\n" ++ ++#: ../src/elflint.c:990 ++#, c-format ++msgid "section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic segment address %#\n" ++msgstr "sección [%2d] '%s': Valor de símbolo _DYNAMIC_ %# no coincide con la dirección de segmento%#\n" ++ ++#: ../src/elflint.c:997 ++#, c-format ++msgid "section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic segment size %\n" ++msgstr "Sección [%2d] '%s': tamaño de símbolo _DYNAMIC % no coincide con tamaño de segmento %\n" ++ ++#: ../src/elflint.c:1010 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-default visibility\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: símbolo en tabla de símbolos dinámicos sin visibilidad predeterminada\n" ++ ++#: ../src/elflint.c:1014 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" ++msgstr "Sección [%2d] '%s': símbolo %zu: bit desconocido establecido en st_other\n" ++ ++#: ../src/elflint.c:1059 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" ++msgstr "Sección [%2d] '%s': DT_RELCOUNT utilizada para esta sección RELA\n" ++ ++#: ../src/elflint.c:1068 ++#: ../src/elflint.c:1120 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" ++msgstr "Sección [%2d] '%s': valor DT_RELCOUNT %d demasiado alto para esta sección\n" ++ ++#: ../src/elflint.c:1093 ++#: ../src/elflint.c:1145 ++#, c-format ++msgid "section [%2d] '%s': relative relocations after index %d as specified by DT_RELCOUNT\n" ++msgstr "Sección [%2d] '%s': reubicaciones relativas después de que el %d de índice haya sido especificado por DT_RELCOUNT\n" ++ ++#: ../src/elflint.c:1099 ++#: ../src/elflint.c:1151 ++#, c-format ++msgid "section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT specified %d relative relocations\n" ++msgstr "Sección [%2d] '%s': reubicación no-relativa en %zu de índice; DT_RELCOUNT especificado %d reubicaciones relativas\n" ++ ++#: ../src/elflint.c:1111 ++#, c-format ++msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" ++msgstr "sección [%2d] '%s': DT_RELACOUNT utilizado para esta sección REL\n" ++ ++#: ../src/elflint.c:1193 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section index\n" ++msgstr "Sección [%2d] '%s': índice de sección de destino inválido\n" ++ ++#: ../src/elflint.c:1206 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section type\n" ++msgstr "Sección [%2d] '%s': tipo de sección de destino inválido\n" ++ ++#: ../src/elflint.c:1214 ++#, c-format ++msgid "section [%2d] '%s': sh_info should be zero\n" ++msgstr "Sección [%2d] '%s': sh_info debe ser cero\n" ++ ++#: ../src/elflint.c:1221 ++#, c-format ++msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" ++msgstr "Sección [%2d] '%s': no reubicaciones para secciones de fusión posibles\n" ++ ++#: ../src/elflint.c:1228 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" ++msgstr "Sección [%2d] '%s': tamaño de entrada de sección no coincide con ElfXX_Rela\n" ++ ++#: ../src/elflint.c:1288 ++#, c-format ++msgid "text relocation flag set but there is no read-only segment\n" ++msgstr "Reubicación de bandera pero no hay segmento de sólo lectura\n" ++ ++#: ../src/elflint.c:1315 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid type\n" ++msgstr "Sección [%2d] '%s': reubicación %zu: tipo inválido\n" ++ ++#: ../src/elflint.c:1323 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: relocation type invalid for the file type\n" ++msgstr "Sección [%2d] '%s': reubicación %zu: tipo de reubicación inválido para el tipo de archivo\n" ++ ++#: ../src/elflint.c:1331 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" ++msgstr "Sección [%2d] '%s': reubicación %zu: índice de símbolo inválido\n" ++ ++#: ../src/elflint.c:1349 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can be used with %s\n" ++msgstr "Sección [%2d] '%s': reubicación %zu: sólo el símbolo '_GLOBAL_OFFSET_TABLE_' puede utilizarse con %s\n" ++ ++#: ../src/elflint.c:1366 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" ++msgstr "Sección [%2d] '%s': reubicación %zu: compensación fuera de límites\n" ++ ++#: ../src/elflint.c:1381 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: copy relocation against symbol of type %s\n" ++msgstr "Sección [%2d] '%s': reubicación %zu: reubicación de copia con símbolo de tipo %s\n" ++ ++#: ../src/elflint.c:1402 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: read-only section modified but text relocation flag not set\n" ++msgstr "Sección [%2d] '%s': reubicación %zu: sección de sólo-lectura modificada, pero no se estableció bandera de reubicación\n" ++ ++#: ../src/elflint.c:1417 ++#, c-format ++msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" ++msgstr "Sección [%2d] '%s': las reubicaciones se hacen con datos cargados y descargados\n" ++ ++#: ../src/elflint.c:1456 ++#: ../src/elflint.c:1506 ++#, c-format ++msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" ++msgstr "Sección [%2d] '%s': no puede obtener reubicación %zu: %s\n" ++ ++#: ../src/elflint.c:1586 ++#, c-format ++msgid "more than one dynamic section present\n" ++msgstr "más de una sección dinámica presente\n" ++ ++#: ../src/elflint.c:1604 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" ++msgstr "Sección [%2d] '%s': tamaño de entrada de sección no coincide con ElfXX_Dyn\n" ++ ++#: ../src/elflint.c:1609 ++#: ../src/elflint.c:1901 ++#, c-format ++msgid "section [%2d] '%s': sh_info not zero\n" ++msgstr "Sección [%2d] '%s': sh_info no es cero\n" ++ ++#: ../src/elflint.c:1619 ++#, c-format ++msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" ++msgstr "Sección [%2d] '%s': no puede obtener entrada de sección dinámica %zu: %s\n" ++ ++#: ../src/elflint.c:1627 ++#, c-format ++msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" ++msgstr "Sección [%2d] '%s': entradas non-DT_NULL siguen a la entrada DT_NULL\n" ++ ++#: ../src/elflint.c:1634 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: unknown tag\n" ++msgstr "Sección [%2d] '%s': entrada %zu: etiqueta desconocida\n" ++ ++#: ../src/elflint.c:1645 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" ++msgstr "Sección [%2d] '%s': entrada %zu: más de una entrada con etiqueta %s\n" ++ ++#: ../src/elflint.c:1655 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" ++msgstr "Sección [%2d] '%s': entrada %zu: nivel 2 etiqueta %s utilizada\n" ++ ++#: ../src/elflint.c:1673 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" ++msgstr "Sección [%2d] '%s': entrada %zu: el valor DT_PLTREL debe ser DT_REL or DT_RELA\n" ++ ++#: ../src/elflint.c:1695 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: pointer does not match address of section [%2d] '%s' referenced by sh_link\n" ++msgstr "Sección [%2d] '%s': entrada %zu: puntero no coincide con dirección de sección [%2d] '%s' al que hace referencia sh_link\n" ++ ++#: ../src/elflint.c:1738 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" ++msgstr "Sección [%2d] '%s': entrada %zu: valor %s debe apuntar en segmento cargado\n" ++ ++#: ../src/elflint.c:1753 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: %s value must be valid offset in section [%2d] '%s'\n" ++msgstr "sección [%2d] '%s': entrada %zu: valor %s debe ser compensación válida en sección [%2d] '%s'\n" ++ ++#: ../src/elflint.c:1773 ++#: ../src/elflint.c:1801 ++#, c-format ++msgid "section [%2d] '%s': contains %s entry but not %s\n" ++msgstr "Sección [%2d] '%s': contiene entrada %s pero no %s\n" ++ ++#: ../src/elflint.c:1785 ++#, c-format ++msgid "section [%2d] '%s': mandatory tag %s not present\n" ++msgstr "Sección [%2d] '%s': etiqueta obligatoria %s no está presente\n" ++ ++#: ../src/elflint.c:1794 ++#, c-format ++msgid "section [%2d] '%s': no hash section present\n" ++msgstr "Sección [%2d] '%s': no hay sección de dispersión presente\n" ++ ++#: ../src/elflint.c:1809 ++#: ../src/elflint.c:1816 ++#, c-format ++msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" ++msgstr "Sección [%2d] '%s': no todas las %s, %s, y %s están presentes\n" ++ ++#: ../src/elflint.c:1826 ++#: ../src/elflint.c:1830 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" ++msgstr "Sección [%2d] '%s': etiqueta %s faltante en DSO marcada durante el pre-enlace\n" ++ ++#: ../src/elflint.c:1836 ++#, c-format ++msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" ++msgstr "Sección [%2d] '%s': archivo no-DSO marcado como dependencia durante el pre-enlace\n" ++ ++#: ../src/elflint.c:1847 ++#: ../src/elflint.c:1851 ++#: ../src/elflint.c:1855 ++#: ../src/elflint.c:1859 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" ++msgstr "Sección [%2d] '%s': etiqueta %s faltante en pre-enlace ejecutable\n" ++ ++#: ../src/elflint.c:1871 ++#, c-format ++msgid "section [%2d] '%s': only relocatable files can have extended section index\n" ++msgstr "Sección [%2d] '%s': sólo los archivos reubicables pueden tener índice de sección extendido\n" ++ ++#: ../src/elflint.c:1881 ++#, c-format ++msgid "section [%2d] '%s': extended section index section not for symbol table\n" ++msgstr "Sección [%2d] '%s': índice de sección extendido no para tabla de símbolos\n" ++ ++#: ../src/elflint.c:1886 ++#, c-format ++msgid "cannot get data for symbol section\n" ++msgstr "no se puede obtener sección para símbolos\n" ++ ++#: ../src/elflint.c:1889 ++#, c-format ++msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" ++msgstr "Sección [%2d] '%s': tamaño de entrada no coincide con Elf32_Word\n" ++ ++#: ../src/elflint.c:1896 ++#, c-format ++msgid "section [%2d] '%s': extended index table too small for symbol table\n" ++msgstr "Sección [%2d] '%s': tabla de índice extendida demasiado pequeña para tabla de símbolos\n" ++ ++#: ../src/elflint.c:1911 ++#, c-format ++msgid "section [%2d] '%s': extended section index in section [%2zu] '%s' refers to same symbol table\n" ++msgstr "Sección [%2d] '%s': índice de sección extendida en sección [%2zu] '%s' se refiere a la misma tabla de símbolos\n" ++ ++#: ../src/elflint.c:1922 ++#, c-format ++msgid "symbol 0 should have zero extended section index\n" ++msgstr "símbolo 0 debe tener índice de sección extendida cero\n" ++ ++#: ../src/elflint.c:1934 ++#, c-format ++msgid "cannot get data for symbol %zu\n" ++msgstr "no puede obtener datos para símbolo %zu\n" ++ ++#: ../src/elflint.c:1939 ++#, c-format ++msgid "extended section index is % but symbol index is not XINDEX\n" ++msgstr "índice de sección extendida es % pero índice de símbolo no es XINDEX\n" ++ ++#: ../src/elflint.c:1955 ++#: ../src/elflint.c:1996 ++#, c-format ++msgid "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" ++msgstr "Sección [%2d] '%s': sección de tabla de dispersión es demasiado pequeña (es %ld, se espera %ld)\n" ++ ++#: ../src/elflint.c:1967 ++#: ../src/elflint.c:2008 ++#, c-format ++msgid "section [%2d] '%s': chain array too large\n" ++msgstr "Sección [%2d] '%s': índice de la cadena es demasiado grande\n" ++ ++#: ../src/elflint.c:1976 ++#: ../src/elflint.c:2017 ++#, c-format ++msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" ++msgstr "Sección [%2d] '%s': referencia de cubetas de dispersión %zu fuera de límites\n" ++ ++#: ../src/elflint.c:1982 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" ++msgstr "Sección [%2d] '%s': referencia de cadena de dispersión %zu fuera de límites\n" ++ ++#: ../src/elflint.c:2023 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference % out of bounds\n" ++msgstr "Sección [%2d] '%s': referencia de cadena de dispersión % fuera de límites\n" ++ ++#: ../src/elflint.c:2038 ++#, c-format ++msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" ++msgstr "Sección [%2d] '%s': tamaño de bitmask no es potencia de 2: %u\n" ++ ++#: ../src/elflint.c:2049 ++#, c-format ++msgid "section [%2d] '%s': hash table section is too small (is %ld, expected at least%ld)\n" ++msgstr "Sección [%2d] '%s': sección de tabla de dispersión es demasiado pequeña (es %ld, se espera al menos least%ld)\n" ++ ++#: ../src/elflint.c:2057 ++#, c-format ++msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" ++msgstr "Sección [%2d] '%s': segundo cambio de función de dispersión demasiado grande: %u\n" ++ ++#: ../src/elflint.c:2089 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" ++msgstr "Sección [%2d] '%s': cadena de dispersión para cubetas %zu inferior a polarización de índice de símbolo\n" ++ ++#: ../src/elflint.c:2110 ++#, c-format ++msgid "section [%2d] '%s': symbol %u referenced in chain for bucket %zu is undefined\n" ++msgstr "Sección [%2d] '%s': el símbolo %u al que se hace referencia en cadena para cubeta %zu es indefinido\n" ++ ++#: ../src/elflint.c:2121 ++#, c-format ++msgid "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" ++msgstr "Sección [%2d] '%s': valor de dispersión para símbolo %u en cadena para cubeta %zu está errado\n" ++ ++#: ../src/elflint.c:2152 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" ++msgstr "Sección [%2d] '%s': cadena de dispersión para cubeta %zu fuera de limites\n" ++ ++#: ../src/elflint.c:2157 ++#, c-format ++msgid "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" ++msgstr "Sección [%2d] '%s': referencia de símbolo en cadena para cubeta %zu fuera de límites\n" ++ ++#: ../src/elflint.c:2163 ++#, c-format ++msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" ++msgstr "Sección [%2d] '%s': bitmask no coincide con nombres en la tabla de dispersión\n" ++ ++#: ../src/elflint.c:2176 ++#, c-format ++msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" ++msgstr "Sección [%2d] '%s': archivos reubicables no pueden tener tablas de dispersión\n" ++ ++#: ../src/elflint.c:2194 ++#, c-format ++msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" ++msgstr "Sección [%2d] '%s': tabla de dispersión no para tabla de símbolos dinámicos\n" ++ ++#: ../src/elflint.c:2202 ++#, c-format ++msgid "section [%2d] '%s': hash table entry size incorrect\n" ++msgstr "Sección [%2d] '%s': tamaño incorrecto de entrada de tabla de dispersión\n" ++ ++#: ../src/elflint.c:2207 ++#, c-format ++msgid "section [%2d] '%s': not marked to be allocated\n" ++msgstr "Sección [%2d] '%s': no marcada para ser asignada\n" ++ ++#: ../src/elflint.c:2212 ++#, c-format ++msgid "section [%2d] '%s': hash table has not even room for initial administrative entries\n" ++msgstr "Sección [%2d] '%s': tabla de dispersión no tiene ni siquiera espacio para entradas administrativas iniciales\n" ++ ++#: ../src/elflint.c:2260 ++#, c-format ++msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" ++msgstr "sh_link en secciones de dispersión [%2zu] '%s' y [%2zu] '%s' no son idénticas\n" ++ ++#: ../src/elflint.c:2338 ++#: ../src/elflint.c:2342 ++#, c-format ++msgid "section [%2zu] '%s': reference to symbol index 0\n" ++msgstr "Sección [%2zu] '%s': referencia al índice de símbolo 0\n" ++ ++#: ../src/elflint.c:2349 ++#, c-format ++msgid "symbol %d referenced in new hash table in [%2zu] '%s' but not in old hash table in [%2zu] '%s'\n" ++msgstr "Símbolo %d nombrado en nueva tabla de dispersión en [%2zu] '%s' pero no en la tabla de dispersión anterior en [%2zu] '%s'\n" ++ ++#: ../src/elflint.c:2361 ++#, c-format ++msgid "symbol %d referenced in old hash table in [%2zu] '%s' but not in new hash table in [%2zu] '%s'\n" ++msgstr "Símbolo %d nombrado en la tabla de dispersión anterior en [%2zu] '%s' pero no en la nueva tabla de dispersión en [%2zu] '%s'\n" ++ ++#: ../src/elflint.c:2377 ++#, c-format ++msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" ++msgstr "Sección [%2d] '%s': nonzero sh_%s para sección NULL\n" ++ ++#: ../src/elflint.c:2397 ++#, c-format ++msgid "section [%2d] '%s': section groups only allowed in relocatable object files\n" ++msgstr "Sección [%2d] '%s': grupos de sección sólo permitidos en archivos de objeto reubicables\n" ++ ++#: ../src/elflint.c:2408 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol table: %s\n" ++msgstr "Sección [%2d] '%s': no puede obtener tabla de símbolos: %s\n" ++ ++#: ../src/elflint.c:2413 ++#, c-format ++msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" ++msgstr "Sección [%2d] '%s': referencia de sección en sh_link no es una tabla de símbolos\n" ++ ++#: ../src/elflint.c:2419 ++#, c-format ++msgid "section [%2d] '%s': invalid symbol index in sh_info\n" ++msgstr "Sección [%2d] '%s': índice de símbolo inválido en sh_info\n" ++ ++#: ../src/elflint.c:2424 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not zero\n" ++msgstr "Sección [%2d] '%s': sh_flags no cero\n" ++ ++#: ../src/elflint.c:2431 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol for signature\n" ++msgstr "Sección [%2d] '%s': no puede obtener símbolo para firma\n" ++ ++#: ../src/elflint.c:2436 ++#, c-format ++msgid "section [%2d] '%s': signature symbol canot be empty string\n" ++msgstr "sección [%2d] '%s': símbolo de firma no puede ser una cadena vacía\n" ++ ++#: ../src/elflint.c:2442 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not set correctly\n" ++msgstr "Sección [%2d] '%s': sh_flags no establecida correctamente\n" ++ ++#: ../src/elflint.c:2448 ++#, c-format ++msgid "section [%2d] '%s': cannot get data: %s\n" ++msgstr "Sección [%2d] '%s': no puede obtener datos: %s\n" ++ ++#: ../src/elflint.c:2457 ++#, c-format ++msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" ++msgstr "Sección [%2d] '%s': tamaño de sección no es múltiplo de tamaño de (Elf32_Word)\n" ++ ++#: ../src/elflint.c:2462 ++#, c-format ++msgid "section [%2d] '%s': section group without flags word\n" ++msgstr "Sección [%2d] '%s': grupo de sección sin palabra de banderas\n" ++ ++#: ../src/elflint.c:2468 ++#, c-format ++msgid "section [%2d] '%s': section group without member\n" ++msgstr "Sección [%2d] '%s': grupo de sección sin miembro\n" ++ ++#: ../src/elflint.c:2472 ++#, c-format ++msgid "section [%2d] '%s': section group with only one member\n" ++msgstr "Sección [%2d] '%s': grupo de sección con sólo un miembro\n" ++ ++#: ../src/elflint.c:2483 ++#, c-format ++msgid "section [%2d] '%s': unknown section group flags\n" ++msgstr "Sección [%2d] '%s': banderas de grupo de sección desconocido\n" ++ ++#: ../src/elflint.c:2495 ++#, c-format ++msgid "section [%2d] '%s': section index %Zu out of range\n" ++msgstr "Sección [%2d] '%s': índice de sección %Zu fuera de rango\n" ++ ++#: ../src/elflint.c:2504 ++#, c-format ++msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" ++msgstr "Sección [%2d] '%s': no se puede obtener encabezamiento de sección para elemento %zu: %s\n" ++ ++#: ../src/elflint.c:2511 ++#, c-format ++msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" ++msgstr "Sección [%2d] '%s': grupo de sección contiene otro grupo [%2d] '%s'\n" ++ ++#: ../src/elflint.c:2517 ++#, c-format ++msgid "section [%2d] '%s': element %Zu references section [%2d] '%s' without SHF_GROUP flag set\n" ++msgstr "Sección [%2d] '%s': elemento %Zu hace referencia a sección [%2d] '%s' sin establecer bandera SHF_GROUP\n" ++ ++#: ../src/elflint.c:2524 ++#, c-format ++msgid "section [%2d] '%s' is contained in more than one section group\n" ++msgstr "Sección [%2d] '%s' está contenida en más de un grupo de sección\n" ++ ++#: ../src/elflint.c:2713 ++#, c-format ++msgid "section [%2d] '%s' refers in sh_link to section [%2d] '%s' which is no dynamic symbol table\n" ++msgstr "Sección [%2d] '%s' se refiere en sh_link a la sección [%2d] '%s' la cual no es una tabla de símbolos dinámicos\n" ++ ++#: ../src/elflint.c:2724 ++#, c-format ++msgid "section [%2d] '%s' has different number of entries than symbol table [%2d] '%s'\n" ++msgstr "Sección [%2d] '%s' tiene un número diferente de entradas a la de la tabla de símbolos [%2d] '%s'\n" ++ ++#: ../src/elflint.c:2740 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: cannot read version data\n" ++msgstr "Sección [%2d] '%s': el símbolo %d: no se pueden leer datos de versión\n" ++ ++#: ../src/elflint.c:2756 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" ++msgstr "Sección [%2d] '%s': el símbolo %d: el símbolo local con alcance mundial\n" ++ ++#: ../src/elflint.c:2764 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with version\n" ++msgstr "Sección [%2d] '%s': símbolo %d: símbolo local con versión\n" ++ ++#: ../src/elflint.c:2778 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" ++msgstr "Sección [%2d] '%s': símbolo %d: índice de versión inválida %d\n" ++ ++#: ../src/elflint.c:2783 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: version index %d is for defined version\n" ++msgstr "Sección [%2d] '%s': símbolo %d: índice de versión %d es para versión definida\n" ++ ++#: ../src/elflint.c:2793 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: version index %d is for requested version\n" ++msgstr "Sección [%2d] '%s': símbolo %d: índice de versión %d es para la versión solicitada\n" ++ ++#: ../src/elflint.c:2845 ++#, c-format ++msgid "more than one version reference section present\n" ++msgstr "Más de una sección de referencia de versión presente\n" ++ ++#: ../src/elflint.c:2853 ++#: ../src/elflint.c:2982 ++#, c-format ++msgid "section [%2d] '%s': sh_link does not link to string table\n" ++msgstr "Sección [%2d] '%s': sh_link no se enlaza a la tabla de cadenas\n" ++ ++#: ../src/elflint.c:2876 ++#: ../src/elflint.c:3034 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong version %d\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene versión %d errada\n" ++ ++#: ../src/elflint.c:2882 ++#: ../src/elflint.c:3040 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene compensación errada de datos auxiliares\n" ++ ++#: ../src/elflint.c:2890 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid file reference\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene referencia de archivo inválida\n" ++ ++#: ../src/elflint.c:2898 ++#, c-format ++msgid "section [%2d] '%s': entry %d references unknown dependency\n" ++msgstr "Sección [%2d] '%s': %d hace referencia a dependencia desconocida\n" ++ ++#: ../src/elflint.c:2910 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" ++msgstr "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene bandera desconocida\n" ++ ++#: ../src/elflint.c:2917 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has invalid name reference\n" ++msgstr "Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene referencia de nombre inválida\n" ++ ++#: ../src/elflint.c:2924 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "Sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene valor de dispersión: %#x, esperado %#x\n" ++ ++#: ../src/elflint.c:2934 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version name '%s'\n" ++msgstr "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene nombre duplicado '%s'\n" ++ ++#: ../src/elflint.c:2945 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" ++msgstr "sección [%2d] '%s': entrada auxiliar %d de entrada %d tiene próximo campo errado\n" ++ ++#: ../src/elflint.c:2961 ++#: ../src/elflint.c:3119 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" ++msgstr "sección [%2d] '%s': entrada %d tiene compensación inválida para próxima entrada\n" ++ ++#: ../src/elflint.c:2974 ++#, c-format ++msgid "more than one version definition section present\n" ++msgstr "más de una definición de versión presente de sección\n" ++ ++#: ../src/elflint.c:3019 ++#, c-format ++msgid "section [%2d] '%s': more than one BASE definition\n" ++msgstr "Sección [%2d] '%s': más de una definición de BASE\n" ++ ++#: ../src/elflint.c:3023 ++#, c-format ++msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" ++msgstr "Sección [%2d] '%s': definición de BASE debe tener índice VER_NDX_GLOBAL\n" ++ ++#: ../src/elflint.c:3029 ++#, c-format ++msgid "section [%2d] '%s': entry %d has unknown flag\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene bandera desconocida\n" ++ ++#: ../src/elflint.c:3053 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida\n" ++ ++#: ../src/elflint.c:3060 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene valor de dispersión errado: %#x, esperado %#x\n" ++ ++#: ../src/elflint.c:3069 ++#, c-format ++msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene nombre de versión duplicado '%s'\n" ++ ++#: ../src/elflint.c:3088 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene referencia de nombre inválida en datos auxiliares\n" ++ ++#: ../src/elflint.c:3103 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" ++msgstr "Sección [%2d] '%s': entrada %d tiene próximo campo errado en datos auxiliares\n" ++ ++#: ../src/elflint.c:3125 ++#, c-format ++msgid "section [%2d] '%s': no BASE definition\n" ++msgstr "Sección [%2d] '%s': no hay definición de BASE\n" ++ ++#: ../src/elflint.c:3141 ++#, c-format ++msgid "section [%2d] '%s': unknown parent version '%s'\n" ++msgstr "Sección [%2d] '%s': desconocida versión principal '%s'\n" ++ ++#: ../src/elflint.c:3154 ++#, c-format ++msgid "section [%2d] '%s': empty object attributes section\n" ++msgstr "Sección [%2d] '%s': sección de atributos de objeto vacío\n" ++ ++#: ../src/elflint.c:3175 ++#, c-format ++msgid "section [%2d] '%s': unrecognized attribute format\n" ++msgstr "Sección[%2d] '%s': formato de atributo no reconocido\n" ++ ++#: ../src/elflint.c:3191 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: zero length field in attribute section\n" ++msgstr "Sección[%2d] '%s': compensación %zu: campo de longitud cero en sección de atributo\n" ++ ++#: ../src/elflint.c:3200 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" ++msgstr "Sección[%2d] '%s': compensación %zu: longitud inválida en sección de atributo\n" ++ ++#: ../src/elflint.c:3212 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" ++msgstr "Sección[%2d] '%s': compensación %zu: cadena de nombre de proveedor sin terminar\n" ++ ++#: ../src/elflint.c:3229 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" ++msgstr "Sección [%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de sub-sección de atributo\n" ++ ++#: ../src/elflint.c:3238 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" ++msgstr "Sección [%2d] '%s': compensación %zu: sección de atributo truncado\n" ++ ++#: ../src/elflint.c:3247 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" ++msgstr "Sección [%2d] '%s': compensación %zu: campo de longitud cero length en sub-sección de atributo\n" ++ ++#: ../src/elflint.c:3260 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" ++msgstr "Sección [%2d] '%s': compensación %zu: longitud inválida en sub-sección de atributo\n" ++ ++#. Tag_File ++#: ../src/elflint.c:3271 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" ++msgstr "Sección[%2d] '%s': compensación %zu: sub-sección de atributo tiene etiqueta inesperada %u\n" ++ ++#: ../src/elflint.c:3289 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" ++msgstr "Sección[%2d] '%s': compensación %zu: sin fin ULEB128 en etiqueta de atributo\n" ++ ++#: ../src/elflint.c:3300 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" ++msgstr "Sección [%2d] '%s': compensación %zu: cadena sin terminar en atributo\n" ++ ++#: ../src/elflint.c:3313 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" ++msgstr "Sección [%2d] '%s': compensación %zu: etiqueta de atributo no reconocida %u\n" ++ ++#: ../src/elflint.c:3317 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" ++msgstr "Sección [%2d] '%s': compensación %zu: no reconocido %s valor de atributo %\n" ++ ++#: ../src/elflint.c:3327 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" ++msgstr "Sección [%2d] '%s': compensación %zu: proveedor '%s' desconocido\n" ++ ++#: ../src/elflint.c:3333 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" ++msgstr "Sección [%2d] '%s': compensación %zu: extra bytes después de la última sección de atributo\n" ++ ++#: ../src/elflint.c:3422 ++#, c-format ++msgid "cannot get section header of zeroth section\n" ++msgstr "no puede obtener encabezamiento de sección de sección zeroth\n" ++ ++#: ../src/elflint.c:3426 ++#, c-format ++msgid "zeroth section has nonzero name\n" ++msgstr "Sección zeroth tiene nombre nonzero\n" ++ ++#: ../src/elflint.c:3428 ++#, c-format ++msgid "zeroth section has nonzero type\n" ++msgstr "Sección zeroth tiene tipo nonzero\n" ++ ++#: ../src/elflint.c:3430 ++#, c-format ++msgid "zeroth section has nonzero flags\n" ++msgstr "Sección zeroth tiene banderas nonzero\n" ++ ++#: ../src/elflint.c:3432 ++#, c-format ++msgid "zeroth section has nonzero address\n" ++msgstr "Sección zeroth tiene dirección nonzero\n" ++ ++#: ../src/elflint.c:3434 ++#, c-format ++msgid "zeroth section has nonzero offset\n" ++msgstr "Sección zeroth tiene compensación nonzero\n" ++ ++#: ../src/elflint.c:3436 ++#, c-format ++msgid "zeroth section has nonzero align value\n" ++msgstr "Sección zeroth tiene valor de alineación nonzero\n" ++ ++#: ../src/elflint.c:3438 ++#, c-format ++msgid "zeroth section has nonzero entry size value\n" ++msgstr "Sección zeroth tiene valor de tamaño de entrada nonzero\n" ++ ++#: ../src/elflint.c:3441 ++#, c-format ++msgid "zeroth section has nonzero size value while ELF header has nonzero shnum value\n" ++msgstr "Sección zeroth tiene valor de tamaño nonzero mientras que el encabezamiento ELF tiene valor shnum nonzero\n" ++ ++#: ../src/elflint.c:3445 ++#, c-format ++msgid "zeroth section has nonzero link value while ELF header does not signal overflow in shstrndx\n" ++msgstr "Sección zeroth tiene valor de enlace nonzero mientras que el encabezamiento ELF no señala sobreflujo en shstrndx\n" ++ ++#: ../src/elflint.c:3449 ++#, c-format ++msgid "zeroth section has nonzero link value while ELF header does not signal overflow in phnum\n" ++msgstr "la sección zeroth tiene un valor de enlace distinto a cero mientras que el encabezamiento ELF no señala desbordamiento en phnum\n" ++ ++#: ../src/elflint.c:3466 ++#, c-format ++msgid "cannot get section header for section [%2zu] '%s': %s\n" ++msgstr "No se puede obtener encabezamiento para sección [%2zu] '%s': %s\n" ++ ++#: ../src/elflint.c:3475 ++#, c-format ++msgid "section [%2zu]: invalid name\n" ++msgstr "Sección [%2zu]: nombre inválido\n" ++ ++#: ../src/elflint.c:3502 ++#, c-format ++msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" ++msgstr "Sección [%2d] '%s' tiene tipo errado: %s esperado, es %s\n" ++ ++#: ../src/elflint.c:3518 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" ++msgstr "Sección [%2zu] '%s' tiene banderas erradas: %s esperado, es %s\n" ++ ++#: ../src/elflint.c:3535 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" ++msgstr "Sección [%2zu] '%s' tiene banderas erradas: %s esperado y posiblemente %s, es %s\n" ++ ++#: ../src/elflint.c:3553 ++#, c-format ++msgid "section [%2zu] '%s' present in object file\n" ++msgstr "Sección [%2zu] '%s' presente en archivo objeto\n" ++ ++#: ../src/elflint.c:3559 ++#: ../src/elflint.c:3591 ++#, c-format ++msgid "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" ++msgstr "Sección [%2zu] '%s' tiene bandera SHF_ALLOC establecida pero no es un segmento cargable\n" ++ ++#: ../src/elflint.c:3564 ++#: ../src/elflint.c:3596 ++#, c-format ++msgid "section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable segments\n" ++msgstr "Sección [%2zu] '%s' no tiene bandera SHF_ALLOC establecida pero hay segmentos cargables\n" ++ ++#: ../src/elflint.c:3572 ++#, c-format ++msgid "section [%2zu] '%s' is extension section index table in non-object file\n" ++msgstr "Sección [%2zu] '%s' es tabla de índice de sección de extensión en archivo no-objeto\n" ++ ++#: ../src/elflint.c:3615 ++#, c-format ++msgid "section [%2zu] '%s': size not multiple of entry size\n" ++msgstr "Sección [%2zu] '%s': tamaño no es múltiplo de tamaño de entrada\n" ++ ++#: ../src/elflint.c:3620 ++#, c-format ++msgid "cannot get section header\n" ++msgstr "no se puede obtener encabezamiento de sección\n" ++ ++#: ../src/elflint.c:3630 ++#, c-format ++msgid "section [%2zu] '%s' has unsupported type %d\n" ++msgstr "sección [%2zu] '%s' tiene tipo %d incompatible \n" ++ ++#: ../src/elflint.c:3644 ++#, c-format ++msgid "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" ++msgstr "Sección [%2zu] '%s' contiene bandera(s) de procesador-específico inválidas %#\n" ++ ++#: ../src/elflint.c:3651 ++#, c-format ++msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" ++msgstr "Sección [%2zu] '%s' contiene bandera(s) desconocidas %#\n" ++ ++#: ../src/elflint.c:3659 ++#, c-format ++msgid "section [%2zu] '%s': thread-local data sections address not zero\n" ++msgstr "Sección [%2zu] '%s': dirección de secciones de datos de hilo-local no cero\n" ++ ++#: ../src/elflint.c:3667 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in link value\n" ++msgstr "Sección [%2zu] '%s': referencia de sección inválida en valor de enlace\n" ++ ++#: ../src/elflint.c:3672 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in info value\n" ++msgstr "Sección [%2zu] '%s': referencia de sección inválida en valor de información\n" ++ ++#: ../src/elflint.c:3679 ++#, c-format ++msgid "section [%2zu] '%s': strings flag set without merge flag\n" ++msgstr "Sección [%2zu] '%s': bandera de cadenas establecida sin bandera de fusión\n" ++ ++#: ../src/elflint.c:3684 ++#, c-format ++msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" ++msgstr "Sección [%2zu] '%s': bandera de fusión establecida pero tamaño de entrada es cero\n" ++ ++#: ../src/elflint.c:3702 ++#, c-format ++msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" ++msgstr "Sección [%2zu] '%s' tiene un tipo %d inesperado para una sección ejecutable\n" ++ ++#: ../src/elflint.c:3711 ++#, c-format ++msgid "section [%2zu] '%s' is both executable and writable\n" ++msgstr "Sección [%2zu] '%s' es tanto de ejecución como de escritura\n" ++ ++#: ../src/elflint.c:3738 ++#, c-format ++msgid "section [%2zu] '%s' not fully contained in segment of program header entry %d\n" ++msgstr "Sección [%2zu] '%s' no contenida totalmente en segmento de entrada de encabezamiento de programa %d\n" ++ ++#: ../src/elflint.c:3746 ++#, c-format ++msgid "section [%2zu] '%s' has type NOBITS but is read from the file in segment of program header entry %d\n" ++msgstr "Sección [%2zu] '%s' no tiene tipo NOBITS pero es leída desde el archivo en segmento de entrada de encabezamiento de programa %d\n" ++ ++#: ../src/elflint.c:3755 ++#, 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 "Sección [%2zu] '%s' no tiene tipo NOBITS pero no es leída desde el fichero en segmento de entrada de encabezamiento de programa %d\n" ++ ++#: ../src/elflint.c:3766 ++#, c-format ++msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" ++msgstr "Sección [%2zu] '%s' es ejecutable en segmento no ejecutable %d\n" ++ ++#: ../src/elflint.c:3776 ++#, c-format ++msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" ++msgstr "Sección [%2zu] '%s' es de escritura en segmento que no es de escritura %d\n" ++ ++#: ../src/elflint.c:3786 ++#, c-format ++msgid "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" ++msgstr "Sección [%2zu] '%s': asignación de bandera establecida pero sección no en ningún segmento cargado\n" ++ ++#: ../src/elflint.c:3792 ++#, c-format ++msgid "section [%2zu] '%s': ELF header says this is the section header string table but type is not SHT_TYPE\n" ++msgstr "Sección [%2zu] '%s': encabezamiento ELF dice esta es la tabla de cadena de encabezamiento de sección, pero el tipo no es SHT_TYPE\n" ++ ++#: ../src/elflint.c:3800 ++#, c-format ++msgid "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" ++msgstr "sección [%2zu] '%s': ficheros reubicables no pueden tener tablas de símbolos dinámicos\n" ++ ++#: ../src/elflint.c:3851 ++#, c-format ++msgid "more than one version symbol table present\n" ++msgstr "Más de una tabla de símbolos presente\n" ++ ++#: ../src/elflint.c:3874 ++#, c-format ++msgid "INTERP program header entry but no .interp section\n" ++msgstr "Entrada de encabezamiento de programa INTERP pero no la sección .interp\n" ++ ++#: ../src/elflint.c:3885 ++#, c-format ++msgid "loadable segment [%u] is executable but contains no executable sections\n" ++msgstr "segmento cargable [%u] es ejecutable pero no contiene secciones ejecutables\n" ++ ++#: ../src/elflint.c:3891 ++#, c-format ++msgid "loadable segment [%u] is writable but contains no writable sections\n" ++msgstr "segmento cargable [%u] es de escritura pero contiene secciones protegidas contra escritura\n" ++ ++#: ../src/elflint.c:3902 ++#, c-format ++msgid "no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section exist\n" ++msgstr "Sección no .gnu.versym presente, pero la sección .gnu.versym_d o la sección .gnu.versym_r existen\n" ++ ++#: ../src/elflint.c:3915 ++#, c-format ++msgid "duplicate version index %d\n" ++msgstr "Duplicar índice de versión %d\n" ++ ++#: ../src/elflint.c:3929 ++#, c-format ++msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" ++msgstr "Sección .gnu.versym presente sin las secciones .gnu.versym_d o .gnu.versym_r\n" ++ ++#: ../src/elflint.c:3978 ++#, c-format ++msgid "phdr[%d]: unknown core file note type % at offset %\n" ++msgstr "phdr[%d]: tipo de nota de fichero core desconocido % en compensación %\n" ++ ++#: ../src/elflint.c:3982 ++#, c-format ++msgid "section [%2d] '%s': unknown core file note type % at offset %Zu\n" ++msgstr "Sección [%2d] '%s': tipo de nota de fichero core desconocido % en compensación %Zu\n" ++ ++#: ../src/elflint.c:4005 ++#, c-format ++msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" ++msgstr "phdr[%d]: tipo de nota de fichero objeto desconocido % en compensación %Zu\n" ++ ++#: ../src/elflint.c:4009 ++#, c-format ++msgid "section [%2d] '%s': unknown object file note type % at offset %Zu\n" ++msgstr "Sección [%2d] '%s': tipo de nota de fichero objeto desconocido % en compensación %Zu\n" ++ ++#: ../src/elflint.c:4026 ++#, c-format ++msgid "phdr[%d]: no note entries defined for the type of file\n" ++msgstr "phdr[%d]: no hay entradas de nota definidas para el tipo de archivo\n" ++ ++#: ../src/elflint.c:4045 ++#, c-format ++msgid "phdr[%d]: cannot get content of note section: %s\n" ++msgstr "phdr[%d]: no puede obtener contenido de sección de nota: %s\n" ++ ++#: ../src/elflint.c:4048 ++#, c-format ++msgid "phdr[%d]: extra % bytes after last note\n" ++msgstr "phdr[%d]: extra % bytes después de la última nota\n" ++ ++#: ../src/elflint.c:4069 ++#, c-format ++msgid "section [%2d] '%s': no note entries defined for the type of file\n" ++msgstr "Sección [%2d] '%s': no hay entradas de nota definidas para el tipo de archivo\n" ++ ++#: ../src/elflint.c:4076 ++#, c-format ++msgid "section [%2d] '%s': cannot get content of note section\n" ++msgstr "Sección[%2d] '%s': no se puede obtener el contenido de sección de nota\n" ++ ++#: ../src/elflint.c:4079 ++#, c-format ++msgid "section [%2d] '%s': extra % bytes after last note\n" ++msgstr "Sección[%2d] '%s': extra % bytes después de la última nota\n" ++ ++#: ../src/elflint.c:4097 ++#, c-format ++msgid "only executables, shared objects, and core files can have program headers\n" ++msgstr "Sólo ejecutables, objetos compartidos y ficheros core pueden tener encabezamientos de programas\n" ++ ++#: ../src/elflint.c:4112 ++#, c-format ++msgid "cannot get program header entry %d: %s\n" ++msgstr "no se puede obtener entrada de encabezamiento %d: %s\n" ++ ++#: ../src/elflint.c:4121 ++#, c-format ++msgid "program header entry %d: unknown program header entry type %#\n" ++msgstr "entrada de encabezamiento de programa %d: tipo %# de entrada de encabezamiento de programa desconocido\n" ++ ++#: ../src/elflint.c:4132 ++#, c-format ++msgid "more than one INTERP entry in program header\n" ++msgstr "Más de una entrada INTERP en encabezamiento de programa\n" ++ ++#: ../src/elflint.c:4140 ++#, c-format ++msgid "more than one TLS entry in program header\n" ++msgstr "más de una entrada TLS en encabezamiento de programa\n" ++ ++#: ../src/elflint.c:4147 ++#, c-format ++msgid "static executable cannot have dynamic sections\n" ++msgstr "ejecutable estático no puede tener secciones dinámicas\n" ++ ++#: ../src/elflint.c:4161 ++#, c-format ++msgid "dynamic section reference in program header has wrong offset\n" ++msgstr "Referencia de sección dinámica en encabezamiento de programa tiene compensación errada\n" ++ ++#: ../src/elflint.c:4164 ++#, c-format ++msgid "dynamic section size mismatch in program and section header\n" ++msgstr "No coinciden tamaño de sección dinámica en programa y encabezamiento de sección\n" ++ ++#: ../src/elflint.c:4174 ++#, c-format ++msgid "more than one GNU_RELRO entry in program header\n" ++msgstr "Más de una entrada GNU_RELRO en encabezamiento de programa\n" ++ ++#: ../src/elflint.c:4195 ++#, c-format ++msgid "loadable segment GNU_RELRO applies to is not writable\n" ++msgstr "Segmento cargable GNU_RELRO que se aplica no es de escritura\n" ++ ++#: ../src/elflint.c:4198 ++#, c-format ++msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" ++msgstr "Banderas de segmento cargable [%u] no coinciden con banderas GNU_RELRO [%u]\n" ++ ++#: ../src/elflint.c:4206 ++#: ../src/elflint.c:4229 ++#, c-format ++msgid "%s segment not contained in a loaded segment\n" ++msgstr "Segmento %s no contenido en un segmento cargable\n" ++ ++#: ../src/elflint.c:4235 ++#, c-format ++msgid "program header offset in ELF header and PHDR entry do not match" ++msgstr "Compensación de encabezamiento de programa en encabezamiento ELF y entrada PHDR no coinciden" ++ ++#: ../src/elflint.c:4259 ++#, c-format ++msgid "call frame search table reference in program header has wrong offset\n" ++msgstr "Referencia de tabla de búsqueda de marco de llamada en encabezamiento de programa tiene una compensación errada\n" ++ ++#: ../src/elflint.c:4262 ++#, c-format ++msgid "call frame search table size mismatch in program and section header\n" ++msgstr "Tamaño de tabla de búsqueda de marco de llamada no coincide con programa y encabezamiento de sección\n" ++ ++#: ../src/elflint.c:4275 ++#, c-format ++msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" ++msgstr "PT_GNU_EH_FRAME presente pero no la sección.eh_frame_hdr\n" ++ ++#: ../src/elflint.c:4283 ++#, c-format ++msgid "call frame search table must be allocated\n" ++msgstr "tabla de búsqueda de marco de llamada debe ser asignada\n" ++ ++#: ../src/elflint.c:4286 ++#, c-format ++msgid "section [%2zu] '%s' must be allocated\n" ++msgstr "sección [%2zu] '%s' debe ser asignada\n" ++ ++#: ../src/elflint.c:4290 ++#, c-format ++msgid "call frame search table must not be writable\n" ++msgstr "tabla de búsqueda de marco de llamada no debe tener permiso de escritura\n" ++ ++#: ../src/elflint.c:4293 ++#, c-format ++msgid "section [%2zu] '%s' must not be writable\n" ++msgstr "sección [%2zu] '%s' no debe tener permiso de escritura\n" ++ ++#: ../src/elflint.c:4298 ++#, c-format ++msgid "call frame search table must not be executable\n" ++msgstr "tabla de búsqueda de marco de llamada no debe ser ejecutable\n" ++ ++#: ../src/elflint.c:4301 ++#, c-format ++msgid "section [%2zu] '%s' must not be executable\n" ++msgstr "sección [%2zu] '%s' no debe ser ejecutable\n" ++ ++#: ../src/elflint.c:4312 ++#, c-format ++msgid "program header entry %d: file size greater than memory size\n" ++msgstr "entrada de encabezamiento de programa %d: tamaño de fichero mayor que el tamaño de memoria\n" ++ ++#: ../src/elflint.c:4319 ++#, c-format ++msgid "program header entry %d: alignment not a power of 2\n" ++msgstr "entrada de encabezamiento de programa %d: alineamiento no es potencia de 2\n" ++ ++#: ../src/elflint.c:4322 ++#, c-format ++msgid "program header entry %d: file offset and virtual address not module of alignment\n" ++msgstr "entrada de encabezamiento de programa %d: compensación de fichero y dirección virtual no módulo de alineación\n" ++ ++#: ../src/elflint.c:4335 ++#, c-format ++msgid "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME program header entry" ++msgstr "ejecutable/DSO con sección .eh_frame_hdr no tiene una entrada de encabezamiento de programa PT_GNU_EH_FRAME" ++ ++#: ../src/elflint.c:4369 ++#, c-format ++msgid "cannot read ELF header: %s\n" ++msgstr "No se puede leer encabezamiento ELF: %s\n" ++ ++#: ../src/elflint.c:4395 ++#, c-format ++msgid "text relocation flag set but not needed\n" ++msgstr "Bandera de reubicación de texto establecida pero no necesaria\n" ++ ++#: ../src/addr2line.c:66 ++msgid "Output selection options:" ++msgstr "Opciones de selección de salida:" ++ ++#: ../src/addr2line.c:67 ++msgid "Show only base names of source files" ++msgstr "Mostrar sólo nombres de base de ficheros fuente" ++ ++#: ../src/addr2line.c:69 ++msgid "Show absolute file names using compilation directory" ++msgstr "Mostrar nombres de fichero absolutos mediante directorio de compilación" ++ ++#: ../src/addr2line.c:70 ++msgid "Also show function names" ++msgstr "También mostrar nombres de función" ++ ++#: ../src/addr2line.c:71 ++msgid "Also show symbol or section names" ++msgstr "También mostrar símbolo o nombres de sección" ++ ++#: ../src/addr2line.c:73 ++msgid "Treat addresses as offsets relative to NAME section." ++msgstr "Manejar direcciones como compensaciones relativas a sección de NOMBRE." ++ ++#. Short description of program. ++#: ../src/addr2line.c:84 ++msgid "Locate source files and line information for ADDRs (in a.out by default)." ++msgstr "Localizar archivos fuente e información de línea para DIRECCIONES (en a.out por defecto)." ++ ++#. Strings for arguments in help texts. ++#: ../src/addr2line.c:88 ++msgid "[ADDR...]" ++msgstr "[DIREC...]" ++ ++#: ../src/addr2line.c:405 ++#, c-format ++msgid "Section syntax requires exactly one module" ++msgstr "Sintaxis de sección requiere exactamente un módulo" ++ ++#: ../src/addr2line.c:428 ++#, c-format ++msgid "offset %# lies outside section '%s'" ++msgstr "Compensación %# se encuentra fuera de sección '%s'" ++ ++#: ../src/addr2line.c:461 ++#, c-format ++msgid "cannot find symbol '%s'" ++msgstr "no se puede encontrar símbolo '%s'" ++ ++#: ../src/addr2line.c:466 ++#, c-format ++msgid "offset %# lies outside contents of '%s'" ++msgstr "compensación %# se encuentra fuera de contenido de '%s'" ++ ++#: ../src/findtextrel.c:70 ++msgid "Input Selection:" ++msgstr "Selección de entrada:" ++ ++#: ../src/findtextrel.c:71 ++msgid "Prepend PATH to all file names" ++msgstr "Agregar RUTA a todos los nombres de ficheros" ++ ++#: ../src/findtextrel.c:73 ++msgid "Use PATH as root of debuginfo hierarchy" ++msgstr "Usar RUTA como root de jerarquía de debuginfo" ++ ++#. Short description of program. ++#: ../src/findtextrel.c:80 ++msgid "Locate source of text relocations in FILEs (a.out by default)." ++msgstr "Localizar origen de reubicaciones de texto en FICHEROS (a.out por defecto)." ++ ++#: ../src/findtextrel.c:236 ++#: ../src/elfcmp.c:611 ++#: ../src/ranlib.c:186 ++#, c-format ++msgid "cannot create ELF descriptor for '%s': %s" ++msgstr "No puede crear descriptor ELF para '%s': %s" ++ ++#: ../src/findtextrel.c:246 ++#, c-format ++msgid "cannot get ELF header '%s': %s" ++msgstr "No se puede obtener encabezamiento ELF '%s': %s" ++ ++#: ../src/findtextrel.c:257 ++#, c-format ++msgid "'%s' is not a DSO or PIE" ++msgstr "'%s' es no un DSO o PIE" ++ ++#: ../src/findtextrel.c:274 ++#, c-format ++msgid "getting get section header of section %zu: %s" ++msgstr "obtener encabezamiento de sección get de sección %zu: %s" ++ ++#: ../src/findtextrel.c:292 ++#, c-format ++msgid "cannot read dynamic section: %s" ++msgstr "No se puede leer sección dinámica: %s" ++ ++#: ../src/findtextrel.c:307 ++#, c-format ++msgid "no text relocations reported in '%s'" ++msgstr "no hay reubicaciones de texto reportado en '%s'" ++ ++#: ../src/findtextrel.c:319 ++#, c-format ++msgid "while reading ELF file" ++msgstr "Error al leer fichero ELF" ++ ++#: ../src/findtextrel.c:328 ++#: ../src/findtextrel.c:345 ++#, c-format ++msgid "cannot get program header index at offset %d: %s" ++msgstr "Nos se puede obtener el índice de encabezamiento de programa en compensación %d: %s" ++ ++#: ../src/findtextrel.c:397 ++#, c-format ++msgid "cannot get section header of section %Zu: %s" ++msgstr "No se puede obtener encabezamiento de sección %Zu: %s" ++ ++#: ../src/findtextrel.c:409 ++#, c-format ++msgid "cannot get symbol table section %zu in '%s': %s" ++msgstr "No se puede obtener tabla de símbolos %zu en '%s': %s" ++ ++#: ../src/findtextrel.c:429 ++#: ../src/findtextrel.c:452 ++#, c-format ++msgid "cannot get relocation at index %d in section %zu in '%s': %s" ++msgstr "No se puede obtener reubicación en índice %d en sección %zu en '%s': %s" ++ ++#: ../src/findtextrel.c:517 ++#, c-format ++msgid "%s not compiled with -fpic/-fPIC\n" ++msgstr "%s no compilado con -fpic/-fPIC\n" ++ ++#: ../src/findtextrel.c:570 ++#, c-format ++msgid "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" ++msgstr "El archivo que contiene la función '%s' no está compilado con -fpic/-fPIC\n" ++ ++#: ../src/findtextrel.c:577 ++#: ../src/findtextrel.c:597 ++#, c-format ++msgid "the file containing the function '%s' might not be compiled with -fpic/-fPIC\n" ++msgstr "el fichero que contiene la función '%s' podría no estar compilado con -fpic/-fPIC\n" ++ ++#: ../src/findtextrel.c:585 ++#, 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 "Tanto el fichero que contiene la función '%s' como el fichero que contiene la función '%s' no están compilados con -fpic/-fPIC\n" ++ ++#: ../src/findtextrel.c:605 ++#, c-format ++msgid "a relocation modifies memory at offset %llu in a write-protected segment\n" ++msgstr "Una reubicación modifica memoria en compensación %llu en un segmento protegido contra escritura\n" ++ ++#: ../src/elfcmp.c:69 ++msgid "Control options:" ++msgstr "Opciones de control:" ++ ++#: ../src/elfcmp.c:70 ++msgid "Control treatment of gaps in loadable segments [ignore|match] (default: ignore)" ++msgstr "Tratamiento de control de brechas en segmento cargables [ignorar|coincidencia] (por defecto: ignorar)" ++ ++#: ../src/elfcmp.c:72 ++msgid "Ignore permutation of buckets in SHT_HASH section" ++msgstr "Ignorar permutación de cubetas en sección SHT_HASH" ++ ++#: ../src/elfcmp.c:73 ++msgid "Output nothing; yield exit status only" ++msgstr "Nada de salida; producir estado de salida únicamente" ++ ++#. Short description of program. ++#: ../src/elfcmp.c:80 ++msgid "Compare relevant parts of two ELF files for equality." ++msgstr "Comparar partes relevantes de dos ficheros ELF para igualdad." ++ ++#. Strings for arguments in help texts. ++#: ../src/elfcmp.c:84 ++msgid "FILE1 FILE2" ++msgstr "FICHERO1 FICHERO2" ++ ++#: ../src/elfcmp.c:140 ++msgid "Invalid number of parameters.\n" ++msgstr "Número inválido de parámetros.\n" ++ ++#: ../src/elfcmp.c:168 ++#: ../src/elfcmp.c:173 ++#, c-format ++msgid "cannot get ELF header of '%s': %s" ++msgstr "no se puede obtener encabezamiento de '%s': %s" ++ ++#: ../src/elfcmp.c:190 ++#, c-format ++msgid "%s %s diff: ELF header" ++msgstr "%s %s diff: encabezamiento ELF" ++ ++#: ../src/elfcmp.c:198 ++#: ../src/elfcmp.c:201 ++#, c-format ++msgid "cannot get section count of '%s': %s" ++msgstr "no se puede obtener un conteo de sección en '%s': %s" ++ ++#: ../src/elfcmp.c:206 ++#, c-format ++msgid "%s %s diff: section count" ++msgstr "%s %s diff: conteo de sección" ++ ++#: ../src/elfcmp.c:214 ++#: ../src/elfcmp.c:217 ++#, c-format ++msgid "cannot get program header count of '%s': %s" ++msgstr "no se puede obtener un conteo de encabezado de programa de '%s': %s" ++ ++#: ../src/elfcmp.c:222 ++#, c-format ++msgid "%s %s diff: program header count" ++msgstr "%s %s diff: encabezado de programa" ++ ++#: ../src/elfcmp.c:281 ++#, c-format ++msgid "%s %s differ: section header" ++msgstr "%s %s differ: encabezamiento de sección" ++ ++#: ../src/elfcmp.c:309 ++#: ../src/elfcmp.c:315 ++#, c-format ++msgid "cannot get content of section %zu in '%s': %s" ++msgstr "No se puede obtener contenido de sección %zu en '%s': %s" ++ ++#: ../src/elfcmp.c:331 ++#: ../src/elfcmp.c:337 ++#, c-format ++msgid "cannot get symbol in '%s': %s" ++msgstr "No se puede obtener símbolo en '%s': %s" ++ ++#: ../src/elfcmp.c:358 ++#, c-format ++msgid "%s %s differ: symbol table [%zu]" ++msgstr "%s %s differ: tabla de símbolos [%zu]" ++ ++#: ../src/elfcmp.c:361 ++#, c-format ++msgid "%s %s differ: symbol table [%zu,%zu]" ++msgstr "%s %s differ: tabla de símbolos [%zu,%zu]" ++ ++#: ../src/elfcmp.c:409 ++#, c-format ++msgid "%s %s differ: section [%zu] '%s' content" ++msgstr "%s %s differ: sección [%zu] contenido '%s'" ++ ++#: ../src/elfcmp.c:413 ++#, c-format ++msgid "%s %s differ: section [%zu,%zu] '%s' content" ++msgstr "%s %s differ: sección [%zu,%zu] contenido '%s'" ++ ++#: ../src/elfcmp.c:429 ++#, c-format ++msgid "%s %s differ: unequal amount of important sections" ++msgstr "%s %s differ: cantidad desigual de secciones importantes" ++ ++#: ../src/elfcmp.c:463 ++#: ../src/elfcmp.c:468 ++#, c-format ++msgid "cannot load data of '%s': %s" ++msgstr "no se pueden cargar los datos de '%s': %s" ++ ++#: ../src/elfcmp.c:487 ++#: ../src/elfcmp.c:493 ++#, c-format ++msgid "cannot get program header entry %d of '%s': %s" ++msgstr "no se puede obtener entrada de encabezamiento de programa %d de '%s': %s" ++ ++#: ../src/elfcmp.c:499 ++#, c-format ++msgid "%s %s differ: program header %d" ++msgstr "%s %s differ: encabezamiento de programa %d" ++ ++#: ../src/elfcmp.c:524 ++#, c-format ++msgid "%s %s differ: gap" ++msgstr "%s %s differ: brecha" ++ ++#: ../src/elfcmp.c:583 ++#, c-format ++msgid "Invalid value '%s' for --gaps parameter." ++msgstr "Valor inválido '%s' para parámetro --gaps" ++ ++#: ../src/elfcmp.c:616 ++#, c-format ++msgid "cannot create EBL descriptor for '%s'" ++msgstr "no se puede crear el descriptor EBL para '%s'" ++ ++#: ../src/elfcmp.c:634 ++#, c-format ++msgid "cannot get section header of section %zu: %s" ++msgstr "No se puede obtener el encabezamiento de sección %zu: %s" ++ ++#: ../src/elfcmp.c:644 ++#, c-format ++msgid "cannot get content of section %zu: %s" ++msgstr "No se puede obtener contenido de sección %zu: %s" ++ ++#: ../src/elfcmp.c:654 ++#: ../src/elfcmp.c:668 ++#, c-format ++msgid "cannot get relocation: %s" ++msgstr "No se puede obtener reubicación: %s" ++ ++#. Short description of program. ++#: ../src/ranlib.c:74 ++msgid "Generate an index to speed access to archives." ++msgstr " Generar un índice para acelerar el acceso a los archivos." ++ ++#. Strings for arguments in help texts. ++#: ../src/ranlib.c:77 ++msgid "ARCHIVE" ++msgstr "ARCHIVO " ++ ++#: ../src/ranlib.c:116 ++#, c-format ++msgid "Archive name required" ++msgstr "Se requiere nombre de archivo" ++ ++#: ../src/ranlib.c:194 ++#, c-format ++msgid "'%s' is no archive" ++msgstr "%s: no es un archivo" ++ ++#: ../src/ranlib.c:229 ++#, c-format ++msgid "error while freeing sub-ELF descriptor: %s" ++msgstr "error al liberar descriptor sub-ELF: %s" ++ ++#: ../src/strings.c:70 ++msgid "Output Selection:" ++msgstr "Selección de salida:" ++ ++#: ../src/strings.c:71 ++msgid "Scan entire file, not only loaded sections" ++msgstr "Explorar todo el archivo, no sólo las secciones cargadas" ++ ++#: ../src/strings.c:73 ++msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed" ++msgstr "Sólo secuencias NUL-terminated de caracteres MIN-LEN o más se imprimen" ++ ++#: ../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 "Seleccionar tamaño de caracter y Endianess: s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit" ++ ++#: ../src/strings.c:78 ++msgid "Print name of the file before each string." ++msgstr "Imprimir nombre de archivo antes de cada cadena." ++ ++#: ../src/strings.c:80 ++msgid "Print location of the string in base 8, 10, or 16 respectively." ++msgstr "Imprimir ubicación de la cadena en base 8, 10, o 16 respectivamente." ++ ++#: ../src/strings.c:81 ++msgid "Alias for --radix=o" ++msgstr "Alias para --radix=o" ++ ++#. Short description of program. ++#: ../src/strings.c:88 ++msgid "Print the strings of printable characters in files." ++msgstr "Imprimir las cadenas de caracteres imprimibles en archivos." ++ ++#: ../src/strings.c:268 ++#: ../src/strings.c:303 ++#, c-format ++msgid "invalid value '%s' for %s parameter" ++msgstr "Valor inválido '%s' para parámetro %s" ++ ++#: ../src/strings.c:314 ++#, c-format ++msgid "invalid minimum length of matched string size" ++msgstr "longitud mínima inválida de tamaño de cadena coincidente" ++ ++#: ../src/strings.c:601 ++#, c-format ++msgid "lseek64 failed" ++msgstr "lseek64 falló" ++ ++#: ../src/strings.c:616 ++#: ../src/strings.c:680 ++#, c-format ++msgid "re-mmap failed" ++msgstr "re-mmap falló" ++ ++#: ../src/strings.c:653 ++#, c-format ++msgid "mprotect failed" ++msgstr "mprotect falló" ++ ++#: ../src/unstrip.c:78 ++msgid "Match MODULE against file names, not module names" ++msgstr "Coincidir MODULO con nombres de archivo, no con nombres de módulo" ++ ++#: ../src/unstrip.c:79 ++msgid "Silently skip unfindable files" ++msgstr "Omitir silenciosamente los archivos perdidos" ++ ++#: ../src/unstrip.c:82 ++msgid "Place output into FILE" ++msgstr "Colocar salida en FICHERO" ++ ++#: ../src/unstrip.c:84 ++msgid "Create multiple output files under DIRECTORY" ++msgstr "Crear archivos de salida múltiple bajo DIRECTORIO" ++ ++#: ../src/unstrip.c:85 ++msgid "Use module rather than file names" ++msgstr "Usar módulo en lugar de nombres de archivo" ++ ++#: ../src/unstrip.c:87 ++msgid "Create output for modules that have no separate debug information" ++msgstr "Crear salida para módulos que no tienen información de depuración independiente" ++ ++#: ../src/unstrip.c:90 ++msgid "Apply relocations to section contents in ET_REL files" ++msgstr "Aplicar reubicaciones a contenido de sección en archivos ET_REL" ++ ++#: ../src/unstrip.c:92 ++msgid "Only list module and file names, build IDs" ++msgstr "Solamente listar módulo y nombres de archivo, crear los ID" ++ ++#: ../src/unstrip.c:134 ++#, c-format ++msgid "-d option specified twice" ++msgstr "opción -d especificada dos veces" ++ ++#: ../src/unstrip.c:166 ++#, c-format ++msgid "only one of -o or -d allowed" ++msgstr "Sólo se permite usar -o ó -d " ++ ++#: ../src/unstrip.c:175 ++#, c-format ++msgid "-n cannot be used with explicit files or -o or -d" ++msgstr "-n no puede utilizarse con archivos explícitos o con -o ó -d" ++ ++#: ../src/unstrip.c:190 ++#, c-format ++msgid "output directory '%s'" ++msgstr "Directorio de salida '%s'" ++ ++#: ../src/unstrip.c:199 ++#, c-format ++msgid "exactly two file arguments are required" ++msgstr "dos argumentos de archivos se requieren exactamente" ++ ++#: ../src/unstrip.c:205 ++#, c-format ++msgid "-m, -a, -R, and -i options not allowed with explicit files" ++msgstr "No se permiten las opciones -m, -a, -R, ni -i con archivos explícitos" ++ ++#: ../src/unstrip.c:218 ++#, c-format ++msgid "-o or -d is required when using implicit files" ++msgstr "se requiere -o ó -d cuando se utilizan archivos implícitos" ++ ++#: ../src/unstrip.c:254 ++#, c-format ++msgid "cannot create ELF header: %s" ++msgstr "no se puede crear el encabezamiento ELF: %s" ++ ++#: ../src/unstrip.c:259 ++#, c-format ++msgid "cannot copy ELF header: %s" ++msgstr "no se puede copiar encabezamiento ELF: %s" ++ ++#: ../src/unstrip.c:264 ++#: ../src/unstrip.c:1817 ++#, c-format ++msgid "cannot create program headers: %s" ++msgstr "No pueden crear encabezamientos de programa: %s" ++ ++#: ../src/unstrip.c:270 ++#, c-format ++msgid "cannot copy program header: %s" ++msgstr "no puede copiar encabezamiento de programa: %s" ++ ++#: ../src/unstrip.c:280 ++#, c-format ++msgid "cannot copy section header: %s" ++msgstr "no se puede copiar encabezamiento de sección: %s" ++ ++#: ../src/unstrip.c:283 ++#: ../src/unstrip.c:1505 ++#, c-format ++msgid "cannot get section data: %s" ++msgstr "no se pueden obtener datos de sección: %s" ++ ++#: ../src/unstrip.c:285 ++#: ../src/unstrip.c:1507 ++#, c-format ++msgid "cannot copy section data: %s" ++msgstr "no pueden copiar datos de sección: %s" ++ ++#: ../src/unstrip.c:309 ++#, c-format ++msgid "cannot create directory '%s'" ++msgstr "no se puede crear el directorio '%s'" ++ ++#: ../src/unstrip.c:349 ++#: ../src/unstrip.c:763 ++#: ../src/unstrip.c:1540 ++#, c-format ++msgid "cannot get symbol table entry: %s" ++msgstr "no se puede obtener entrada de tabla de símbolos: %s" ++ ++#: ../src/unstrip.c:365 ++#: ../src/unstrip.c:580 ++#: ../src/unstrip.c:601 ++#: ../src/unstrip.c:613 ++#: ../src/unstrip.c:1561 ++#: ../src/unstrip.c:1691 ++#: ../src/unstrip.c:1715 ++#, c-format ++msgid "cannot update symbol table: %s" ++msgstr "no se puede actualizar tabla de símbolos: %s" ++ ++#: ../src/unstrip.c:382 ++#: ../src/unstrip.c:432 ++#: ../src/unstrip.c:562 ++#: ../src/unstrip.c:1209 ++#: ../src/unstrip.c:1525 ++#: ../src/unstrip.c:1720 ++#: ../src/unstrip.c:1791 ++#, c-format ++msgid "cannot update section header: %s" ++msgstr "no se puede actualizar encabezamiento de sección: %s" ++ ++#: ../src/unstrip.c:408 ++#: ../src/unstrip.c:419 ++#, c-format ++msgid "cannot update relocation: %s" ++msgstr "no se puede actualizar reubicación: %s" ++ ++#: ../src/unstrip.c:507 ++#, c-format ++msgid "cannot get symbol version: %s" ++msgstr "no se puede obtener versión de símbolo: %s" ++ ++#: ../src/unstrip.c:519 ++#, c-format ++msgid "unexpected section type in [%Zu] with sh_link to symtab" ++msgstr "tipo de sección inesperado en [%Zu] con sh_link para symtab" ++ ++#: ../src/unstrip.c:769 ++#, c-format ++msgid "invalid string offset in symbol [%Zu]" ++msgstr "compensación de cadena inválida en símbolo [%Zu]" ++ ++#: ../src/unstrip.c:911 ++#: ../src/unstrip.c:1248 ++#, c-format ++msgid "cannot read section [%Zu] name: %s" ++msgstr "no se puede leer nombre [%Zu]: %s" ++ ++#: ../src/unstrip.c:952 ++#: ../src/unstrip.c:971 ++#: ../src/unstrip.c:1004 ++#, c-format ++msgid "cannot read '.gnu.prelink_undo' section: %s" ++msgstr "no se puede leer sección '.gnu.prelink_undo': %s" ++ ++#: ../src/unstrip.c:992 ++#, c-format ++msgid "invalid contents in '%s' section" ++msgstr "contenido inválido en sección '%s'" ++ ++#: ../src/unstrip.c:1047 ++#: ../src/unstrip.c:1370 ++#, c-format ++msgid "cannot find matching section for [%Zu] '%s'" ++msgstr "no se puede hallar sección coincidente para [%Zu] '%s'" ++ ++#: ../src/unstrip.c:1171 ++#: ../src/unstrip.c:1186 ++#: ../src/unstrip.c:1451 ++#, c-format ++msgid "cannot add section name to string table: %s" ++msgstr "no se puede añadir nombre de sección a tabla de cadenas: %s" ++ ++#: ../src/unstrip.c:1195 ++#, c-format ++msgid "cannot update section header string table data: %s" ++msgstr "no se pueden actualizar datos de tabla de cadenas de encabezamiento de sección: %s" ++ ++#: ../src/unstrip.c:1223 ++#: ../src/unstrip.c:1227 ++#, c-format ++msgid "cannot get section header string table section index: %s" ++msgstr "no se puede obtener índice de sección de tabla de cadenas de encabezamiento de sección: %s" ++ ++#: ../src/unstrip.c:1231 ++#: ../src/unstrip.c:1235 ++#: ../src/unstrip.c:1466 ++#, c-format ++msgid "cannot get section count: %s" ++msgstr "No se puede obtener cuenta de sección: %s" ++ ++#: ../src/unstrip.c:1293 ++#: ../src/unstrip.c:1385 ++#, c-format ++msgid "cannot read section header string table: %s" ++msgstr "no se puede obtener tabla de cadenas de encabezamiento de sección: %s" ++ ++#: ../src/unstrip.c:1445 ++#, c-format ++msgid "cannot add new section: %s" ++msgstr "No se puede añadir nueva sección: %s" ++ ++#: ../src/unstrip.c:1548 ++#, c-format ++msgid "symbol [%Zu] has invalid section index" ++msgstr "símbolo [%Zu] tiene índice de sección inválido" ++ ++#: ../src/unstrip.c:1800 ++#, c-format ++msgid "cannot get ELF header: %s" ++msgstr "no se puede leer encabezamiento ELF: %s" ++ ++#: ../src/unstrip.c:1827 ++#, c-format ++msgid "cannot update program header: %s" ++msgstr "no se puede actualizar encabezamiento de programa: %s" ++ ++#: ../src/unstrip.c:1832 ++#: ../src/unstrip.c:1911 ++#, c-format ++msgid "cannot write output file: %s" ++msgstr "no se puede escribir al archivo de salida: %s" ++ ++#: ../src/unstrip.c:1880 ++#, c-format ++msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" ++msgstr "datos DWARF no se ajustan para polarización de pre-enlace; considere prelink -u" ++ ++#: ../src/unstrip.c:1883 ++#, c-format ++msgid "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" ++msgstr "Datos DWARF en '%s' no se ajustan a polarización de pre-enlace; considere prelink -u" ++ ++#: ../src/unstrip.c:1902 ++#: ../src/unstrip.c:1942 ++#: ../src/unstrip.c:1954 ++#: ../src/unstrip.c:2034 ++#, c-format ++msgid "cannot create ELF descriptor: %s" ++msgstr "no se puede crear un descriptor ELF: %s" ++ ++#: ../src/unstrip.c:1960 ++#, c-format ++msgid "'%s' and '%s' do not seem to match" ++msgstr "Al parecer '%s' y '%s'no coinciden" ++ ++#: ../src/unstrip.c:1991 ++#, c-format ++msgid "cannot find stripped file for module '%s': %s" ++msgstr "no se puede hallar archivo obtenido para módulo '%s': %s " ++ ++#: ../src/unstrip.c:1995 ++#, c-format ++msgid "cannot open stripped file '%s' for module '%s': %s" ++msgstr "No se puede abrir el archivo '%s' obtenido para módulo '%s': %s" ++ ++#: ../src/unstrip.c:2010 ++#, c-format ++msgid "cannot find debug file for module '%s': %s" ++msgstr "no puede hallar archivo de depuración para módulo '%s': %su" ++ ++#: ../src/unstrip.c:2014 ++#, c-format ++msgid "cannot open debug file '%s' for module '%s': %s" ++msgstr "No puede abrir archivo de depuración '%s' para módulo '%s': %s" ++ ++#: ../src/unstrip.c:2027 ++#, c-format ++msgid "module '%s' file '%s' is not stripped" ++msgstr "No se obtuvo el archivo '%s' de módulo '%s' " ++ ++#: ../src/unstrip.c:2058 ++#, c-format ++msgid "cannot cache section addresses for module '%s': %s" ++msgstr "No puede almacenar en cache direcciones de sección para módulo '%s': %s" ++ ++#: ../src/unstrip.c:2191 ++#, c-format ++msgid "no matching modules found" ++msgstr "No se encontraron módulos coincidentes" ++ ++#: ../src/unstrip.c:2200 ++#, c-format ++msgid "matched more than one module" ++msgstr "coincidió con más de un módulo" ++ ++#: ../src/unstrip.c:2247 ++msgid "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++msgstr "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++ ++#: ../src/unstrip.c:2248 ++msgid "" ++"Combine stripped files with separate symbols and debug information.\vThe 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." ++msgstr "" ++"Combine stripped files with separate symbols and debug information.\vThe 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." ++ ++#: ../src/objdump.c:61 ++msgid "Mode selection:" ++msgstr "Selección de modo:" ++ ++#: ../src/objdump.c:62 ++msgid "Display relocation information." ++msgstr "Mostrar la reubicación de información." ++ ++#: ../src/objdump.c:64 ++msgid "Display the full contents of all sections requested" ++msgstr "Mostrar el contenido total de todas las secciones solicitadas" ++ ++#: ../src/objdump.c:66 ++msgid "Display assembler code of executable sections" ++msgstr "Mostrar código de ensamblador de secciones ejecutables" ++ ++#: ../src/objdump.c:68 ++msgid "Output option selection:" ++msgstr "Selección de opción de salida:" ++ ++#: ../src/objdump.c:70 ++msgid "Only display information for section NAME." ++msgstr "Sólo muestra información para NOMBRE de sección." ++ ++#. Short description of program. ++#: ../src/objdump.c:76 ++msgid "Show information from FILEs (a.out by default)." ++msgstr "Muestra información de FICHEROS (a.out por defecto)." ++ ++#: ../src/objdump.c:274 ++#: ../src/objdump.c:286 ++#, c-format ++msgid "while close `%s'" ++msgstr "mientras cierra `%s'" ++ ++#: ../src/objdump.c:510 ++#, c-format ++msgid "" ++"\n" ++"RELOCATION RECORDS FOR [%s]:\n" ++"%-*s TYPE VALUE\n" ++msgstr "" ++"\n" ++"REUBICACIÓN DE REGISTROS PARA [%s]:\n" ++"%-*s TIPO VALOR\n" ++ ++#: ../src/objdump.c:513 ++msgid "OFFSET" ++msgstr "COMPENSACIÓN" ++ ++#: ../src/objdump.c:576 ++#, c-format ++msgid "Contents of section %s:\n" ++msgstr "Contenido de la sección %s:\n" ++ ++#: ../src/objdump.c:676 ++#, c-format ++msgid "cannot disassemble" ++msgstr "No se puede desensamblar" ++ ++#~ msgid "Equivalent to: -e -h -l" ++#~ msgstr "Equivalente a: -e -h -l" ++#~ msgid "zeroth section has nonzero info field\n" ++#~ msgstr "Sección zeroth tiene campo de información nonzero\n" ++#~ msgid " Version String: " ++#~ msgstr "Cadena versión:" ++#~ msgid "" ++#~ "\n" ++#~ "Section [%Zu] '%s' is empty.\n" ++#~ msgstr "" ++#~ "\n" ++#~ "Sección [%Zu] '%s' está vacía.\n" ++ +diff --git a/po/fr.po b/po/fr.po +new file mode 100644 +index 0000000..2d63171 +--- /dev/null ++++ b/po/fr.po +@@ -0,0 +1,5612 @@ ++# Translations template for ELFUTILS. ++# Copyright (C) 2009 ORGANIZATION ++# This file is distributed under the same license as the elfutils package. ++# FIRST AUTHOR , YEAR. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: elfutils.master.fr\n" ++"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" ++"POT-Creation-Date: 2009-12-12 08:36+0000\n" ++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" ++"Last-Translator: FULL NAME \n" ++"Language-Team: LANGUAGE \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++ ++#: ../lib/xmalloc.c:51 ../lib/xmalloc.c:65 ../lib/xmalloc.c:79 ++#: ../src/readelf.c:2796 ../src/readelf.c:3135 ../src/unstrip.c:2086 ++#: ../src/unstrip.c:2294 ++#, c-format ++msgid "memory exhausted" ++msgstr "" ++ ++#: ../libelf/elf_error.c:81 ../libasm/asm_error.c:62 ../libdw/dwarf_error.c:79 ++msgid "no error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:84 ../libasm/asm_error.c:81 ../libdw/dwarf_error.c:80 ++msgid "unknown error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:88 ++msgid "unknown version" ++msgstr "" ++ ++#: ../libelf/elf_error.c:92 ++msgid "unknown type" ++msgstr "" ++ ++#: ../libelf/elf_error.c:96 ++msgid "invalid `Elf' handle" ++msgstr "" ++ ++#: ../libelf/elf_error.c:100 ++msgid "invalid size of source operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:104 ++msgid "invalid size of destination operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:108 ../src/readelf.c:4742 ++#, c-format ++msgid "invalid encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:112 ../libasm/asm_error.c:63 ++#: ../libdw/dwarf_error.c:88 ++msgid "out of memory" ++msgstr "" ++ ++#: ../libelf/elf_error.c:116 ++msgid "invalid file descriptor" ++msgstr "" ++ ++#: ../libelf/elf_error.c:120 ++msgid "invalid operation" ++msgstr "" ++ ++#: ../libelf/elf_error.c:124 ++msgid "ELF version not set" ++msgstr "" ++ ++#: ../libelf/elf_error.c:128 ../libelf/elf_error.c:176 ++#: ../libdw/dwarf_error.c:90 ++msgid "invalid command" ++msgstr "" ++ ++#: ../libelf/elf_error.c:132 ../libelf/elf_error.c:192 ++msgid "offset out of range" ++msgstr "" ++ ++#: ../libelf/elf_error.c:136 ++msgid "invalid fmag field in archive header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:140 ++msgid "invalid archive file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:144 ++msgid "descriptor is not for an archive" ++msgstr "" ++ ++#: ../libelf/elf_error.c:148 ++msgid "no index available" ++msgstr "" ++ ++#: ../libelf/elf_error.c:152 ++msgid "cannot read data from file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:156 ++msgid "cannot write data to file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:160 ++msgid "invalid binary class" ++msgstr "" ++ ++#: ../libelf/elf_error.c:164 ++msgid "invalid section index" ++msgstr "" ++ ++#: ../libelf/elf_error.c:168 ++msgid "invalid operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:172 ++msgid "invalid section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:180 ++msgid "executable header not created first" ++msgstr "" ++ ++#: ../libelf/elf_error.c:184 ++msgid "file descriptor disabled" ++msgstr "" ++ ++#: ../libelf/elf_error.c:188 ++msgid "archive/member fildes mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:196 ++msgid "cannot manipulate null section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:200 ++msgid "data/scn mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:204 ++msgid "invalid section header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:208 ../src/readelf.c:6226 ../src/readelf.c:6327 ++#, c-format ++msgid "invalid data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:212 ++msgid "unknown data encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:216 ++msgid "section `sh_size' too small for data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:220 ++msgid "invalid section alignment" ++msgstr "" ++ ++#: ../libelf/elf_error.c:224 ++msgid "invalid section entry size" ++msgstr "" ++ ++#: ../libelf/elf_error.c:228 ++msgid "update() for write on read-only file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:232 ++msgid "no such file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:236 ++msgid "only relocatable files can contain section groups" ++msgstr "" ++ ++#: ../libelf/elf_error.c:241 ++msgid "" ++"program header only allowed in executables, shared objects, and core files" ++msgstr "" ++ ++#: ../libelf/elf_error.c:248 ++msgid "file has no program header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:253 ../libdw/dwarf_error.c:112 ++msgid "invalid offset" ++msgstr "" ++ ++#: ../libasm/asm_error.c:64 ../src/ldgeneric.c:2687 ++#, c-format ++msgid "cannot create output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:65 ++msgid "invalid parameter" ++msgstr "" ++ ++#: ../libasm/asm_error.c:66 ++msgid "cannot change mode of output file" ++msgstr "" ++ ++#. Something went wrong. ++#: ../libasm/asm_error.c:67 ../src/ldgeneric.c:7001 ++#, c-format ++msgid "cannot rename output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:68 ++msgid "duplicate symbol" ++msgstr "" ++ ++#: ../libasm/asm_error.c:69 ++msgid "invalid section type for operation" ++msgstr "" ++ ++#: ../libasm/asm_error.c:70 ++msgid "error during output of data" ++msgstr "" ++ ++#: ../libasm/asm_error.c:71 ++msgid "no backend support available" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:81 ++msgid "invalid access" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:82 ++msgid "no regular file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:83 ++msgid "I/O error" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:84 ++msgid "invalid ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:85 ++msgid "no DWARF information" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:86 ++msgid "no ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:87 ++msgid "cannot get ELF header" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:89 ++msgid "not implemented" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:91 ++msgid "invalid version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:92 ++msgid "invalid file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:93 ++msgid "no entries found" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:94 ++msgid "invalid DWARF" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:95 ++msgid "no string data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:96 ++msgid "no address value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:97 ++msgid "no constant value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:98 ++msgid "no reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:99 ++msgid "invalid reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:100 ++msgid ".debug_line section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:101 ++msgid "invalid .debug_line section" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:102 ++msgid "debug information too big" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:103 ++msgid "invalid DWARF version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:104 ++msgid "invalid directory index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:105 ++msgid "address out of range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:106 ++msgid "no location list value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:107 ++msgid "no block data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:108 ++msgid "invalid line index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:109 ++msgid "invalid address range index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:110 ++msgid "no matching address range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:111 ++msgid "no flag value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:113 ++msgid ".debug_ranges section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:114 ++msgid "invalid CFI section" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:67 ../src/unstrip.c:2236 ++msgid "Input selection options:" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:68 ++msgid "Find addresses in FILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:70 ++msgid "Find addresses from signatures found in COREFILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:72 ++msgid "Find addresses in files mapped into process PID" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:74 ++msgid "" ++"Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " ++"format" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:76 ++msgid "Find addresses in the running kernel" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:78 ++msgid "Kernel with all modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:80 ++msgid "Search path for separate debuginfo files" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:163 ++msgid "only one of -e, -p, -k, -K, or --core allowed" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:223 ++#, c-format ++msgid "cannot read ELF core file: %s" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:243 ++msgid "No modules recognized in core file" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:255 ++msgid "cannot load kernel symbols" ++msgstr "" ++ ++#. Non-fatal to have no modules since we do have the kernel. ++#: ../libdwfl/argp-std.c:259 ++msgid "cannot find kernel modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:273 ++msgid "cannot find kernel or modules" ++msgstr "" ++ ++#: ../libebl/eblbackendname.c:63 ++msgid "No backend" ++msgstr "" ++ ++#: ../libebl/eblcorenotetypename.c:107 ../libebl/eblobjecttypename.c:78 ++#: ../libebl/eblobjnotetypename.c:86 ../libebl/eblosabiname.c:98 ++#: ../libebl/eblsectionname.c:110 ../libebl/eblsectiontypename.c:140 ++#: ../libebl/eblsegmenttypename.c:104 ++msgid "" ++msgstr "" ++ ++#: ../libebl/ebldynamictagname.c:126 ++#, c-format ++msgid ": %#" ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:76 ++#, c-format ++msgid " Build ID: " ++msgstr "" ++ ++#. A non-null terminated version string. ++#: ../libebl/eblobjnote.c:87 ++#, c-format ++msgid " Linker version: %.*s\n" ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:136 ++#, c-format ++msgid " OS: %s, ABI: " ++msgstr "" ++ ++#: ../libebl/eblosabiname.c:95 ++msgid "Stand alone" ++msgstr "" ++ ++#: ../libebl/eblsymbolbindingname.c:92 ../libebl/eblsymboltypename.c:98 ++#, c-format ++msgid ": %d" ++msgstr "" ++ ++#: ../src/ar.c:75 ++msgid "Commands:" ++msgstr "" ++ ++#: ../src/ar.c:76 ++msgid "Delete files from archive." ++msgstr "" ++ ++#: ../src/ar.c:77 ++msgid "Move files in archive." ++msgstr "" ++ ++#: ../src/ar.c:78 ++msgid "Print files in archive." ++msgstr "" ++ ++#: ../src/ar.c:79 ++msgid "Quick append files to archive." ++msgstr "" ++ ++#: ../src/ar.c:81 ++msgid "Replace existing or insert new file into archive." ++msgstr "" ++ ++#: ../src/ar.c:82 ++msgid "Display content of archive." ++msgstr "" ++ ++#: ../src/ar.c:83 ++msgid "Extract files from archive." ++msgstr "" ++ ++#: ../src/ar.c:85 ++msgid "Command Modifiers:" ++msgstr "" ++ ++#: ../src/ar.c:86 ++msgid "Preserve original dates." ++msgstr "" ++ ++#: ../src/ar.c:87 ++msgid "Use instance [COUNT] of name." ++msgstr "" ++ ++#: ../src/ar.c:89 ++msgid "Do not replace existing files with extracted files." ++msgstr "" ++ ++#: ../src/ar.c:90 ++msgid "Allow filename to be truncated if necessary." ++msgstr "" ++ ++#: ../src/ar.c:92 ++msgid "Provide verbose output." ++msgstr "" ++ ++#: ../src/ar.c:93 ++msgid "Force regeneration of symbol table." ++msgstr "" ++ ++#: ../src/ar.c:94 ++msgid "Insert file after [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:95 ++msgid "Insert file before [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:96 ++msgid "Same as -b." ++msgstr "" ++ ++#: ../src/ar.c:97 ++msgid "Suppress message when library has to be created." ++msgstr "" ++ ++#: ../src/ar.c:99 ++msgid "Use full path for file matching." ++msgstr "" ++ ++#: ../src/ar.c:100 ++msgid "Update only older files in archive." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ar.c:106 ++msgid "Create, modify, and extract from archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ar.c:109 ++msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++msgstr "" ++ ++#: ../src/ar.c:191 ++#, c-format ++msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" ++msgstr "" ++ ++#: ../src/ar.c:196 ++#, c-format ++msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" ++msgstr "" ++ ++#: ../src/ar.c:212 ++#, c-format ++msgid "'N' is only meaningful with the 'x' and 'd' options" ++msgstr "" ++ ++#: ../src/ar.c:217 ++#, c-format ++msgid "COUNT parameter required" ++msgstr "" ++ ++#: ../src/ar.c:229 ++#, c-format ++msgid "invalid COUNT parameter %s" ++msgstr "" ++ ++#: ../src/ar.c:236 ++#, c-format ++msgid "'%c' is only meaningful with the 'x' option" ++msgstr "" ++ ++#: ../src/ar.c:242 ++#, c-format ++msgid "archive name required" ++msgstr "" ++ ++#: ../src/ar.c:288 ../src/nm.c:253 ../src/readelf.c:442 ../src/size.c:219 ++#: ../src/strip.c:203 ../src/ld.c:957 ../src/elflint.c:238 ++#: ../src/addr2line.c:185 ../src/findtextrel.c:170 ../src/elfcmp.c:522 ++#: ../src/ranlib.c:136 ../src/strings.c:227 ../src/unstrip.c:233 ++#: ../src/objdump.c:181 ++#, 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/ar.c:293 ../src/nm.c:258 ../src/readelf.c:447 ../src/size.c:224 ++#: ../src/strip.c:208 ../src/ld.c:962 ../src/elflint.c:243 ++#: ../src/addr2line.c:190 ../src/findtextrel.c:175 ../src/elfcmp.c:527 ++#: ../src/ranlib.c:141 ../src/strings.c:232 ../src/unstrip.c:238 ++#: ../src/objdump.c:186 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "" ++ ++#: ../src/ar.c:313 ++#, c-format ++msgid "More than one operation specified" ++msgstr "" ++ ++#: ../src/ar.c:403 ++#, c-format ++msgid "cannot open archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:413 ++#, c-format ++msgid "cannot open archive '%s': %s" ++msgstr "" ++ ++#: ../src/ar.c:417 ++#, c-format ++msgid "%s: not an archive file" ++msgstr "" ++ ++#: ../src/ar.c:421 ++#, c-format ++msgid "cannot stat archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:433 ++#, c-format ++msgid "no entry %s in archive\n" ++msgstr "" ++ ++#: ../src/ar.c:486 ../src/ar.c:928 ../src/ar.c:1128 ++#, c-format ++msgid "cannot create hash table" ++msgstr "" ++ ++#: ../src/ar.c:493 ../src/ar.c:935 ../src/ar.c:1137 ++#, c-format ++msgid "cannot insert into hash table" ++msgstr "" ++ ++#: ../src/ar.c:501 ../src/ranlib.c:176 ++#, c-format ++msgid "cannot stat '%s'" ++msgstr "" ++ ++#: ../src/ar.c:597 ++#, c-format ++msgid "cannot read content of %s: %s" ++msgstr "" ++ ++#: ../src/ar.c:640 ++#, c-format ++msgid "cannot open %.*s" ++msgstr "" ++ ++#: ../src/ar.c:662 ++#, c-format ++msgid "failed to write %s" ++msgstr "" ++ ++#: ../src/ar.c:674 ++#, c-format ++msgid "cannot change mode of %s" ++msgstr "" ++ ++#: ../src/ar.c:690 ++#, c-format ++msgid "cannot change modification time of %s" ++msgstr "" ++ ++#: ../src/ar.c:736 ++#, c-format ++msgid "cannot rename temporary file to %.*s" ++msgstr "" ++ ++#: ../src/ar.c:772 ../src/ar.c:1020 ../src/ar.c:1418 ../src/ranlib.c:250 ++#, c-format ++msgid "cannot create new file" ++msgstr "" ++ ++#: ../src/ar.c:1219 ++#, c-format ++msgid "position member %s not found" ++msgstr "" ++ ++#: ../src/ar.c:1229 ++#, c-format ++msgid "%s: no entry %s in archive!\n" ++msgstr "" ++ ++#: ../src/ar.c:1258 ../src/ldgeneric.c:519 ../src/objdump.c:257 ++#, c-format ++msgid "cannot open %s" ++msgstr "" ++ ++#: ../src/ar.c:1263 ++#, c-format ++msgid "cannot stat %s" ++msgstr "" ++ ++#: ../src/ar.c:1269 ++#, c-format ++msgid "%s is no regular file" ++msgstr "" ++ ++#: ../src/ar.c:1282 ++#, c-format ++msgid "cannot get ELF descriptor for %s: %s\n" ++msgstr "" ++ ++#: ../src/ar.c:1301 ++#, c-format ++msgid "cannot read %s: %s" ++msgstr "" ++ ++#. The archive is too big. ++#: ../src/arlib.c:215 ++#, c-format ++msgid "the archive '%s' is too large" ++msgstr "" ++ ++#: ../src/arlib.c:228 ++#, c-format ++msgid "cannot read ELF header of %s(%s): %s" ++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 ../src/unstrip.c:80 ++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:75 ../src/findtextrel.c:75 ++#: ../src/elfcmp.c:75 ../src/strings.c:83 ++msgid "Miscellaneous:" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/nm.c:108 ++msgid "List symbols from FILEs (a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/nm.c:111 ../src/size.c:92 ../src/strip.c:96 ../src/findtextrel.c:84 ++#: ../src/strings.c:92 ../src/objdump.c:80 ++msgid "[FILE...]" ++msgstr "" ++ ++#: ../src/nm.c:136 ../src/size.c:117 ../src/strip.c:120 ../src/objdump.c:105 ++#, c-format ++msgid "%s: INTERNAL ERROR %d (%s-%s): %s" ++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:229 ++#: ../src/elfcmp.c:574 ../src/ranlib.c:169 ../src/strings.c:183 ++#: ../src/unstrip.c:1899 ../src/unstrip.c:1928 ++#, c-format ++msgid "cannot open '%s'" ++msgstr "" ++ ++#: ../src/nm.c:380 ../src/nm.c:392 ../src/size.c:317 ../src/size.c:326 ++#: ../src/size.c:337 ../src/strip.c:1815 ++#, c-format ++msgid "while closing '%s'" ++msgstr "" ++ ++#: ../src/nm.c:402 ../src/strip.c:358 ../src/objdump.c:296 ++#, c-format ++msgid "%s: File format not recognized" ++msgstr "" ++ ++#. Note: 0 is no valid offset. ++#: ../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 ../src/objdump.c:344 ++#, 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:860 ../src/readelf.c:1003 ++#: ../src/readelf.c:1144 ../src/readelf.c:1326 ../src/readelf.c:1524 ++#: ../src/readelf.c:1710 ../src/readelf.c:1920 ../src/readelf.c:2174 ++#: ../src/readelf.c:2240 ../src/readelf.c:2318 ../src/readelf.c:2815 ++#: ../src/readelf.c:2851 ../src/readelf.c:2913 ../src/readelf.c:6476 ++#: ../src/readelf.c:7329 ../src/readelf.c:7476 ../src/readelf.c:7545 ++#: ../src/size.c:425 ../src/size.c:499 ../src/strip.c:482 ../src/objdump.c:744 ++#, 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 "" ++ ++#. The header line. ++#: ../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 "" ++ ++#. XXX Add machine specific object file types. ++#: ../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: -e -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, macinfo, or exception" ++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:99 ++msgid "Display sections for exception handling" ++msgstr "" ++ ++#: ../src/readelf.c:102 ++msgid "Output control:" ++msgstr "" ++ ++#: ../src/readelf.c:104 ++msgid "Do not find symbol names for addresses in DWARF data" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/readelf.c:110 ++msgid "Print information from ELF file in human-readable form." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/readelf.c:114 ../src/elflint.c:85 ++msgid "FILE..." ++msgstr "" ++ ++#: ../src/readelf.c:266 ../src/elflint.c:158 ++#, c-format ++msgid "cannot open input file" ++msgstr "" ++ ++#: ../src/readelf.c:394 ++#, c-format ++msgid "Unknown DWARF debug section `%s'.\n" ++msgstr "" ++ ++#: ../src/readelf.c:418 ../src/elflint.c:222 ++msgid "Missing file name.\n" ++msgstr "" ++ ++#: ../src/readelf.c:423 ../src/objdump.c:236 ++msgid "No operation specified.\n" ++msgstr "" ++ ++#: ../src/readelf.c:458 ++#, c-format ++msgid "cannot generate Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:470 ++#, c-format ++msgid "'%s' is not an archive, cannot print archive index" ++msgstr "" ++ ++#: ../src/readelf.c:475 ++#, c-format ++msgid "error while closing Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:567 ++#, c-format ++msgid "cannot stat input file" ++msgstr "" ++ ++#: ../src/readelf.c:569 ++#, c-format ++msgid "input file is empty" ++msgstr "" ++ ++#: ../src/readelf.c:571 ++#, c-format ++msgid "failed reading '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:606 ++#, c-format ++msgid "cannot read ELF header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:614 ++#, c-format ++msgid "cannot create EBL handle" ++msgstr "" ++ ++#: ../src/readelf.c:621 ../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:707 ++msgid "NONE (None)" ++msgstr "" ++ ++#: ../src/readelf.c:708 ++msgid "REL (Relocatable file)" ++msgstr "" ++ ++#: ../src/readelf.c:709 ++msgid "EXEC (Executable file)" ++msgstr "" ++ ++#: ../src/readelf.c:710 ++msgid "DYN (Shared object file)" ++msgstr "" ++ ++#: ../src/readelf.c:711 ++msgid "CORE (Core file)" ++msgstr "" ++ ++#: ../src/readelf.c:716 ++#, c-format ++msgid "OS Specific: (%x)\n" ++msgstr "" ++ ++#. && e_type <= ET_HIPROC always true ++#: ../src/readelf.c:718 ++#, c-format ++msgid "Processor Specific: (%x)\n" ++msgstr "" ++ ++#: ../src/readelf.c:728 ++msgid "" ++"ELF Header:\n" ++" Magic: " ++msgstr "" ++ ++#: ../src/readelf.c:732 ++#, c-format ++msgid "" ++"\n" ++" Class: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:737 ++#, c-format ++msgid " Data: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:743 ++#, c-format ++msgid " Ident Version: %hhd %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:745 ../src/readelf.c:762 ++msgid "(current)" ++msgstr "" ++ ++#: ../src/readelf.c:749 ++#, c-format ++msgid " OS/ABI: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:752 ++#, c-format ++msgid " ABI Version: %hhd\n" ++msgstr "" ++ ++#: ../src/readelf.c:755 ++msgid " Type: " ++msgstr "" ++ ++#: ../src/readelf.c:758 ++#, c-format ++msgid " Machine: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:760 ++#, c-format ++msgid " Version: %d %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:764 ++#, c-format ++msgid " Entry point address: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:767 ++#, c-format ++msgid " Start of program headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:768 ../src/readelf.c:771 ++msgid "(bytes into file)" ++msgstr "" ++ ++#: ../src/readelf.c:770 ++#, c-format ++msgid " Start of section headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:773 ++#, c-format ++msgid " Flags: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:776 ++#, c-format ++msgid " Size of this header: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:777 ../src/readelf.c:780 ../src/readelf.c:786 ++msgid "(bytes)" ++msgstr "" ++ ++#: ../src/readelf.c:779 ++#, c-format ++msgid " Size of program header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:782 ++#, c-format ++msgid " Number of program headers entries: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:785 ++#, c-format ++msgid " Size of section header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:788 ++#, c-format ++msgid " Number of section headers entries: %" ++msgstr "" ++ ++#: ../src/readelf.c:795 ++#, c-format ++msgid " (% in [0].sh_size)" ++msgstr "" ++ ++#: ../src/readelf.c:798 ../src/readelf.c:812 ++msgid " ([0] not available)" ++msgstr "" ++ ++#. We managed to get the zeroth section. ++#: ../src/readelf.c:808 ++#, c-format ++msgid " (% in [0].sh_link)" ++msgstr "" ++ ++#: ../src/readelf.c:816 ++#, c-format ++msgid "" ++" Section header string table index: XINDEX%s\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:820 ++#, c-format ++msgid "" ++" Section header string table index: %\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:852 ++#, c-format ++msgid "" ++"There are %d section headers, starting at offset %#:\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:862 ++msgid "Section Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:865 ++msgid "" ++"[Nr] Name Type Addr Off Size ES Flags Lk " ++"Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:867 ++msgid "" ++"[Nr] Name Type Addr Off Size ES " ++"Flags Lk Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:874 ../src/readelf.c:1027 ++#, c-format ++msgid "cannot get section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:881 ../src/readelf.c:1035 ../src/readelf.c:7496 ++#: ../src/unstrip.c:352 ../src/unstrip.c:376 ../src/unstrip.c:426 ++#: ../src/unstrip.c:535 ../src/unstrip.c:552 ../src/unstrip.c:590 ++#: ../src/unstrip.c:788 ../src/unstrip.c:1056 ../src/unstrip.c:1243 ++#: ../src/unstrip.c:1304 ../src/unstrip.c:1426 ../src/unstrip.c:1479 ++#: ../src/unstrip.c:1587 ../src/unstrip.c:1777 ++#, c-format ++msgid "cannot get section header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:939 ++msgid "Program Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:941 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:944 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz " ++"MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:984 ++#, c-format ++msgid "\t[Requesting program interpreter: %s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1005 ++msgid "" ++"\n" ++" Section to Segment mapping:\n" ++" Segment Sections..." ++msgstr "" ++ ++#: ../src/readelf.c:1016 ../src/unstrip.c:1823 ../src/unstrip.c:1862 ++#: ../src/unstrip.c:1869 ++#, c-format ++msgid "cannot get program header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:1150 ++#, 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:1155 ++#, 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:1163 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1177 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1328 ++#, c-format ++msgid "" ++"\n" ++"Dynamic segment contains %lu entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Dynamic segment contains %lu entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1340 ++msgid " Type Value\n" ++msgstr "" ++ ++#: ../src/readelf.c:1364 ++#, c-format ++msgid "Shared library: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1369 ++#, c-format ++msgid "Library soname: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1374 ++#, c-format ++msgid "Library rpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1379 ++#, c-format ++msgid "Library runpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1399 ++#, c-format ++msgid "% (bytes)\n" ++msgstr "" ++ ++#: ../src/readelf.c:1509 ../src/readelf.c:1695 ++#, c-format ++msgid "" ++"\n" ++"Invalid symbol table at offset %#0\n" ++msgstr "" ++ ++#: ../src/readelf.c:1527 ../src/readelf.c:1712 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#. 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. ++#: ../src/readelf.c:1542 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1552 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1554 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1607 ../src/readelf.c:1618 ../src/readelf.c:1631 ++#: ../src/readelf.c:1649 ../src/readelf.c:1661 ../src/readelf.c:1780 ++#: ../src/readelf.c:1792 ../src/readelf.c:1806 ../src/readelf.c:1825 ++#: ../src/readelf.c:1838 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1619 ../src/readelf.c:1793 ../src/objdump.c:379 ++msgid "INVALID SYMBOL" ++msgstr "" ++ ++#: ../src/readelf.c:1650 ../src/readelf.c:1826 ../src/objdump.c:394 ++msgid "INVALID SECTION" ++msgstr "" ++ ++#: ../src/readelf.c:1724 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1726 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1927 ++#, 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:1933 ++#, 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:1943 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1945 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1965 ++#, c-format ++msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++msgstr "" ++ ++#: ../src/readelf.c:2053 ++#, c-format ++msgid "bad dynamic symbol" ++msgstr "" ++ ++#: ../src/readelf.c:2135 ++msgid "none" ++msgstr "" ++ ++#: ../src/readelf.c:2152 ++msgid "| " ++msgstr "" ++ ++#: ../src/readelf.c:2177 ++#, c-format ++msgid "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2200 ++#, c-format ++msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2213 ++#, c-format ++msgid " %#06x: Name: %s Flags: %s Version: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2244 ++#, c-format ++msgid "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2274 ++#, c-format ++msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2289 ++#, c-format ++msgid " %#06x: Parent %d: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2521 ++#, c-format ++msgid "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgid_plural "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2551 ++msgid " 0 *local* " ++msgstr "" ++ ++#: ../src/readelf.c:2556 ++msgid " 1 *global* " ++msgstr "" ++ ++#: ../src/readelf.c:2587 ++#, c-format ++msgid "" ++"\n" ++"Histogram for bucket list length in section [%2u] '%s' (total of %d " ++"bucket):\n" ++" Addr: %#0* Offset: %#08 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* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2610 ++#, c-format ++msgid " Length Number % of total Coverage\n" ++msgstr "" ++ ++#: ../src/readelf.c:2612 ++#, c-format ++msgid " 0 %6 %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2619 ++#, c-format ++msgid "%7d %6 %5.1f%% %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2632 ++#, c-format ++msgid "" ++" Average number of tests: successful lookup: %f\n" ++" unsuccessful lookup: %f\n" ++msgstr "" ++ ++#: ../src/readelf.c:2650 ../src/readelf.c:2692 ../src/readelf.c:2733 ++#, c-format ++msgid "cannot get data for section %d: %s" ++msgstr "" ++ ++#: ../src/readelf.c:2787 ++#, c-format ++msgid "" ++" Symbol Bias: %u\n" ++" Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:2861 ++#, c-format ++msgid "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2875 ++msgid "" ++" Library Time Stamp Checksum Version " ++"Flags" ++msgstr "" ++ ++#: ../src/readelf.c:2925 ++#, c-format ++msgid "" ++"\n" ++"Object attributes section [%2zu] '%s' of % bytes at offset %" ++"#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:2941 ++msgid " Owner Size\n" ++msgstr "" ++ ++#: ../src/readelf.c:2967 ++#, c-format ++msgid " %-13s %4\n" ++msgstr "" ++ ++#: ../src/readelf.c:2999 ++#, c-format ++msgid " %-4u %12\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/readelf.c:3004 ++#, c-format ++msgid " File: %11\n" ++msgstr "" ++ ++#: ../src/readelf.c:3039 ++#, c-format ++msgid " %s: %, %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3042 ++#, c-format ++msgid " %s: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:3045 ++#, c-format ++msgid " %s: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3052 ++#, c-format ++msgid " %u: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:3055 ++#, c-format ++msgid " %u: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3091 ++#, c-format ++msgid "%s+%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3094 ++#, c-format ++msgid "%s+%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3099 ++#, c-format ++msgid "%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3102 ++#, c-format ++msgid "%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3108 ++#, c-format ++msgid "%s+%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3111 ++#, c-format ++msgid "%s+%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3115 ++#, c-format ++msgid "%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3118 ++#, c-format ++msgid "%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3123 ++#, c-format ++msgid "%s+%#" ++msgstr "" ++ ++#: ../src/readelf.c:3126 ++#, c-format ++msgid "%s+%#0*" ++msgstr "" ++ ++#: ../src/readelf.c:3234 ++#, c-format ++msgid "unknown tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3236 ++#, c-format ++msgid "unknown user tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3446 ++#, c-format ++msgid "unknown attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3449 ++#, c-format ++msgid "unknown user attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3495 ++#, c-format ++msgid "unknown form %" ++msgstr "" ++ ++#: ../src/readelf.c:3729 ++msgid "empty block" ++msgstr "" ++ ++#: ../src/readelf.c:3732 ++#, c-format ++msgid "%zu byte block:" ++msgstr "" ++ ++#: ../src/readelf.c:4141 ++#, c-format ++msgid "%*s[%4] %s \n" ++msgstr "" ++ ++#: ../src/readelf.c:4154 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [ Code]\n" ++msgstr "" ++ ++#: ../src/readelf.c:4161 ++#, c-format ++msgid "" ++"\n" ++"Abbreviation section at offset %:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4174 ++#, c-format ++msgid " *** error while reading abbreviation: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4190 ++#, c-format ++msgid " [%5u] offset: %, children: %s, tag: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4193 ++msgid "yes" ++msgstr "" ++ ++#: ../src/readelf.c:4193 ++msgid "no" ++msgstr "" ++ ++#: ../src/readelf.c:4229 ++#, c-format ++msgid "cannot get .debug_aranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4234 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entry:\n" ++msgid_plural "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:4264 ++#, c-format ++msgid " [%*zu] ???\n" ++msgstr "" ++ ++#: ../src/readelf.c:4266 ++#, c-format ++msgid "" ++" [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" ++msgstr "" ++ ++#: ../src/readelf.c:4285 ++#, c-format ++msgid "cannot get .debug_ranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4290 ../src/readelf.c:4773 ../src/readelf.c:5436 ++#: ../src/readelf.c:5881 ../src/readelf.c:5976 ../src/readelf.c:6148 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4304 ../src/readelf.c:5895 ++#, c-format ++msgid " [%6tx] \n" ++msgstr "" ++ ++#: ../src/readelf.c:4326 ../src/readelf.c:5917 ++#, c-format ++msgid " [%6tx] base address %s\n" ++msgstr "" ++ ++#. We have an address range entry. ++#. First address range entry in a list. ++#: ../src/readelf.c:4337 ++#, c-format ++msgid " [%6tx] %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4339 ++#, c-format ++msgid " %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4762 ../src/readelf.c:6214 ../src/readelf.c:6316 ++#, c-format ++msgid "cannot get %s content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4769 ++#, c-format ++msgid "" ++"\n" ++"Call frame information section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4796 ../src/readelf.c:5470 ++#, c-format ++msgid "invalid data in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:4818 ++#, c-format ++msgid "" ++"\n" ++" [%6tx] Zero terminator\n" ++msgstr "" ++ ++#: ../src/readelf.c:4896 ++msgid "FDE address encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4902 ++msgid "LSDA pointer encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4947 ++#, c-format ++msgid "invalid augmentation encoding" ++msgstr "" ++ ++#: ../src/readelf.c:5018 ++#, c-format ++msgid " (offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:5025 ++#, c-format ++msgid " (end offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:5052 ++#, c-format ++msgid " %-26sLSDA pointer: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:5098 ++#, c-format ++msgid "cannot get attribute code: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5106 ++#, c-format ++msgid "cannot get attribute form: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5119 ++#, c-format ++msgid "cannot get attribute value: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5315 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [Offset]\n" ++msgstr "" ++ ++#: ../src/readelf.c:5340 ++#, c-format ++msgid "" ++" Compilation unit at offset %:\n" ++" Version: %, Abbreviation section offset: %, Address size: %" ++", Offset size: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5358 ++#, c-format ++msgid "cannot get DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5369 ++#, c-format ++msgid "cannot get DIE offset: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5377 ++#, c-format ++msgid "cannot get tag of DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5406 ++#, c-format ++msgid "cannot get next DIE: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5413 ++#, c-format ++msgid "cannot get next DIE: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5448 ++#, c-format ++msgid "cannot get line data section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5461 ++#, c-format ++msgid "" ++"\n" ++"Table at offset %Zu:\n" ++msgstr "" ++ ++#. Print what we got so far. ++#: ../src/readelf.c:5513 ++#, c-format ++msgid "" ++"\n" ++" Length: %\n" ++" DWARF version: %\n" ++" Prologue length: %\n" ++" Minimum instruction length: %\n" ++" Initial value if '%s': %\n" ++" Line base: %\n" ++" Line range: %\n" ++" Opcode base: %\n" ++"\n" ++"Opcodes:\n" ++msgstr "" ++ ++#: ../src/readelf.c:5532 ++#, c-format ++msgid "invalid data at offset %tu in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:5547 ++#, c-format ++msgid " [%*] %hhu argument\n" ++msgid_plural " [%*] %hhu arguments\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5555 ++msgid "" ++"\n" ++"Directory table:" ++msgstr "" ++ ++#: ../src/readelf.c:5571 ++msgid "" ++"\n" ++"File name table:\n" ++" Entry Dir Time Size Name" ++msgstr "" ++ ++#: ../src/readelf.c:5600 ++msgid "" ++"\n" ++"Line number statements:" ++msgstr "" ++ ++#: ../src/readelf.c:5661 ++#, c-format ++msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" ++msgstr "" ++ ++#: ../src/readelf.c:5681 ++#, c-format ++msgid " extended opcode %u: " ++msgstr "" ++ ++#: ../src/readelf.c:5686 ++msgid "end of sequence" ++msgstr "" ++ ++#: ../src/readelf.c:5701 ++#, c-format ++msgid "set address to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5722 ++#, c-format ++msgid "define new file: dir=%u, mtime=%, length=%, name=%s\n" ++msgstr "" ++ ++#. Unknown, ignore it. ++#: ../src/readelf.c:5731 ++msgid "unknown opcode" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5743 ++msgid " copy" ++msgstr "" ++ ++#: ../src/readelf.c:5753 ++#, c-format ++msgid "advance address by %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5764 ++#, c-format ++msgid " advance line by constant %d to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5772 ++#, c-format ++msgid " set file to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5782 ++#, c-format ++msgid " set column to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5789 ++#, c-format ++msgid " set '%s' to %\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5795 ++msgid " set basic block flag" ++msgstr "" ++ ++#: ../src/readelf.c:5805 ++#, c-format ++msgid "advance address by constant %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5821 ++#, c-format ++msgid "advance address by fixed value %u to %s\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5830 ++msgid " set prologue end flag" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5835 ++msgid " set epilogue begin flag" ++msgstr "" ++ ++#. 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. ++#: ../src/readelf.c:5844 ++#, c-format ++msgid " unknown opcode with % parameter:" ++msgid_plural " unknown opcode with % parameters:" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5876 ++#, c-format ++msgid "cannot get .debug_loc content: %s" ++msgstr "" ++ ++#. First entry in a list. ++#: ../src/readelf.c:5931 ++#, c-format ++msgid " [%6tx] %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5933 ++#, c-format ++msgid " %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5986 ++#, c-format ++msgid "cannot get macro information section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6065 ++#, c-format ++msgid "%*s*** non-terminated string at end of section" ++msgstr "" ++ ++#: ../src/readelf.c:6133 ++#, c-format ++msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6172 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" %*s String\n" ++msgstr "" ++ ++#: ../src/readelf.c:6186 ++#, c-format ++msgid " *** error while reading strings: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6206 ++#, c-format ++msgid "" ++"\n" ++"Call frame search table section [%2zu] '.eh_frame_hdr':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6308 ++#, c-format ++msgid "" ++"\n" ++"Exception handling table section [%2zu] '.gcc_except_table':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6331 ++#, c-format ++msgid " LPStart encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6343 ++#, c-format ++msgid " TType encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6357 ++#, c-format ++msgid " Call site encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6370 ++msgid "" ++"\n" ++" Call site table:" ++msgstr "" ++ ++#: ../src/readelf.c:6384 ++#, c-format ++msgid "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:6444 ++#, c-format ++msgid "invalid TType encoding" ++msgstr "" ++ ++#: ../src/readelf.c:6467 ++#, c-format ++msgid "cannot get debug context descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6602 ../src/readelf.c:7167 ++#, c-format ++msgid "cannot convert core note data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6907 ++#, c-format ++msgid "" ++"\n" ++"%*s... ..." ++msgstr "" ++ ++#: ../src/readelf.c:7265 ++msgid " Owner Data size Type\n" ++msgstr "" ++ ++#: ../src/readelf.c:7283 ++#, c-format ++msgid " %-13.*s %9 %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:7314 ++#, c-format ++msgid "cannot get content of note section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7341 ++#, c-format ++msgid "" ++"\n" ++"Note section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7364 ++#, c-format ++msgid "" ++"\n" ++"Note segment of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7410 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no data to dump.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7416 ../src/readelf.c:7439 ++#, c-format ++msgid "cannot get data for section [%Zu] '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7420 ++#, c-format ++msgid "" ++"\n" ++"Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7433 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no strings to dump.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7443 ++#, c-format ++msgid "" ++"\n" ++"String section [%Zu] '%s' contains % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7491 ++#, c-format ++msgid "" ++"\n" ++"section [%lu] does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7517 ++#, c-format ++msgid "" ++"\n" ++"section '%s' does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7578 ++#, c-format ++msgid "cannot get symbol index of archive '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7581 ++#, c-format ++msgid "" ++"\n" ++"Archive '%s' has no symbol index\n" ++msgstr "" ++ ++#: ../src/readelf.c:7585 ++#, c-format ++msgid "" ++"\n" ++"Index of archive '%s' has %Zu entries:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7603 ++#, c-format ++msgid "cannot extract member at offset %Zu in '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7608 ++#, 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 "" ++ ++#. Short description of program. ++#: ../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:339 ++#, c-format ++msgid "%s: file format not recognized" ++msgstr "" ++ ++#: ../src/size.c:446 ../src/size.c:589 ++#, c-format ++msgid " (ex %s)" ++msgstr "" ++ ++#: ../src/size.c:614 ++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 "" ++ ++#. Short description of program. ++#: ../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 ../src/unstrip.c:124 ++#, c-format ++msgid "-o option specified twice" ++msgstr "" ++ ++#: ../src/strip.c:259 ++#, c-format ++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:868 ../src/strip.c:955 ++#, c-format ++msgid "while generating output file: %s" ++msgstr "" ++ ++#: ../src/strip.c:928 ../src/strip.c:1667 ++#, c-format ++msgid "%s: error while creating ELF header: %s" ++msgstr "" ++ ++#: ../src/strip.c:942 ++#, c-format ++msgid "while preparing output for '%s'" ++msgstr "" ++ ++#: ../src/strip.c:993 ../src/strip.c:1049 ++#, c-format ++msgid "while create section header section: %s" ++msgstr "" ++ ++#: ../src/strip.c:999 ++#, c-format ++msgid "cannot allocate section data: %s" ++msgstr "" ++ ++#: ../src/strip.c:1058 ++#, c-format ++msgid "while create section header string table: %s" ++msgstr "" ++ ++#: ../src/strip.c:1592 ../src/strip.c:1689 ++#, c-format ++msgid "while writing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1603 ++#, c-format ++msgid "while creating '%s'" ++msgstr "" ++ ++#: ../src/strip.c:1615 ++#, c-format ++msgid "while computing checksum for debug information" ++msgstr "" ++ ++#: ../src/strip.c:1675 ++#, c-format ++msgid "%s: error while reading the file: %s" ++msgstr "" ++ ++#: ../src/strip.c:1721 ../src/strip.c:1728 ++#, c-format ++msgid "error while finishing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1751 ../src/strip.c:1808 ++#, 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 "" ++ ++#. Short description of program. ++#: ../src/ld.c:197 ++msgid "Combine object and archive files." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../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:1446 ++#, c-format ++msgid "cannot read version script '%s'" ++msgstr "" ++ ++#. The symbol is already defined and now again ++#. in the linker script. This is an error. ++#: ../src/ld.c:1512 ../src/ld.c:1551 ++#, 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: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 % in %s to % in %s" ++msgstr "" ++ ++#: ../src/ldgeneric.c:677 ++#, c-format ++msgid "(%s+%#): multiple definition of %s `%s'\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:700 ++#, c-format ++msgid "(%s+%#): first defined here\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:819 ++#, c-format ++msgid "%s: cannot get section group data: %s" ++msgstr "" ++ ++#. If we come here no section group contained the given section ++#. despite the SHF_GROUP flag. This is an error in the input ++#. file. ++#: ../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 "" ++ ++#. This should never happen. ++#: ../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: %" ++"" ++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 "" ++ ++#. 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. ++#: ../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 '%' 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*" ++msgstr "" ++ ++#: ../src/ldgeneric.c:3690 ++#, c-format ++msgid "no entry symbol specified: defaulting to %#0*" ++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 ../src/unstrip.c:1807 ++#, 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 "" ++ ++#. This cannot be implemented generally. There should have been a ++#. machine dependent implementation and we should never have arrived ++#. here. ++#: ../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/i386_ld.c:210 ++#, c-format ++msgid "cannot allocate PLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:232 ++#, c-format ++msgid "cannot allocate PLTREL section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:253 ++#, c-format ++msgid "cannot allocate GOT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:274 ++#, c-format ++msgid "cannot allocate GOTPLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:661 ++#, c-format ++msgid "initial-executable TLS relocation cannot be used " ++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:71 ++msgid "Be extremely strict, flag level 2 features." ++msgstr "" ++ ++#: ../src/elflint.c:72 ++msgid "Do not print anything if successful" ++msgstr "" ++ ++#: ../src/elflint.c:73 ++msgid "Binary is a separate debuginfo file" ++msgstr "" ++ ++#: ../src/elflint.c:75 ++msgid "" ++"Binary has been created with GNU ld and is therefore known to be broken in " ++"certain ways" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elflint.c:81 ++msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." ++msgstr "" ++ ++#: ../src/elflint.c:165 ++#, c-format ++msgid "cannot generate Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:184 ++#, c-format ++msgid "error while closing Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:188 ++msgid "No errors" ++msgstr "" ++ ++#: ../src/elflint.c:301 ++#, c-format ++msgid " error while freeing sub-ELF descriptor: %s\n" ++msgstr "" ++ ++#. We cannot do anything. ++#: ../src/elflint.c:309 ++#, c-format ++msgid "Not an ELF file - it has the wrong magic bytes at the start\n" ++msgstr "" ++ ++#: ../src/elflint.c:368 ++#, c-format ++msgid "e_ident[%d] == %d is no known class\n" ++msgstr "" ++ ++#: ../src/elflint.c:373 ++#, c-format ++msgid "e_ident[%d] == %d is no known data encoding\n" ++msgstr "" ++ ++#: ../src/elflint.c:377 ++#, c-format ++msgid "unknown ELF header version number e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:383 ++#, c-format ++msgid "unsupported OS ABI e_ident[%d] == '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:389 ++#, c-format ++msgid "unsupport ABI version e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:394 ++#, c-format ++msgid "e_ident[%zu] is not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:399 ++#, c-format ++msgid "unknown object file type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:406 ++#, c-format ++msgid "unknown machine type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:410 ++#, c-format ++msgid "unknown object file version\n" ++msgstr "" ++ ++#: ../src/elflint.c:416 ++#, c-format ++msgid "invalid program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:418 ++#, c-format ++msgid "executables and DSOs cannot have zero program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:422 ++#, c-format ++msgid "invalid number of program header entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:430 ++#, c-format ++msgid "invalid section header table offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:433 ++#, c-format ++msgid "section header table must be present\n" ++msgstr "" ++ ++#: ../src/elflint.c:447 ++#, c-format ++msgid "invalid number of section header table entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:464 ++#, c-format ++msgid "invalid section header index\n" ++msgstr "" ++ ++#: ../src/elflint.c:469 ++#, c-format ++msgid "invalid machine flags: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:476 ../src/elflint.c:493 ++#, c-format ++msgid "invalid ELF header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:479 ../src/elflint.c:496 ++#, c-format ++msgid "invalid program header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:482 ../src/elflint.c:499 ++#, c-format ++msgid "invalid program header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:485 ../src/elflint.c:502 ++#, c-format ++msgid "invalid section header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:488 ../src/elflint.c:505 ++#, c-format ++msgid "invalid section header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:549 ++#, c-format ++msgid "" ++"section [%2d] '%s': section with SHF_GROUP flag set not part of a section " ++"group\n" ++msgstr "" ++ ++#: ../src/elflint.c:553 ++#, c-format ++msgid "" ++"section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n" ++msgstr "" ++ ++#: ../src/elflint.c:569 ../src/elflint.c:1412 ../src/elflint.c:1462 ++#: ../src/elflint.c:1571 ../src/elflint.c:2165 ../src/elflint.c:2679 ++#: ../src/elflint.c:2840 ../src/elflint.c:2970 ../src/elflint.c:3142 ++#: ../src/elflint.c:4040 ++#, c-format ++msgid "section [%2d] '%s': cannot get section data\n" ++msgstr "" ++ ++#: ../src/elflint.c:582 ../src/elflint.c:1578 ++#, 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:605 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol table cannot have more than one extended index " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:616 ++#, c-format ++msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" ++msgstr "" ++ ++#: ../src/elflint.c:625 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:630 ../src/elflint.c:633 ../src/elflint.c:636 ++#: ../src/elflint.c:639 ../src/elflint.c:642 ../src/elflint.c:645 ++#, c-format ++msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:648 ++#, c-format ++msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:658 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:667 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid name value\n" ++msgstr "" ++ ++#: ../src/elflint.c:680 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: too large section index but no extended " ++"section index section\n" ++msgstr "" ++ ++#: ../src/elflint.c:686 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " ++"st_shndx (%)\n" ++msgstr "" ++ ++#. || sym->st_shndx > SHN_HIRESERVE always false ++#: ../src/elflint.c:698 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:706 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown type\n" ++msgstr "" ++ ++#: ../src/elflint.c:712 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" ++msgstr "" ++ ++#: ../src/elflint.c:717 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" ++msgstr "" ++ ++#: ../src/elflint.c:725 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" ++msgstr "" ++ ++#: ../src/elflint.c:729 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:733 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:765 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:771 ../src/elflint.c:796 ../src/elflint.c:839 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu does not fit completely in referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:780 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " ++"SHF_TLS flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:790 ../src/elflint.c:832 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:817 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:825 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:852 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:859 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: non-local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:866 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" ++msgstr "" ++ ++#: ../src/elflint.c:916 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%" ++"2d]\n" ++msgstr "" ++ ++#: ../src/elflint.c:923 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#. 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. ++#: ../src/elflint.c:939 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " ++"match %s section address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:946 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " ++"match %s section size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:954 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:970 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " ++"segment address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:977 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " ++"segment size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:990 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" ++"default visibility\n" ++msgstr "" ++ ++#: ../src/elflint.c:994 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" ++msgstr "" ++ ++#: ../src/elflint.c:1039 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1048 ../src/elflint.c:1100 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1073 ../src/elflint.c:1125 ++#, c-format ++msgid "" ++"section [%2d] '%s': relative relocations after index %d as specified by " ++"DT_RELCOUNT\n" ++msgstr "" ++ ++#: ../src/elflint.c:1079 ../src/elflint.c:1131 ++#, c-format ++msgid "" ++"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " ++"specified %d relative relocations\n" ++msgstr "" ++ ++#: ../src/elflint.c:1091 ++#, c-format ++msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1173 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1186 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1194 ++#, c-format ++msgid "section [%2d] '%s': sh_info should be zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1201 ++#, c-format ++msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" ++msgstr "" ++ ++#: ../src/elflint.c:1208 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" ++msgstr "" ++ ++#: ../src/elflint.c:1268 ++#, c-format ++msgid "text relocation flag set but there is no read-only segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1295 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1303 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: relocation type invalid for the file " ++"type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1311 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1329 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " ++"be used with %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1346 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1361 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: copy relocation against symbol of type %" ++"s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1382 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: read-only section modified but text " ++"relocation flag not set\n" ++msgstr "" ++ ++#: ../src/elflint.c:1397 ++#, c-format ++msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" ++msgstr "" ++ ++#: ../src/elflint.c:1436 ../src/elflint.c:1486 ++#, c-format ++msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1566 ++#, c-format ++msgid "more than one dynamic section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1584 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" ++msgstr "" ++ ++#: ../src/elflint.c:1589 ../src/elflint.c:1881 ++#, c-format ++msgid "section [%2d] '%s': sh_info not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1599 ++#, c-format ++msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1607 ++#, c-format ++msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:1614 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: unknown tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:1625 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1635 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" ++msgstr "" ++ ++#: ../src/elflint.c:1653 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" ++msgstr "" ++ ++#: ../src/elflint.c:1675 ++#, 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:1718 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1733 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must be valid offset in section [%" ++"2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:1753 ../src/elflint.c:1781 ++#, c-format ++msgid "section [%2d] '%s': contains %s entry but not %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1765 ++#, c-format ++msgid "section [%2d] '%s': mandatory tag %s not present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1774 ++#, c-format ++msgid "section [%2d] '%s': no hash section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1789 ../src/elflint.c:1796 ++#, c-format ++msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1806 ../src/elflint.c:1810 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" ++msgstr "" ++ ++#: ../src/elflint.c:1816 ++#, c-format ++msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" ++msgstr "" ++ ++#: ../src/elflint.c:1827 ../src/elflint.c:1831 ../src/elflint.c:1835 ++#: ../src/elflint.c:1839 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:1851 ++#, c-format ++msgid "" ++"section [%2d] '%s': only relocatable files can have extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1861 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index section not for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1866 ++#, c-format ++msgid "cannot get data for symbol section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1869 ++#, c-format ++msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" ++msgstr "" ++ ++#: ../src/elflint.c:1876 ++#, c-format ++msgid "section [%2d] '%s': extended index table too small for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1891 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " ++"same symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1902 ++#, c-format ++msgid "symbol 0 should have zero extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1914 ++#, c-format ++msgid "cannot get data for symbol %zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:1919 ++#, c-format ++msgid "extended section index is % but symbol index is not XINDEX\n" ++msgstr "" ++ ++#: ../src/elflint.c:1935 ../src/elflint.c:1976 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:1947 ../src/elflint.c:1988 ++#, c-format ++msgid "section [%2d] '%s': chain array too large\n" ++msgstr "" ++ ++#: ../src/elflint.c:1956 ../src/elflint.c:1997 ++#, c-format ++msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1962 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2003 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference % out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2018 ++#, c-format ++msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2029 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected at " ++"least%ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2037 ++#, c-format ++msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2069 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" ++msgstr "" ++ ++#: ../src/elflint.c:2090 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " ++"undefined\n" ++msgstr "" ++ ++#: ../src/elflint.c:2101 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" ++msgstr "" ++ ++#: ../src/elflint.c:2132 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2137 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2143 ++#, c-format ++msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2156 ++#, c-format ++msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:2174 ++#, c-format ++msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2182 ++#, c-format ++msgid "section [%2d] '%s': hash table entry size incorrect\n" ++msgstr "" ++ ++#: ../src/elflint.c:2187 ++#, c-format ++msgid "section [%2d] '%s': not marked to be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:2192 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table has not even room for initial administrative " ++"entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:2240 ++#, c-format ++msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" ++msgstr "" ++ ++#: ../src/elflint.c:2318 ../src/elflint.c:2322 ++#, c-format ++msgid "section [%2zu] '%s': reference to symbol index 0\n" ++msgstr "" ++ ++#: ../src/elflint.c:2329 ++#, 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:2341 ++#, 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:2357 ++#, c-format ++msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:2377 ++#, c-format ++msgid "" ++"section [%2d] '%s': section groups only allowed in relocatable object files\n" ++msgstr "" ++ ++#: ../src/elflint.c:2388 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol table: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2393 ++#, c-format ++msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2399 ++#, c-format ++msgid "section [%2d] '%s': invalid symbol index in sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:2404 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:2411 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol for signature\n" ++msgstr "" ++ ++#: ../src/elflint.c:2416 ++#, c-format ++msgid "section [%2d] '%s': signature symbol canot be empty string\n" ++msgstr "" ++ ++#: ../src/elflint.c:2422 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not set correctly\n" ++msgstr "" ++ ++#: ../src/elflint.c:2428 ++#, c-format ++msgid "section [%2d] '%s': cannot get data: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2437 ++#, c-format ++msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2442 ++#, c-format ++msgid "section [%2d] '%s': section group without flags word\n" ++msgstr "" ++ ++#: ../src/elflint.c:2448 ++#, c-format ++msgid "section [%2d] '%s': section group without member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2452 ++#, c-format ++msgid "section [%2d] '%s': section group with only one member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2463 ++#, c-format ++msgid "section [%2d] '%s': unknown section group flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:2475 ++#, c-format ++msgid "section [%2d] '%s': section index %Zu out of range\n" ++msgstr "" ++ ++#: ../src/elflint.c:2484 ++#, c-format ++msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2491 ++#, c-format ++msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2497 ++#, c-format ++msgid "" ++"section [%2d] '%s': element %Zu references section [%2d] '%s' without " ++"SHF_GROUP flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:2504 ++#, c-format ++msgid "section [%2d] '%s' is contained in more than one section group\n" ++msgstr "" ++ ++#: ../src/elflint.c:2693 ++#, 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:2704 ++#, c-format ++msgid "" ++"section [%2d] '%s' has different number of entries than symbol table [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2720 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: cannot read version data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2736 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" ++msgstr "" ++ ++#: ../src/elflint.c:2744 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2758 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2763 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for defined version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2773 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for requested version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2825 ++#, c-format ++msgid "more than one version reference section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2833 ../src/elflint.c:2962 ++#, c-format ++msgid "section [%2d] '%s': sh_link does not link to string table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2856 ../src/elflint.c:3014 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong version %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2862 ../src/elflint.c:3020 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2870 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid file reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2878 ++#, c-format ++msgid "section [%2d] '%s': entry %d references unknown dependency\n" ++msgstr "" ++ ++#: ../src/elflint.c:2890 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:2897 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " ++"reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2904 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %" ++"#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:2914 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " ++"name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2925 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" ++msgstr "" ++ ++#: ../src/elflint.c:2941 ../src/elflint.c:3099 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:2954 ++#, c-format ++msgid "more than one version definition section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2999 ++#, c-format ++msgid "section [%2d] '%s': more than one BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3003 ++#, c-format ++msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" ++msgstr "" ++ ++#: ../src/elflint.c:3009 ++#, c-format ++msgid "section [%2d] '%s': entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3033 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:3040 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:3049 ++#, c-format ++msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3068 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3083 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3105 ++#, c-format ++msgid "section [%2d] '%s': no BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3121 ++#, c-format ++msgid "section [%2d] '%s': unknown parent version '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3134 ++#, c-format ++msgid "section [%2d] '%s': empty object attributes section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3155 ++#, c-format ++msgid "section [%2d] '%s': unrecognized attribute format\n" ++msgstr "" ++ ++#: ../src/elflint.c:3171 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3180 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3192 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" ++msgstr "" ++ ++#: ../src/elflint.c:3209 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3218 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3227 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" ++msgstr "" ++ ++#: ../src/elflint.c:3240 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/elflint.c:3251 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3269 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3280 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" ++msgstr "" ++ ++#: ../src/elflint.c:3293 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3297 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3307 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" ++msgstr "" ++ ++#: ../src/elflint.c:3313 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3402 ++#, c-format ++msgid "cannot get section header of zeroth section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3406 ++#, c-format ++msgid "zeroth section has nonzero name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3408 ++#, c-format ++msgid "zeroth section has nonzero type\n" ++msgstr "" ++ ++#: ../src/elflint.c:3410 ++#, c-format ++msgid "zeroth section has nonzero flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:3412 ++#, c-format ++msgid "zeroth section has nonzero address\n" ++msgstr "" ++ ++#: ../src/elflint.c:3414 ++#, c-format ++msgid "zeroth section has nonzero offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:3416 ++#, c-format ++msgid "zeroth section has nonzero info field\n" ++msgstr "" ++ ++#: ../src/elflint.c:3418 ++#, c-format ++msgid "zeroth section has nonzero align value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3420 ++#, c-format ++msgid "zeroth section has nonzero entry size value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3423 ++#, c-format ++msgid "" ++"zeroth section has nonzero size value while ELF header has nonzero shnum " ++"value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3427 ++#, c-format ++msgid "" ++"zeroth section has nonzero link value while ELF header does not signal " ++"overflow in shstrndx\n" ++msgstr "" ++ ++#: ../src/elflint.c:3444 ++#, c-format ++msgid "cannot get section header for section [%2zu] '%s': %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3453 ++#, c-format ++msgid "section [%2zu]: invalid name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3480 ++#, c-format ++msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3496 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3513 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3531 ++#, c-format ++msgid "section [%2zu] '%s' present in object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3537 ../src/elflint.c:3569 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3542 ../src/elflint.c:3574 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " ++"segments\n" ++msgstr "" ++ ++#: ../src/elflint.c:3550 ++#, c-format ++msgid "" ++"section [%2zu] '%s' is extension section index table in non-object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3593 ++#, c-format ++msgid "section [%2zu] '%s': size not multiple of entry size\n" ++msgstr "" ++ ++#: ../src/elflint.c:3598 ++#, c-format ++msgid "cannot get section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:3608 ++#, c-format ++msgid "section [%2zu] '%s' has unsupported type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3622 ++#, c-format ++msgid "" ++"section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3629 ++#, c-format ++msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3637 ++#, c-format ++msgid "section [%2zu] '%s': thread-local data sections address not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3645 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in link value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3650 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in info value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3657 ++#, c-format ++msgid "section [%2zu] '%s': strings flag set without merge flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3662 ++#, c-format ++msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3680 ++#, c-format ++msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3689 ++#, c-format ++msgid "section [%2zu] '%s' is both executable and writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:3716 ++#, c-format ++msgid "" ++"section [%2zu] '%s' not fully contained in segment of program header entry %" ++"d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3724 ++#, 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:3733 ++#, 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:3744 ++#, c-format ++msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3754 ++#, c-format ++msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3764 ++#, c-format ++msgid "" ++"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3770 ++#, 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:3778 ++#, c-format ++msgid "" ++"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:3829 ++#, c-format ++msgid "more than one version symbol table present\n" ++msgstr "" ++ ++#: ../src/elflint.c:3852 ++#, c-format ++msgid "INTERP program header entry but no .interp section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3863 ++#, c-format ++msgid "" ++"loadable segment [%u] is executable but contains no executable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3869 ++#, c-format ++msgid "loadable segment [%u] is writable but contains no writable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3880 ++#, c-format ++msgid "" ++"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " ++"exist\n" ++msgstr "" ++ ++#: ../src/elflint.c:3893 ++#, c-format ++msgid "duplicate version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3907 ++#, c-format ++msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" ++msgstr "" ++ ++#: ../src/elflint.c:3956 ++#, c-format ++msgid "phdr[%d]: unknown core file note type % at offset %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3960 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown core file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3983 ++#, c-format ++msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3987 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:4004 ++#, c-format ++msgid "phdr[%d]: no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4023 ++#, c-format ++msgid "phdr[%d]: cannot get content of note section: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4026 ++#, c-format ++msgid "phdr[%d]: extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4047 ++#, c-format ++msgid "section [%2d] '%s': no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4054 ++#, c-format ++msgid "section [%2d] '%s': cannot get content of note section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4057 ++#, c-format ++msgid "section [%2d] '%s': extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4075 ++#, c-format ++msgid "" ++"only executables, shared objects, and core files can have program headers\n" ++msgstr "" ++ ++#: ../src/elflint.c:4090 ++#, c-format ++msgid "cannot get program header entry %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4099 ++#, c-format ++msgid "program header entry %d: unknown program header entry type %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:4110 ++#, c-format ++msgid "more than one INTERP entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4118 ++#, c-format ++msgid "more than one TLS entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4125 ++#, c-format ++msgid "static executable cannot have dynamic sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:4139 ++#, c-format ++msgid "dynamic section reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4142 ++#, c-format ++msgid "dynamic section size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4152 ++#, c-format ++msgid "more than one GNU_RELRO entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4173 ++#, c-format ++msgid "loadable segment GNU_RELRO applies to is not writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4176 ++#, c-format ++msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:4184 ../src/elflint.c:4207 ++#, c-format ++msgid "%s segment not contained in a loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4213 ++#, c-format ++msgid "program header offset in ELF header and PHDR entry do not match" ++msgstr "" ++ ++#: ../src/elflint.c:4237 ++#, c-format ++msgid "call frame search table reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4240 ++#, c-format ++msgid "call frame search table size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4253 ++#, c-format ++msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4261 ++#, c-format ++msgid "call frame search table must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4264 ++#, c-format ++msgid "section [%2zu] '%s' must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4268 ++#, c-format ++msgid "call frame search table must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4271 ++#, c-format ++msgid "section [%2zu] '%s' must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4276 ++#, c-format ++msgid "call frame search table must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4279 ++#, c-format ++msgid "section [%2zu] '%s' must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4290 ++#, c-format ++msgid "program header entry %d: file size greater than memory size\n" ++msgstr "" ++ ++#: ../src/elflint.c:4297 ++#, c-format ++msgid "program header entry %d: alignment not a power of 2\n" ++msgstr "" ++ ++#: ../src/elflint.c:4300 ++#, c-format ++msgid "" ++"program header entry %d: file offset and virtual address not module of " ++"alignment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4313 ++#, c-format ++msgid "" ++"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " ++"program header entry" ++msgstr "" ++ ++#: ../src/elflint.c:4347 ++#, c-format ++msgid "cannot read ELF header: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4373 ++#, c-format ++msgid "text relocation flag set but not needed\n" ++msgstr "" ++ ++#: ../src/addr2line.c:66 ++msgid "Output selection options:" ++msgstr "" ++ ++#: ../src/addr2line.c:67 ++msgid "Show only base names of source files" ++msgstr "" ++ ++#: ../src/addr2line.c:69 ++msgid "Show absolute file names using compilation directory" ++msgstr "" ++ ++#: ../src/addr2line.c:70 ++msgid "Also show function names" ++msgstr "" ++ ++#: ../src/addr2line.c:71 ++msgid "Also show symbol or section names" ++msgstr "" ++ ++#: ../src/addr2line.c:73 ++msgid "Treat addresses as offsets relative to NAME section." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/addr2line.c:84 ++msgid "" ++"Locate source files and line information for ADDRs (in a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/addr2line.c:88 ++msgid "[ADDR...]" ++msgstr "" ++ ++#: ../src/addr2line.c:405 ++#, c-format ++msgid "Section syntax requires exactly one module" ++msgstr "" ++ ++#: ../src/addr2line.c:428 ++#, c-format ++msgid "offset %# lies outside section '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:461 ++#, c-format ++msgid "cannot find symbol '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:466 ++#, c-format ++msgid "offset %# lies outside contents of '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:70 ++msgid "Input Selection:" ++msgstr "" ++ ++#: ../src/findtextrel.c:71 ++msgid "Prepend PATH to all file names" ++msgstr "" ++ ++#: ../src/findtextrel.c:73 ++msgid "Use PATH as root of debuginfo hierarchy" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/findtextrel.c:80 ++msgid "Locate source of text relocations in FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/findtextrel.c:236 ../src/elfcmp.c:578 ../src/ranlib.c:186 ++#, c-format ++msgid "cannot create ELF descriptor for '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:246 ++#, c-format ++msgid "cannot get ELF header '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:257 ++#, c-format ++msgid "'%s' is not a DSO or PIE" ++msgstr "" ++ ++#: ../src/findtextrel.c:274 ++#, c-format ++msgid "getting get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:292 ++#, c-format ++msgid "cannot read dynamic section: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:307 ++#, c-format ++msgid "no text relocations reported in '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:319 ++#, c-format ++msgid "while reading ELF file" ++msgstr "" ++ ++#: ../src/findtextrel.c:328 ../src/findtextrel.c:345 ++#, c-format ++msgid "cannot get program header index at offset %d: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:397 ++#, c-format ++msgid "cannot get section header of section %Zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:409 ++#, c-format ++msgid "cannot get symbol table section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:429 ../src/findtextrel.c:452 ++#, c-format ++msgid "cannot get relocation at index %d in section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:517 ++#, c-format ++msgid "%s not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:570 ++#, c-format ++msgid "" ++"the file containing the function '%s' is not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:577 ../src/findtextrel.c:597 ++#, c-format ++msgid "" ++"the file containing the function '%s' might not be compiled with -fpic/-" ++"fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:585 ++#, 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:605 ++#, c-format ++msgid "" ++"a relocation modifies memory at offset %llu in a write-protected segment\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:69 ++msgid "Control options:" ++msgstr "" ++ ++#: ../src/elfcmp.c:70 ++msgid "" ++"Control treatment of gaps in loadable segments [ignore|match] (default: " ++"ignore)" ++msgstr "" ++ ++#: ../src/elfcmp.c:72 ++msgid "Ignore permutation of buckets in SHT_HASH section" ++msgstr "" ++ ++#: ../src/elfcmp.c:73 ++msgid "Output nothing; yield exit status only" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elfcmp.c:80 ++msgid "Compare relevant parts of two ELF files for equality." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/elfcmp.c:84 ++msgid "FILE1 FILE2" ++msgstr "" ++ ++#: ../src/elfcmp.c:140 ++msgid "Invalid number of parameters.\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:168 ../src/elfcmp.c:173 ++#, c-format ++msgid "cannot get ELF header of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:190 ++#, c-format ++msgid "%s %s diff: ELF header" ++msgstr "" ++ ++#: ../src/elfcmp.c:248 ++#, c-format ++msgid "%s %s differ: section header" ++msgstr "" ++ ++#: ../src/elfcmp.c:276 ../src/elfcmp.c:282 ++#, c-format ++msgid "cannot get content of section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:298 ../src/elfcmp.c:304 ++#, c-format ++msgid "cannot get symbol in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:325 ++#, c-format ++msgid "%s %s differ: symbol table [%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:328 ++#, c-format ++msgid "%s %s differ: symbol table [%zu,%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:376 ++#, c-format ++msgid "%s %s differ: section [%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:380 ++#, c-format ++msgid "%s %s differ: section [%zu,%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:396 ++#, c-format ++msgid "%s %s differ: unequal amount of important sections" ++msgstr "" ++ ++#: ../src/elfcmp.c:430 ../src/elfcmp.c:435 ++#, c-format ++msgid "cannot load data of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:454 ../src/elfcmp.c:460 ++#, c-format ++msgid "cannot get program header entry %d of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:466 ++#, c-format ++msgid "%s %s differ: program header %d" ++msgstr "" ++ ++#: ../src/elfcmp.c:491 ++#, c-format ++msgid "%s %s differ: gap" ++msgstr "" ++ ++#: ../src/elfcmp.c:550 ++#, c-format ++msgid "Invalid value '%s' for --gaps parameter." ++msgstr "" ++ ++#: ../src/elfcmp.c:583 ++#, c-format ++msgid "cannot create EBL descriptor for '%s'" ++msgstr "" ++ ++#: ../src/elfcmp.c:601 ++#, c-format ++msgid "cannot get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:611 ++#, c-format ++msgid "cannot get content of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:621 ../src/elfcmp.c:635 ++#, c-format ++msgid "cannot get relocation: %s" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ranlib.c:74 ++msgid "Generate an index to speed access to archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ranlib.c:77 ++msgid "ARCHIVE" ++msgstr "" ++ ++#: ../src/ranlib.c:116 ++#, c-format ++msgid "Archive name required" ++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/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 "" ++ ++#. Short description of program. ++#: ../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 ../src/strings.c:680 ++#, c-format ++msgid "re-mmap failed" ++msgstr "" ++ ++#: ../src/strings.c:653 ++#, c-format ++msgid "mprotect failed" ++msgstr "" ++ ++#: ../src/unstrip.c:77 ++msgid "Match MODULE against file names, not module names" ++msgstr "" ++ ++#: ../src/unstrip.c:78 ++msgid "Silently skip unfindable files" ++msgstr "" ++ ++#: ../src/unstrip.c:81 ++msgid "Place output into FILE" ++msgstr "" ++ ++#: ../src/unstrip.c:83 ++msgid "Create multiple output files under DIRECTORY" ++msgstr "" ++ ++#: ../src/unstrip.c:84 ++msgid "Use module rather than file names" ++msgstr "" ++ ++#: ../src/unstrip.c:86 ++msgid "Create output for modules that have no separate debug information" ++msgstr "" ++ ++#: ../src/unstrip.c:89 ++msgid "Apply relocations to section contents in ET_REL files" ++msgstr "" ++ ++#: ../src/unstrip.c:91 ++msgid "Only list module and file names, build IDs" ++msgstr "" ++ ++#: ../src/unstrip.c:133 ++#, c-format ++msgid "-d option specified twice" ++msgstr "" ++ ++#: ../src/unstrip.c:165 ++#, c-format ++msgid "only one of -o or -d allowed" ++msgstr "" ++ ++#: ../src/unstrip.c:174 ++#, c-format ++msgid "-n cannot be used with explicit files or -o or -d" ++msgstr "" ++ ++#: ../src/unstrip.c:189 ++#, c-format ++msgid "output directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:198 ++#, c-format ++msgid "exactly two file arguments are required" ++msgstr "" ++ ++#: ../src/unstrip.c:204 ++#, c-format ++msgid "-m, -a, -R, and -i options not allowed with explicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:217 ++#, c-format ++msgid "-o or -d is required when using implicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:253 ++#, c-format ++msgid "cannot create ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:258 ++#, c-format ++msgid "cannot copy ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:263 ../src/unstrip.c:1816 ++#, c-format ++msgid "cannot create program headers: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:269 ++#, c-format ++msgid "cannot copy program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:279 ++#, c-format ++msgid "cannot copy section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:282 ../src/unstrip.c:1504 ++#, c-format ++msgid "cannot get section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:284 ../src/unstrip.c:1506 ++#, c-format ++msgid "cannot copy section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:308 ++#, c-format ++msgid "cannot create directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:348 ../src/unstrip.c:762 ../src/unstrip.c:1539 ++#, c-format ++msgid "cannot get symbol table entry: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:364 ../src/unstrip.c:579 ../src/unstrip.c:600 ++#: ../src/unstrip.c:612 ../src/unstrip.c:1560 ../src/unstrip.c:1690 ++#: ../src/unstrip.c:1714 ++#, c-format ++msgid "cannot update symbol table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:381 ../src/unstrip.c:431 ../src/unstrip.c:561 ++#: ../src/unstrip.c:1208 ../src/unstrip.c:1524 ../src/unstrip.c:1719 ++#: ../src/unstrip.c:1790 ++#, c-format ++msgid "cannot update section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:407 ../src/unstrip.c:418 ++#, c-format ++msgid "cannot update relocation: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:506 ++#, c-format ++msgid "cannot get symbol version: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:518 ++#, c-format ++msgid "unexpected section type in [%Zu] with sh_link to symtab" ++msgstr "" ++ ++#: ../src/unstrip.c:768 ++#, c-format ++msgid "invalid string offset in symbol [%Zu]" ++msgstr "" ++ ++#: ../src/unstrip.c:910 ../src/unstrip.c:1247 ++#, c-format ++msgid "cannot read section [%Zu] name: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:951 ../src/unstrip.c:970 ../src/unstrip.c:1003 ++#, c-format ++msgid "cannot read '.gnu.prelink_undo' section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:991 ++#, c-format ++msgid "invalid contents in '%s' section" ++msgstr "" ++ ++#: ../src/unstrip.c:1046 ../src/unstrip.c:1369 ++#, c-format ++msgid "cannot find matching section for [%Zu] '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:1170 ../src/unstrip.c:1185 ../src/unstrip.c:1450 ++#, c-format ++msgid "cannot add section name to string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1194 ++#, c-format ++msgid "cannot update section header string table data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1222 ../src/unstrip.c:1226 ++#, c-format ++msgid "cannot get section header string table section index: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1230 ../src/unstrip.c:1234 ../src/unstrip.c:1465 ++#, c-format ++msgid "cannot get section count: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1292 ../src/unstrip.c:1384 ++#, c-format ++msgid "cannot read section header string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1444 ++#, c-format ++msgid "cannot add new section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1547 ++#, c-format ++msgid "symbol [%Zu] has invalid section index" ++msgstr "" ++ ++#: ../src/unstrip.c:1799 ++#, c-format ++msgid "cannot get ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1826 ++#, c-format ++msgid "cannot update program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1831 ../src/unstrip.c:1910 ++#, c-format ++msgid "cannot write output file: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1879 ++#, c-format ++msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1882 ++#, c-format ++msgid "" ++"DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1901 ../src/unstrip.c:1941 ../src/unstrip.c:1953 ++#: ../src/unstrip.c:2033 ++#, c-format ++msgid "cannot create ELF descriptor: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1959 ++#, c-format ++msgid "'%s' and '%s' do not seem to match" ++msgstr "" ++ ++#: ../src/unstrip.c:1990 ++#, c-format ++msgid "cannot find stripped file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1994 ++#, c-format ++msgid "cannot open stripped file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2009 ++#, c-format ++msgid "cannot find debug file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2013 ++#, c-format ++msgid "cannot open debug file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2026 ++#, c-format ++msgid "module '%s' file '%s' is not stripped" ++msgstr "" ++ ++#: ../src/unstrip.c:2057 ++#, c-format ++msgid "cannot cache section addresses for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2190 ++#, c-format ++msgid "no matching modules found" ++msgstr "" ++ ++#: ../src/unstrip.c:2199 ++#, c-format ++msgid "matched more than one module" ++msgstr "" ++ ++#: ../src/unstrip.c:2246 ++msgid "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++msgstr "" ++ ++#: ../src/unstrip.c:2247 ++msgid "" ++"Combine stripped files with separate symbols and debug information.\vThe " ++"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." ++msgstr "" ++ ++#: ../src/objdump.c:61 ++msgid "Mode selection:" ++msgstr "" ++ ++#: ../src/objdump.c:62 ++msgid "Display relocation information." ++msgstr "" ++ ++#: ../src/objdump.c:64 ++msgid "Display the full contents of all sections requested" ++msgstr "" ++ ++#: ../src/objdump.c:66 ++msgid "Display assembler code of executable sections" ++msgstr "" ++ ++#: ../src/objdump.c:68 ++msgid "Output option selection:" ++msgstr "" ++ ++#: ../src/objdump.c:70 ++msgid "Only display information for section NAME." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/objdump.c:76 ++msgid "Show information from FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/objdump.c:274 ../src/objdump.c:286 ++#, c-format ++msgid "while close `%s'" ++msgstr "" ++ ++#: ../src/objdump.c:510 ++#, c-format ++msgid "" ++"\n" ++"RELOCATION RECORDS FOR [%s]:\n" ++"%-*s TYPE VALUE\n" ++msgstr "" ++ ++#: ../src/objdump.c:513 ++msgid "OFFSET" ++msgstr "" ++ ++#: ../src/objdump.c:576 ++#, c-format ++msgid "Contents of section %s:\n" ++msgstr "" ++ ++#: ../src/objdump.c:676 ++#, c-format ++msgid "cannot disassemble" ++msgstr "" +diff --git a/po/it.po b/po/it.po +new file mode 100644 +index 0000000..6a77f66 +--- /dev/null ++++ b/po/it.po +@@ -0,0 +1,5545 @@ ++# translation of elfutils.master.RedHatelfutils.it.po to Italiano ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# ++# Francesco Tombolini , 2009. ++msgid "" ++msgstr "" ++"Project-Id-Version: elfutils.master.RedHatelfutils.it\n" ++"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" ++"POT-Creation-Date: 2009-04-29 19:12+0000\n" ++"PO-Revision-Date: 2009-04-30 03:50+0200\n" ++"Last-Translator: Francesco Tombolini \n" ++"Language-Team: Italiano \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=2; plural=(n != 1);\n" ++"X-Generator: KBabel 1.11.4\n" ++ ++#: ../lib/xmalloc.c:51 ../lib/xmalloc.c:65 ../lib/xmalloc.c:79 ++#: ../src/readelf.c:2703 ../src/readelf.c:3041 ../src/unstrip.c:2086 ++#: ../src/unstrip.c:2294 ++#, c-format ++msgid "memory exhausted" ++msgstr "" ++ ++#: ../libelf/elf_error.c:81 ../libasm/asm_error.c:62 ../libdw/dwarf_error.c:79 ++msgid "no error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:84 ../libasm/asm_error.c:81 ../libdw/dwarf_error.c:80 ++msgid "unknown error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:88 ++msgid "unknown version" ++msgstr "" ++ ++#: ../libelf/elf_error.c:92 ++msgid "unknown type" ++msgstr "" ++ ++#: ../libelf/elf_error.c:96 ++msgid "invalid `Elf' handle" ++msgstr "" ++ ++#: ../libelf/elf_error.c:100 ++msgid "invalid size of source operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:104 ++msgid "invalid size of destination operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:108 ../src/readelf.c:4592 ++#, c-format ++msgid "invalid encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:112 ../libasm/asm_error.c:63 ++#: ../libdw/dwarf_error.c:88 ++msgid "out of memory" ++msgstr "" ++ ++#: ../libelf/elf_error.c:116 ++msgid "invalid file descriptor" ++msgstr "" ++ ++#: ../libelf/elf_error.c:120 ++msgid "invalid operation" ++msgstr "" ++ ++#: ../libelf/elf_error.c:124 ++msgid "ELF version not set" ++msgstr "" ++ ++#: ../libelf/elf_error.c:128 ../libelf/elf_error.c:176 ++#: ../libdw/dwarf_error.c:90 ++msgid "invalid command" ++msgstr "" ++ ++#: ../libelf/elf_error.c:132 ../libelf/elf_error.c:192 ++msgid "offset out of range" ++msgstr "" ++ ++#: ../libelf/elf_error.c:136 ++msgid "invalid fmag field in archive header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:140 ++msgid "invalid archive file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:144 ++msgid "descriptor is not for an archive" ++msgstr "" ++ ++#: ../libelf/elf_error.c:148 ++msgid "no index available" ++msgstr "" ++ ++#: ../libelf/elf_error.c:152 ++msgid "cannot read data from file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:156 ++msgid "cannot write data to file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:160 ++msgid "invalid binary class" ++msgstr "" ++ ++#: ../libelf/elf_error.c:164 ++msgid "invalid section index" ++msgstr "" ++ ++#: ../libelf/elf_error.c:168 ++msgid "invalid operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:172 ++msgid "invalid section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:180 ++msgid "executable header not created first" ++msgstr "" ++ ++#: ../libelf/elf_error.c:184 ++msgid "file descriptor disabled" ++msgstr "" ++ ++#: ../libelf/elf_error.c:188 ++msgid "archive/member fildes mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:196 ++msgid "cannot manipulate null section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:200 ++msgid "data/scn mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:204 ++msgid "invalid section header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:208 ../src/readelf.c:6062 ../src/readelf.c:6163 ++#, c-format ++msgid "invalid data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:212 ++msgid "unknown data encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:216 ++msgid "section `sh_size' too small for data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:220 ++msgid "invalid section alignment" ++msgstr "" ++ ++#: ../libelf/elf_error.c:224 ++msgid "invalid section entry size" ++msgstr "" ++ ++#: ../libelf/elf_error.c:228 ++msgid "update() for write on read-only file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:232 ++msgid "no such file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:236 ++msgid "only relocatable files can contain section groups" ++msgstr "" ++ ++#: ../libelf/elf_error.c:241 ++msgid "program header only allowed in executables, shared objects, and core files" ++msgstr "" ++ ++#: ../libelf/elf_error.c:248 ++msgid "file has no program header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:253 ../libdw/dwarf_error.c:112 ++msgid "invalid offset" ++msgstr "" ++ ++#: ../libasm/asm_error.c:64 ../src/ldgeneric.c:2687 ++#, c-format ++msgid "cannot create output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:65 ++msgid "invalid parameter" ++msgstr "" ++ ++#: ../libasm/asm_error.c:66 ++msgid "cannot change mode of output file" ++msgstr "" ++ ++#. Something went wrong. ++#: ../libasm/asm_error.c:67 ../src/ldgeneric.c:7001 ++#, c-format ++msgid "cannot rename output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:68 ++msgid "duplicate symbol" ++msgstr "" ++ ++#: ../libasm/asm_error.c:69 ++msgid "invalid section type for operation" ++msgstr "" ++ ++#: ../libasm/asm_error.c:70 ++msgid "error during output of data" ++msgstr "" ++ ++#: ../libasm/asm_error.c:71 ++msgid "no backend support available" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:81 ++msgid "invalid access" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:82 ++msgid "no regular file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:83 ++msgid "I/O error" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:84 ++msgid "invalid ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:85 ++msgid "no DWARF information" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:86 ++msgid "no ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:87 ++msgid "cannot get ELF header" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:89 ++msgid "not implemented" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:91 ++msgid "invalid version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:92 ++msgid "invalid file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:93 ++msgid "no entries found" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:94 ++msgid "invalid DWARF" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:95 ++msgid "no string data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:96 ++msgid "no address value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:97 ++msgid "no constant value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:98 ++msgid "no reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:99 ++msgid "invalid reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:100 ++msgid ".debug_line section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:101 ++msgid "invalid .debug_line section" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:102 ++msgid "debug information too big" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:103 ++msgid "invalid DWARF version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:104 ++msgid "invalid directory index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:105 ++msgid "address out of range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:106 ++msgid "no location list value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:107 ++msgid "no block data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:108 ++msgid "invalid line index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:109 ++msgid "invalid address range index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:110 ++msgid "no matching address range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:111 ++msgid "no flag value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:113 ++msgid ".debug_ranges section missing" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:67 ../src/unstrip.c:2236 ++msgid "Input selection options:" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:68 ++msgid "Find addresses in FILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:70 ++msgid "Find addresses from signatures found in COREFILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:72 ++msgid "Find addresses in files mapped into process PID" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:74 ++msgid "" ++"Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " ++"format" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:76 ++msgid "Find addresses in the running kernel" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:78 ++msgid "Kernel with all modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:80 ++msgid "Search path for separate debuginfo files" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:163 ++msgid "only one of -e, -p, -k, -K, or --core allowed" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:223 ++#, c-format ++msgid "cannot read ELF core file: %s" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:243 ++msgid "No modules recognized in core file" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:255 ++msgid "cannot load kernel symbols" ++msgstr "" ++ ++#. Non-fatal to have no modules since we do have the kernel. ++#: ../libdwfl/argp-std.c:259 ++msgid "cannot find kernel modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:273 ++msgid "cannot find kernel or modules" ++msgstr "" ++ ++#: ../libebl/eblbackendname.c:63 ++msgid "No backend" ++msgstr "" ++ ++#: ../libebl/eblcorenotetypename.c:107 ../libebl/eblobjecttypename.c:78 ++#: ../libebl/eblobjnotetypename.c:85 ../libebl/eblosabiname.c:98 ++#: ../libebl/eblsectionname.c:110 ../libebl/eblsectiontypename.c:140 ++#: ../libebl/eblsegmenttypename.c:104 ++msgid "" ++msgstr "" ++ ++#: ../libebl/ebldynamictagname.c:126 ++#, c-format ++msgid ": %#" ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:76 ++#, c-format ++msgid " Build ID: " ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:129 ++#, c-format ++msgid " OS: %s, ABI: " ++msgstr "" ++ ++#: ../libebl/eblosabiname.c:95 ++msgid "Stand alone" ++msgstr "" ++ ++#: ../libebl/eblsymbolbindingname.c:86 ../libebl/eblsymboltypename.c:94 ++#, c-format ++msgid ": %d" ++msgstr "" ++ ++#: ../src/ar.c:76 ++msgid "Commands:" ++msgstr "" ++ ++#: ../src/ar.c:77 ++msgid "Delete files from archive." ++msgstr "" ++ ++#: ../src/ar.c:78 ++msgid "Move files in archive." ++msgstr "" ++ ++#: ../src/ar.c:79 ++msgid "Print files in archive." ++msgstr "" ++ ++#: ../src/ar.c:80 ++msgid "Quick append files to archive." ++msgstr "" ++ ++#: ../src/ar.c:82 ++msgid "Replace existing or insert new file into archive." ++msgstr "" ++ ++#: ../src/ar.c:83 ++msgid "Display content of archive." ++msgstr "" ++ ++#: ../src/ar.c:84 ++msgid "Extract files from archive." ++msgstr "" ++ ++#: ../src/ar.c:86 ++msgid "Command Modifiers:" ++msgstr "" ++ ++#: ../src/ar.c:87 ++msgid "Preserve original dates." ++msgstr "" ++ ++#: ../src/ar.c:88 ++msgid "Use instance [COUNT] of name." ++msgstr "" ++ ++#: ../src/ar.c:90 ++msgid "Do not replace existing files with extracted files." ++msgstr "" ++ ++#: ../src/ar.c:91 ++msgid "Allow filename to be truncated if necessary." ++msgstr "" ++ ++#: ../src/ar.c:93 ++msgid "Provide verbose output." ++msgstr "" ++ ++#: ../src/ar.c:94 ++msgid "Force regeneration of symbol table." ++msgstr "" ++ ++#: ../src/ar.c:95 ++msgid "Insert file after [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:96 ++msgid "Insert file before [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:97 ++msgid "Same as -b." ++msgstr "" ++ ++#: ../src/ar.c:98 ++msgid "Suppress message when library has to be created." ++msgstr "" ++ ++#: ../src/ar.c:100 ++msgid "Use full path for file matching." ++msgstr "" ++ ++#: ../src/ar.c:101 ++msgid "Update only older files in archive." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ar.c:107 ++msgid "Create, modify, and extract from archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ar.c:110 ++msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++msgstr "" ++ ++#: ../src/ar.c:192 ++#, c-format ++msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" ++msgstr "" ++ ++#: ../src/ar.c:197 ++#, c-format ++msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" ++msgstr "" ++ ++#: ../src/ar.c:213 ++#, c-format ++msgid "'N' is only meaningful with the 'x' and 'd' options" ++msgstr "" ++ ++#: ../src/ar.c:218 ++#, c-format ++msgid "COUNT parameter required" ++msgstr "" ++ ++#: ../src/ar.c:230 ++#, c-format ++msgid "invalid COUNT parameter %s" ++msgstr "" ++ ++#: ../src/ar.c:237 ++#, c-format ++msgid "'%' is only meaningful with the 'x' option" ++msgstr "" ++ ++#: ../src/ar.c:243 ++#, c-format ++msgid "archive name required" ++msgstr "" ++ ++#: ../src/ar.c:289 ../src/nm.c:253 ../src/readelf.c:432 ../src/size.c:219 ++#: ../src/strip.c:203 ../src/ld.c:957 ../src/elflint.c:238 ++#: ../src/addr2line.c:185 ../src/findtextrel.c:170 ../src/elfcmp.c:522 ++#: ../src/ranlib.c:136 ../src/strings.c:227 ../src/unstrip.c:233 ++#: ../src/objdump.c:181 ++#, 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/ar.c:294 ../src/nm.c:258 ../src/readelf.c:437 ../src/size.c:224 ++#: ../src/strip.c:208 ../src/ld.c:962 ../src/elflint.c:243 ++#: ../src/addr2line.c:190 ../src/findtextrel.c:175 ../src/elfcmp.c:527 ++#: ../src/ranlib.c:141 ../src/strings.c:232 ../src/unstrip.c:238 ++#: ../src/objdump.c:186 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "" ++ ++#: ../src/ar.c:314 ++#, c-format ++msgid "More than one operation specified" ++msgstr "" ++ ++#: ../src/ar.c:404 ++#, c-format ++msgid "cannot open archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:414 ++#, c-format ++msgid "cannot open archive '%s': %s" ++msgstr "" ++ ++#: ../src/ar.c:418 ++#, c-format ++msgid "%s: not an archive file" ++msgstr "" ++ ++#: ../src/ar.c:422 ++#, c-format ++msgid "cannot stat archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:434 ++#, c-format ++msgid "no entry %s in archive\n" ++msgstr "" ++ ++#: ../src/ar.c:474 ../src/ar.c:918 ../src/ar.c:1118 ++#, c-format ++msgid "cannot create hash table" ++msgstr "" ++ ++#: ../src/ar.c:481 ../src/ar.c:925 ../src/ar.c:1127 ++#, c-format ++msgid "cannot insert into hash table" ++msgstr "" ++ ++#: ../src/ar.c:489 ../src/ranlib.c:176 ++#, c-format ++msgid "cannot stat '%s'" ++msgstr "" ++ ++#: ../src/ar.c:585 ++#, c-format ++msgid "cannot read content of %s: %s" ++msgstr "" ++ ++#: ../src/ar.c:629 ++#, c-format ++msgid "cannot open %.*s" ++msgstr "" ++ ++#: ../src/ar.c:651 ++#, c-format ++msgid "failed to write %s" ++msgstr "" ++ ++#: ../src/ar.c:663 ++#, c-format ++msgid "cannot change mode of %s" ++msgstr "" ++ ++#: ../src/ar.c:679 ++#, c-format ++msgid "cannot change modification time of %s" ++msgstr "" ++ ++#: ../src/ar.c:726 ++#, c-format ++msgid "cannot rename temporary file to %.*s" ++msgstr "" ++ ++#: ../src/ar.c:762 ../src/ar.c:1010 ../src/ar.c:1408 ../src/ranlib.c:250 ++#, c-format ++msgid "cannot create new file" ++msgstr "" ++ ++#: ../src/ar.c:1209 ++#, c-format ++msgid "position member %s not found" ++msgstr "" ++ ++#: ../src/ar.c:1219 ++#, c-format ++msgid "%s: no entry %s in archive!\n" ++msgstr "" ++ ++#: ../src/ar.c:1248 ../src/ldgeneric.c:519 ../src/objdump.c:257 ++#, c-format ++msgid "cannot open %s" ++msgstr "" ++ ++#: ../src/ar.c:1253 ++#, c-format ++msgid "cannot stat %s" ++msgstr "" ++ ++#: ../src/ar.c:1259 ++#, c-format ++msgid "%s is no regular file" ++msgstr "" ++ ++#: ../src/ar.c:1272 ++#, c-format ++msgid "cannot get ELF descriptor for %s: %s\n" ++msgstr "" ++ ++#: ../src/ar.c:1291 ++#, c-format ++msgid "cannot read %s: %s" ++msgstr "" ++ ++#. The archive is too big. ++#: ../src/arlib.c:215 ++#, c-format ++msgid "the archive '%s' is too large" ++msgstr "" ++ ++#: ../src/arlib.c:228 ++#, c-format ++msgid "cannot read ELF header of %s(%s): %s" ++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 ../src/unstrip.c:80 ++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:75 ../src/findtextrel.c:75 ++#: ../src/elfcmp.c:75 ../src/strings.c:83 ++msgid "Miscellaneous:" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/nm.c:108 ++msgid "List symbols from FILEs (a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/nm.c:111 ../src/size.c:92 ../src/strip.c:96 ../src/findtextrel.c:84 ++#: ../src/strings.c:92 ../src/objdump.c:80 ++msgid "[FILE...]" ++msgstr "" ++ ++#: ../src/nm.c:136 ../src/size.c:117 ../src/strip.c:120 ../src/objdump.c:105 ++#, c-format ++msgid "%s: INTERNAL ERROR %d (%s-%s): %s" ++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:229 ++#: ../src/elfcmp.c:574 ../src/ranlib.c:169 ../src/strings.c:183 ++#: ../src/unstrip.c:1899 ../src/unstrip.c:1928 ++#, c-format ++msgid "cannot open '%s'" ++msgstr "" ++ ++#: ../src/nm.c:380 ../src/nm.c:392 ../src/size.c:317 ../src/size.c:326 ++#: ../src/size.c:337 ../src/strip.c:1815 ++#, c-format ++msgid "while closing '%s'" ++msgstr "" ++ ++#: ../src/nm.c:402 ../src/strip.c:358 ../src/objdump.c:296 ++#, c-format ++msgid "%s: File format not recognized" ++msgstr "" ++ ++#. Note: 0 is no valid offset. ++#: ../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 ../src/objdump.c:344 ++#, 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:850 ../src/readelf.c:993 ++#: ../src/readelf.c:1134 ../src/readelf.c:1316 ../src/readelf.c:1514 ++#: ../src/readelf.c:1659 ../src/readelf.c:1827 ../src/readelf.c:2081 ++#: ../src/readelf.c:2147 ../src/readelf.c:2225 ../src/readelf.c:2722 ++#: ../src/readelf.c:2758 ../src/readelf.c:2820 ../src/readelf.c:6312 ++#: ../src/readelf.c:7178 ../src/readelf.c:7323 ../src/readelf.c:7392 ++#: ../src/size.c:425 ../src/size.c:499 ../src/strip.c:482 ../src/objdump.c:744 ++#, 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 "" ++ ++#. The header line. ++#: ../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 "" ++ ++#. XXX Add machine specific object file types. ++#: ../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: -e -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, macinfo, or exception" ++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:99 ++msgid "Display sections for exception handling" ++msgstr "" ++ ++#: ../src/readelf.c:102 ++msgid "Output control:" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/readelf.c:108 ++msgid "Print information from ELF file in human-readable form." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/readelf.c:112 ../src/elflint.c:85 ++msgid "FILE..." ++msgstr "" ++ ++#: ../src/readelf.c:259 ../src/elflint.c:158 ++#, c-format ++msgid "cannot open input file" ++msgstr "" ++ ++#: ../src/readelf.c:387 ++#, c-format ++msgid "Unknown DWARF debug section `%s'.\n" ++msgstr "" ++ ++#: ../src/readelf.c:408 ../src/elflint.c:222 ++msgid "Missing file name.\n" ++msgstr "" ++ ++#: ../src/readelf.c:413 ../src/objdump.c:236 ++msgid "No operation specified.\n" ++msgstr "" ++ ++#: ../src/readelf.c:448 ++#, c-format ++msgid "cannot generate Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:460 ++#, c-format ++msgid "'%s' is not an archive, cannot print archive index" ++msgstr "" ++ ++#: ../src/readelf.c:465 ++#, c-format ++msgid "error while closing Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:557 ++#, c-format ++msgid "cannot stat input file" ++msgstr "" ++ ++#: ../src/readelf.c:559 ++#, c-format ++msgid "input file is empty" ++msgstr "" ++ ++#: ../src/readelf.c:561 ++#, c-format ++msgid "failed reading '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:596 ++#, c-format ++msgid "cannot read ELF header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:604 ++#, c-format ++msgid "cannot create EBL handle" ++msgstr "" ++ ++#: ../src/readelf.c:611 ../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:697 ++msgid "NONE (None)" ++msgstr "" ++ ++#: ../src/readelf.c:698 ++msgid "REL (Relocatable file)" ++msgstr "" ++ ++#: ../src/readelf.c:699 ++msgid "EXEC (Executable file)" ++msgstr "" ++ ++#: ../src/readelf.c:700 ++msgid "DYN (Shared object file)" ++msgstr "" ++ ++#: ../src/readelf.c:701 ++msgid "CORE (Core file)" ++msgstr "" ++ ++#: ../src/readelf.c:706 ++#, c-format ++msgid "OS Specific: (%x)\n" ++msgstr "" ++ ++#. && e_type <= ET_HIPROC always true ++#: ../src/readelf.c:708 ++#, c-format ++msgid "Processor Specific: (%x)\n" ++msgstr "" ++ ++#: ../src/readelf.c:718 ++msgid "" ++"ELF Header:\n" ++" Magic: " ++msgstr "" ++ ++#: ../src/readelf.c:722 ++#, c-format ++msgid "" ++"\n" ++" Class: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:727 ++#, c-format ++msgid " Data: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:733 ++#, c-format ++msgid " Ident Version: %hhd %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:735 ../src/readelf.c:752 ++msgid "(current)" ++msgstr "" ++ ++#: ../src/readelf.c:739 ++#, c-format ++msgid " OS/ABI: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:742 ++#, c-format ++msgid " ABI Version: %hhd\n" ++msgstr "" ++ ++#: ../src/readelf.c:745 ++msgid " Type: " ++msgstr "" ++ ++#: ../src/readelf.c:748 ++#, c-format ++msgid " Machine: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:750 ++#, c-format ++msgid " Version: %d %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:754 ++#, c-format ++msgid " Entry point address: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:757 ++#, c-format ++msgid " Start of program headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:758 ../src/readelf.c:761 ++msgid "(bytes into file)" ++msgstr "" ++ ++#: ../src/readelf.c:760 ++#, c-format ++msgid " Start of section headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:763 ++#, c-format ++msgid " Flags: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:766 ++#, c-format ++msgid " Size of this header: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:767 ../src/readelf.c:770 ../src/readelf.c:776 ++msgid "(bytes)" ++msgstr "" ++ ++#: ../src/readelf.c:769 ++#, c-format ++msgid " Size of program header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:772 ++#, c-format ++msgid " Number of program headers entries: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:775 ++#, c-format ++msgid " Size of section header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:778 ++#, c-format ++msgid " Number of section headers entries: %" ++msgstr "" ++ ++#: ../src/readelf.c:785 ++#, c-format ++msgid " (% in [0].sh_size)" ++msgstr "" ++ ++#: ../src/readelf.c:788 ../src/readelf.c:802 ++msgid " ([0] not available)" ++msgstr "" ++ ++#. We managed to get the zeroth section. ++#: ../src/readelf.c:798 ++#, c-format ++msgid " (% in [0].sh_link)" ++msgstr "" ++ ++#: ../src/readelf.c:806 ++#, c-format ++msgid "" ++" Section header string table index: XINDEX%s\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:810 ++#, c-format ++msgid "" ++" Section header string table index: %\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:842 ++#, c-format ++msgid "" ++"There are %d section headers, starting at offset %#:\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:852 ++msgid "Section Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:855 ++msgid "" ++"[Nr] Name Type Addr Off Size ES Flags Lk " ++"Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:857 ++msgid "" ++"[Nr] Name Type Addr Off Size ES " ++"Flags Lk Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:864 ../src/readelf.c:1017 ++#, c-format ++msgid "cannot get section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:871 ../src/readelf.c:1025 ../src/readelf.c:7343 ++#: ../src/unstrip.c:352 ../src/unstrip.c:376 ../src/unstrip.c:426 ++#: ../src/unstrip.c:535 ../src/unstrip.c:552 ../src/unstrip.c:590 ++#: ../src/unstrip.c:788 ../src/unstrip.c:1056 ../src/unstrip.c:1243 ++#: ../src/unstrip.c:1304 ../src/unstrip.c:1426 ../src/unstrip.c:1479 ++#: ../src/unstrip.c:1587 ../src/unstrip.c:1777 ++#, c-format ++msgid "cannot get section header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:929 ++msgid "Program Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:931 ++msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:934 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz " ++"MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:974 ++#, c-format ++msgid "\t[Requesting program interpreter: %s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:995 ++msgid "" ++"\n" ++" Section to Segment mapping:\n" ++" Segment Sections..." ++msgstr "" ++ ++#: ../src/readelf.c:1006 ../src/unstrip.c:1823 ../src/unstrip.c:1862 ++#: ../src/unstrip.c:1869 ++#, c-format ++msgid "cannot get program header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:1140 ++#, 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:1145 ++#, 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:1153 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1167 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1318 ++#, c-format ++msgid "" ++"\n" ++"Dynamic segment contains %lu entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Dynamic segment contains %lu entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1330 ++msgid " Type Value\n" ++msgstr "" ++ ++#: ../src/readelf.c:1354 ++#, c-format ++msgid "Shared library: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1359 ++#, c-format ++msgid "Library soname: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1364 ++#, c-format ++msgid "Library rpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1369 ++#, c-format ++msgid "Library runpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1389 ++#, c-format ++msgid "% (bytes)\n" ++msgstr "" ++ ++#: ../src/readelf.c:1499 ../src/readelf.c:1644 ++#, c-format ++msgid "" ++"\n" ++"Invalid symbol table at offset %#0\n" ++msgstr "" ++ ++#: ../src/readelf.c:1517 ../src/readelf.c:1661 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#. 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. ++#: ../src/readelf.c:1532 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1542 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1544 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1568 ../src/readelf.c:1580 ../src/readelf.c:1598 ++#: ../src/readelf.c:1610 ../src/readelf.c:1700 ../src/readelf.c:1713 ++#: ../src/readelf.c:1732 ../src/readelf.c:1745 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1569 ../src/readelf.c:1701 ../src/objdump.c:379 ++msgid "INVALID SYMBOL" ++msgstr "" ++ ++#: ../src/readelf.c:1599 ../src/readelf.c:1733 ../src/objdump.c:394 ++msgid "INVALID SECTION" ++msgstr "" ++ ++#: ../src/readelf.c:1673 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1675 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1834 ++#, 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:1840 ++#, 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:1850 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1852 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1872 ++#, c-format ++msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++msgstr "" ++ ++#: ../src/readelf.c:1960 ++#, c-format ++msgid "bad dynamic symbol" ++msgstr "" ++ ++#: ../src/readelf.c:2042 ++msgid "none" ++msgstr "" ++ ++#: ../src/readelf.c:2059 ++msgid "| " ++msgstr "" ++ ++#: ../src/readelf.c:2084 ++#, c-format ++msgid "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2107 ++#, c-format ++msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2120 ++#, c-format ++msgid " %#06x: Name: %s Flags: %s Version: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2151 ++#, c-format ++msgid "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2181 ++#, c-format ++msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2196 ++#, c-format ++msgid " %#06x: Parent %d: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2428 ++#, c-format ++msgid "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgid_plural "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2458 ++msgid " 0 *local* " ++msgstr "" ++ ++#: ../src/readelf.c:2463 ++msgid " 1 *global* " ++msgstr "" ++ ++#: ../src/readelf.c:2494 ++#, c-format ++msgid "" ++"\n" ++"Histogram for bucket list length in section [%2u] '%s' (total of %d " ++"bucket):\n" ++" Addr: %#0* Offset: %#08 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* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2517 ++#, c-format ++msgid " Length Number % of total Coverage\n" ++msgstr "" ++ ++#: ../src/readelf.c:2519 ++#, c-format ++msgid " 0 %6 %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2526 ++#, c-format ++msgid "%7d %6 %5.1f%% %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2539 ++#, c-format ++msgid "" ++" Average number of tests: successful lookup: %f\n" ++" unsuccessful lookup: %f\n" ++msgstr "" ++ ++#: ../src/readelf.c:2557 ../src/readelf.c:2599 ../src/readelf.c:2640 ++#, c-format ++msgid "cannot get data for section %d: %s" ++msgstr "" ++ ++#: ../src/readelf.c:2694 ++#, c-format ++msgid "" ++" Symbol Bias: %u\n" ++" Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:2768 ++#, c-format ++msgid "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2782 ++msgid "" ++" Library Time Stamp Checksum Version " ++"Flags" ++msgstr "" ++ ++#: ../src/readelf.c:2832 ++#, c-format ++msgid "" ++"\n" ++"Object attributes section [%2zu] '%s' of % bytes at offset %" ++"#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:2848 ++msgid " Owner Size\n" ++msgstr "" ++ ++#: ../src/readelf.c:2874 ++#, c-format ++msgid " %-13s %4\n" ++msgstr "" ++ ++#: ../src/readelf.c:2906 ++#, c-format ++msgid " %-4u %12\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/readelf.c:2911 ++#, c-format ++msgid " File: %11\n" ++msgstr "" ++ ++#: ../src/readelf.c:2946 ++#, c-format ++msgid " %s: %, %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2949 ++#, c-format ++msgid " %s: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:2952 ++#, c-format ++msgid " %s: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2959 ++#, c-format ++msgid " %u: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:2962 ++#, c-format ++msgid " %u: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2997 ++#, c-format ++msgid "%s+%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3000 ++#, c-format ++msgid "%s+%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3005 ++#, c-format ++msgid "%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3008 ++#, c-format ++msgid "%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3014 ++#, c-format ++msgid "%s+%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3017 ++#, c-format ++msgid "%s+%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3021 ++#, c-format ++msgid "%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3024 ++#, c-format ++msgid "%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3029 ++#, c-format ++msgid "%s+%#" ++msgstr "" ++ ++#: ../src/readelf.c:3032 ++#, c-format ++msgid "%s+%#0*" ++msgstr "" ++ ++#: ../src/readelf.c:3140 ++#, c-format ++msgid "unknown tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3142 ++#, c-format ++msgid "unknown user tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3352 ++#, c-format ++msgid "unknown attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3355 ++#, c-format ++msgid "unknown user attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3401 ++#, c-format ++msgid "unknown form %" ++msgstr "" ++ ++#: ../src/readelf.c:4017 ++#, c-format ++msgid "%*s[%4] %s \n" ++msgstr "" ++ ++#: ../src/readelf.c:4030 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [ Code]\n" ++msgstr "" ++ ++#: ../src/readelf.c:4037 ++#, c-format ++msgid "" ++"\n" ++"Abbreviation section at offset %:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4050 ++#, c-format ++msgid " *** error while reading abbreviation: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4066 ++#, c-format ++msgid " [%5u] offset: %, children: %s, tag: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4069 ++msgid "yes" ++msgstr "" ++ ++#: ../src/readelf.c:4069 ++msgid "no" ++msgstr "" ++ ++#: ../src/readelf.c:4105 ++#, c-format ++msgid "cannot get .debug_aranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4110 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entry:\n" ++msgid_plural "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:4140 ++#, c-format ++msgid " [%*zu] ???\n" ++msgstr "" ++ ++#: ../src/readelf.c:4142 ++#, c-format ++msgid " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" ++msgstr "" ++ ++#: ../src/readelf.c:4161 ++#, c-format ++msgid "cannot get .debug_ranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4166 ../src/readelf.c:4623 ../src/readelf.c:5272 ++#: ../src/readelf.c:5717 ../src/readelf.c:5812 ../src/readelf.c:5984 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4180 ../src/readelf.c:5731 ++#, c-format ++msgid " [%6tx] \n" ++msgstr "" ++ ++#: ../src/readelf.c:4202 ../src/readelf.c:5753 ++#, c-format ++msgid " [%6tx] base address %s\n" ++msgstr "" ++ ++#. We have an address range entry. ++#. First address range entry in a list. ++#: ../src/readelf.c:4213 ++#, c-format ++msgid " [%6tx] %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4215 ++#, c-format ++msgid " %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4612 ../src/readelf.c:6050 ../src/readelf.c:6152 ++#, c-format ++msgid "cannot get %s content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4619 ++#, c-format ++msgid "" ++"\n" ++"Call frame information section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4646 ../src/readelf.c:5306 ++#, c-format ++msgid "invalid data in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:4668 ++#, c-format ++msgid "" ++"\n" ++" [%6tx] Zero terminator\n" ++msgstr "" ++ ++#: ../src/readelf.c:4746 ++msgid "FDE address encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4752 ++msgid "LSDA pointer encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4797 ++#, c-format ++msgid "invalid augmentation encoding" ++msgstr "" ++ ++#: ../src/readelf.c:4868 ++#, c-format ++msgid " (offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:4875 ++#, c-format ++msgid " (end offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:4902 ++#, c-format ++msgid " %-26sLSDA pointer: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:4948 ++#, c-format ++msgid "cannot get attribute code: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4956 ++#, c-format ++msgid "cannot get attribute form: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4969 ++#, c-format ++msgid "cannot get attribute value: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5151 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [Offset]\n" ++msgstr "" ++ ++#: ../src/readelf.c:5176 ++#, c-format ++msgid "" ++" Compilation unit at offset %:\n" ++" Version: %, Abbreviation section offset: %, Address size: %" ++", Offset size: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5194 ++#, c-format ++msgid "cannot get DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5205 ++#, c-format ++msgid "cannot get DIE offset: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5213 ++#, c-format ++msgid "cannot get tag of DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5242 ++#, c-format ++msgid "cannot get next DIE: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5249 ++#, c-format ++msgid "cannot get next DIE: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5284 ++#, c-format ++msgid "cannot get line data section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5297 ++#, c-format ++msgid "" ++"\n" ++"Table at offset %Zu:\n" ++msgstr "" ++ ++#. Print what we got so far. ++#: ../src/readelf.c:5349 ++#, c-format ++msgid "" ++"\n" ++" Length: %\n" ++" DWARF version: %\n" ++" Prologue length: %\n" ++" Minimum instruction length: %\n" ++" Initial value if '%s': %\n" ++" Line base: %\n" ++" Line range: %\n" ++" Opcode base: %\n" ++"\n" ++"Opcodes:\n" ++msgstr "" ++ ++#: ../src/readelf.c:5368 ++#, c-format ++msgid "invalid data at offset %tu in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:5383 ++#, c-format ++msgid " [%*] %hhu argument\n" ++msgid_plural " [%*] %hhu arguments\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5391 ++msgid "" ++"\n" ++"Directory table:" ++msgstr "" ++ ++#: ../src/readelf.c:5407 ++msgid "" ++"\n" ++"File name table:\n" ++" Entry Dir Time Size Name" ++msgstr "" ++ ++#: ../src/readelf.c:5436 ++msgid "" ++"\n" ++"Line number statements:" ++msgstr "" ++ ++#: ../src/readelf.c:5497 ++#, c-format ++msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" ++msgstr "" ++ ++#: ../src/readelf.c:5517 ++#, c-format ++msgid " extended opcode %u: " ++msgstr "" ++ ++#: ../src/readelf.c:5522 ++msgid "end of sequence" ++msgstr "" ++ ++#: ../src/readelf.c:5537 ++#, c-format ++msgid "set address to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5558 ++#, c-format ++msgid "define new file: dir=%u, mtime=%, length=%, name=%s\n" ++msgstr "" ++ ++#. Unknown, ignore it. ++#: ../src/readelf.c:5567 ++msgid "unknown opcode" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5579 ++msgid " copy" ++msgstr "" ++ ++#: ../src/readelf.c:5589 ++#, c-format ++msgid "advance address by %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5600 ++#, c-format ++msgid " advance line by constant %d to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5608 ++#, c-format ++msgid " set file to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5618 ++#, c-format ++msgid " set column to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5625 ++#, c-format ++msgid " set '%s' to %\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5631 ++msgid " set basic block flag" ++msgstr "" ++ ++#: ../src/readelf.c:5641 ++#, c-format ++msgid "advance address by constant %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5657 ++#, c-format ++msgid "advance address by fixed value %u to %s\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5666 ++msgid " set prologue end flag" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5671 ++msgid " set epilogue begin flag" ++msgstr "" ++ ++#. 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. ++#: ../src/readelf.c:5680 ++#, c-format ++msgid " unknown opcode with % parameter:" ++msgid_plural " unknown opcode with % parameters:" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5712 ++#, c-format ++msgid "cannot get .debug_loc content: %s" ++msgstr "" ++ ++#. First entry in a list. ++#: ../src/readelf.c:5767 ++#, c-format ++msgid " [%6tx] %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5769 ++#, c-format ++msgid " %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5822 ++#, c-format ++msgid "cannot get macro information section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5901 ++#, c-format ++msgid "%*s*** non-terminated string at end of section" ++msgstr "" ++ ++#: ../src/readelf.c:5969 ++#, c-format ++msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6008 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" %*s String\n" ++msgstr "" ++ ++#: ../src/readelf.c:6022 ++#, c-format ++msgid " *** error while reading strings: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6042 ++#, c-format ++msgid "" ++"\n" ++"Call frame search table section [%2zu] '.eh_frame_hdr':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6144 ++#, c-format ++msgid "" ++"\n" ++"Exception handling table section [%2zu] '.gcc_except_table':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6167 ++#, c-format ++msgid " LPStart encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6179 ++#, c-format ++msgid " TType encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6193 ++#, c-format ++msgid " Call site encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6206 ++msgid "" ++"\n" ++" Call site table:" ++msgstr "" ++ ++#: ../src/readelf.c:6220 ++#, c-format ++msgid "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:6280 ++#, c-format ++msgid "invalid TType encoding" ++msgstr "" ++ ++#: ../src/readelf.c:6303 ++#, c-format ++msgid "cannot get debug context descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6438 ../src/readelf.c:7016 ++#, c-format ++msgid "cannot convert core note data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6743 ++#, c-format ++msgid "" ++"\n" ++"%*s... ..." ++msgstr "" ++ ++#: ../src/readelf.c:6785 ++#, c-format ++msgid "unable to handle register number %d" ++msgstr "" ++ ++#: ../src/readelf.c:6932 ++#, c-format ++msgid "cannot get register info: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6956 ++#, c-format ++msgid "cannot register info: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7114 ++msgid " Owner Data size Type\n" ++msgstr "" ++ ++#: ../src/readelf.c:7132 ++#, c-format ++msgid " %-13.*s %9 %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:7163 ++#, c-format ++msgid "cannot get content of note section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7190 ++#, c-format ++msgid "" ++"\n" ++"Note section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7213 ++#, c-format ++msgid "" ++"\n" ++"Note segment of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7259 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no data to dump.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7265 ../src/readelf.c:7287 ++#, c-format ++msgid "cannot get data for section [%Zu] '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7269 ++#, c-format ++msgid "" ++"\n" ++"Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7282 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' is empty.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7291 ++#, c-format ++msgid "" ++"\n" ++"String section [%Zu] '%s' contains % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7338 ++#, c-format ++msgid "" ++"\n" ++"section [%lu] does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7364 ++#, c-format ++msgid "" ++"\n" ++"section '%s' does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7425 ++#, c-format ++msgid "cannot get symbol index of archive '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7428 ++#, c-format ++msgid "" ++"\n" ++"Archive '%s' has no symbol index\n" ++msgstr "" ++ ++#: ../src/readelf.c:7432 ++#, c-format ++msgid "" ++"\n" ++"Index of archive '%s' has %Zu entries:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7450 ++#, c-format ++msgid "cannot extract member at offset %Zu in '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7455 ++#, 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 "" ++ ++#. Short description of program. ++#: ../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:339 ++#, c-format ++msgid "%s: file format not recognized" ++msgstr "" ++ ++#: ../src/size.c:446 ../src/size.c:589 ++#, c-format ++msgid " (ex %s)" ++msgstr "" ++ ++#: ../src/size.c:614 ++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 "" ++ ++#. Short description of program. ++#: ../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 ../src/unstrip.c:124 ++#, c-format ++msgid "-o option specified twice" ++msgstr "" ++ ++#: ../src/strip.c:259 ++#, c-format ++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:868 ../src/strip.c:955 ++#, c-format ++msgid "while generating output file: %s" ++msgstr "" ++ ++#: ../src/strip.c:928 ../src/strip.c:1667 ++#, c-format ++msgid "%s: error while creating ELF header: %s" ++msgstr "" ++ ++#: ../src/strip.c:942 ++#, c-format ++msgid "while preparing output for '%s'" ++msgstr "" ++ ++#: ../src/strip.c:993 ../src/strip.c:1049 ++#, c-format ++msgid "while create section header section: %s" ++msgstr "" ++ ++#: ../src/strip.c:999 ++#, c-format ++msgid "cannot allocate section data: %s" ++msgstr "" ++ ++#: ../src/strip.c:1058 ++#, c-format ++msgid "while create section header string table: %s" ++msgstr "" ++ ++#: ../src/strip.c:1592 ../src/strip.c:1689 ++#, c-format ++msgid "while writing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1603 ++#, c-format ++msgid "while creating '%s'" ++msgstr "" ++ ++#: ../src/strip.c:1615 ++#, c-format ++msgid "while computing checksum for debug information" ++msgstr "" ++ ++#: ../src/strip.c:1675 ++#, c-format ++msgid "%s: error while reading the file: %s" ++msgstr "" ++ ++#: ../src/strip.c:1721 ../src/strip.c:1728 ++#, c-format ++msgid "error while finishing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1751 ../src/strip.c:1808 ++#, 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 "" ++ ++#. Short description of program. ++#: ../src/ld.c:197 ++msgid "Combine object and archive files." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../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:1446 ++#, c-format ++msgid "cannot read version script '%s'" ++msgstr "" ++ ++#. The symbol is already defined and now again ++#. in the linker script. This is an error. ++#: ../src/ld.c:1512 ../src/ld.c:1551 ++#, 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: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 % in %s to % in %s" ++msgstr "" ++ ++#: ../src/ldgeneric.c:677 ++#, c-format ++msgid "(%s+%#): multiple definition of %s `%s'\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:700 ++#, c-format ++msgid "(%s+%#): first defined here\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:819 ++#, c-format ++msgid "%s: cannot get section group data: %s" ++msgstr "" ++ ++#. If we come here no section group contained the given section ++#. despite the SHF_GROUP flag. This is an error in the input ++#. file. ++#: ../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 "" ++ ++#. This should never happen. ++#: ../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: %" ++"" ++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 "" ++ ++#. 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. ++#: ../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 '%' 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*" ++msgstr "" ++ ++#: ../src/ldgeneric.c:3690 ++#, c-format ++msgid "no entry symbol specified: defaulting to %#0*" ++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 ../src/unstrip.c:1807 ++#, 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 "" ++ ++#. This cannot be implemented generally. There should have been a ++#. machine dependent implementation and we should never have arrived ++#. here. ++#: ../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/i386_ld.c:210 ++#, c-format ++msgid "cannot allocate PLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:232 ++#, c-format ++msgid "cannot allocate PLTREL section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:253 ++#, c-format ++msgid "cannot allocate GOT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:274 ++#, c-format ++msgid "cannot allocate GOTPLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:661 ++#, c-format ++msgid "initial-executable TLS relocation cannot be used " ++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:71 ++msgid "Be extremely strict, flag level 2 features." ++msgstr "" ++ ++#: ../src/elflint.c:72 ++msgid "Do not print anything if successful" ++msgstr "" ++ ++#: ../src/elflint.c:73 ++msgid "Binary is a separate debuginfo file" ++msgstr "" ++ ++#: ../src/elflint.c:75 ++msgid "" ++"Binary has been created with GNU ld and is therefore known to be broken in " ++"certain ways" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elflint.c:81 ++msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." ++msgstr "" ++ ++#: ../src/elflint.c:165 ++#, c-format ++msgid "cannot generate Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:184 ++#, c-format ++msgid "error while closing Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:188 ++msgid "No errors" ++msgstr "" ++ ++#: ../src/elflint.c:301 ++#, c-format ++msgid " error while freeing sub-ELF descriptor: %s\n" ++msgstr "" ++ ++#. We cannot do anything. ++#: ../src/elflint.c:309 ++#, c-format ++msgid "Not an ELF file - it has the wrong magic bytes at the start\n" ++msgstr "" ++ ++#: ../src/elflint.c:368 ++#, c-format ++msgid "e_ident[%d] == %d is no known class\n" ++msgstr "" ++ ++#: ../src/elflint.c:373 ++#, c-format ++msgid "e_ident[%d] == %d is no known data encoding\n" ++msgstr "" ++ ++#: ../src/elflint.c:377 ++#, c-format ++msgid "unknown ELF header version number e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:382 ++#, c-format ++msgid "unsupported OS ABI e_ident[%d] == '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:388 ++#, c-format ++msgid "unsupport ABI version e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:393 ++#, c-format ++msgid "e_ident[%zu] is not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:398 ++#, c-format ++msgid "unknown object file type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:405 ++#, c-format ++msgid "unknown machine type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:409 ++#, c-format ++msgid "unknown object file version\n" ++msgstr "" ++ ++#: ../src/elflint.c:415 ++#, c-format ++msgid "invalid program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:417 ++#, c-format ++msgid "executables and DSOs cannot have zero program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:421 ++#, c-format ++msgid "invalid number of program header entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:429 ++#, c-format ++msgid "invalid section header table offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:432 ++#, c-format ++msgid "section header table must be present\n" ++msgstr "" ++ ++#: ../src/elflint.c:446 ++#, c-format ++msgid "invalid number of section header table entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:463 ++#, c-format ++msgid "invalid section header index\n" ++msgstr "" ++ ++#: ../src/elflint.c:468 ++#, c-format ++msgid "invalid machine flags: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:475 ../src/elflint.c:492 ++#, c-format ++msgid "invalid ELF header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:478 ../src/elflint.c:495 ++#, c-format ++msgid "invalid program header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:481 ../src/elflint.c:498 ++#, c-format ++msgid "invalid program header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:484 ../src/elflint.c:501 ++#, c-format ++msgid "invalid section header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:487 ../src/elflint.c:504 ++#, c-format ++msgid "invalid section header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:548 ++#, c-format ++msgid "" ++"section [%2d] '%s': section with SHF_GROUP flag set not part of a section " ++"group\n" ++msgstr "" ++ ++#: ../src/elflint.c:552 ++#, c-format ++msgid "section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n" ++msgstr "" ++ ++#: ../src/elflint.c:568 ../src/elflint.c:1393 ../src/elflint.c:1443 ++#: ../src/elflint.c:1552 ../src/elflint.c:2146 ../src/elflint.c:2660 ++#: ../src/elflint.c:2821 ../src/elflint.c:2951 ../src/elflint.c:3123 ++#: ../src/elflint.c:4020 ++#, c-format ++msgid "section [%2d] '%s': cannot get section data\n" ++msgstr "" ++ ++#: ../src/elflint.c:581 ../src/elflint.c:1559 ++#, 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:604 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol table cannot have more than one extended index " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:615 ++#, c-format ++msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" ++msgstr "" ++ ++#: ../src/elflint.c:624 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:629 ../src/elflint.c:632 ../src/elflint.c:635 ++#: ../src/elflint.c:638 ../src/elflint.c:641 ../src/elflint.c:644 ++#, c-format ++msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:647 ++#, c-format ++msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:657 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:666 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid name value\n" ++msgstr "" ++ ++#: ../src/elflint.c:679 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: too large section index but no extended " ++"section index section\n" ++msgstr "" ++ ++#: ../src/elflint.c:685 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " ++"st_shndx (%)\n" ++msgstr "" ++ ++#. || sym->st_shndx > SHN_HIRESERVE always false ++#: ../src/elflint.c:697 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:705 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown type\n" ++msgstr "" ++ ++#: ../src/elflint.c:709 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" ++msgstr "" ++ ++#: ../src/elflint.c:717 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" ++msgstr "" ++ ++#: ../src/elflint.c:721 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:725 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:757 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:763 ../src/elflint.c:788 ../src/elflint.c:831 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu does not fit completely in referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:772 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " ++"SHF_TLS flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:782 ../src/elflint.c:824 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:809 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:817 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:844 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:851 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: non-local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:858 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" ++msgstr "" ++ ++#: ../src/elflint.c:908 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%" ++"2d]\n" ++msgstr "" ++ ++#: ../src/elflint.c:915 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#. 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. ++#: ../src/elflint.c:931 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " ++"match %s section address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:938 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " ++"match %s section size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:946 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:962 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " ++"segment address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:969 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " ++"segment size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:1020 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1029 ../src/elflint.c:1081 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1054 ../src/elflint.c:1106 ++#, c-format ++msgid "" ++"section [%2d] '%s': relative relocations after index %d as specified by " ++"DT_RELCOUNT\n" ++msgstr "" ++ ++#: ../src/elflint.c:1060 ../src/elflint.c:1112 ++#, c-format ++msgid "" ++"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " ++"specified %d relative relocations\n" ++msgstr "" ++ ++#: ../src/elflint.c:1072 ++#, c-format ++msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1154 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1167 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1175 ++#, c-format ++msgid "section [%2d] '%s': sh_info should be zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1182 ++#, c-format ++msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" ++msgstr "" ++ ++#: ../src/elflint.c:1189 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" ++msgstr "" ++ ++#: ../src/elflint.c:1249 ++#, c-format ++msgid "text relocation flag set but there is no read-only segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1276 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1284 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: relocation type invalid for the file " ++"type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1292 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1310 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " ++"be used with %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1327 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1342 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: copy relocation against symbol of type %" ++"s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1363 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: read-only section modified but text " ++"relocation flag not set\n" ++msgstr "" ++ ++#: ../src/elflint.c:1378 ++#, c-format ++msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" ++msgstr "" ++ ++#: ../src/elflint.c:1417 ../src/elflint.c:1467 ++#, c-format ++msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1547 ++#, c-format ++msgid "more than one dynamic section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1565 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" ++msgstr "" ++ ++#: ../src/elflint.c:1570 ../src/elflint.c:1862 ++#, c-format ++msgid "section [%2d] '%s': sh_info not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1580 ++#, c-format ++msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1588 ++#, c-format ++msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:1595 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: unknown tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:1606 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1616 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" ++msgstr "" ++ ++#: ../src/elflint.c:1634 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" ++msgstr "" ++ ++#: ../src/elflint.c:1656 ++#, 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:1699 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1714 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must be valid offset in section [%" ++"2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:1734 ../src/elflint.c:1762 ++#, c-format ++msgid "section [%2d] '%s': contains %s entry but not %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1746 ++#, c-format ++msgid "section [%2d] '%s': mandatory tag %s not present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1755 ++#, c-format ++msgid "section [%2d] '%s': no hash section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1770 ../src/elflint.c:1777 ++#, c-format ++msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1787 ../src/elflint.c:1791 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" ++msgstr "" ++ ++#: ../src/elflint.c:1797 ++#, c-format ++msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" ++msgstr "" ++ ++#: ../src/elflint.c:1808 ../src/elflint.c:1812 ../src/elflint.c:1816 ++#: ../src/elflint.c:1820 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:1832 ++#, c-format ++msgid "section [%2d] '%s': only relocatable files can have extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1842 ++#, c-format ++msgid "section [%2d] '%s': extended section index section not for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1847 ++#, c-format ++msgid "cannot get data for symbol section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1850 ++#, c-format ++msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" ++msgstr "" ++ ++#: ../src/elflint.c:1857 ++#, c-format ++msgid "section [%2d] '%s': extended index table too small for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1872 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " ++"same symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1883 ++#, c-format ++msgid "symbol 0 should have zero extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1895 ++#, c-format ++msgid "cannot get data for symbol %zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:1900 ++#, c-format ++msgid "extended section index is % but symbol index is not XINDEX\n" ++msgstr "" ++ ++#: ../src/elflint.c:1916 ../src/elflint.c:1957 ++#, c-format ++msgid "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:1928 ../src/elflint.c:1969 ++#, c-format ++msgid "section [%2d] '%s': chain array too large\n" ++msgstr "" ++ ++#: ../src/elflint.c:1937 ../src/elflint.c:1978 ++#, c-format ++msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1943 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1984 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference % out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1999 ++#, c-format ++msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2010 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected at " ++"least%ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2018 ++#, c-format ++msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2050 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" ++msgstr "" ++ ++#: ../src/elflint.c:2071 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " ++"undefined\n" ++msgstr "" ++ ++#: ../src/elflint.c:2082 ++#, c-format ++msgid "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" ++msgstr "" ++ ++#: ../src/elflint.c:2113 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2118 ++#, c-format ++msgid "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2124 ++#, c-format ++msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2137 ++#, c-format ++msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:2155 ++#, c-format ++msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2163 ++#, c-format ++msgid "section [%2d] '%s': hash table entry size incorrect\n" ++msgstr "" ++ ++#: ../src/elflint.c:2168 ++#, c-format ++msgid "section [%2d] '%s': not marked to be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:2173 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table has not even room for initial administrative " ++"entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:2221 ++#, c-format ++msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" ++msgstr "" ++ ++#: ../src/elflint.c:2299 ../src/elflint.c:2303 ++#, c-format ++msgid "section [%2zu] '%s': reference to symbol index 0\n" ++msgstr "" ++ ++#: ../src/elflint.c:2310 ++#, 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:2322 ++#, 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:2338 ++#, c-format ++msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:2358 ++#, c-format ++msgid "section [%2d] '%s': section groups only allowed in relocatable object files\n" ++msgstr "" ++ ++#: ../src/elflint.c:2369 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol table: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2374 ++#, c-format ++msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2380 ++#, c-format ++msgid "section [%2d] '%s': invalid symbol index in sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:2385 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:2392 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol for signature\n" ++msgstr "" ++ ++#: ../src/elflint.c:2397 ++#, c-format ++msgid "section [%2d] '%s': signature symbol canot be empty string\n" ++msgstr "" ++ ++#: ../src/elflint.c:2403 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not set correctly\n" ++msgstr "" ++ ++#: ../src/elflint.c:2409 ++#, c-format ++msgid "section [%2d] '%s': cannot get data: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2418 ++#, c-format ++msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2423 ++#, c-format ++msgid "section [%2d] '%s': section group without flags word\n" ++msgstr "" ++ ++#: ../src/elflint.c:2429 ++#, c-format ++msgid "section [%2d] '%s': section group without member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2433 ++#, c-format ++msgid "section [%2d] '%s': section group with only one member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2444 ++#, c-format ++msgid "section [%2d] '%s': unknown section group flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:2456 ++#, c-format ++msgid "section [%2d] '%s': section index %Zu out of range\n" ++msgstr "" ++ ++#: ../src/elflint.c:2465 ++#, c-format ++msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2472 ++#, c-format ++msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2478 ++#, c-format ++msgid "" ++"section [%2d] '%s': element %Zu references section [%2d] '%s' without " ++"SHF_GROUP flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:2485 ++#, c-format ++msgid "section [%2d] '%s' is contained in more than one section group\n" ++msgstr "" ++ ++#: ../src/elflint.c:2674 ++#, 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:2685 ++#, c-format ++msgid "" ++"section [%2d] '%s' has different number of entries than symbol table [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2701 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: cannot read version data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2717 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" ++msgstr "" ++ ++#: ../src/elflint.c:2725 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2739 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2744 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: version index %d is for defined version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2754 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: version index %d is for requested version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2806 ++#, c-format ++msgid "more than one version reference section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2814 ../src/elflint.c:2943 ++#, c-format ++msgid "section [%2d] '%s': sh_link does not link to string table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2837 ../src/elflint.c:2995 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong version %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2843 ../src/elflint.c:3001 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2851 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid file reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2859 ++#, c-format ++msgid "section [%2d] '%s': entry %d references unknown dependency\n" ++msgstr "" ++ ++#: ../src/elflint.c:2871 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:2878 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " ++"reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2885 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %" ++"#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:2895 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " ++"name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2906 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" ++msgstr "" ++ ++#: ../src/elflint.c:2922 ../src/elflint.c:3080 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:2935 ++#, c-format ++msgid "more than one version definition section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2980 ++#, c-format ++msgid "section [%2d] '%s': more than one BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:2984 ++#, c-format ++msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" ++msgstr "" ++ ++#: ../src/elflint.c:2990 ++#, c-format ++msgid "section [%2d] '%s': entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3014 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:3021 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:3030 ++#, c-format ++msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3049 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3064 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3086 ++#, c-format ++msgid "section [%2d] '%s': no BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3102 ++#, c-format ++msgid "section [%2d] '%s': unknown parent version '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3115 ++#, c-format ++msgid "section [%2d] '%s': empty object attributes section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3136 ++#, c-format ++msgid "section [%2d] '%s': unrecognized attribute format\n" ++msgstr "" ++ ++#: ../src/elflint.c:3152 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: zero length field in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3161 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3173 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" ++msgstr "" ++ ++#: ../src/elflint.c:3190 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3199 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3208 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" ++msgstr "" ++ ++#: ../src/elflint.c:3221 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/elflint.c:3232 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3250 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3261 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" ++msgstr "" ++ ++#: ../src/elflint.c:3274 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3278 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3288 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" ++msgstr "" ++ ++#: ../src/elflint.c:3294 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3383 ++#, c-format ++msgid "cannot get section header of zeroth section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3387 ++#, c-format ++msgid "zeroth section has nonzero name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3389 ++#, c-format ++msgid "zeroth section has nonzero type\n" ++msgstr "" ++ ++#: ../src/elflint.c:3391 ++#, c-format ++msgid "zeroth section has nonzero flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:3393 ++#, c-format ++msgid "zeroth section has nonzero address\n" ++msgstr "" ++ ++#: ../src/elflint.c:3395 ++#, c-format ++msgid "zeroth section has nonzero offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:3397 ++#, c-format ++msgid "zeroth section has nonzero info field\n" ++msgstr "" ++ ++#: ../src/elflint.c:3399 ++#, c-format ++msgid "zeroth section has nonzero align value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3401 ++#, c-format ++msgid "zeroth section has nonzero entry size value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3404 ++#, c-format ++msgid "" ++"zeroth section has nonzero size value while ELF header has nonzero shnum " ++"value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3408 ++#, c-format ++msgid "" ++"zeroth section has nonzero link value while ELF header does not signal " ++"overflow in shstrndx\n" ++msgstr "" ++ ++#: ../src/elflint.c:3425 ++#, c-format ++msgid "cannot get section header for section [%2zu] '%s': %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3434 ++#, c-format ++msgid "section [%2zu]: invalid name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3461 ++#, c-format ++msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3477 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3494 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3512 ++#, c-format ++msgid "section [%2zu] '%s' present in object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3518 ../src/elflint.c:3550 ++#, c-format ++msgid "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3523 ../src/elflint.c:3555 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " ++"segments\n" ++msgstr "" ++ ++#: ../src/elflint.c:3531 ++#, c-format ++msgid "section [%2zu] '%s' is extension section index table in non-object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3574 ++#, c-format ++msgid "section [%2zu] '%s': size not multiple of entry size\n" ++msgstr "" ++ ++#: ../src/elflint.c:3579 ++#, c-format ++msgid "cannot get section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:3589 ++#, c-format ++msgid "section [%2zu] '%s' has unsupported type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3603 ++#, c-format ++msgid "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3610 ++#, c-format ++msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3618 ++#, c-format ++msgid "section [%2zu] '%s': thread-local data sections address not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3626 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in link value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3631 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in info value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3638 ++#, c-format ++msgid "section [%2zu] '%s': strings flag set without merge flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3643 ++#, c-format ++msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3661 ++#, c-format ++msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3670 ++#, c-format ++msgid "section [%2zu] '%s' is both executable and writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:3697 ++#, c-format ++msgid "" ++"section [%2zu] '%s' not fully contained in segment of program header entry %" ++"d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3705 ++#, 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:3714 ++#, 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:3725 ++#, c-format ++msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3735 ++#, c-format ++msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3745 ++#, c-format ++msgid "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3751 ++#, 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:3759 ++#, c-format ++msgid "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:3810 ++#, c-format ++msgid "more than one version symbol table present\n" ++msgstr "" ++ ++#: ../src/elflint.c:3833 ++#, c-format ++msgid "INTERP program header entry but no .interp section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3844 ++#, c-format ++msgid "loadable segment [%u] is executable but contains no executable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3850 ++#, c-format ++msgid "loadable segment [%u] is writable but contains no writable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3861 ++#, c-format ++msgid "" ++"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " ++"exist\n" ++msgstr "" ++ ++#: ../src/elflint.c:3874 ++#, c-format ++msgid "duplicate version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3888 ++#, c-format ++msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" ++msgstr "" ++ ++#: ../src/elflint.c:3937 ++#, c-format ++msgid "phdr[%d]: unknown core file note type % at offset %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3941 ++#, c-format ++msgid "section [%2d] '%s': unknown core file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3963 ++#, c-format ++msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3967 ++#, c-format ++msgid "section [%2d] '%s': unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3984 ++#, c-format ++msgid "phdr[%d]: no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4003 ++#, c-format ++msgid "phdr[%d]: cannot get content of note section: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4006 ++#, c-format ++msgid "phdr[%d]: extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4027 ++#, c-format ++msgid "section [%2d] '%s': no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4034 ++#, c-format ++msgid "section [%2d] '%s': cannot get content of note section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4037 ++#, c-format ++msgid "section [%2d] '%s': extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4055 ++#, c-format ++msgid "only executables, shared objects, and core files can have program headers\n" ++msgstr "" ++ ++#: ../src/elflint.c:4070 ++#, c-format ++msgid "cannot get program header entry %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4079 ++#, c-format ++msgid "program header entry %d: unknown program header entry type %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:4090 ++#, c-format ++msgid "more than one INTERP entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4098 ++#, c-format ++msgid "more than one TLS entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4105 ++#, c-format ++msgid "static executable cannot have dynamic sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:4119 ++#, c-format ++msgid "dynamic section reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4122 ++#, c-format ++msgid "dynamic section size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4132 ++#, c-format ++msgid "more than one GNU_RELRO entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4153 ++#, c-format ++msgid "loadable segment GNU_RELRO applies to is not writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4156 ++#, c-format ++msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:4164 ../src/elflint.c:4187 ++#, c-format ++msgid "%s segment not contained in a loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4193 ++#, c-format ++msgid "program header offset in ELF header and PHDR entry do not match" ++msgstr "" ++ ++#: ../src/elflint.c:4217 ++#, c-format ++msgid "call frame search table reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4220 ++#, c-format ++msgid "call frame search table size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4233 ++#, c-format ++msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4241 ++#, c-format ++msgid "call frame search table must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4244 ++#, c-format ++msgid "section [%2zu] '%s' must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4248 ++#, c-format ++msgid "call frame search table must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4251 ++#, c-format ++msgid "section [%2zu] '%s' must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4256 ++#, c-format ++msgid "call frame search table must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4259 ++#, c-format ++msgid "section [%2zu] '%s' must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4270 ++#, c-format ++msgid "program header entry %d: file size greater than memory size\n" ++msgstr "" ++ ++#: ../src/elflint.c:4277 ++#, c-format ++msgid "program header entry %d: alignment not a power of 2\n" ++msgstr "" ++ ++#: ../src/elflint.c:4280 ++#, c-format ++msgid "" ++"program header entry %d: file offset and virtual address not module of " ++"alignment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4293 ++#, c-format ++msgid "" ++"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " ++"program header entry" ++msgstr "" ++ ++#: ../src/elflint.c:4327 ++#, c-format ++msgid "cannot read ELF header: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4353 ++#, c-format ++msgid "text relocation flag set but not needed\n" ++msgstr "" ++ ++#: ../src/addr2line.c:66 ++msgid "Output selection options:" ++msgstr "" ++ ++#: ../src/addr2line.c:67 ++msgid "Show only base names of source files" ++msgstr "" ++ ++#: ../src/addr2line.c:69 ++msgid "Show absolute file names using compilation directory" ++msgstr "" ++ ++#: ../src/addr2line.c:70 ++msgid "Also show function names" ++msgstr "" ++ ++#: ../src/addr2line.c:71 ++msgid "Also show symbol or section names" ++msgstr "" ++ ++#: ../src/addr2line.c:73 ++msgid "Treat addresses as offsets relative to NAME section." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/addr2line.c:84 ++msgid "Locate source files and line information for ADDRs (in a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/addr2line.c:88 ++msgid "[ADDR...]" ++msgstr "" ++ ++#: ../src/addr2line.c:405 ++#, c-format ++msgid "Section syntax requires exactly one module" ++msgstr "" ++ ++#: ../src/addr2line.c:428 ++#, c-format ++msgid "offset %# lies outside section '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:461 ++#, c-format ++msgid "cannot find symbol '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:466 ++#, c-format ++msgid "offset %# lies outside contents of '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:70 ++msgid "Input Selection:" ++msgstr "" ++ ++#: ../src/findtextrel.c:71 ++msgid "Prepend PATH to all file names" ++msgstr "" ++ ++#: ../src/findtextrel.c:73 ++msgid "Use PATH as root of debuginfo hierarchy" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/findtextrel.c:80 ++msgid "Locate source of text relocations in FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/findtextrel.c:236 ../src/elfcmp.c:578 ../src/ranlib.c:186 ++#, c-format ++msgid "cannot create ELF descriptor for '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:246 ++#, c-format ++msgid "cannot get ELF header '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:257 ++#, c-format ++msgid "'%s' is not a DSO or PIE" ++msgstr "" ++ ++#: ../src/findtextrel.c:274 ++#, c-format ++msgid "getting get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:292 ++#, c-format ++msgid "cannot read dynamic section: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:307 ++#, c-format ++msgid "no text relocations reported in '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:319 ++#, c-format ++msgid "while reading ELF file" ++msgstr "" ++ ++#: ../src/findtextrel.c:328 ../src/findtextrel.c:345 ++#, c-format ++msgid "cannot get program header index at offset %d: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:397 ++#, c-format ++msgid "cannot get section header of section %Zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:409 ++#, c-format ++msgid "cannot get symbol table section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:429 ../src/findtextrel.c:452 ++#, c-format ++msgid "cannot get relocation at index %d in section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:517 ++#, c-format ++msgid "%s not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:570 ++#, c-format ++msgid "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:577 ../src/findtextrel.c:597 ++#, c-format ++msgid "" ++"the file containing the function '%s' might not be compiled with -fpic/-" ++"fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:585 ++#, 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:605 ++#, c-format ++msgid "a relocation modifies memory at offset %llu in a write-protected segment\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:69 ++msgid "Control options:" ++msgstr "" ++ ++#: ../src/elfcmp.c:70 ++msgid "" ++"Control treatment of gaps in loadable segments [ignore|match] (default: " ++"ignore)" ++msgstr "" ++ ++#: ../src/elfcmp.c:72 ++msgid "Ignore permutation of buckets in SHT_HASH section" ++msgstr "" ++ ++#: ../src/elfcmp.c:73 ++msgid "Output nothing; yield exit status only" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elfcmp.c:80 ++msgid "Compare relevant parts of two ELF files for equality." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/elfcmp.c:84 ++msgid "FILE1 FILE2" ++msgstr "" ++ ++#: ../src/elfcmp.c:140 ++msgid "Invalid number of parameters.\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:168 ../src/elfcmp.c:173 ++#, c-format ++msgid "cannot get ELF header of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:190 ++#, c-format ++msgid "%s %s diff: ELF header" ++msgstr "" ++ ++#: ../src/elfcmp.c:248 ++#, c-format ++msgid "%s %s differ: section header" ++msgstr "" ++ ++#: ../src/elfcmp.c:276 ../src/elfcmp.c:282 ++#, c-format ++msgid "cannot get content of section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:298 ../src/elfcmp.c:304 ++#, c-format ++msgid "cannot get symbol in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:325 ++#, c-format ++msgid "%s %s differ: symbol table [%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:328 ++#, c-format ++msgid "%s %s differ: symbol table [%zu,%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:376 ++#, c-format ++msgid "%s %s differ: section [%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:380 ++#, c-format ++msgid "%s %s differ: section [%zu,%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:396 ++#, c-format ++msgid "%s %s differ: unequal amount of important sections" ++msgstr "" ++ ++#: ../src/elfcmp.c:430 ../src/elfcmp.c:435 ++#, c-format ++msgid "cannot load data of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:454 ../src/elfcmp.c:460 ++#, c-format ++msgid "cannot get program header entry %d of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:466 ++#, c-format ++msgid "%s %s differ: program header %d" ++msgstr "" ++ ++#: ../src/elfcmp.c:491 ++#, c-format ++msgid "%s %s differ: gap" ++msgstr "" ++ ++#: ../src/elfcmp.c:550 ++#, c-format ++msgid "Invalid value '%s' for --gaps parameter." ++msgstr "" ++ ++#: ../src/elfcmp.c:583 ++#, c-format ++msgid "cannot create EBL descriptor for '%s'" ++msgstr "" ++ ++#: ../src/elfcmp.c:601 ++#, c-format ++msgid "cannot get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:611 ++#, c-format ++msgid "cannot get content of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:621 ../src/elfcmp.c:635 ++#, c-format ++msgid "cannot get relocation: %s" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ranlib.c:74 ++msgid "Generate an index to speed access to archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ranlib.c:77 ++msgid "ARCHIVE" ++msgstr "" ++ ++#: ../src/ranlib.c:116 ++#, c-format ++msgid "Archive name required" ++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/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 "" ++ ++#. Short description of program. ++#: ../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 ../src/strings.c:680 ++#, c-format ++msgid "re-mmap failed" ++msgstr "" ++ ++#: ../src/strings.c:653 ++#, c-format ++msgid "mprotect failed" ++msgstr "" ++ ++#: ../src/unstrip.c:77 ++msgid "Match MODULE against file names, not module names" ++msgstr "" ++ ++#: ../src/unstrip.c:78 ++msgid "Silently skip unfindable files" ++msgstr "" ++ ++#: ../src/unstrip.c:81 ++msgid "Place output into FILE" ++msgstr "" ++ ++#: ../src/unstrip.c:83 ++msgid "Create multiple output files under DIRECTORY" ++msgstr "" ++ ++#: ../src/unstrip.c:84 ++msgid "Use module rather than file names" ++msgstr "" ++ ++#: ../src/unstrip.c:86 ++msgid "Create output for modules that have no separate debug information" ++msgstr "" ++ ++#: ../src/unstrip.c:89 ++msgid "Apply relocations to section contents in ET_REL files" ++msgstr "" ++ ++#: ../src/unstrip.c:91 ++msgid "Only list module and file names, build IDs" ++msgstr "" ++ ++#: ../src/unstrip.c:133 ++#, c-format ++msgid "-d option specified twice" ++msgstr "" ++ ++#: ../src/unstrip.c:165 ++#, c-format ++msgid "only one of -o or -d allowed" ++msgstr "" ++ ++#: ../src/unstrip.c:174 ++#, c-format ++msgid "-n cannot be used with explicit files or -o or -d" ++msgstr "" ++ ++#: ../src/unstrip.c:189 ++#, c-format ++msgid "output directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:198 ++#, c-format ++msgid "exactly two file arguments are required" ++msgstr "" ++ ++#: ../src/unstrip.c:204 ++#, c-format ++msgid "-m, -a, -R, and -i options not allowed with explicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:217 ++#, c-format ++msgid "-o or -d is required when using implicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:253 ++#, c-format ++msgid "cannot create ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:258 ++#, c-format ++msgid "cannot copy ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:263 ../src/unstrip.c:1816 ++#, c-format ++msgid "cannot create program headers: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:269 ++#, c-format ++msgid "cannot copy program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:279 ++#, c-format ++msgid "cannot copy section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:282 ../src/unstrip.c:1504 ++#, c-format ++msgid "cannot get section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:284 ../src/unstrip.c:1506 ++#, c-format ++msgid "cannot copy section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:308 ++#, c-format ++msgid "cannot create directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:348 ../src/unstrip.c:762 ../src/unstrip.c:1539 ++#, c-format ++msgid "cannot get symbol table entry: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:364 ../src/unstrip.c:579 ../src/unstrip.c:600 ++#: ../src/unstrip.c:612 ../src/unstrip.c:1560 ../src/unstrip.c:1690 ++#: ../src/unstrip.c:1714 ++#, c-format ++msgid "cannot update symbol table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:381 ../src/unstrip.c:431 ../src/unstrip.c:561 ++#: ../src/unstrip.c:1208 ../src/unstrip.c:1524 ../src/unstrip.c:1719 ++#: ../src/unstrip.c:1790 ++#, c-format ++msgid "cannot update section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:407 ../src/unstrip.c:418 ++#, c-format ++msgid "cannot update relocation: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:506 ++#, c-format ++msgid "cannot get symbol version: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:518 ++#, c-format ++msgid "unexpected section type in [%Zu] with sh_link to symtab" ++msgstr "" ++ ++#: ../src/unstrip.c:768 ++#, c-format ++msgid "invalid string offset in symbol [%Zu]" ++msgstr "" ++ ++#: ../src/unstrip.c:910 ../src/unstrip.c:1247 ++#, c-format ++msgid "cannot read section [%Zu] name: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:951 ../src/unstrip.c:970 ../src/unstrip.c:1003 ++#, c-format ++msgid "cannot read '.gnu.prelink_undo' section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:991 ++#, c-format ++msgid "invalid contents in '%s' section" ++msgstr "" ++ ++#: ../src/unstrip.c:1046 ../src/unstrip.c:1369 ++#, c-format ++msgid "cannot find matching section for [%Zu] '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:1170 ../src/unstrip.c:1185 ../src/unstrip.c:1450 ++#, c-format ++msgid "cannot add section name to string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1194 ++#, c-format ++msgid "cannot update section header string table data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1222 ../src/unstrip.c:1226 ++#, c-format ++msgid "cannot get section header string table section index: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1230 ../src/unstrip.c:1234 ../src/unstrip.c:1465 ++#, c-format ++msgid "cannot get section count: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1292 ../src/unstrip.c:1384 ++#, c-format ++msgid "cannot read section header string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1444 ++#, c-format ++msgid "cannot add new section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1547 ++#, c-format ++msgid "symbol [%Zu] has invalid section index" ++msgstr "" ++ ++#: ../src/unstrip.c:1799 ++#, c-format ++msgid "cannot get ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1826 ++#, c-format ++msgid "cannot update program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1831 ../src/unstrip.c:1910 ++#, c-format ++msgid "cannot write output file: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1879 ++#, c-format ++msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1882 ++#, c-format ++msgid "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1901 ../src/unstrip.c:1941 ../src/unstrip.c:1953 ++#: ../src/unstrip.c:2033 ++#, c-format ++msgid "cannot create ELF descriptor: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1959 ++#, c-format ++msgid "'%s' and '%s' do not seem to match" ++msgstr "" ++ ++#: ../src/unstrip.c:1990 ++#, c-format ++msgid "cannot find stripped file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1994 ++#, c-format ++msgid "cannot open stripped file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2009 ++#, c-format ++msgid "cannot find debug file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2013 ++#, c-format ++msgid "cannot open debug file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2026 ++#, c-format ++msgid "module '%s' file '%s' is not stripped" ++msgstr "" ++ ++#: ../src/unstrip.c:2057 ++#, c-format ++msgid "cannot cache section addresses for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2190 ++#, c-format ++msgid "no matching modules found" ++msgstr "" ++ ++#: ../src/unstrip.c:2199 ++#, c-format ++msgid "matched more than one module" ++msgstr "" ++ ++#: ../src/unstrip.c:2246 ++msgid "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++msgstr "" ++ ++#: ../src/unstrip.c:2247 ++msgid "" ++"Combine stripped files with separate symbols and debug information.\vThe " ++"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." ++msgstr "" ++ ++#: ../src/objdump.c:61 ++msgid "Mode selection:" ++msgstr "" ++ ++#: ../src/objdump.c:62 ++msgid "Display relocation information." ++msgstr "" ++ ++#: ../src/objdump.c:64 ++msgid "Display the full contents of all sections requested" ++msgstr "" ++ ++#: ../src/objdump.c:66 ++msgid "Display assembler code of executable sections" ++msgstr "" ++ ++#: ../src/objdump.c:68 ++msgid "Output option selection:" ++msgstr "" ++ ++#: ../src/objdump.c:70 ++msgid "Only display information for section NAME." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/objdump.c:76 ++msgid "Show information from FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/objdump.c:274 ../src/objdump.c:286 ++#, c-format ++msgid "while close `%s'" ++msgstr "" ++ ++#: ../src/objdump.c:510 ++#, c-format ++msgid "" ++"\n" ++"RELOCATION RECORDS FOR [%s]:\n" ++"%-*s TYPE VALUE\n" ++msgstr "" ++ ++#: ../src/objdump.c:513 ++msgid "OFFSET" ++msgstr "" ++ ++#: ../src/objdump.c:576 ++#, c-format ++msgid "Contents of section %s:\n" ++msgstr "" ++ ++#: ../src/objdump.c:676 ++#, c-format ++msgid "cannot disassemble" ++msgstr "" ++ +diff --git a/po/ja.po b/po/ja.po +new file mode 100644 +index 0000000..b20e799 +--- /dev/null ++++ b/po/ja.po +@@ -0,0 +1,5865 @@ ++# translation of ja.po to Japanese ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# ++# Kiyoto Hashida , 2009. ++# Hyu_gabaru Ryu_ichi , 2009. ++msgid "" ++msgstr "" ++"Project-Id-Version: ja\n" ++"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" ++"POT-Creation-Date: 2009-09-19 19:37+0000\n" ++"PO-Revision-Date: 2009-09-20 15:32+0900\n" ++"Last-Translator: Hyu_gabaru Ryu_ichi \n" ++"Language-Team: Japanese \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: KBabel 1.11.4\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: ../lib/xmalloc.c:51 ../lib/xmalloc.c:65 ../lib/xmalloc.c:79 ++#: ../src/readelf.c:2796 ../src/readelf.c:3135 ../src/unstrip.c:2086 ++#: ../src/unstrip.c:2294 ++#, c-format ++msgid "memory exhausted" ++msgstr "メモリー消費済み" ++ ++#: ../libelf/elf_error.c:81 ../libasm/asm_error.c:62 ../libdw/dwarf_error.c:79 ++msgid "no error" ++msgstr "エラー無し" ++ ++#: ../libelf/elf_error.c:84 ../libasm/asm_error.c:81 ../libdw/dwarf_error.c:80 ++msgid "unknown error" ++msgstr "不明なエラー" ++ ++#: ../libelf/elf_error.c:88 ++msgid "unknown version" ++msgstr "不明なバージョン" ++ ++#: ../libelf/elf_error.c:92 ++msgid "unknown type" ++msgstr "不明なタイプ" ++ ++#: ../libelf/elf_error.c:96 ++msgid "invalid `Elf' handle" ++msgstr "無効な `Elf' の処理" ++ ++#: ../libelf/elf_error.c:100 ++msgid "invalid size of source operand" ++msgstr "ソース演算子の大きさが無効" ++ ++#: ../libelf/elf_error.c:104 ++msgid "invalid size of destination operand" ++msgstr "宛先演算子の大きさが無効" ++ ++#: ../libelf/elf_error.c:108 ../src/readelf.c:4742 ++#, c-format ++msgid "invalid encoding" ++msgstr "無効なエンコード" ++ ++#: ../libelf/elf_error.c:112 ../libasm/asm_error.c:63 ++#: ../libdw/dwarf_error.c:88 ++msgid "out of memory" ++msgstr "メモリー不足" ++ ++#: ../libelf/elf_error.c:116 ++msgid "invalid file descriptor" ++msgstr "不当なファイル記述子" ++ ++#: ../libelf/elf_error.c:120 ++msgid "invalid operation" ++msgstr "不当な操作" ++ ++#: ../libelf/elf_error.c:124 ++msgid "ELF version not set" ++msgstr "ELF のバージョンが設定されていない" ++ ++#: ../libelf/elf_error.c:128 ../libelf/elf_error.c:176 ++#: ../libdw/dwarf_error.c:90 ++msgid "invalid command" ++msgstr "不当なコマンド" ++ ++#: ../libelf/elf_error.c:132 ../libelf/elf_error.c:192 ++msgid "offset out of range" ++msgstr "オフセットが範囲を越えている" ++ ++#: ../libelf/elf_error.c:136 ++msgid "invalid fmag field in archive header" ++msgstr "アーカイブヘッダーの不当な fmag 領域" ++ ++#: ../libelf/elf_error.c:140 ++msgid "invalid archive file" ++msgstr "不当なアーカイブファイル" ++ ++#: ../libelf/elf_error.c:144 ++msgid "descriptor is not for an archive" ++msgstr "記述子はアーカイブ用ではありません" ++ ++#: ../libelf/elf_error.c:148 ++msgid "no index available" ++msgstr "索引が使えません" ++ ++#: ../libelf/elf_error.c:152 ++msgid "cannot read data from file" ++msgstr "ファイルからデータを読みません" ++ ++#: ../libelf/elf_error.c:156 ++msgid "cannot write data to file" ++msgstr "ファイルへデータを書けません" ++ ++#: ../libelf/elf_error.c:160 ++msgid "invalid binary class" ++msgstr "不当なバイナリークラス" ++ ++#: ../libelf/elf_error.c:164 ++msgid "invalid section index" ++msgstr "不当なセクション索引" ++ ++#: ../libelf/elf_error.c:168 ++msgid "invalid operand" ++msgstr "不当なオペランド" ++ ++#: ../libelf/elf_error.c:172 ++msgid "invalid section" ++msgstr "不当なセクション" ++ ++#: ../libelf/elf_error.c:180 ++msgid "executable header not created first" ++msgstr "エクゼキュータブルヘッダーが最初に作られていません" ++ ++#: ../libelf/elf_error.c:184 ++msgid "file descriptor disabled" ++msgstr "ファイル記述子が機能しません" ++ ++#: ../libelf/elf_error.c:188 ++msgid "archive/member fildes mismatch" ++msgstr "アーカイブ/メンバー領域が不整合です" ++ ++#: ../libelf/elf_error.c:196 ++msgid "cannot manipulate null section" ++msgstr "null セクションを操作できません" ++ ++#: ../libelf/elf_error.c:200 ++msgid "data/scn mismatch" ++msgstr "データ/scnが不整合です" ++ ++#: ../libelf/elf_error.c:204 ++msgid "invalid section header" ++msgstr "不当なセクションヘッダー" ++ ++#: ../libelf/elf_error.c:208 ../src/readelf.c:6226 ../src/readelf.c:6327 ++#, c-format ++msgid "invalid data" ++msgstr "不当なデータ" ++ ++#: ../libelf/elf_error.c:212 ++msgid "unknown data encoding" ++msgstr "不明なデータエンコード" ++ ++#: ../libelf/elf_error.c:216 ++msgid "section `sh_size' too small for data" ++msgstr "`sh_size' セクションがデータには小さすぎます" ++ ++#: ../libelf/elf_error.c:220 ++msgid "invalid section alignment" ++msgstr "不当なセクション調整" ++ ++#: ../libelf/elf_error.c:224 ++msgid "invalid section entry size" ++msgstr "不当なセクション項目の大きさ" ++ ++#: ../libelf/elf_error.c:228 ++msgid "update() for write on read-only file" ++msgstr "読込み専用ファイルでの書込みのための update()" ++ ++#: ../libelf/elf_error.c:232 ++msgid "no such file" ++msgstr "そのようなファイルはありません" ++ ++#: ../libelf/elf_error.c:236 ++msgid "only relocatable files can contain section groups" ++msgstr "リロケータブルファイルのみセクショングループを含むことができます" ++ ++#: ../libelf/elf_error.c:241 ++msgid "" ++"program header only allowed in executables, shared objects, and core files" ++msgstr "" ++"プログラムヘッダーはエクゼキュータブルか、共用オブジェクト、コアファイルにの" ++"み認められています" ++ ++#: ../libelf/elf_error.c:248 ++msgid "file has no program header" ++msgstr "ファイルにプログラムヘッダーがありません" ++ ++#: ../libelf/elf_error.c:253 ../libdw/dwarf_error.c:112 ++msgid "invalid offset" ++msgstr "不当なオフセット" ++ ++#: ../libasm/asm_error.c:64 ../src/ldgeneric.c:2687 ++#, c-format ++msgid "cannot create output file" ++msgstr "出力ファイルを作成できません" ++ ++#: ../libasm/asm_error.c:65 ++msgid "invalid parameter" ++msgstr "不当なパラメーター" ++ ++#: ../libasm/asm_error.c:66 ++msgid "cannot change mode of output file" ++msgstr "出力ファイルのモードを変更できません" ++ ++#. Something went wrong. ++#: ../libasm/asm_error.c:67 ../src/ldgeneric.c:7001 ++#, c-format ++msgid "cannot rename output file" ++msgstr "出力ファイルの名前を変更できません" ++ ++#: ../libasm/asm_error.c:68 ++msgid "duplicate symbol" ++msgstr "重複シンボル" ++ ++#: ../libasm/asm_error.c:69 ++msgid "invalid section type for operation" ++msgstr "操作に不当なセクションタイプ" ++ ++#: ../libasm/asm_error.c:70 ++msgid "error during output of data" ++msgstr "データの出力中にエラー" ++ ++#: ../libasm/asm_error.c:71 ++msgid "no backend support available" ++msgstr "バックエンドサポートが利用できません" ++ ++#: ../libdw/dwarf_error.c:81 ++msgid "invalid access" ++msgstr "不当なアクセス" ++ ++#: ../libdw/dwarf_error.c:82 ++msgid "no regular file" ++msgstr "一般ファイルではありません" ++ ++#: ../libdw/dwarf_error.c:83 ++msgid "I/O error" ++msgstr "I/O エラー" ++ ++#: ../libdw/dwarf_error.c:84 ++msgid "invalid ELF file" ++msgstr "不当な ELF ファイル" ++ ++#: ../libdw/dwarf_error.c:85 ++msgid "no DWARF information" ++msgstr "DWARF 情報がありません" ++ ++#: ../libdw/dwarf_error.c:86 ++msgid "no ELF file" ++msgstr "ELF ファイルがありません" ++ ++#: ../libdw/dwarf_error.c:87 ++msgid "cannot get ELF header" ++msgstr "ELF ヘッダーを得られません" ++ ++#: ../libdw/dwarf_error.c:89 ++msgid "not implemented" ++msgstr "未実装" ++ ++#: ../libdw/dwarf_error.c:91 ++msgid "invalid version" ++msgstr "不当なバージョン" ++ ++#: ../libdw/dwarf_error.c:92 ++msgid "invalid file" ++msgstr "不当なファイル" ++ ++#: ../libdw/dwarf_error.c:93 ++msgid "no entries found" ++msgstr "項目が見つかりません" ++ ++#: ../libdw/dwarf_error.c:94 ++msgid "invalid DWARF" ++msgstr "不当な DWARF" ++ ++#: ../libdw/dwarf_error.c:95 ++msgid "no string data" ++msgstr "文字データがありません" ++ ++#: ../libdw/dwarf_error.c:96 ++msgid "no address value" ++msgstr "アドレス値ではありません" ++ ++#: ../libdw/dwarf_error.c:97 ++msgid "no constant value" ++msgstr "固定値ではありません" ++ ++#: ../libdw/dwarf_error.c:98 ++msgid "no reference value" ++msgstr "参照値がありません" ++ ++#: ../libdw/dwarf_error.c:99 ++msgid "invalid reference value" ++msgstr "不当な参照値" ++ ++#: ../libdw/dwarf_error.c:100 ++msgid ".debug_line section missing" ++msgstr ".debug_line セクションがありません" ++ ++#: ../libdw/dwarf_error.c:101 ++msgid "invalid .debug_line section" ++msgstr "不当な .debug_line セクション" ++ ++#: ../libdw/dwarf_error.c:102 ++msgid "debug information too big" ++msgstr "デバッグ情報が大きすぎます" ++ ++#: ../libdw/dwarf_error.c:103 ++msgid "invalid DWARF version" ++msgstr "不当な DWARF バージョン" ++ ++#: ../libdw/dwarf_error.c:104 ++msgid "invalid directory index" ++msgstr "不当なディレクトリー索引" ++ ++#: ../libdw/dwarf_error.c:105 ++msgid "address out of range" ++msgstr "アドレスが範囲外です" ++ ++#: ../libdw/dwarf_error.c:106 ++msgid "no location list value" ++msgstr "ロケーションリスト値ではありません" ++ ++#: ../libdw/dwarf_error.c:107 ++msgid "no block data" ++msgstr "ブロックデータではありません" ++ ++#: ../libdw/dwarf_error.c:108 ++msgid "invalid line index" ++msgstr "不当な行索引" ++ ++#: ../libdw/dwarf_error.c:109 ++msgid "invalid address range index" ++msgstr "不当なアドレス範囲索引" ++ ++#: ../libdw/dwarf_error.c:110 ++msgid "no matching address range" ++msgstr "アドレス範囲に対応しません" ++ ++#: ../libdw/dwarf_error.c:111 ++msgid "no flag value" ++msgstr "フラグ値がありません" ++ ++#: ../libdw/dwarf_error.c:113 ++msgid ".debug_ranges section missing" ++msgstr ".debug_ranges セクションがありません" ++ ++#: ../libdw/dwarf_error.c:114 ++msgid "invalid CFI section" ++msgstr "不当な CFI セクション" ++ ++#: ../libdwfl/argp-std.c:67 ../src/unstrip.c:2236 ++msgid "Input selection options:" ++msgstr "選択オプションを入力してください:" ++ ++#: ../libdwfl/argp-std.c:68 ++msgid "Find addresses in FILE" ++msgstr "ふぁいる 中のアドレスを探す" ++ ++#: ../libdwfl/argp-std.c:70 ++msgid "Find addresses from signatures found in COREFILE" ++msgstr "COREFILE 中で見つかった署名からアドレスを探す" ++ ++#: ../libdwfl/argp-std.c:72 ++msgid "Find addresses in files mapped into process PID" ++msgstr "プロセス PID に対応するファイル中のアドレスを探す" ++ ++#: ../libdwfl/argp-std.c:74 ++msgid "" ++"Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " ++"format" ++msgstr "" ++"Linux の /proc/PID/maps 形式の ふぁいる から読み込んだものに対応するファイル" ++"のアドレスを探す" ++ ++#: ../libdwfl/argp-std.c:76 ++msgid "Find addresses in the running kernel" ++msgstr "実行中のカーネルのアドレスを探す" ++ ++#: ../libdwfl/argp-std.c:78 ++msgid "Kernel with all modules" ++msgstr "全てのモジュール付きのカーネル" ++ ++#: ../libdwfl/argp-std.c:80 ++msgid "Search path for separate debuginfo files" ++msgstr "分離した debuginfo ファイルべきパスを探す" ++ ++#: ../libdwfl/argp-std.c:163 ++msgid "only one of -e, -p, -k, -K, or --core allowed" ++msgstr "-e か、-p、-k、-K、--core のひとつだけが認められます" ++ ++#: ../libdwfl/argp-std.c:223 ++#, c-format ++msgid "cannot read ELF core file: %s" ++msgstr "ELF コアファイルを読めません: %s" ++ ++#: ../libdwfl/argp-std.c:243 ++msgid "No modules recognized in core file" ++msgstr "コアファイルの中にモジュールを認識できません" ++ ++#: ../libdwfl/argp-std.c:255 ++msgid "cannot load kernel symbols" ++msgstr "カーネルシンボルをロードできません" ++ ++#. Non-fatal to have no modules since we do have the kernel. ++#: ../libdwfl/argp-std.c:259 ++msgid "cannot find kernel modules" ++msgstr "カーネルモジュールを見つけられません" ++ ++#: ../libdwfl/argp-std.c:273 ++msgid "cannot find kernel or modules" ++msgstr "カーネルかモジュールを見つけられません" ++ ++#: ../libebl/eblbackendname.c:63 ++msgid "No backend" ++msgstr "バックエンドがありません" ++ ++#: ../libebl/eblcorenotetypename.c:107 ../libebl/eblobjecttypename.c:78 ++#: ../libebl/eblobjnotetypename.c:86 ../libebl/eblosabiname.c:98 ++#: ../libebl/eblsectionname.c:110 ../libebl/eblsectiontypename.c:140 ++#: ../libebl/eblsegmenttypename.c:104 ++msgid "" ++msgstr "<不明>" ++ ++#: ../libebl/ebldynamictagname.c:126 ++#, c-format ++msgid ": %#" ++msgstr "<不明>: %#" ++ ++#: ../libebl/eblobjnote.c:76 ++#, c-format ++msgid " Build ID: " ++msgstr " ビルト ID: " ++ ++#: ../libebl/eblobjnote.c:88 ++msgid " Version String: " ++msgstr "バージョン文字列:" ++ ++#: ../libebl/eblobjnote.c:136 ++#, c-format ++msgid " OS: %s, ABI: " ++msgstr " OS: %s、ABI: " ++ ++#: ../libebl/eblosabiname.c:95 ++msgid "Stand alone" ++msgstr "スタンドアローン" ++ ++#: ../libebl/eblsymbolbindingname.c:92 ../libebl/eblsymboltypename.c:98 ++#, c-format ++msgid ": %d" ++msgstr "<不明>: %d" ++ ++#: ../src/ar.c:75 ++msgid "Commands:" ++msgstr "コマンド:" ++ ++#: ../src/ar.c:76 ++msgid "Delete files from archive." ++msgstr "アーカイブからファイルを削除。" ++ ++#: ../src/ar.c:77 ++msgid "Move files in archive." ++msgstr "アーカイブ内のファイルを移動。" ++ ++#: ../src/ar.c:78 ++msgid "Print files in archive." ++msgstr "アーカイブ内のファイルを印刷。" ++ ++#: ../src/ar.c:79 ++msgid "Quick append files to archive." ++msgstr "アーカイブへの即座のファイル追加。" ++ ++#: ../src/ar.c:81 ++msgid "Replace existing or insert new file into archive." ++msgstr "アーカイブへの既存のファイルの置き換えか、新しいファイルの挿入。" ++ ++#: ../src/ar.c:82 ++msgid "Display content of archive." ++msgstr "アーカイブの内容の表示" ++ ++#: ../src/ar.c:83 ++msgid "Extract files from archive." ++msgstr "アーカイブからのファイルの取出し" ++ ++#: ../src/ar.c:85 ++msgid "Command Modifiers:" ++msgstr "コマンド修飾子:" ++ ++#: ../src/ar.c:86 ++msgid "Preserve original dates." ++msgstr "元データの保存。" ++ ++#: ../src/ar.c:87 ++msgid "Use instance [COUNT] of name." ++msgstr "名前のインスタンス [COUNT] の使用。" ++ ++#: ../src/ar.c:89 ++msgid "Do not replace existing files with extracted files." ++msgstr "既存のファイルを抽出したファイルで置き換えない。" ++ ++#: ../src/ar.c:90 ++msgid "Allow filename to be truncated if necessary." ++msgstr "必要ならばファイル名の切り捨てを認める。" ++ ++#: ../src/ar.c:92 ++msgid "Provide verbose output." ++msgstr "饒舌な出力を提供する。" ++ ++#: ../src/ar.c:93 ++msgid "Force regeneration of symbol table." ++msgstr "シンボルテーブルの再生成を強制する。" ++ ++#: ../src/ar.c:94 ++msgid "Insert file after [MEMBER]." ++msgstr "[MEMBER]の後にファイルを挿入する。" ++ ++#: ../src/ar.c:95 ++msgid "Insert file before [MEMBER]." ++msgstr "[MEMBER]の前にファイルを挿入する。" ++ ++#: ../src/ar.c:96 ++msgid "Same as -b." ++msgstr "-b と同じ。" ++ ++#: ../src/ar.c:97 ++msgid "Suppress message when library has to be created." ++msgstr "ライブラリーを生成しなければならない時にメッセージを抑止する。" ++ ++#: ../src/ar.c:99 ++msgid "Use full path for file matching." ++msgstr "ファイル照合にフルパスを使う。" ++ ++#: ../src/ar.c:100 ++msgid "Update only older files in archive." ++msgstr "アーカイブの古いファイルのみ更新する。" ++ ++#. Short description of program. ++#: ../src/ar.c:106 ++msgid "Create, modify, and extract from archives." ++msgstr "アーカイブから作成や、修正、抽出する。" ++ ++#. Strings for arguments in help texts. ++#: ../src/ar.c:109 ++msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++msgstr "[メンバー] [合計] アーカイブ [ファイル...]" ++ ++#: ../src/ar.c:191 ++#, c-format ++msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" ++msgstr "'a'や、'b'、'i'は、'm' や 'r' オプションと一緒にしか指定できません" ++ ++#: ../src/ar.c:196 ++#, c-format ++msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" ++msgstr "'a'や、'b'、'i' 修飾子には MEMBER パラメーターが必要です" ++ ++#: ../src/ar.c:212 ++#, c-format ++msgid "'N' is only meaningful with the 'x' and 'd' options" ++msgstr "'N' は 'x' や 'd' オプションと一緒の時のみ意味を持ちます" ++ ++#: ../src/ar.c:217 ++#, c-format ++msgid "COUNT parameter required" ++msgstr "COUNT パラメーターが必要です" ++ ++#: ../src/ar.c:229 ++#, c-format ++msgid "invalid COUNT parameter %s" ++msgstr "不当な COUNT パラメーター %s" ++ ++#: ../src/ar.c:236 ++#, c-format ++msgid "'%c' is only meaningful with the 'x' option" ++msgstr "'%c' は 'x' オプションと一緒の時のみ意味を持ちます" ++ ++#: ../src/ar.c:242 ++#, c-format ++msgid "archive name required" ++msgstr "アーカイブ名が必要です" ++ ++#: ../src/ar.c:288 ../src/nm.c:253 ../src/readelf.c:442 ../src/size.c:219 ++#: ../src/strip.c:203 ../src/ld.c:957 ../src/elflint.c:238 ++#: ../src/addr2line.c:185 ../src/findtextrel.c:170 ../src/elfcmp.c:522 ++#: ../src/ranlib.c:136 ../src/strings.c:227 ../src/unstrip.c:233 ++#: ../src/objdump.c:181 ++#, 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 "" ++"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" ++ ++#: ../src/ar.c:293 ../src/nm.c:258 ../src/readelf.c:447 ../src/size.c:224 ++#: ../src/strip.c:208 ../src/ld.c:962 ../src/elflint.c:243 ++#: ../src/addr2line.c:190 ../src/findtextrel.c:175 ../src/elfcmp.c:527 ++#: ../src/ranlib.c:141 ../src/strings.c:232 ../src/unstrip.c:238 ++#: ../src/objdump.c:186 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "%s によって書かれました。\n" ++ ++#: ../src/ar.c:313 ++#, c-format ++msgid "More than one operation specified" ++msgstr "1つを越える操作が指定されました" ++ ++#: ../src/ar.c:403 ++#, c-format ++msgid "cannot open archive '%s'" ++msgstr "アーカイブ '%s' を開くことができません" ++ ++#: ../src/ar.c:413 ++#, c-format ++msgid "cannot open archive '%s': %s" ++msgstr "アーカイブ '%s' を開けません: %s" ++ ++#: ../src/ar.c:417 ++#, c-format ++msgid "%s: not an archive file" ++msgstr "%s: アーカイブファイルではありません" ++ ++#: ../src/ar.c:421 ++#, c-format ++msgid "cannot stat archive '%s'" ++msgstr "アーカイブに stat できません: '%s'" ++ ++#: ../src/ar.c:433 ++#, c-format ++msgid "no entry %s in archive\n" ++msgstr "アーカイブに項目 %s がありません\n" ++ ++#: ../src/ar.c:486 ../src/ar.c:928 ../src/ar.c:1128 ++#, c-format ++msgid "cannot create hash table" ++msgstr "ハッシュテーブルを生成できません" ++ ++#: ../src/ar.c:493 ../src/ar.c:935 ../src/ar.c:1137 ++#, c-format ++msgid "cannot insert into hash table" ++msgstr "ハッシュに挿入できません" ++ ++#: ../src/ar.c:501 ../src/ranlib.c:176 ++#, c-format ++msgid "cannot stat '%s'" ++msgstr "'%s' に stat できません" ++ ++#: ../src/ar.c:597 ++#, c-format ++msgid "cannot read content of %s: %s" ++msgstr "%s の内容を読むことができません: %s" ++ ++#: ../src/ar.c:640 ++#, c-format ++msgid "cannot open %.*s" ++msgstr "%.*s を開けません" ++ ++#: ../src/ar.c:662 ++#, c-format ++msgid "failed to write %s" ++msgstr "%s への書込みに失敗しました" ++ ++#: ../src/ar.c:674 ++#, c-format ++msgid "cannot change mode of %s" ++msgstr "%s のモードを変更できません" ++ ++#: ../src/ar.c:690 ++#, c-format ++msgid "cannot change modification time of %s" ++msgstr "%s の更新時間を変更できません" ++ ++#: ../src/ar.c:736 ++#, c-format ++msgid "cannot rename temporary file to %.*s" ++msgstr "一時ファイルを %.*s に名前変更できません" ++ ++#: ../src/ar.c:772 ../src/ar.c:1020 ../src/ar.c:1418 ../src/ranlib.c:250 ++#, c-format ++msgid "cannot create new file" ++msgstr "新しいファイルを生成できません" ++ ++#: ../src/ar.c:1219 ++#, c-format ++msgid "position member %s not found" ++msgstr "位置メンバー %s が見つかりません" ++ ++#: ../src/ar.c:1229 ++#, c-format ++msgid "%s: no entry %s in archive!\n" ++msgstr "%s: 項目 %s がアーカイブにありません!\n" ++ ++#: ../src/ar.c:1258 ../src/ldgeneric.c:519 ../src/objdump.c:257 ++#, c-format ++msgid "cannot open %s" ++msgstr "%s を開けません" ++ ++#: ../src/ar.c:1263 ++#, c-format ++msgid "cannot stat %s" ++msgstr "%s を stat できません" ++ ++#: ../src/ar.c:1269 ++#, c-format ++msgid "%s is no regular file" ++msgstr "%s は一般ファイルではありません" ++ ++#: ../src/ar.c:1282 ++#, c-format ++msgid "cannot get ELF descriptor for %s: %s\n" ++msgstr "%s の ELF 記述子を得られません: %s\n" ++ ++#: ../src/ar.c:1301 ++#, c-format ++msgid "cannot read %s: %s" ++msgstr "%s を読みません: %s" ++ ++#. The archive is too big. ++#: ../src/arlib.c:215 ++#, c-format ++msgid "the archive '%s' is too large" ++msgstr "アーカイブ '%s' は大きすぎます" ++ ++#: ../src/arlib.c:228 ++#, c-format ++msgid "cannot read ELF header of %s(%s): %s" ++msgstr "%s(%s) の ELF ヘッダーを読めません: %s" ++ ++#: ../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 "" ++"出力形式として FORMATを使う。FORMAT は `bsd'か、`sysv'、`posix' のどれか。省" ++"略値は `sysv'" ++ ++#: ../src/nm.c:92 ++msgid "Same as --format=bsd" ++msgstr "--format=bsd と同じ" ++ ++#: ../src/nm.c:93 ++msgid "Same as --format=posix" ++msgstr "--format=posix と同じ" ++ ++#: ../src/nm.c:94 ../src/size.c:72 ++msgid "Use RADIX for printing symbol values" ++msgstr "シンボル値を印刷するために RADIX を使う" ++ ++#: ../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 ../src/unstrip.c:80 ++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:75 ../src/findtextrel.c:75 ++#: ../src/elfcmp.c:75 ../src/strings.c:83 ++msgid "Miscellaneous:" ++msgstr "雑則:" ++ ++#. Short description of program. ++#: ../src/nm.c:108 ++msgid "List symbols from FILEs (a.out by default)." ++msgstr "ふぁいる からシンボルを表示 (デフォルトではa.out)。" ++ ++#. Strings for arguments in help texts. ++#: ../src/nm.c:111 ../src/size.c:92 ../src/strip.c:96 ../src/findtextrel.c:84 ++#: ../src/strings.c:92 ../src/objdump.c:80 ++msgid "[FILE...]" ++msgstr "[ふぁいる...]" ++ ++#: ../src/nm.c:136 ../src/size.c:117 ../src/strip.c:120 ../src/objdump.c:105 ++#, c-format ++msgid "%s: INTERNAL ERROR %d (%s-%s): %s" ++msgstr "%s: 内部エラー %d (%s-%s): %s" ++ ++#: ../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:229 ++#: ../src/elfcmp.c:574 ../src/ranlib.c:169 ../src/strings.c:183 ++#: ../src/unstrip.c:1899 ../src/unstrip.c:1928 ++#, c-format ++msgid "cannot open '%s'" ++msgstr "'%s' を開けません" ++ ++#: ../src/nm.c:380 ../src/nm.c:392 ../src/size.c:317 ../src/size.c:326 ++#: ../src/size.c:337 ../src/strip.c:1815 ++#, c-format ++msgid "while closing '%s'" ++msgstr "'%s' を閉じている最中" ++ ++#: ../src/nm.c:402 ../src/strip.c:358 ../src/objdump.c:296 ++#, c-format ++msgid "%s: File format not recognized" ++msgstr "%s: ファイル形式を認識できませんでした" ++ ++#. Note: 0 is no valid offset. ++#: ../src/nm.c:442 ++msgid "" ++"\n" ++"Archive index:" ++msgstr "" ++"\n" ++"アーカイブ索引:" ++ ++#: ../src/nm.c:451 ++#, c-format ++msgid "invalid offset %zu for symbol %s" ++msgstr "シンボル %2$sの不正なオフセット %1$zu " ++ ++#: ../src/nm.c:456 ++#, c-format ++msgid "%s in %s\n" ++msgstr "%2$s の中の %1$s\n" ++ ++#: ../src/nm.c:464 ++#, c-format ++msgid "cannot reset archive offset to beginning" ++msgstr "アーカイブのオフセットを最初にリセットできません" ++ ++#: ../src/nm.c:488 ../src/objdump.c:344 ++#, c-format ++msgid "%s%s%s: file format not recognized" ++msgstr "%s%s%s: ファイル形式を認識できません" ++ ++#: ../src/nm.c:700 ++#, c-format ++msgid "cannot create search tree" ++msgstr "検索ツリーを生成できません" ++ ++#: ../src/nm.c:740 ../src/nm.c:1002 ../src/readelf.c:860 ../src/readelf.c:1003 ++#: ../src/readelf.c:1144 ../src/readelf.c:1326 ../src/readelf.c:1524 ++#: ../src/readelf.c:1710 ../src/readelf.c:1920 ../src/readelf.c:2174 ++#: ../src/readelf.c:2240 ../src/readelf.c:2318 ../src/readelf.c:2815 ++#: ../src/readelf.c:2851 ../src/readelf.c:2913 ../src/readelf.c:6476 ++#: ../src/readelf.c:7329 ../src/readelf.c:7474 ../src/readelf.c:7543 ++#: ../src/size.c:425 ../src/size.c:499 ../src/strip.c:482 ../src/objdump.c:744 ++#, 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 "" ++"\n" ++"\n" ++"%s からのシンボル:\n" ++"\n" ++ ++#: ../src/nm.c:768 ++#, c-format ++msgid "" ++"\n" ++"\n" ++"Symbols from %s[%s]:\n" ++"\n" ++msgstr "" ++"\n" ++"\n" ++"%s[%s]からのシンボル:\n" ++"\n" ++ ++#. The header line. ++#: ../src/nm.c:771 ++#, c-format ++msgid "" ++"%*s%-*s %-*s Class Type %-*s %*s Section\n" ++"\n" ++msgstr "" ++"%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n" ++"\n" ++ ++#: ../src/nm.c:1012 ++#, c-format ++msgid "%s: entry size in section `%s' is not what we expect" ++msgstr "%s: セクションの項目の大きさ `%s' は予期したものとは異なります" ++ ++#: ../src/nm.c:1016 ++#, c-format ++msgid "%s: size of section `%s' is not multiple of entry size" ++msgstr "%s: セクション `%s' の大きさは項目の大きさの整数倍ではありません" ++ ++#. XXX Add machine specific object file types. ++#: ../src/nm.c:1255 ++#, c-format ++msgid "%s%s%s%s: Invalid operation" ++msgstr "%s%s%s%s: 不当な操作" ++ ++#: ../src/nm.c:1312 ++#, c-format ++msgid "%s%s%s: no symbols" ++msgstr "%s%s%s: シンボルがありません" ++ ++#: ../src/readelf.c:73 ++msgid "Equivalent to: -e -h -l" ++msgstr "右記と同等: -e -h -l" ++ ++#: ../src/readelf.c:74 ++msgid "Display the dynamic segment" ++msgstr "動的セグメントを表示" ++ ++#: ../src/readelf.c:75 ++msgid "Display the ELF file header" ++msgstr "ELF ファイルヘッダーを表示" ++ ++#: ../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, macinfo, or exception" ++msgstr "" ++"DWARF セクションの内容を表示。SECTION は addrevか、aranges、frame、info、" ++"loc、ranges、pubnames、str、macinfo、exception のいずれかです" ++ ++#: ../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:99 ++msgid "Display sections for exception handling" ++msgstr "例外を取り扱うためのセクションを表示" ++ ++#: ../src/readelf.c:102 ++msgid "Output control:" ++msgstr "出力制御:" ++ ++#: ../src/readelf.c:104 ++msgid "Do not find symbol names for addresses in DWARF data" ++msgstr "DWARFデータ中のアドレスのためのシンボル名を探さない" ++ ++#. Short description of program. ++#: ../src/readelf.c:110 ++msgid "Print information from ELF file in human-readable form." ++msgstr "ELF ファイルから人間が読める形で情報を印刷する。" ++ ++#. Strings for arguments in help texts. ++#: ../src/readelf.c:114 ../src/elflint.c:85 ++msgid "FILE..." ++msgstr "ふぁいる..." ++ ++#: ../src/readelf.c:266 ../src/elflint.c:158 ++#, c-format ++msgid "cannot open input file" ++msgstr "入力ファイルを開けません" ++ ++#: ../src/readelf.c:394 ++#, c-format ++msgid "Unknown DWARF debug section `%s'.\n" ++msgstr "不明な DWARF デバッグセクション `%s'.\n" ++ ++#: ../src/readelf.c:418 ../src/elflint.c:222 ++msgid "Missing file name.\n" ++msgstr "ファイル名がありません。\n" ++ ++#: ../src/readelf.c:423 ../src/objdump.c:236 ++msgid "No operation specified.\n" ++msgstr "操作が指定されていません。\n" ++ ++#: ../src/readelf.c:458 ++#, c-format ++msgid "cannot generate Elf descriptor: %s" ++msgstr "Elf 記述子を生成できません: %s" ++ ++#: ../src/readelf.c:470 ++#, c-format ++msgid "'%s' is not an archive, cannot print archive index" ++msgstr "'%s' はアーカイブではなく、アーカイブ索引を印刷できません" ++ ++#: ../src/readelf.c:475 ++#, c-format ++msgid "error while closing Elf descriptor: %s" ++msgstr "Elf 記述子を閉じている時にエラー: %s" ++ ++#: ../src/readelf.c:567 ++#, c-format ++msgid "cannot stat input file" ++msgstr "入力ファイルを stat できません" ++ ++#: ../src/readelf.c:569 ++#, c-format ++msgid "input file is empty" ++msgstr "入力ファイルが空です" ++ ++#: ../src/readelf.c:571 ++#, c-format ++msgid "failed reading '%s': %s" ++msgstr "'%s' の読込みに失敗: %s" ++ ++#: ../src/readelf.c:606 ++#, c-format ++msgid "cannot read ELF header: %s" ++msgstr "ELF ヘッダーが読めません: %s" ++ ++#: ../src/readelf.c:614 ++#, c-format ++msgid "cannot create EBL handle" ++msgstr "EBL ヘッダーを生成できません" ++ ++#: ../src/readelf.c:621 ../src/strip.c:542 ../src/ldgeneric.c:661 ++#: ../src/ldgeneric.c:1122 ++#, c-format ++msgid "cannot determine number of sections: %s" ++msgstr "セクション数を決定できません: %s" ++ ++#: ../src/readelf.c:707 ++msgid "NONE (None)" ++msgstr "なし (なし)" ++ ++#: ../src/readelf.c:708 ++msgid "REL (Relocatable file)" ++msgstr "REL (リロケータブルファイル)" ++ ++#: ../src/readelf.c:709 ++msgid "EXEC (Executable file)" ++msgstr "(EXEC (実行ファイル)" ++ ++#: ../src/readelf.c:710 ++msgid "DYN (Shared object file)" ++msgstr "DYN (共用オブジェクトファイル)" ++ ++#: ../src/readelf.c:711 ++msgid "CORE (Core file)" ++msgstr "CORE (コアファイル)" ++ ++#: ../src/readelf.c:716 ++#, c-format ++msgid "OS Specific: (%x)\n" ++msgstr "OS 固有: (%x)\n" ++ ++#. && e_type <= ET_HIPROC always true ++#: ../src/readelf.c:718 ++#, c-format ++msgid "Processor Specific: (%x)\n" ++msgstr "プロセッサー固有: (%x)\n" ++ ++#: ../src/readelf.c:728 ++msgid "" ++"ELF Header:\n" ++" Magic: " ++msgstr "" ++"ELF ヘッダー:\n" ++" マジック: " ++ ++#: ../src/readelf.c:732 ++#, c-format ++msgid "" ++"\n" ++" Class: %s\n" ++msgstr "" ++"\n" ++" クラス: %s\n" ++ ++#: ../src/readelf.c:737 ++#, c-format ++msgid " Data: %s\n" ++msgstr " データ: %s\n" ++ ++#: ../src/readelf.c:743 ++#, c-format ++msgid " Ident Version: %hhd %s\n" ++msgstr " 識別バージョン: %hhd %s\n" ++ ++#: ../src/readelf.c:745 ../src/readelf.c:762 ++msgid "(current)" ++msgstr "(現在)" ++ ++#: ../src/readelf.c:749 ++#, c-format ++msgid " OS/ABI: %s\n" ++msgstr " OS/ABI: %s\n" ++ ++#: ../src/readelf.c:752 ++#, c-format ++msgid " ABI Version: %hhd\n" ++msgstr " ABI バージョン: %hhd\n" ++ ++#: ../src/readelf.c:755 ++msgid " Type: " ++msgstr " タイプ: " ++ ++#: ../src/readelf.c:758 ++#, c-format ++msgid " Machine: %s\n" ++msgstr " マシン : %s\n" ++ ++#: ../src/readelf.c:760 ++#, c-format ++msgid " Version: %d %s\n" ++msgstr " バージョン: %d %s\n" ++ ++#: ../src/readelf.c:764 ++#, c-format ++msgid " Entry point address: %#\n" ++msgstr " 入口点アドレス : %#\n" ++ ++#: ../src/readelf.c:767 ++#, c-format ++msgid " Start of program headers: % %s\n" ++msgstr " プログラムヘッダーの開始: % %s\n" ++ ++#: ../src/readelf.c:768 ../src/readelf.c:771 ++msgid "(bytes into file)" ++msgstr "(ファイルへのバイト数)" ++ ++#: ../src/readelf.c:770 ++#, c-format ++msgid " Start of section headers: % %s\n" ++msgstr " セクションヘッダーの開始: % %s\n" ++ ++#: ../src/readelf.c:773 ++#, c-format ++msgid " Flags: %s\n" ++msgstr " フラグ: %s\n" ++ ++#: ../src/readelf.c:776 ++#, c-format ++msgid " Size of this header: % %s\n" ++msgstr " このヘッダーの大きさ: % %s\n" ++ ++#: ../src/readelf.c:777 ../src/readelf.c:780 ../src/readelf.c:786 ++msgid "(bytes)" ++msgstr "(バイト)" ++ ++#: ../src/readelf.c:779 ++#, c-format ++msgid " Size of program header entries: % %s\n" ++msgstr " プログラムヘッダー項目の大きさ:% %s\n" ++ ++#: ../src/readelf.c:782 ++#, c-format ++msgid " Number of program headers entries: %\n" ++msgstr " プログラムヘッダー項目の数 : %\n" ++ ++#: ../src/readelf.c:785 ++#, c-format ++msgid " Size of section header entries: % %s\n" ++msgstr " セクションヘッダー項目の大きさ:% %s\n" ++ ++#: ../src/readelf.c:788 ++#, c-format ++msgid " Number of section headers entries: %" ++msgstr " セクションヘッダー項目の数 : %" ++ ++#: ../src/readelf.c:795 ++#, c-format ++msgid " (% in [0].sh_size)" ++msgstr " ([0].sh_size の %)" ++ ++#: ../src/readelf.c:798 ../src/readelf.c:812 ++msgid " ([0] not available)" ++msgstr "([0]は使えません)" ++ ++#. We managed to get the zeroth section. ++#: ../src/readelf.c:808 ++#, c-format ++msgid " (% in [0].sh_link)" ++msgstr "([0].sh_link の %)" ++ ++#: ../src/readelf.c:816 ++#, c-format ++msgid "" ++" Section header string table index: XINDEX%s\n" ++"\n" ++msgstr "" ++" セクションヘッダー文字列テーブル索引: XINDEX%s\n" ++"\n" ++ ++#: ../src/readelf.c:820 ++#, c-format ++msgid "" ++" Section header string table index: %\n" ++"\n" ++msgstr "" ++" セクションヘッダー文字列テーブル索引: %\n" ++"\n" ++ ++#: ../src/readelf.c:852 ++#, c-format ++msgid "" ++"There are %d section headers, starting at offset %#:\n" ++"\n" ++msgstr "" ++"オフセット %2$# から始まる %1$d 個のセクションヘッダーがあります:\n" ++"\n" ++ ++#: ../src/readelf.c:862 ++msgid "Section Headers:" ++msgstr "セクションヘッダー:" ++ ++#: ../src/readelf.c:865 ++msgid "" ++"[Nr] Name Type Addr Off Size ES Flags Lk " ++"Inf Al" ++msgstr "" ++"[番] 名前 タイプ アドレス オフセ 大きさ ES フラグLk " ++"Inf Al" ++ ++#: ../src/readelf.c:867 ++msgid "" ++"[Nr] Name Type Addr Off Size ES " ++"Flags Lk Inf Al" ++msgstr "" ++"[番] 名前 タイプ アドレス オフセ 大きさ ES " ++"フラグLk Inf Al" ++ ++#: ../src/readelf.c:874 ../src/readelf.c:1027 ++#, c-format ++msgid "cannot get section: %s" ++msgstr "セクションを得られません: %s" ++ ++#: ../src/readelf.c:881 ../src/readelf.c:1035 ../src/readelf.c:7494 ++#: ../src/unstrip.c:352 ../src/unstrip.c:376 ../src/unstrip.c:426 ++#: ../src/unstrip.c:535 ../src/unstrip.c:552 ../src/unstrip.c:590 ++#: ../src/unstrip.c:788 ../src/unstrip.c:1056 ../src/unstrip.c:1243 ++#: ../src/unstrip.c:1304 ../src/unstrip.c:1426 ../src/unstrip.c:1479 ++#: ../src/unstrip.c:1587 ../src/unstrip.c:1777 ++#, c-format ++msgid "cannot get section header: %s" ++msgstr "セクションヘッダーを得られません: %s" ++ ++#: ../src/readelf.c:939 ++msgid "Program Headers:" ++msgstr "プログラムヘッダー:" ++ ++#: ../src/readelf.c:941 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr "" ++" タイプ オフセ 仮アドレス 物アドレス ファイ量 メモ量 Flg 調整 " ++ ++#: ../src/readelf.c:944 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz " ++"MemSiz Flg Align" ++msgstr "" ++" タイプ オフセ 仮想アドレス 物理アドレス ファイル量メモ" ++"量 Flg 調整 " ++ ++#: ../src/readelf.c:984 ++#, c-format ++msgid "\t[Requesting program interpreter: %s]\n" ++msgstr "\t[プログラム割込みを要求: %s]\n" ++ ++#: ../src/readelf.c:1005 ++msgid "" ++"\n" ++" Section to Segment mapping:\n" ++" Segment Sections..." ++msgstr "" ++"\n" ++" セクションからセグメントへのマッビング:\n" ++" セグメント セクション..." ++ ++#: ../src/readelf.c:1016 ../src/unstrip.c:1823 ../src/unstrip.c:1862 ++#: ../src/unstrip.c:1869 ++#, c-format ++msgid "cannot get program header: %s" ++msgstr "プログラムヘッダーを得られません: %s" ++ ++#: ../src/readelf.c:1150 ++#, 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] "" ++"\n" ++"署名 '%3$s' を持つ COMDAT セクショングループ [%1$2zu] '%2$s' には %4$zu 個の" ++"項目があります:\n" ++ ++#: ../src/readelf.c:1155 ++#, 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] "" ++"\n" ++"署名 '%3$s' を持つセクショングループ [%1$2zu] '%2$s' には %4$zu 個の項目があ" ++"ります:\n" ++ ++#: ../src/readelf.c:1163 ++msgid "" ++msgstr "<不当なシンボル>" ++ ++#: ../src/readelf.c:1177 ++msgid "" ++msgstr "<不当なセクション>" ++ ++#: ../src/readelf.c:1328 ++#, c-format ++msgid "" ++"\n" ++"Dynamic segment contains %lu entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Dynamic segment contains %lu entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++"\n" ++"動的セグメントには %lu 個の項目があります:\n" ++" アドレス: %#0* オフセット: %#08 セクションへのリンク: [%" ++"2u] '%s'\n" ++ ++#: ../src/readelf.c:1340 ++msgid " Type Value\n" ++msgstr " タイプ 値\n" ++ ++#: ../src/readelf.c:1364 ++#, c-format ++msgid "Shared library: [%s]\n" ++msgstr "共用ライブラリー: [%s]\n" ++ ++#: ../src/readelf.c:1369 ++#, c-format ++msgid "Library soname: [%s]\n" ++msgstr "ライブラリー so 名: [%s]\n" ++ ++#: ../src/readelf.c:1374 ++#, c-format ++msgid "Library rpath: [%s]\n" ++msgstr "ライブラリー rパス: [%s]\n" ++ ++#: ../src/readelf.c:1379 ++#, c-format ++msgid "Library runpath: [%s]\n" ++msgstr "ライブラリー run パス: [%s]\n" ++ ++#: ../src/readelf.c:1399 ++#, c-format ++msgid "% (bytes)\n" ++msgstr "% (バイト)\n" ++ ++#: ../src/readelf.c:1509 ../src/readelf.c:1695 ++#, c-format ++msgid "" ++"\n" ++"Invalid symbol table at offset %#0\n" ++msgstr "" ++"\n" ++"オフセット %#0 に不当なシンボルテーブル\n" ++ ++#: ../src/readelf.c:1527 ../src/readelf.c:1712 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entries:\n" ++msgstr[0] "" ++"\n" ++"オフセット %5$#0 のセクション [%3$2u] '%4$s' 用のリロケーションセク" ++"ション [%1$2zu] '%2$s' には %6$d 個の項目があります:\n" ++ ++#. 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. ++#: ../src/readelf.c:1542 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++"\n" ++"オフセット %3$#0 のリロケーションセクション [%1$2u] '%2$s' には %4$d " ++"個の項目があります:\n" ++ ++#: ../src/readelf.c:1552 ++msgid " Offset Type Value Name\n" ++msgstr " オフセット タイプ 値 名前\n" ++ ++#: ../src/readelf.c:1554 ++msgid " Offset Type Value Name\n" ++msgstr " オフセット タイプ 値 名前\n" ++ ++#: ../src/readelf.c:1607 ../src/readelf.c:1618 ../src/readelf.c:1631 ++#: ../src/readelf.c:1649 ../src/readelf.c:1661 ../src/readelf.c:1780 ++#: ../src/readelf.c:1792 ../src/readelf.c:1806 ../src/readelf.c:1825 ++#: ../src/readelf.c:1838 ++msgid "" ++msgstr "<不当なRELOC>" ++ ++#: ../src/readelf.c:1619 ../src/readelf.c:1793 ../src/objdump.c:379 ++msgid "INVALID SYMBOL" ++msgstr "不当なシンボル" ++ ++#: ../src/readelf.c:1650 ../src/readelf.c:1826 ../src/objdump.c:394 ++msgid "INVALID SECTION" ++msgstr "不当なセクション" ++ ++#: ../src/readelf.c:1724 ++msgid " Offset Type Value Addend Name\n" ++msgstr " オフセット タイプ 値 付加名\n" ++ ++#: ../src/readelf.c:1726 ++msgid " Offset Type Value Addend Name\n" ++msgstr " オフセット タイプ 値 付加名\n" ++ ++#: ../src/readelf.c:1927 ++#, 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] "" ++"\n" ++"シンボルテーブル [%2u] '%s' には %u 個の項目があります:\n" ++ ++#: ../src/readelf.c:1933 ++#, c-format ++msgid " %lu local symbol String table: [%2u] '%s'\n" ++msgid_plural " %lu local symbols String table: [%2u] '%s'\n" ++msgstr[0] " %lu ローカルシンボル文字列テーブル: [%2u] '%s'\n" ++ ++#: ../src/readelf.c:1943 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" ++ ++#: ../src/readelf.c:1945 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" ++ ++#: ../src/readelf.c:1965 ++#, c-format ++msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++ ++#: ../src/readelf.c:2053 ++#, c-format ++msgid "bad dynamic symbol" ++msgstr "不正な動的シンボル" ++ ++#: ../src/readelf.c:2135 ++msgid "none" ++msgstr "なし" ++ ++#: ../src/readelf.c:2152 ++msgid "| " ++msgstr "| <不明>" ++ ++#: ../src/readelf.c:2177 ++#, c-format ++msgid "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++"\n" ++"セクション [%2u] '%s' を必要とするバージョンには %d 個の項目があります:\n" ++" アドレス: %#0* オフセット: %#08 セクションへのリンク: [%" ++"2u] '%s'\n" ++ ++#: ../src/readelf.c:2200 ++#, c-format ++msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" ++msgstr " %#06x: バージョン: %hu ファイル: %s 数: %hu\n" ++ ++#: ../src/readelf.c:2213 ++#, c-format ++msgid " %#06x: Name: %s Flags: %s Version: %hu\n" ++msgstr " %#06x: 名前: %s フラグ: %s バージョン: %hu\n" ++ ++#: ../src/readelf.c:2244 ++#, c-format ++msgid "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++"\n" ++"バージョン定義セクション [%2u] '%s' には %d 個の項目があります:\n" ++" アドレス: %#0* オフセット: %#08 セクションへのリンク: [%" ++"2u] '%s'\n" ++ ++#: ../src/readelf.c:2274 ++#, c-format ++msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" ++msgstr " %#06x: バージョン: %hd フラグ: %s 索引: %hd 数: %hd 名前: %s\n" ++ ++#: ../src/readelf.c:2289 ++#, c-format ++msgid " %#06x: Parent %d: %s\n" ++msgstr " %#06x: 親 %d: %s\n" ++ ++#: ../src/readelf.c:2521 ++#, c-format ++msgid "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgid_plural "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgstr[0] "" ++"\n" ++"バージョンシンボルセクション [%2u] '%s' には %d 個の項目があります:\n" ++" アドレス: %#0* オフセット: %#08 セクションへのリンク: [%" ++"2u] '%s'" ++ ++#: ../src/readelf.c:2551 ++msgid " 0 *local* " ++msgstr " 0 *ローカル* " ++ ++#: ../src/readelf.c:2556 ++msgid " 1 *global* " ++msgstr " 1 *グローバル* " ++ ++#: ../src/readelf.c:2587 ++#, c-format ++msgid "" ++"\n" ++"Histogram for bucket list length in section [%2u] '%s' (total of %d " ++"bucket):\n" ++" Addr: %#0* Offset: %#08 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* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++"\n" ++"セクション [%2u] '%s' のバケット一覧の長さの柱状図(合計 %d バケット):\n" ++" アドレス: %#0* オフセット: %#08 セクションへのリンク: [%" ++"2u] '%s'\n" ++ ++#: ../src/readelf.c:2610 ++#, fuzzy, c-format ++msgid " Length Number % of total Coverage\n" ++msgstr " 長さ 数 全体の% 範囲 \n" ++ ++#: ../src/readelf.c:2612 ++#, c-format ++msgid " 0 %6 %5.1f%%\n" ++msgstr " 0 %6 %5.1f%%\n" ++ ++#: ../src/readelf.c:2619 ++#, c-format ++msgid "%7d %6 %5.1f%% %5.1f%%\n" ++msgstr "%7d %6 %5.1f%% %5.1f%%\n" ++ ++#: ../src/readelf.c:2632 ++#, c-format ++msgid "" ++" Average number of tests: successful lookup: %f\n" ++" unsuccessful lookup: %f\n" ++msgstr "" ++" テストの平均数: 検索成功: %f\n" ++" 検索失敗: %f\n" ++ ++#: ../src/readelf.c:2650 ../src/readelf.c:2692 ../src/readelf.c:2733 ++#, c-format ++msgid "cannot get data for section %d: %s" ++msgstr "セクションからデータを得られません %d: %s" ++ ++#: ../src/readelf.c:2787 ++#, c-format ++msgid "" ++" Symbol Bias: %u\n" ++" Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" ++msgstr "" ++" シンボルの偏り: %u\n" ++" ビットマスクの大きさ: %zu バイト %%% ビット設定 第2ハッシュシフ" ++"ト: %u\n" ++ ++#: ../src/readelf.c:2861 ++#, c-format ++msgid "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++"\n" ++"オフセット %3$#0 のライブラリー一覧セクション [%1$2zu] '%2$s' には %4" ++"$d 個の項目があります:\n" ++ ++#: ../src/readelf.c:2875 ++msgid "" ++" Library Time Stamp Checksum Version " ++"Flags" ++msgstr "" ++" ライブラリー タイムスタンプ チェックサム バー" ++"ジョン フラグ" ++ ++#: ../src/readelf.c:2925 ++#, c-format ++msgid "" ++"\n" ++"Object attributes section [%2zu] '%s' of % bytes at offset %" ++"#0:\n" ++msgstr "" ++"\n" ++"オフセット %4$#0 の %3$ バイトのオブジェクト属性セクション [%" ++"1$2zu] '%2$s':\n" ++ ++#: ../src/readelf.c:2941 ++msgid " Owner Size\n" ++msgstr " 所有者 大きさ\n" ++ ++#: ../src/readelf.c:2967 ++#, c-format ++msgid " %-13s %4\n" ++msgstr " %-13s %4\n" ++ ++#: ../src/readelf.c:2999 ++#, c-format ++msgid " %-4u %12\n" ++msgstr " %-4u %12\n" ++ ++#. Tag_File ++#: ../src/readelf.c:3004 ++#, c-format ++msgid " File: %11\n" ++msgstr " ファイル: %11\n" ++ ++#: ../src/readelf.c:3039 ++#, c-format ++msgid " %s: %, %s\n" ++msgstr " %s: %、%s\n" ++ ++#: ../src/readelf.c:3042 ++#, c-format ++msgid " %s: %\n" ++msgstr " %s: %\n" ++ ++#: ../src/readelf.c:3045 ++#, c-format ++msgid " %s: %s\n" ++msgstr " %s: %s\n" ++ ++#: ../src/readelf.c:3052 ++#, c-format ++msgid " %u: %\n" ++msgstr " %u: %\n" ++ ++#: ../src/readelf.c:3055 ++#, c-format ++msgid " %u: %s\n" ++msgstr " %u: %s\n" ++ ++#: ../src/readelf.c:3091 ++#, c-format ++msgid "%s+%# <%s+%#>" ++msgstr "%s+%# <%s+%#>" ++ ++#: ../src/readelf.c:3094 ++#, c-format ++msgid "%s+%#0* <%s+%#>" ++msgstr "%s+%#0* <%s+%#>" ++ ++#: ../src/readelf.c:3099 ++#, c-format ++msgid "%# <%s+%#>" ++msgstr "%# <%s+%#>" ++ ++#: ../src/readelf.c:3102 ++#, c-format ++msgid "%#0* <%s+%#>" ++msgstr "%#0* <%s+%#>" ++ ++#: ../src/readelf.c:3108 ++#, c-format ++msgid "%s+%# <%s>" ++msgstr "%s+%# <%s>" ++ ++#: ../src/readelf.c:3111 ++#, c-format ++msgid "%s+%#0* <%s>" ++msgstr "%s+%#0* <%s>" ++ ++#: ../src/readelf.c:3115 ++#, c-format ++msgid "%# <%s>" ++msgstr "%# <%s>" ++ ++#: ../src/readelf.c:3118 ++#, c-format ++msgid "%#0* <%s>" ++msgstr "%#0* <%s>" ++ ++#: ../src/readelf.c:3123 ++#, c-format ++msgid "%s+%#" ++msgstr "%s+%#" ++ ++#: ../src/readelf.c:3126 ++#, c-format ++msgid "%s+%#0*" ++msgstr "%s+%#0*" ++ ++#: ../src/readelf.c:3234 ++#, c-format ++msgid "unknown tag %hx" ++msgstr "不明なタグ %hx" ++ ++#: ../src/readelf.c:3236 ++#, c-format ++msgid "unknown user tag %hx" ++msgstr "不明な利用者タグ %hx" ++ ++#: ../src/readelf.c:3446 ++#, c-format ++msgid "unknown attribute %hx" ++msgstr "不明な属性 %hx" ++ ++#: ../src/readelf.c:3449 ++#, c-format ++msgid "unknown user attribute %hx" ++msgstr "不明な利用者属性 %hx" ++ ++#: ../src/readelf.c:3495 ++#, c-format ++msgid "unknown form %" ++msgstr "不明な様式 %" ++ ++#: ../src/readelf.c:3729 ++msgid "empty block" ++msgstr "空ブロック" ++ ++#: ../src/readelf.c:3732 ++#, c-format ++msgid "%zu byte block:" ++msgstr "%zu バイトのブロック:" ++ ++#: ../src/readelf.c:4141 ++#, c-format ++msgid "%*s[%4] %s \n" ++msgstr "%*s[%4] %s \n" ++ ++#: ../src/readelf.c:4154 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [ Code]\n" ++msgstr "" ++"\n" ++"オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" ++" [ コード]\n" ++ ++#: ../src/readelf.c:4161 ++#, c-format ++msgid "" ++"\n" ++"Abbreviation section at offset %:\n" ++msgstr "" ++"\n" ++"オフセット % の略語セクション:\n" ++ ++#: ../src/readelf.c:4174 ++#, c-format ++msgid " *** error while reading abbreviation: %s\n" ++msgstr " *** 略語を読んでいる間にエラー: %s\n" ++ ++#: ../src/readelf.c:4190 ++#, c-format ++msgid " [%5u] offset: %, children: %s, tag: %s\n" ++msgstr " [%5u] オフセット: %、子: %s、タグ: %s\n" ++ ++#: ../src/readelf.c:4193 ++msgid "yes" ++msgstr "はい" ++ ++#: ../src/readelf.c:4193 ++msgid "no" ++msgstr "いいえ" ++ ++#: ../src/readelf.c:4229 ++#, c-format ++msgid "cannot get .debug_aranges content: %s" ++msgstr ".debug_aragnes の内容を得られません: %s" ++ ++#: ../src/readelf.c:4234 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entry:\n" ++msgid_plural "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entries:\n" ++msgstr[0] "" ++"\n" ++"オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" ++"目があります:\n" ++ ++#: ../src/readelf.c:4264 ++#, c-format ++msgid " [%*zu] ???\n" ++msgstr " [%*zu] ???\n" ++ ++#: ../src/readelf.c:4266 ++#, c-format ++msgid "" ++" [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" ++msgstr "" ++" [%*zu] 開始: %0#*、長さ: %5、CU DIE オフセット: %6\n" ++ ++#: ../src/readelf.c:4285 ++#, c-format ++msgid "cannot get .debug_ranges content: %s" ++msgstr ".degub_ranges の内容を得られません: %s" ++ ++#: ../src/readelf.c:4290 ../src/readelf.c:4773 ../src/readelf.c:5436 ++#: ../src/readelf.c:5881 ../src/readelf.c:5976 ../src/readelf.c:6148 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++"\n" ++"オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" ++ ++#: ../src/readelf.c:4304 ../src/readelf.c:5895 ++#, c-format ++msgid " [%6tx] \n" ++msgstr " [%6tx] <不当なデータ>\n" ++ ++#: ../src/readelf.c:4326 ../src/readelf.c:5917 ++#, c-format ++msgid " [%6tx] base address %s\n" ++msgstr " [%6tx] ベースアドレス %s\n" ++ ++#. We have an address range entry. ++#. First address range entry in a list. ++#: ../src/readelf.c:4337 ++#, c-format ++msgid " [%6tx] %s..%s\n" ++msgstr " [%6tx] %s..%s\n" ++ ++#: ../src/readelf.c:4339 ++#, c-format ++msgid " %s..%s\n" ++msgstr " %s..%s\n" ++ ++#: ../src/readelf.c:4762 ../src/readelf.c:6214 ../src/readelf.c:6316 ++#, c-format ++msgid "cannot get %s content: %s" ++msgstr "%s の内容を得られません: %s" ++ ++#: ../src/readelf.c:4769 ++#, c-format ++msgid "" ++"\n" ++"Call frame information section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++"\n" ++"オフセット %3$# の フレーム情報呼出しセクション [%1$2zu] '%2$s':\n" ++ ++#: ../src/readelf.c:4796 ../src/readelf.c:5470 ++#, c-format ++msgid "invalid data in section [%zu] '%s'" ++msgstr "セクション [%zu] '%s' の不当なデータ" ++ ++#: ../src/readelf.c:4818 ++#, c-format ++msgid "" ++"\n" ++" [%6tx] Zero terminator\n" ++msgstr "" ++"\n" ++" [%6tx] ゼロ終端\n" ++ ++#: ../src/readelf.c:4896 ++msgid "FDE address encoding: " ++msgstr "FDE アドレスエンコード" ++ ++#: ../src/readelf.c:4902 ++msgid "LSDA pointer encoding: " ++msgstr "LSDA ポインターエンコード:" ++ ++#: ../src/readelf.c:4947 ++#, c-format ++msgid "invalid augmentation encoding" ++msgstr "不当な拡大エンコード" ++ ++#: ../src/readelf.c:5018 ++#, c-format ++msgid " (offset: %#)" ++msgstr " (オフセット: %#)" ++ ++#: ../src/readelf.c:5025 ++#, c-format ++msgid " (end offset: %#)" ++msgstr " (終了オフセット: %#)" ++ ++#: ../src/readelf.c:5052 ++#, c-format ++msgid " %-26sLSDA pointer: %#\n" ++msgstr " %-26sLSDA ポインター: %#\n" ++ ++#: ../src/readelf.c:5098 ++#, c-format ++msgid "cannot get attribute code: %s" ++msgstr "属性コードを得られません: %s" ++ ++#: ../src/readelf.c:5106 ++#, c-format ++msgid "cannot get attribute form: %s" ++msgstr "属性様式を得られません: %s" ++ ++#: ../src/readelf.c:5119 ++#, c-format ++msgid "cannot get attribute value: %s" ++msgstr "属性値を得られません: %s" ++ ++#: ../src/readelf.c:5315 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [Offset]\n" ++msgstr "" ++"\n" ++"オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" ++" [オフセット]\n" ++ ++#: ../src/readelf.c:5340 ++#, c-format ++msgid "" ++" Compilation unit at offset %:\n" ++" Version: %, Abbreviation section offset: %, Address size: %" ++", Offset size: %\n" ++msgstr "" ++" オフセット %1$ のコンパイル単位:\n" ++" バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" ++"きさ: %4$、オフセットの大きさ: %5$\n" ++ ++#: ../src/readelf.c:5358 ++#, c-format ++msgid "cannot get DIE at offset % in section '%s': %s" ++msgstr "" ++"セクション '%2$s' の オフセット %1$ の DIE を得られません: %3$s" ++ ++#: ../src/readelf.c:5369 ++#, c-format ++msgid "cannot get DIE offset: %s" ++msgstr "DIE オフセットを得られません: %s" ++ ++#: ../src/readelf.c:5377 ++#, c-format ++msgid "cannot get tag of DIE at offset % in section '%s': %s" ++msgstr "" ++"セクション '%2$s' 中のオフセット %1$ の DIE のタグを得られません: %3" ++"$s" ++ ++#: ../src/readelf.c:5406 ++#, c-format ++msgid "cannot get next DIE: %s\n" ++msgstr "次の DIE を得られません: %s\n" ++ ++#: ../src/readelf.c:5413 ++#, c-format ++msgid "cannot get next DIE: %s" ++msgstr "次の DIE を得られません: %s" ++ ++#: ../src/readelf.c:5448 ++#, c-format ++msgid "cannot get line data section data: %s" ++msgstr "ラインデータセクションデータを得られません: %s" ++ ++#: ../src/readelf.c:5461 ++#, c-format ++msgid "" ++"\n" ++"Table at offset %Zu:\n" ++msgstr "" ++"\n" ++"オフセット %Zu のテーブル:\n" ++ ++#. Print what we got so far. ++#: ../src/readelf.c:5513 ++#, c-format ++msgid "" ++"\n" ++" Length: %\n" ++" DWARF version: %\n" ++" Prologue length: %\n" ++" Minimum instruction length: %\n" ++" Initial value if '%s': %\n" ++" Line base: %\n" ++" Line range: %\n" ++" Opcode base: %\n" ++"\n" ++"Opcodes:\n" ++msgstr "" ++"\n" ++" 長さ: %\n" ++" DWARF バージョン: %\n" ++" プロローグ長: %\n" ++" 最小命令長: %\n" ++" もし '%s' なら初期値: %\n" ++" 行ベース: %\n" ++" 行範囲: %\n" ++" 命令コードベース: %\n" ++"\n" ++"命令コード:\n" ++ ++#: ../src/readelf.c:5532 ++#, c-format ++msgid "invalid data at offset %tu in section [%zu] '%s'" ++msgstr "セクション [%2$zu] '%3$s' 中のオフセット %1$tu に不当なデータ" ++ ++#: ../src/readelf.c:5547 ++#, c-format ++msgid " [%*] %hhu argument\n" ++msgid_plural " [%*] %hhu arguments\n" ++msgstr[0] " [%*] %hhu パラメーター\n" ++ ++#: ../src/readelf.c:5555 ++msgid "" ++"\n" ++"Directory table:" ++msgstr "" ++"\n" ++"ディレクトリーテーブル:" ++ ++#: ../src/readelf.c:5571 ++msgid "" ++"\n" ++"File name table:\n" ++" Entry Dir Time Size Name" ++msgstr "" ++"\n" ++"ファイル名テーブル:\n" ++" Entry Dir 時刻 大きさ 名前" ++ ++#: ../src/readelf.c:5600 ++msgid "" ++"\n" ++"Line number statements:" ++msgstr "" ++"\n" ++"行 番号 文:" ++ ++#: ../src/readelf.c:5661 ++#, c-format ++msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" ++msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" ++ ++#: ../src/readelf.c:5681 ++#, c-format ++msgid " extended opcode %u: " ++msgstr " 拡張命令コード %u: " ++ ++#: ../src/readelf.c:5686 ++msgid "end of sequence" ++msgstr "列の終わり" ++ ++#: ../src/readelf.c:5701 ++#, c-format ++msgid "set address to %s\n" ++msgstr "アドレスを %s に設定する\n" ++ ++#: ../src/readelf.c:5722 ++#, c-format ++msgid "define new file: dir=%u, mtime=%, length=%, name=%s\n" ++msgstr "" ++"新ファイルを定義する: dir=%u、mtime=%、長さh=%、名前=%s\n" ++ ++#. Unknown, ignore it. ++#: ../src/readelf.c:5731 ++msgid "unknown opcode" ++msgstr "不明な命令コード" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5743 ++msgid " copy" ++msgstr "複写" ++ ++#: ../src/readelf.c:5753 ++#, c-format ++msgid "advance address by %u to %s\n" ++msgstr "アドレスを %u だけ進めて %s にする\n" ++ ++#: ../src/readelf.c:5764 ++#, c-format ++msgid " advance line by constant %d to %\n" ++msgstr "行を定数 %d だけ進めて % にする\n" ++ ++#: ../src/readelf.c:5772 ++#, c-format ++msgid " set file to %\n" ++msgstr " ファイルを % に設定する\n" ++ ++#: ../src/readelf.c:5782 ++#, c-format ++msgid " set column to %\n" ++msgstr "カラムを % に設定する\n" ++ ++#: ../src/readelf.c:5789 ++#, c-format ++msgid " set '%s' to %\n" ++msgstr " '%s' を % に設定する\n" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5795 ++msgid " set basic block flag" ++msgstr "基本ブロックフラグを設定する" ++ ++#: ../src/readelf.c:5805 ++#, c-format ++msgid "advance address by constant %u to %s\n" ++msgstr "アドレスを定数 %u だけ済めて %s にする\n" ++ ++#: ../src/readelf.c:5821 ++#, c-format ++msgid "advance address by fixed value %u to %s\n" ++msgstr "アドレスを固定値 %u だけ進めて %s にする\n" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5830 ++msgid " set prologue end flag" ++msgstr "プロローグ終了フラグを設定する" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5835 ++msgid " set epilogue begin flag" ++msgstr "エピローグ開始フラグを設定する" ++ ++#. 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. ++#: ../src/readelf.c:5844 ++#, c-format ++msgid " unknown opcode with % parameter:" ++msgid_plural " unknown opcode with % parameters:" ++msgstr[0] " % 個のパラメーターのある不明な命令コード:" ++ ++#: ../src/readelf.c:5876 ++#, c-format ++msgid "cannot get .debug_loc content: %s" ++msgstr ".debug_loc の内容を得られません: %s" ++ ++#. First entry in a list. ++#: ../src/readelf.c:5931 ++#, c-format ++msgid " [%6tx] %s..%s" ++msgstr " [%6tx] %s..%s" ++ ++#: ../src/readelf.c:5933 ++#, c-format ++msgid " %s..%s" ++msgstr " %s..%s" ++ ++#: ../src/readelf.c:5986 ++#, c-format ++msgid "cannot get macro information section data: %s" ++msgstr "マクロ情報セクションのデータを得られません: %s" ++ ++#: ../src/readelf.c:6065 ++#, c-format ++msgid "%*s*** non-terminated string at end of section" ++msgstr "%*s*** 最後のセクションの終端していない文字列" ++ ++#: ../src/readelf.c:6133 ++#, c-format ++msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" ++msgstr "" ++" [%5d] DIE オフセット: %6, CU DIE オフセット: %6, 名前: %s\n" ++ ++# # "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" ++# # " %4$*s 文字列\n" がエラーになるのは何故? 取り敢えず fuzzy扱い ++#: ../src/readelf.c:6172 ++#, fuzzy, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" %*s String\n" ++msgstr "" ++"\n" ++"オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" ++" %4$*s 文字列\n" ++ ++#: ../src/readelf.c:6186 ++#, c-format ++msgid " *** error while reading strings: %s\n" ++msgstr " *** 文字列の読込み中にエラー: %s\n" ++ ++#: ../src/readelf.c:6206 ++#, c-format ++msgid "" ++"\n" ++"Call frame search table section [%2zu] '.eh_frame_hdr':\n" ++msgstr "" ++"\n" ++"呼出しフレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n" ++ ++#: ../src/readelf.c:6308 ++#, c-format ++msgid "" ++"\n" ++"Exception handling table section [%2zu] '.gcc_except_table':\n" ++msgstr "" ++"\n" ++"例外取扱いテーブルセクション [%2zu] '.gcc_except_table':\n" ++ ++#: ../src/readelf.c:6331 ++#, c-format ++msgid " LPStart encoding: %#x " ++msgstr " LPStart コード化: %#x " ++ ++#: ../src/readelf.c:6343 ++#, c-format ++msgid " TType encoding: %#x " ++msgstr "TType コード化: %#x " ++ ++#: ../src/readelf.c:6357 ++#, c-format ++msgid " Call site encoding: %#x " ++msgstr "呼出しサイトコード化: %#x " ++ ++#: ../src/readelf.c:6370 ++msgid "" ++"\n" ++" Call site table:" ++msgstr "" ++"\n" ++" 呼出しサイトテーブル:" ++ ++#: ../src/readelf.c:6384 ++#, c-format ++msgid "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++msgstr "" ++" [%4u] 呼出しサイト開始 : %#\n" ++" 呼出しサイト長: %\n" ++" 離着陸場: %#\n" ++" 行動: %u\n" ++ ++#: ../src/readelf.c:6444 ++#, c-format ++msgid "invalid TType encoding" ++msgstr "不当な TType コード化" ++ ++#: ../src/readelf.c:6467 ++#, c-format ++msgid "cannot get debug context descriptor: %s" ++msgstr "デバッグ内容記述子を得られません: %s" ++ ++#: ../src/readelf.c:6602 ../src/readelf.c:7167 ++#, c-format ++msgid "cannot convert core note data: %s" ++msgstr "コアノートデータの変換ができません: %s" ++ ++#: ../src/readelf.c:6907 ++#, c-format ++msgid "" ++"\n" ++"%*s... ..." ++msgstr "" ++"\n" ++"%*s... < %u 回の繰返し> ..." ++ ++#: ../src/readelf.c:7265 ++msgid " Owner Data size Type\n" ++msgstr " 所有者 データ大きさタイプ\n" ++ ++#: ../src/readelf.c:7283 ++#, c-format ++msgid " %-13.*s %9 %s\n" ++msgstr " %-13.*s %9 %s\n" ++ ++#: ../src/readelf.c:7314 ++#, c-format ++msgid "cannot get content of note section: %s" ++msgstr "ノートセクションの内容を得られません: %s" ++ ++#: ../src/readelf.c:7341 ++#, c-format ++msgid "" ++"\n" ++"Note section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"オフセット %4$#0 の %3$ バイトのノートセクション [%1$2zu] '%2" ++"$s':\n" ++ ++#: ../src/readelf.c:7364 ++#, c-format ++msgid "" ++"\n" ++"Note segment of % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"オフセット %2$#0 の %1$ バイトのノートセグメント:\n" ++ ++#: ../src/readelf.c:7410 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no data to dump.\n" ++msgstr "" ++"\n" ++"セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" ++ ++#: ../src/readelf.c:7416 ../src/readelf.c:7438 ++#, c-format ++msgid "cannot get data for section [%Zu] '%s': %s" ++msgstr "セクション [%Zu] '%s' からデータが得られません: %s" ++ ++#: ../src/readelf.c:7420 ++#, c-format ++msgid "" ++"\n" ++"Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"オフセット %4$#0 のセクション [%1$Zu] '%2$s' の16進ダンプ、%3" ++"$ バイト:\n" ++ ++#: ../src/readelf.c:7433 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' is empty.\n" ++msgstr "" ++"\n" ++"セクション [%Zu] '%s' は空です。\n" ++ ++#: ../src/readelf.c:7442 ++#, c-format ++msgid "" ++"\n" ++"String section [%Zu] '%s' contains % bytes at offset %#0:\n" ++msgstr "" ++"\n" ++"オフセット %4$#0 文字列セクション [%1$Zu] '%2$s' には %3$ バ" ++"イトあります:\n" ++ ++#: ../src/readelf.c:7489 ++#, c-format ++msgid "" ++"\n" ++"section [%lu] does not exist" ++msgstr "" ++"\n" ++"セクション [%lu] がありません" ++ ++#: ../src/readelf.c:7515 ++#, c-format ++msgid "" ++"\n" ++"section '%s' does not exist" ++msgstr "" ++"\n" ++"セクション '%s' がありません" ++ ++#: ../src/readelf.c:7576 ++#, c-format ++msgid "cannot get symbol index of archive '%s': %s" ++msgstr "アーカイブのシンボル索引 '%s' を得られません: %s" ++ ++#: ../src/readelf.c:7579 ++#, c-format ++msgid "" ++"\n" ++"Archive '%s' has no symbol index\n" ++msgstr "" ++"\n" ++"アーカイブ '%s' にはシンボル索引がありません\n" ++ ++#: ../src/readelf.c:7583 ++#, c-format ++msgid "" ++"\n" ++"Index of archive '%s' has %Zu entries:\n" ++msgstr "" ++"\n" ++"アーカイブ '%s' の索引には %Zu 項目あります:\n" ++ ++#: ../src/readelf.c:7601 ++#, c-format ++msgid "cannot extract member at offset %Zu in '%s': %s" ++msgstr "'%2$s' の オフセット %1$Zu のメンバーを抽出できません: %3$s" ++ ++#: ../src/readelf.c:7606 ++#, c-format ++msgid "Archive member '%s' contains:\n" ++msgstr "アーカイブメンバー '%s' には以下があります:\n" ++ ++#: ../src/size.c:68 ++msgid "" ++"Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default " ++"is `bsd'" ++msgstr "" ++"出力形式として FORMAT を使ってください。FORMAT は `bsd'か、`sysv' のどちらか" ++"です。省略値は `bsd'です" ++ ++#: ../src/size.c:70 ++msgid "Same as `--format=sysv'" ++msgstr "`--format=sysv' と同じ" ++ ++#: ../src/size.c:71 ++msgid "Same as `--format=bsd'" ++msgstr "`--format=bsd' と同じ" ++ ++#: ../src/size.c:74 ++msgid "Same as `--radix=10'" ++msgstr "`--radix=10' と同じ" ++ ++#: ../src/size.c:75 ++msgid "Same as `--radix=8'" ++msgstr "`--radix=8' と同じ" ++ ++#: ../src/size.c:76 ++msgid "Same as `--radix=16'" ++msgstr "`--radix=16' と同じ" ++ ++#: ../src/size.c:78 ++msgid "Similar to `--format=sysv' output but in one line" ++msgstr "`--format=sysv' の出力と似ていますが、1行です" ++ ++#: ../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 "合計の大きさを表示 (bsd のみ)" ++ ++#. Short description of program. ++#: ../src/size.c:88 ++msgid "List section sizes of FILEs (a.out by default)." ++msgstr "ふぁいる のセクションの大きさの一覧 (省略値は a.out)" ++ ++#: ../src/size.c:269 ++#, c-format ++msgid "Invalid format: %s" ++msgstr "不当な形式: %s" ++ ++#: ../src/size.c:280 ++#, c-format ++msgid "Invalid radix: %s" ++msgstr "不当な基数: %s" ++ ++#: ../src/size.c:339 ++#, c-format ++msgid "%s: file format not recognized" ++msgstr "%s: ファイル形式を認識できません" ++ ++#: ../src/size.c:446 ../src/size.c:589 ++#, c-format ++msgid " (ex %s)" ++msgstr " (ex %s)" ++ ++#: ../src/size.c:614 ++msgid "(TOTALS)\n" ++msgstr "(合計)\n" ++ ++#: ../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 "-f パラメーターの代わりに 名前 ふぁいる を有効にする" ++ ++#: ../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 ".comment セクションを取り除く" ++ ++#: ../src/strip.c:88 ++msgid "Relax a few rules to handle slightly broken ELF files" ++msgstr "少し壊れた ELF ファイルを取り扱うためにルールを少し緩和する" ++ ++#. Short description of program. ++#: ../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 "'-o' と '-f' と一緒の場合は入力ファイルは 1 つしか認められません" ++ ++#: ../src/strip.c:221 ++#, c-format ++msgid "-f option specified twice" ++msgstr "-f オプションが 2 回指定されています" ++ ++#: ../src/strip.c:230 ++#, c-format ++msgid "-F option specified twice" ++msgstr "-F オプションが 2 回指定されています" ++ ++#: ../src/strip.c:239 ../src/unstrip.c:124 ++#, c-format ++msgid "-o option specified twice" ++msgstr "-o オプションが 2 回指定されています" ++ ++#: ../src/strip.c:259 ++#, c-format ++msgid "-R option supports only .comment section" ++msgstr "-R オプションは .comment セクションのみをサポートします" ++ ++#: ../src/strip.c:297 ../src/strip.c:321 ++#, c-format ++msgid "cannot stat input file '%s'" ++msgstr "入力ファイル '%s' を stat できません" ++ ++#: ../src/strip.c:311 ++#, c-format ++msgid "while opening '%s'" ++msgstr "'%s' を開いている間" ++ ++#: ../src/strip.c:349 ++#, c-format ++msgid "%s: cannot use -o or -f when stripping archive" ++msgstr "%s: アーカイブから抜き出している時は -o や -f は使えません" ++ ++#: ../src/strip.c:447 ++#, c-format ++msgid "cannot open EBL backend" ++msgstr "EBL バックエンドを開けません" ++ ++#: ../src/strip.c:497 ../src/strip.c:521 ++#, c-format ++msgid "cannot create new file '%s': %s" ++msgstr "新しいファイル '%s' を生成できません: %s" ++ ++#: ../src/strip.c:581 ++#, c-format ++msgid "illformed file '%s'" ++msgstr "不適格なファイル '%s'" ++ ++#: ../src/strip.c:868 ../src/strip.c:955 ++#, c-format ++msgid "while generating output file: %s" ++msgstr "出力ファイルを生成している間: %s" ++ ++#: ../src/strip.c:928 ../src/strip.c:1667 ++#, c-format ++msgid "%s: error while creating ELF header: %s" ++msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" ++ ++#: ../src/strip.c:942 ++#, c-format ++msgid "while preparing output for '%s'" ++msgstr "'%s' のための出力を準備している間" ++ ++#: ../src/strip.c:993 ../src/strip.c:1049 ++#, c-format ++msgid "while create section header section: %s" ++msgstr "セクションヘッダーセクションを生成している間: %s" ++ ++#: ../src/strip.c:999 ++#, c-format ++msgid "cannot allocate section data: %s" ++msgstr "セクションデータを割り当てられません: %s" ++ ++#: ../src/strip.c:1058 ++#, c-format ++msgid "while create section header string table: %s" ++msgstr "セクションヘッダー文字列テーブルを生成中: %s" ++ ++#: ../src/strip.c:1592 ../src/strip.c:1689 ++#, c-format ++msgid "while writing '%s': %s" ++msgstr "'%s' を書込み中: %s" ++ ++#: ../src/strip.c:1603 ++#, c-format ++msgid "while creating '%s'" ++msgstr "'%s' を生成中" ++ ++#: ../src/strip.c:1615 ++#, c-format ++msgid "while computing checksum for debug information" ++msgstr "デバッグ情報のチェックサムを計算中" ++ ++#: ../src/strip.c:1675 ++#, c-format ++msgid "%s: error while reading the file: %s" ++msgstr "%s: ファイルを読込み中にエラー: %s" ++ ++#: ../src/strip.c:1721 ../src/strip.c:1728 ++#, c-format ++msgid "error while finishing '%s': %s" ++msgstr "'%s' の終了中にエラー: %s" ++ ++#: ../src/strip.c:1751 ../src/strip.c:1808 ++#, c-format ++msgid "cannot set access and modification date of '%s'" ++msgstr "'%s' のアクセスと変更日付を設定できません" ++ ++#: ../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 "ファイルが検索されるディレクトリーの一覧にPATHを追加する。" ++ ++#: ../src/ld.c:98 ++msgid "Only set DT_NEEDED for following dynamic libs if actually used" ++msgstr "" ++"実際に使用されるのなら以下のダイナミックライブラリーに DT_NEEDED を設定する" ++ ++#: ../src/ld.c:100 ++msgid "Always set DT_NEEDED for following dynamic libs" ++msgstr "以下のダイナミックライブラリーに常に DT_NEEDED を設定する" ++ ++#: ../src/ld.c:102 ++msgid "Ignore LD_LIBRARY_PATH environment variable." ++msgstr "LD_LIBRARY_PATH 環境変数を無視する。" ++ ++#: ../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 "--whole-archive と同じ。" ++ ++#: ../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 "DSO 中の未定義のシンボルを認めない/認める。" ++ ++#: ../src/ld.c:123 ++msgid "Object requires immediate handling of $ORIGIN." ++msgstr "オブジェクトには %ORIGIN の直接ハンドルが必要です。" ++ ++#: ../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 "'dlopen' でロードできないと記します。" ++ ++#: ../src/ld.c:135 ++msgid "Ignore/record dependencies on unused DSOs." ++msgstr "使用されない DSO の依存性を無視/記録します。" ++ ++#: ../src/ld.c:137 ++msgid "Generated DSO will be a system library." ++msgstr "生成された DSO はシステムライブラリーになります。" ++ ++#: ../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 "ターゲットシステムのページサイズを SIZE と見做します。" ++ ++#: ../src/ld.c:151 ++msgid "Set runtime DSO search path." ++msgstr "実行時 DSO 検索パスを設定します。" ++ ++#: ../src/ld.c:154 ++msgid "Set link time DSO search path." ++msgstr "リンク時 DSO 検索パスを設定します。" ++ ++#: ../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 "共用ライブラリーの so 名を設定します。" ++ ++#: ../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 "" ++".comment セクションにリンクエディターを識別する追加情報を追加/抑止します。" ++ ++#: ../src/ld.c:171 ++msgid "Create .eh_frame_hdr section" ++msgstr ".eh_frame_hdr セクションを生成します" ++ ++#: ../src/ld.c:173 ++msgid "Set hash style to sysv, gnu or both." ++msgstr "ハッシュ形式を sysvか、gnu、両方のどれかに設定します。" ++ ++#: ../src/ld.c:175 ++msgid "Generate build ID note (md5, sha1 (default), uuid)." ++msgstr "ビルド ID ノート (md5、sh1 (省略値)、uuid) を生成します。" ++ ++#: ../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 "エミュレーションを なまえ に設定します。" ++ ++#. Short description of program. ++#: ../src/ld.c:197 ++msgid "Combine object and archive files." ++msgstr "オブジェクトとアーカイブファイルを一体化します。" ++ ++#. Strings for arguments in help texts. ++#: ../src/ld.c:200 ++msgid "[FILE]..." ++msgstr "[ふぁいる]..." ++ ++#: ../src/ld.c:333 ++#, c-format ++msgid "At least one input file needed" ++msgstr "少なくとも 1 つの入力ファイルが必要です" ++ ++#: ../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 "リンカースクリプト '%s' を開けません" ++ ++#: ../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 "-G か -r のどちらかひとつのオプションだけ認められます" ++ ++#: ../src/ld.c:594 ++#, c-format ++msgid "more than one '-m' parameter" ++msgstr "-m パラメーターが1つを越えています" ++ ++#: ../src/ld.c:604 ../src/ld.c:1013 ++#, c-format ++msgid "unknown option `-%c %s'" ++msgstr "不明なオプション `%c %s'" ++ ++#: ../src/ld.c:646 ++#, c-format ++msgid "invalid page size value '%s': ignored" ++msgstr "不当なページサイズ値 '%s': 無視しました" ++ ++#: ../src/ld.c:687 ++#, c-format ++msgid "invalid hash style '%s'" ++msgstr "不当なハッシュスタイル '%s'" ++ ++#: ../src/ld.c:697 ++#, c-format ++msgid "invalid build-ID style '%s'" ++msgstr "不当なビルド-ID スタイル '%s'" ++ ++#: ../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 "不当な最適化レベル `%s'" ++ ++#: ../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 "不明なオプション '-%c %s'" ++ ++#: ../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 "適切な '-m' パラメーターを付けて再試行してください" ++ ++#: ../src/ld.c:1446 ++#, c-format ++msgid "cannot read version script '%s'" ++msgstr "バージョンスクリプト '%s' を読めません" ++ ++#. The symbol is already defined and now again ++#. in the linker script. This is an error. ++#: ../src/ld.c:1512 ../src/ld.c:1551 ++#, c-format ++msgid "duplicate definition of '%s' in linker script" ++msgstr "リンカースクリプトに '%s' の重複定義" ++ ++#: ../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 "ld バックエンドライブラリー '%s' をロードできません: %s" ++ ++#: ../src/ldgeneric.c:265 ++#, c-format ++msgid "cannot find init function in ld backend library '%s': %s" ++msgstr "ld バックエンドライブラリー '%s' に初期化機能が見つかりません: %s " ++ ++#: ../src/ldgeneric.c:310 ++#, c-format ++msgid "%s listed more than once as input" ++msgstr "入力に %s が 1回を越えて書かれています" ++ ++#: ../src/ldgeneric.c:424 ++#, c-format ++msgid "%s (for -l%s)\n" ++msgstr "%s (-l%s 用)\n" ++ ++#: ../src/ldgeneric.c:425 ++#, c-format ++msgid "%s (for DT_NEEDED %s)\n" ++msgstr "%s (DT_NEEDED %s 用)\n" ++ ++#: ../src/ldgeneric.c:573 ++#, c-format ++msgid "Warning: type of `%s' changed from %s in %s to %s in %s" ++msgstr "警告: `%1$s' のタイプが %3$s の %2$s から %5$s の %4$s に変更されました" ++ ++#: ../src/ldgeneric.c:586 ++#, c-format ++msgid "Warning: size of `%s' changed from % in %s to % in %s" ++msgstr "" ++"警告: `%1$s の大きさが %3$s の %2$ から %5$s の %4$ に" ++"変更されました" ++ ++#: ../src/ldgeneric.c:677 ++#, c-format ++msgid "(%s+%#): multiple definition of %s `%s'\n" ++msgstr "(%s+%#): %s の複数定義 '%s'\n" ++ ++#: ../src/ldgeneric.c:700 ++#, c-format ++msgid "(%s+%#): first defined here\n" ++msgstr "(%s+%#): 最初の定義はここ\n" ++ ++#: ../src/ldgeneric.c:819 ++#, c-format ++msgid "%s: cannot get section group data: %s" ++msgstr "%s: セクショングループデータを得られません: %s" ++ ++#. If we come here no section group contained the given section ++#. despite the SHF_GROUP flag. This is an error in the input ++#. file. ++#: ../src/ldgeneric.c:840 ++#, c-format ++msgid "%s: section '%s' with group flag set does not belong to any group" ++msgstr "" ++"%s: グループフラグが設定されているセクション '%s' はどのグループにも" ++"属していません" ++ ++#: ../src/ldgeneric.c:885 ++#, c-format ++msgid "%s: section [%2d] '%s' is not in the correct section group" ++msgstr "%s: セクション [%2d] '%s& は正しいセクショングループに入っていません" ++ ++#. This should never happen. ++#: ../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 "%s: 不当な ELF ファイル (%s:%d)\n" ++ ++#: ../src/ldgeneric.c:1250 ++#, c-format ++msgid "%s: only files of type ET_REL might contain section groups" ++msgstr "%s: タイプ ET_REL のファイルのみセクショングループを含むことができます" ++ ++#: ../src/ldgeneric.c:1302 ++#, c-format ++msgid "%s: cannot determine signature of section group [%2zd] '%s': %s" ++msgstr "%s: セクショングループ [%2zd] '%s' の署名を決定できません: %s" ++ ++#: ../src/ldgeneric.c:1314 ++#, c-format ++msgid "%s: cannot get content of section group [%2zd] '%s': %s'" ++msgstr "%s: セクショングループ [%2zd] '%s' の内容を得られません: %s'" ++ ++#: ../src/ldgeneric.c:1328 ++#, c-format ++msgid "" ++"%s: group member %zu of section group [%2zd] '%s' has too high index: %" ++"" ++msgstr "" ++"%1$s: セクショングループ [%3$2zd] '%4$s' のグループメンバー %2$zu は大きすぎる" ++"インデックスを持っています: %5$" ++ ++#: ../src/ldgeneric.c:1350 ++#, c-format ++msgid "%s: section '%s' has unknown type: %d" ++msgstr "%s: セクション '%s' は不明なタイプを持っています: %d" ++ ++#: ../src/ldgeneric.c:1729 ++#, c-format ++msgid "cannot get descriptor for ELF file (%s:%d): %s\n" ++msgstr "ELF ファイル (%s:%d) のための記述子を得られません: %s\n" ++ ++#: ../src/ldgeneric.c:1899 ++#, c-format ++msgid "cannot read archive `%s': %s" ++msgstr "アーカイブ `%s' を読めません: %s" ++ ++#: ../src/ldgeneric.c:2020 ++#, c-format ++msgid "file of type %s cannot be linked in\n" ++msgstr "%s のファイルタイプがリンクされていません\n" ++ ++#: ../src/ldgeneric.c:2032 ++#, c-format ++msgid "%s: input file incompatible with ELF machine type %s\n" ++msgstr "%s: 入力ファイルは ELF マシンタイプ %s と互換性がありません\n" ++ ++#: ../src/ldgeneric.c:2044 ++#, c-format ++msgid "%s: cannot get section header string table index: %s\n" ++msgstr "%s: セクションヘッダー文字列テーブルインデックスを得られません: %s\n" ++ ++#: ../src/ldgeneric.c:2073 ++#, c-format ++msgid "cannot use DSO '%s' when generating relocatable object file" ++msgstr "リロケータブルオブジェクトファイル生成時に DSO '%s' を使えません" ++ ++#: ../src/ldgeneric.c:2158 ++#, c-format ++msgid "input file '%s' ignored" ++msgstr "入力ファイル '%s' を無視しました" ++ ++#. 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. ++#: ../src/ldgeneric.c:2372 ++#, c-format ++msgid "undefined symbol `%s' in %s" ++msgstr "%2$s 中に未定義のシンボル `%1$s'" ++ ++#: ../src/ldgeneric.c:2702 ++#, c-format ++msgid "cannot create ELF descriptor for output file: %s" ++msgstr "出力ファイル用の ELF 記述子を生成できません: %s" ++ ++#: ../src/ldgeneric.c:2709 ++#, c-format ++msgid "could not create ELF header for output file: %s" ++msgstr "出力ファイル用の ELF ヘッダーを生成できませんでした: %s" ++ ++#: ../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 "出力ファイル用のセクションを生成できません: %s" ++ ++#: ../src/ldgeneric.c:3444 ++#, c-format ++msgid "address computation expression contains variable '%s'" ++msgstr "アドレス計算式が変数 '%s' を含んでいます" ++ ++#: ../src/ldgeneric.c:3489 ++#, c-format ++msgid "" ++"argument '%' of ALIGN in address computation expression is no power " ++"of two" ++msgstr "" ++"アドレス計算式中の ALIGN のパラメーター % が 2 の累乗ではありません" ++ ++#: ../src/ldgeneric.c:3684 ++#, c-format ++msgid "cannot find entry symbol '%s': defaulting to %#0*" ++msgstr "" ++"エントリーシンボル '%s' が見つかりません: デフォルトの %#0* にします" ++ ++#: ../src/ldgeneric.c:3690 ++#, c-format ++msgid "no entry symbol specified: defaulting to %#0*" ++msgstr "" ++"エントリーシンボルが指定されていません: デフォルトの %#0* にします" ++ ++#: ../src/ldgeneric.c:3920 ++#, c-format ++msgid "cannot create GNU hash table section for output file: %s" ++msgstr "出力ファイル用の GNU ハッシュテーブルセクションを生成できません: %s" ++ ++#: ../src/ldgeneric.c:4071 ++#, c-format ++msgid "cannot create hash table section for output file: %s" ++msgstr "出力ファイル用のハッシュテーブルセクションを生成できません: %s" ++ ++#: ../src/ldgeneric.c:4114 ++#, c-format ++msgid "cannot create build ID section: %s" ++msgstr "ビルド ID セクションを生成できません: %s" ++ ++#: ../src/ldgeneric.c:4191 ++#, c-format ++msgid "cannot convert section data to file format: %s" ++msgstr "セクションデータをファイル形式に変換できません: %s" ++ ++#: ../src/ldgeneric.c:4200 ++#, c-format ++msgid "cannot convert section data to memory format: %s" ++msgstr "セクションデータをメモリー形式に変換できません: %s" ++ ++#: ../src/ldgeneric.c:4261 ++#, c-format ++msgid "cannot read enough data for UUID" ++msgstr "UUID に十分なデータを読めません" ++ ++#: ../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 "出力ファイル用のシンボルテーブルを生成できません: %s" ++ ++#: ../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 "バージョニングセクションを生成できません: %s" ++ ++#: ../src/ldgeneric.c:5818 ++#, c-format ++msgid "cannot create dynamic symbol table for output file: %s" ++msgstr "出力ファイル用の動的シンボルテーブルを生成できません: %s" ++ ++#: ../src/ldgeneric.c:5994 ++#, c-format ++msgid "cannot create versioning data: %s" ++msgstr "バージョニングデータを生成できません: %s" ++ ++#: ../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 "セクションヘッダー文字列セクションを生成できません: %s" ++ ++#: ../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 "プログラムヘッダーを生成できません: %s" ++ ++#: ../src/ldgeneric.c:6267 ++#, c-format ++msgid "while determining file layout: %s" ++msgstr "ファイルレイアウトを決定中: %s" ++ ++#: ../src/ldgeneric.c:6388 ++#, c-format ++msgid "internal error: non-nobits section follows nobits section" ++msgstr "内部エラー: 非 nobits セクションが nobits セクションに続きます" ++ ++#: ../src/ldgeneric.c:6925 ++#, c-format ++msgid "cannot get header of 0th section: %s" ++msgstr "0番目のセクションのヘッダーを得られません: %s" ++ ++#: ../src/ldgeneric.c:6941 ../src/unstrip.c:1807 ++#, c-format ++msgid "cannot update ELF header: %s" ++msgstr "ELF ヘッダーを更新できません: %s" ++ ++#: ../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 "出力ファイルに書込み中: %s" ++ ++#: ../src/ldgeneric.c:6989 ++#, c-format ++msgid "while finishing output file: %s" ++msgstr "出力ファイルの仕上げ中: %s" ++ ++#: ../src/ldgeneric.c:6995 ++#, c-format ++msgid "cannot stat output file" ++msgstr "出力ファイルを stat できません" ++ ++#: ../src/ldgeneric.c:7011 ++#, c-format ++msgid "WARNING: temporary output file overwritten before linking finished" ++msgstr "警告: リンクを仕上げる前に一時出力ファイルが上書きされました" ++ ++#. This cannot be implemented generally. There should have been a ++#. machine dependent implementation and we should never have arrived ++#. here. ++#: ../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 "マシン固有の '%s' 実装はありません" ++ ++#: ../src/i386_ld.c:210 ++#, c-format ++msgid "cannot allocate PLT section: %s" ++msgstr "PLT セクションを割り当てられません: %s" ++ ++#: ../src/i386_ld.c:232 ++#, c-format ++msgid "cannot allocate PLTREL section: %s" ++msgstr "PLTREL セクションを割り当てられません: %s" ++ ++#: ../src/i386_ld.c:253 ++#, c-format ++msgid "cannot allocate GOT section: %s" ++msgstr "GOT セクションを割り当てられません: %s" ++ ++#: ../src/i386_ld.c:274 ++#, c-format ++msgid "cannot allocate GOTPLT section: %s" ++msgstr "GOTPLT セクションを割り当てられません: %s" ++ ++#: ../src/i386_ld.c:661 ++#, c-format ++msgid "initial-executable TLS relocation cannot be used " ++msgstr "最初に実行される TLS リロケーションが使用されません " ++ ++#: ../src/ldscript.y:178 ++msgid "mode for segment invalid\n" ++msgstr "セグメント用のモードが不当です\n" ++ ++#: ../src/ldscript.y:465 ++#, c-format ++msgid "while reading version script '%s': %s at line %d" ++msgstr "バージョンスクリプト '%1$s' 読込み中: %3$d 行目の %2$s" ++ ++#: ../src/ldscript.y:466 ++#, c-format ++msgid "while reading linker script '%s': %s at line %d" ++msgstr "リンカースクリプト '%1$s' 読込み中: %3$d 行目の %2$s" ++ ++#: ../src/ldscript.y:745 ++#, c-format ++msgid "symbol '%s' in declared both local and global for unnamed version" ++msgstr "名前なしバージョン用のローカルとグローバルで宣言されたシンボル '%s'" ++ ++#: ../src/ldscript.y:747 ++#, c-format ++msgid "symbol '%s' in declared both local and global for version '%s'" ++msgstr "バージョン '%2$s' 用のローカルとグローバルで宣言されたシンボル '%1$s'" ++ ++#: ../src/ldscript.y:767 ../src/ldscript.y:774 ++#, c-format ++msgid "default visibility set as local and global" ++msgstr "ローカルとグローバルに設定されたデフォルトの可視性" ++ ++#: ../src/elflint.c:71 ++msgid "Be extremely strict, flag level 2 features." ++msgstr "非常に厳密にやってください、フラグレベル 2 機能。" ++ ++#: ../src/elflint.c:72 ++msgid "Do not print anything if successful" ++msgstr "成功したら何も印刷しない" ++ ++#: ../src/elflint.c:73 ++msgid "Binary is a separate debuginfo file" ++msgstr "バイナリーは別の debuginfo ファイルです" ++ ++#: ../src/elflint.c:75 ++msgid "" ++"Binary has been created with GNU ld and is therefore known to be broken in " ++"certain ways" ++msgstr "" ++"バイナリーは GNU ld で作成され、従ってある方法で壊れているのが知られている" ++ ++#. Short description of program. ++#: ../src/elflint.c:81 ++msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." ++msgstr "ELF ファイルが gABI/psABI 仕様へ準拠しているかの厳密なチェック。" ++ ++#: ../src/elflint.c:165 ++#, c-format ++msgid "cannot generate Elf descriptor: %s\n" ++msgstr "Elf 記述子を生成できません: %s\n" ++ ++#: ../src/elflint.c:184 ++#, c-format ++msgid "error while closing Elf descriptor: %s\n" ++msgstr "Elf 記述子を閉じている時にエラー: %s\n" ++ ++#: ../src/elflint.c:188 ++msgid "No errors" ++msgstr "エラーはありません" ++ ++#: ../src/elflint.c:301 ++#, c-format ++msgid " error while freeing sub-ELF descriptor: %s\n" ++msgstr "副-ELF 記述子を解放している時にエラー: %s\n" ++ ++#. We cannot do anything. ++#: ../src/elflint.c:309 ++#, c-format ++msgid "Not an ELF file - it has the wrong magic bytes at the start\n" ++msgstr "ELF ファイルではありません - 最初に誤ったマジックバイトがあります\n" ++ ++#: ../src/elflint.c:368 ++#, c-format ++msgid "e_ident[%d] == %d is no known class\n" ++msgstr "e_ident[%d] == %d は既知のクラスではありません\n" ++ ++#: ../src/elflint.c:373 ++#, c-format ++msgid "e_ident[%d] == %d is no known data encoding\n" ++msgstr "e_ident[%d] == %d は既知のデータエンコードではありません\n" ++ ++#: ../src/elflint.c:377 ++#, c-format ++msgid "unknown ELF header version number e_ident[%d] == %d\n" ++msgstr "不明な ELF ヘッダーバージョン数 e_ident[%d] == %d\n" ++ ++#: ../src/elflint.c:383 ++#, c-format ++msgid "unsupported OS ABI e_ident[%d] == '%s'\n" ++msgstr "不明な OS ABI e_ident[%d] == '%s'\n" ++ ++#: ../src/elflint.c:389 ++#, c-format ++msgid "unsupport ABI version e_ident[%d] == %d\n" ++msgstr "不明な ABI バージョン e_ident[%d] == %d\n" ++ ++#: ../src/elflint.c:394 ++#, c-format ++msgid "e_ident[%zu] is not zero\n" ++msgstr "e_ident[%zu] がゼロではありません\n" ++ ++#: ../src/elflint.c:399 ++#, c-format ++msgid "unknown object file type %d\n" ++msgstr "不明なオブジェクトファイルタイプ %d\n" ++ ++#: ../src/elflint.c:406 ++#, c-format ++msgid "unknown machine type %d\n" ++msgstr "不明なマシンタイプ %d\n" ++ ++#: ../src/elflint.c:410 ++#, c-format ++msgid "unknown object file version\n" ++msgstr "不明なオブジェクトファイルバージョン\n" ++ ++#: ../src/elflint.c:416 ++#, c-format ++msgid "invalid program header offset\n" ++msgstr "不当なプログラムヘッダーオフセット\n" ++ ++#: ../src/elflint.c:418 ++#, c-format ++msgid "executables and DSOs cannot have zero program header offset\n" ++msgstr "" ++"実行ファイルと DSO はプログラムヘッダーオフセットが 0 であってはいけません\n" ++ ++#: ../src/elflint.c:422 ++#, c-format ++msgid "invalid number of program header entries\n" ++msgstr "プログラムヘッダー項目数として不当な数\n" ++ ++#: ../src/elflint.c:430 ++#, c-format ++msgid "invalid section header table offset\n" ++msgstr "不当なセクションヘッダーテーブルオフセット\n" ++ ++#: ../src/elflint.c:433 ++#, c-format ++msgid "section header table must be present\n" ++msgstr "セクションヘッダーテーブルがなければなりません\n" ++ ++#: ../src/elflint.c:447 ++#, c-format ++msgid "invalid number of section header table entries\n" ++msgstr "セクションヘッダーテーブル項目数として不当な数\n" ++ ++#: ../src/elflint.c:464 ++#, c-format ++msgid "invalid section header index\n" ++msgstr "不当なセクションヘッダーインデックス\n" ++ ++#: ../src/elflint.c:469 ++#, c-format ++msgid "invalid machine flags: %s\n" ++msgstr "不当なマシンフラグ: %s\n" ++ ++#: ../src/elflint.c:476 ../src/elflint.c:493 ++#, c-format ++msgid "invalid ELF header size: %hd\n" ++msgstr "不当な ELF ヘッダーサイズ: %hd\n" ++ ++#: ../src/elflint.c:479 ../src/elflint.c:496 ++#, c-format ++msgid "invalid program header size: %hd\n" ++msgstr "不当なプログラムヘッダーサイズ: %hd\n" ++ ++#: ../src/elflint.c:482 ../src/elflint.c:499 ++#, c-format ++msgid "invalid program header position or size\n" ++msgstr "不当なプログラムヘッダー位置かサイズ\n" ++ ++#: ../src/elflint.c:485 ../src/elflint.c:502 ++#, c-format ++msgid "invalid section header size: %hd\n" ++msgstr "不当なセクションヘッダーサイズ: %hd\n" ++ ++#: ../src/elflint.c:488 ../src/elflint.c:505 ++#, c-format ++msgid "invalid section header position or size\n" ++msgstr "不当なセクションヘッダー位置かサイズ\n" ++ ++#: ../src/elflint.c:549 ++#, c-format ++msgid "" ++"section [%2d] '%s': section with SHF_GROUP flag set not part of a section " ++"group\n" ++msgstr "" ++"セクション [%2d] '%s': SHF_GROUP フラグのあるセクションにセクショングループ" ++"の一部分が設定されていません\n" ++ ++#: ../src/elflint.c:553 ++#, c-format ++msgid "" ++"section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n" ++msgstr "" ++"セクション [%2d] '%s': セクショングループ [%2zu] '%s' がグループメンバーを" ++"継続していません\n" ++ ++#: ../src/elflint.c:569 ../src/elflint.c:1412 ../src/elflint.c:1462 ++#: ../src/elflint.c:1571 ../src/elflint.c:2165 ../src/elflint.c:2679 ++#: ../src/elflint.c:2840 ../src/elflint.c:2970 ../src/elflint.c:3142 ++#: ../src/elflint.c:4040 ++#, c-format ++msgid "section [%2d] '%s': cannot get section data\n" ++msgstr "セクション [%2d] '%s': セクションデータを得られません\n" ++ ++#: ../src/elflint.c:582 ../src/elflint.c:1578 ++#, c-format ++msgid "" ++"section [%2d] '%s': referenced as string table for section [%2d] '%s' but " ++"type is not SHT_STRTAB\n" ++msgstr "" ++"セクション [%2d] '%s': セクション [%2d] '%s' 用の文字列テーブルとして参照" ++"されていますが、タイプが SHT_STRTAB ではありません\n" ++ ++#: ../src/elflint.c:605 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol table cannot have more than one extended index " ++"section\n" ++msgstr "" ++"セクション [%2d] '%s': シンボルテーブルは 1 個を越える拡張インデックス" ++"セクションを持てません\n" ++ ++#: ../src/elflint.c:616 ++#, c-format ++msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" ++msgstr "セクション [%2u] '%s': 項目サイズが ElfXX_Sym と一致しません\n" ++ ++#: ../src/elflint.c:625 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %d: %s\n" ++msgstr "セクション [%2d] '%s': シンボル %d を得られません: %s\n" ++ ++#: ../src/elflint.c:630 ../src/elflint.c:633 ../src/elflint.c:636 ++#: ../src/elflint.c:639 ../src/elflint.c:642 ../src/elflint.c:645 ++#, c-format ++msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" ++msgstr "セクション [%2d] '%s': 0番目の項目にある '%s' ゼロではありません\n" ++ ++#: ../src/elflint.c:648 ++#, c-format ++msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" ++msgstr "セクション [%2d] '%s': 0番目の項目用の XINDEX がゼロではありません\n" ++ ++#: ../src/elflint.c:658 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" ++msgstr "セクション [%2d] '%s': シンボル %zu を得られません: %s\n" ++ ++#: ../src/elflint.c:667 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid name value\n" ++msgstr "セクション [%2d] '%s': シンボル %zu: 不当な名前の値\n" ++ ++#: ../src/elflint.c:680 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: too large section index but no extended " ++"section index section\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: 大きすぎるセクションインデックスだが、" ++"拡張セクションインデックスセクションがありません\n" ++ ++#: ../src/elflint.c:686 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " ++"st_shndx (%)\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: st_shndx (%) に適合する" ++"インデックス用に使われる XINDEX\n" ++ ++#. || sym->st_shndx > SHN_HIRESERVE always false ++#: ../src/elflint.c:698 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid section index\n" ++msgstr "セクション [%2d] '%s': シンボル %zu: 不当なセクションインデックス\n" ++ ++#: ../src/elflint.c:706 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown type\n" ++msgstr "セクション [%2d] '%s': シンボル %zu: 不明なタイプ\n" ++ ++#: ../src/elflint.c:712 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" ++msgstr "セクション [%2d] '%s': シンボル %zu: 不明なシンボルバインディング\n" ++ ++#: ../src/elflint.c:717 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: オブジェクトタイプと異なる固有の" ++"シンボル\n" ++ ++#: ../src/elflint.c:725 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: COMMON はリロケータブルファイル内のみ" ++"で許されます\n" ++ ++#: ../src/elflint.c:729 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: ローカルな COMMON シンボルは意味が" ++"ありません\n" ++ ++#: ../src/elflint.c:733 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: COMMON セクションの機能は意味が" ++"ありません\n" ++ ++#: ../src/elflint.c:765 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: st_value 境界外\n" ++ ++#: ../src/elflint.c:771 ../src/elflint.c:796 ../src/elflint.c:839 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu does not fit completely in referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu は参照されるセクション [%2d] '%s' とは" ++"完全に一致しません\n" ++ ++#: ../src/elflint.c:780 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " ++"SHF_TLS flag set\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' は " ++"SHF_TLS フラグが設定されていません\n" ++ ++#: ../src/elflint.c:790 ../src/elflint.c:832 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: st_value 参照されるセクション " ++"[%2d] '%s' の境界外\n" ++ ++#: ../src/elflint.c:817 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: TLS プログラムヘッダー項目がない TLS " ++"シンボル\n" ++ ++#: ../src/elflint.c:825 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%" ++"s'\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: 参照されるセクション [%2d] '%s' の" ++"st_value 不足\n" ++ ++#: ../src/elflint.c:852 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: sh_info に記述された範囲外のローカル" ++"シンボル\n" ++ ++#: ../src/elflint.c:859 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: non-local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: sh_info に記述された範囲外の非ローカル" ++"シンボル\n" ++ ++#: ../src/elflint.c:866 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: 非ローカルセクションシンボル\n" ++ ++#: ../src/elflint.c:916 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%" ++"2d]\n" ++msgstr "" ++"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルが間違ったセクション [%" ++"2d] を参照しています\n" ++ ++#: ../src/elflint.c:923 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%" ++"s'\n" ++msgstr "" ++"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルはセクション [%2d] '%s' " ++"を参照しています\n" ++ ++#. 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. ++#: ../src/elflint.c:939 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " ++"match %s section address %#\n" ++msgstr "" ++"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボル値 %# は" ++" %s のセクションアドレス %# と一致しません\n" ++ ++#: ../src/elflint.c:946 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " ++"match %s section size %\n" ++msgstr "" ++"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルサイズ % は" ++" %s のセクションサイズ % と一致しません\n" ++ ++#: ../src/elflint.c:954 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " ++"section\n" ++msgstr "" ++"セクション [%2d] '%s': _GLOBAL_OFFSET_TABLE_ シンボルはありますが、.got " ++"セクションがありません\n" ++ ++#: ../src/elflint.c:970 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " ++"segment address %#\n" ++msgstr "" ++"セクション [%2d] '%s': _DYNAMIC_ シンボル値 %# は動的セグメント" ++"アドレス %# と一致しません\n" ++ ++#: ../src/elflint.c:977 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " ++"segment size %\n" ++msgstr "" ++"セクション [%2d] '%s': _DYNAMIC シンボルサイズ % は動的セグメント" ++"サイズ % と一致しません\n" ++ ++#: ../src/elflint.c:990 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" ++"default visibility\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: 省略以外の可視性を持った動的シンボル" ++"テーブル中のシンボル\n" ++ ++#: ../src/elflint.c:994 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" ++msgstr "" ++"セクション [%2d] '%s': シンボル %zu: st_other 中に設定された不明なビット\n" ++ ++#: ../src/elflint.c:1039 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" ++msgstr "" ++"セクション [%2d] '%s': この RELA セクション用に使われる DT_RELCOUNT\n" ++ ++#: ../src/elflint.c:1048 ../src/elflint.c:1100 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" ++msgstr "セクション [%2d] '%s': このセクション用には高すぎる DT_RELCOUNT 値 %d\n" ++ ++#: ../src/elflint.c:1073 ../src/elflint.c:1125 ++#, c-format ++msgid "" ++"section [%2d] '%s': relative relocations after index %d as specified by " ++"DT_RELCOUNT\n" ++msgstr "" ++"セクション [%2d] '%s': UT_RELOCOUNT で指定されたインデックス %d 後の相対" ++"リロケーション\n" ++ ++#: ../src/elflint.c:1079 ../src/elflint.c:1131 ++#, c-format ++msgid "" ++"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " ++"specified %d relative relocations\n" ++msgstr "" ++"セクション [%2d] '%s': インデックス %zu での非相対リロケーション; " ++" %d 相対リロケーションで指定された DT_RELCOUNT\n" ++ ++#: ../src/elflint.c:1091 ++#, c-format ++msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" ++msgstr "セクション [%2d] '%s': この REL セクション用に使われる DT_RELACOUNT\n" ++ ++#: ../src/elflint.c:1173 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section index\n" ++msgstr "" ++"セクション [%2d] '%s': 不当な宛先セクションインデックス\n" ++ ++#: ../src/elflint.c:1186 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section type\n" ++msgstr "セクション [%2d] '%s': 不当な宛先セクションタイプ\n" ++ ++#: ../src/elflint.c:1194 ++#, c-format ++msgid "section [%2d] '%s': sh_info should be zero\n" ++msgstr "セクション [%2d] '%s': sh_info はゼロでなければなりません\n" ++ ++#: ../src/elflint.c:1201 ++#, c-format ++msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" ++msgstr "" ++"セクション [%2d] '%s': マージできるセクションのリロケーションは不可能です\n" ++ ++#: ../src/elflint.c:1208 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" ++msgstr "" ++"セクション [%2d] '%s': セクション項目サイズが ElfXX_Rela と一致しません\n" ++ ++#: ../src/elflint.c:1268 ++#, c-format ++msgid "text relocation flag set but there is no read-only segment\n" ++msgstr "" ++"テキストリロケーションフラグが設定されていますが、読込み専用セグメントが" ++"ありません\n" ++ ++#: ../src/elflint.c:1295 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid type\n" ++msgstr "" ++"セクション [%2d] '%s': リロケーション %zu: 不当なタイプ\n" ++ ++#: ../src/elflint.c:1303 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: relocation type invalid for the file " ++"type\n" ++msgstr "" ++"セクション [%2d] '%s': リロケーション %zu: このファイル用のリロケーション" ++"タイプは不当です\n" ++ ++#: ../src/elflint.c:1311 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" ++msgstr "セクション [%2d] '%s': リロケーション %zu: 不当なシンボルインデックス\n" ++ ++#: ../src/elflint.c:1329 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " ++"be used with %s\n" ++msgstr "" ++"セクション [%2d] '%s': リロケーション %zu: シンボル '_GLOBAL_OFFSET_TABLE_' " ++"のみが %s と一緒に使用できます\n" ++ ++#: ../src/elflint.c:1346 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" ++msgstr "セクション [%2d] '%s': リロケーション %zu: オフセット境界外\n" ++ ++#: ../src/elflint.c:1361 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: copy relocation against symbol of type %" ++"s\n" ++msgstr "" ++"セクション [%2d] '%s': リロケーション %zu: タイプ %s のシンボルに対する" ++"コピーリロケーション\n" ++ ++#: ../src/elflint.c:1382 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: read-only section modified but text " ++"relocation flag not set\n" ++msgstr "" ++"セクション [%2d] '%s': リロケーション %zu: 読込み専用セクションが変更され" ++"ましたが、テキストリロケーションフラグが設定されていません\n" ++ ++#: ../src/elflint.c:1397 ++#, c-format ++msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" ++msgstr "" ++"セクション [%2d] '%s': リロケーションがロードされたデータとロードされなかった" ++"データに対してです\n" ++ ++#: ../src/elflint.c:1436 ../src/elflint.c:1486 ++#, c-format ++msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1566 ++#, c-format ++msgid "more than one dynamic section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1584 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" ++msgstr "" ++ ++#: ../src/elflint.c:1589 ../src/elflint.c:1881 ++#, c-format ++msgid "section [%2d] '%s': sh_info not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1599 ++#, c-format ++msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1607 ++#, c-format ++msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:1614 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: unknown tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:1625 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1635 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" ++msgstr "" ++ ++#: ../src/elflint.c:1653 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" ++msgstr "" ++ ++#: ../src/elflint.c:1675 ++#, 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:1718 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1733 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must be valid offset in section [%" ++"2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:1753 ../src/elflint.c:1781 ++#, c-format ++msgid "section [%2d] '%s': contains %s entry but not %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1765 ++#, c-format ++msgid "section [%2d] '%s': mandatory tag %s not present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1774 ++#, c-format ++msgid "section [%2d] '%s': no hash section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1789 ../src/elflint.c:1796 ++#, c-format ++msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1806 ../src/elflint.c:1810 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" ++msgstr "" ++ ++#: ../src/elflint.c:1816 ++#, c-format ++msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" ++msgstr "" ++ ++#: ../src/elflint.c:1827 ../src/elflint.c:1831 ../src/elflint.c:1835 ++#: ../src/elflint.c:1839 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:1851 ++#, c-format ++msgid "" ++"section [%2d] '%s': only relocatable files can have extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1861 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index section not for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1866 ++#, c-format ++msgid "cannot get data for symbol section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1869 ++#, c-format ++msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" ++msgstr "" ++ ++#: ../src/elflint.c:1876 ++#, c-format ++msgid "section [%2d] '%s': extended index table too small for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1891 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " ++"same symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1902 ++#, c-format ++msgid "symbol 0 should have zero extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1914 ++#, c-format ++msgid "cannot get data for symbol %zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:1919 ++#, c-format ++msgid "extended section index is % but symbol index is not XINDEX\n" ++msgstr "" ++ ++#: ../src/elflint.c:1935 ../src/elflint.c:1976 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:1947 ../src/elflint.c:1988 ++#, c-format ++msgid "section [%2d] '%s': chain array too large\n" ++msgstr "" ++ ++#: ../src/elflint.c:1956 ../src/elflint.c:1997 ++#, c-format ++msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1962 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2003 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference % out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2018 ++#, c-format ++msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2029 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected at " ++"least%ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2037 ++#, c-format ++msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2069 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" ++msgstr "" ++ ++#: ../src/elflint.c:2090 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " ++"undefined\n" ++msgstr "" ++ ++#: ../src/elflint.c:2101 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" ++msgstr "" ++ ++#: ../src/elflint.c:2132 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2137 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2143 ++#, c-format ++msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2156 ++#, c-format ++msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:2174 ++#, c-format ++msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2182 ++#, c-format ++msgid "section [%2d] '%s': hash table entry size incorrect\n" ++msgstr "" ++ ++#: ../src/elflint.c:2187 ++#, c-format ++msgid "section [%2d] '%s': not marked to be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:2192 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table has not even room for initial administrative " ++"entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:2240 ++#, c-format ++msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" ++msgstr "" ++ ++#: ../src/elflint.c:2318 ../src/elflint.c:2322 ++#, c-format ++msgid "section [%2zu] '%s': reference to symbol index 0\n" ++msgstr "" ++ ++#: ../src/elflint.c:2329 ++#, 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:2341 ++#, 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:2357 ++#, c-format ++msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:2377 ++#, c-format ++msgid "" ++"section [%2d] '%s': section groups only allowed in relocatable object files\n" ++msgstr "" ++ ++#: ../src/elflint.c:2388 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol table: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2393 ++#, c-format ++msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2399 ++#, c-format ++msgid "section [%2d] '%s': invalid symbol index in sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:2404 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:2411 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol for signature\n" ++msgstr "" ++ ++#: ../src/elflint.c:2416 ++#, c-format ++msgid "section [%2d] '%s': signature symbol canot be empty string\n" ++msgstr "" ++ ++#: ../src/elflint.c:2422 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not set correctly\n" ++msgstr "" ++ ++#: ../src/elflint.c:2428 ++#, c-format ++msgid "section [%2d] '%s': cannot get data: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2437 ++#, c-format ++msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2442 ++#, c-format ++msgid "section [%2d] '%s': section group without flags word\n" ++msgstr "" ++ ++#: ../src/elflint.c:2448 ++#, c-format ++msgid "section [%2d] '%s': section group without member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2452 ++#, c-format ++msgid "section [%2d] '%s': section group with only one member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2463 ++#, c-format ++msgid "section [%2d] '%s': unknown section group flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:2475 ++#, c-format ++msgid "section [%2d] '%s': section index %Zu out of range\n" ++msgstr "" ++ ++#: ../src/elflint.c:2484 ++#, c-format ++msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2491 ++#, c-format ++msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2497 ++#, c-format ++msgid "" ++"section [%2d] '%s': element %Zu references section [%2d] '%s' without " ++"SHF_GROUP flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:2504 ++#, c-format ++msgid "section [%2d] '%s' is contained in more than one section group\n" ++msgstr "" ++ ++#: ../src/elflint.c:2693 ++#, 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:2704 ++#, c-format ++msgid "" ++"section [%2d] '%s' has different number of entries than symbol table [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2720 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: cannot read version data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2736 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" ++msgstr "" ++ ++#: ../src/elflint.c:2744 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2758 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2763 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for defined version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2773 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for requested version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2825 ++#, c-format ++msgid "more than one version reference section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2833 ../src/elflint.c:2962 ++#, c-format ++msgid "section [%2d] '%s': sh_link does not link to string table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2856 ../src/elflint.c:3014 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong version %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2862 ../src/elflint.c:3020 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2870 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid file reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2878 ++#, c-format ++msgid "section [%2d] '%s': entry %d references unknown dependency\n" ++msgstr "" ++ ++#: ../src/elflint.c:2890 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:2897 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " ++"reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2904 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %" ++"#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:2914 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " ++"name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2925 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" ++msgstr "" ++ ++#: ../src/elflint.c:2941 ../src/elflint.c:3099 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:2954 ++#, c-format ++msgid "more than one version definition section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2999 ++#, c-format ++msgid "section [%2d] '%s': more than one BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3003 ++#, c-format ++msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" ++msgstr "" ++ ++#: ../src/elflint.c:3009 ++#, c-format ++msgid "section [%2d] '%s': entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3033 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:3040 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:3049 ++#, c-format ++msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3068 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3083 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3105 ++#, c-format ++msgid "section [%2d] '%s': no BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3121 ++#, c-format ++msgid "section [%2d] '%s': unknown parent version '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3134 ++#, c-format ++msgid "section [%2d] '%s': empty object attributes section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3155 ++#, c-format ++msgid "section [%2d] '%s': unrecognized attribute format\n" ++msgstr "" ++ ++#: ../src/elflint.c:3171 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3180 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3192 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" ++msgstr "" ++ ++#: ../src/elflint.c:3209 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3218 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3227 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" ++msgstr "" ++ ++#: ../src/elflint.c:3240 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/elflint.c:3251 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3269 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3280 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" ++msgstr "" ++ ++#: ../src/elflint.c:3293 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3297 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3307 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" ++msgstr "" ++ ++#: ../src/elflint.c:3313 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3402 ++#, c-format ++msgid "cannot get section header of zeroth section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3406 ++#, c-format ++msgid "zeroth section has nonzero name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3408 ++#, c-format ++msgid "zeroth section has nonzero type\n" ++msgstr "" ++ ++#: ../src/elflint.c:3410 ++#, c-format ++msgid "zeroth section has nonzero flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:3412 ++#, c-format ++msgid "zeroth section has nonzero address\n" ++msgstr "" ++ ++#: ../src/elflint.c:3414 ++#, c-format ++msgid "zeroth section has nonzero offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:3416 ++#, c-format ++msgid "zeroth section has nonzero info field\n" ++msgstr "" ++ ++#: ../src/elflint.c:3418 ++#, c-format ++msgid "zeroth section has nonzero align value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3420 ++#, c-format ++msgid "zeroth section has nonzero entry size value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3423 ++#, c-format ++msgid "" ++"zeroth section has nonzero size value while ELF header has nonzero shnum " ++"value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3427 ++#, c-format ++msgid "" ++"zeroth section has nonzero link value while ELF header does not signal " ++"overflow in shstrndx\n" ++msgstr "" ++ ++#: ../src/elflint.c:3444 ++#, c-format ++msgid "cannot get section header for section [%2zu] '%s': %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3453 ++#, c-format ++msgid "section [%2zu]: invalid name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3480 ++#, c-format ++msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3496 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3513 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3531 ++#, c-format ++msgid "section [%2zu] '%s' present in object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3537 ../src/elflint.c:3569 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3542 ../src/elflint.c:3574 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " ++"segments\n" ++msgstr "" ++ ++#: ../src/elflint.c:3550 ++#, c-format ++msgid "" ++"section [%2zu] '%s' is extension section index table in non-object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3593 ++#, c-format ++msgid "section [%2zu] '%s': size not multiple of entry size\n" ++msgstr "" ++ ++#: ../src/elflint.c:3598 ++#, c-format ++msgid "cannot get section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:3608 ++#, c-format ++msgid "section [%2zu] '%s' has unsupported type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3622 ++#, c-format ++msgid "" ++"section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3629 ++#, c-format ++msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3637 ++#, c-format ++msgid "section [%2zu] '%s': thread-local data sections address not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3645 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in link value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3650 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in info value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3657 ++#, c-format ++msgid "section [%2zu] '%s': strings flag set without merge flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3662 ++#, c-format ++msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3680 ++#, c-format ++msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3689 ++#, c-format ++msgid "section [%2zu] '%s' is both executable and writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:3716 ++#, c-format ++msgid "" ++"section [%2zu] '%s' not fully contained in segment of program header entry %" ++"d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3724 ++#, 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:3733 ++#, 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:3744 ++#, c-format ++msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3754 ++#, c-format ++msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3764 ++#, c-format ++msgid "" ++"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3770 ++#, 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:3778 ++#, c-format ++msgid "" ++"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:3829 ++#, c-format ++msgid "more than one version symbol table present\n" ++msgstr "" ++ ++#: ../src/elflint.c:3852 ++#, c-format ++msgid "INTERP program header entry but no .interp section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3863 ++#, c-format ++msgid "" ++"loadable segment [%u] is executable but contains no executable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3869 ++#, c-format ++msgid "loadable segment [%u] is writable but contains no writable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3880 ++#, c-format ++msgid "" ++"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " ++"exist\n" ++msgstr "" ++ ++#: ../src/elflint.c:3893 ++#, c-format ++msgid "duplicate version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3907 ++#, c-format ++msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" ++msgstr "" ++ ++#: ../src/elflint.c:3956 ++#, c-format ++msgid "phdr[%d]: unknown core file note type % at offset %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3960 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown core file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3983 ++#, c-format ++msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3987 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:4004 ++#, c-format ++msgid "phdr[%d]: no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4023 ++#, c-format ++msgid "phdr[%d]: cannot get content of note section: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4026 ++#, c-format ++msgid "phdr[%d]: extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4047 ++#, c-format ++msgid "section [%2d] '%s': no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4054 ++#, c-format ++msgid "section [%2d] '%s': cannot get content of note section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4057 ++#, c-format ++msgid "section [%2d] '%s': extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4075 ++#, c-format ++msgid "" ++"only executables, shared objects, and core files can have program headers\n" ++msgstr "" ++ ++#: ../src/elflint.c:4090 ++#, c-format ++msgid "cannot get program header entry %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4099 ++#, c-format ++msgid "program header entry %d: unknown program header entry type %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:4110 ++#, c-format ++msgid "more than one INTERP entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4118 ++#, c-format ++msgid "more than one TLS entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4125 ++#, c-format ++msgid "static executable cannot have dynamic sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:4139 ++#, c-format ++msgid "dynamic section reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4142 ++#, c-format ++msgid "dynamic section size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4152 ++#, c-format ++msgid "more than one GNU_RELRO entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4173 ++#, c-format ++msgid "loadable segment GNU_RELRO applies to is not writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4176 ++#, c-format ++msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:4184 ../src/elflint.c:4207 ++#, c-format ++msgid "%s segment not contained in a loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4213 ++#, c-format ++msgid "program header offset in ELF header and PHDR entry do not match" ++msgstr "" ++ ++#: ../src/elflint.c:4237 ++#, c-format ++msgid "call frame search table reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4240 ++#, c-format ++msgid "call frame search table size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4253 ++#, c-format ++msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4261 ++#, c-format ++msgid "call frame search table must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4264 ++#, c-format ++msgid "section [%2zu] '%s' must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4268 ++#, c-format ++msgid "call frame search table must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4271 ++#, c-format ++msgid "section [%2zu] '%s' must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4276 ++#, c-format ++msgid "call frame search table must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4279 ++#, c-format ++msgid "section [%2zu] '%s' must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4290 ++#, c-format ++msgid "program header entry %d: file size greater than memory size\n" ++msgstr "" ++ ++#: ../src/elflint.c:4297 ++#, c-format ++msgid "program header entry %d: alignment not a power of 2\n" ++msgstr "" ++ ++#: ../src/elflint.c:4300 ++#, c-format ++msgid "" ++"program header entry %d: file offset and virtual address not module of " ++"alignment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4313 ++#, c-format ++msgid "" ++"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " ++"program header entry" ++msgstr "" ++ ++#: ../src/elflint.c:4347 ++#, c-format ++msgid "cannot read ELF header: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4373 ++#, c-format ++msgid "text relocation flag set but not needed\n" ++msgstr "" ++ ++#: ../src/addr2line.c:66 ++msgid "Output selection options:" ++msgstr "" ++ ++#: ../src/addr2line.c:67 ++msgid "Show only base names of source files" ++msgstr "" ++ ++#: ../src/addr2line.c:69 ++msgid "Show absolute file names using compilation directory" ++msgstr "" ++ ++#: ../src/addr2line.c:70 ++msgid "Also show function names" ++msgstr "" ++ ++#: ../src/addr2line.c:71 ++msgid "Also show symbol or section names" ++msgstr "" ++ ++#: ../src/addr2line.c:73 ++msgid "Treat addresses as offsets relative to NAME section." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/addr2line.c:84 ++msgid "" ++"Locate source files and line information for ADDRs (in a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/addr2line.c:88 ++msgid "[ADDR...]" ++msgstr "" ++ ++#: ../src/addr2line.c:405 ++#, c-format ++msgid "Section syntax requires exactly one module" ++msgstr "" ++ ++#: ../src/addr2line.c:428 ++#, c-format ++msgid "offset %# lies outside section '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:461 ++#, c-format ++msgid "cannot find symbol '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:466 ++#, c-format ++msgid "offset %# lies outside contents of '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:70 ++msgid "Input Selection:" ++msgstr "" ++ ++#: ../src/findtextrel.c:71 ++msgid "Prepend PATH to all file names" ++msgstr "" ++ ++#: ../src/findtextrel.c:73 ++msgid "Use PATH as root of debuginfo hierarchy" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/findtextrel.c:80 ++msgid "Locate source of text relocations in FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/findtextrel.c:236 ../src/elfcmp.c:578 ../src/ranlib.c:186 ++#, c-format ++msgid "cannot create ELF descriptor for '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:246 ++#, c-format ++msgid "cannot get ELF header '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:257 ++#, c-format ++msgid "'%s' is not a DSO or PIE" ++msgstr "" ++ ++#: ../src/findtextrel.c:274 ++#, c-format ++msgid "getting get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:292 ++#, c-format ++msgid "cannot read dynamic section: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:307 ++#, c-format ++msgid "no text relocations reported in '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:319 ++#, c-format ++msgid "while reading ELF file" ++msgstr "" ++ ++#: ../src/findtextrel.c:328 ../src/findtextrel.c:345 ++#, c-format ++msgid "cannot get program header index at offset %d: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:397 ++#, c-format ++msgid "cannot get section header of section %Zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:409 ++#, c-format ++msgid "cannot get symbol table section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:429 ../src/findtextrel.c:452 ++#, c-format ++msgid "cannot get relocation at index %d in section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:517 ++#, c-format ++msgid "%s not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:570 ++#, c-format ++msgid "" ++"the file containing the function '%s' is not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:577 ../src/findtextrel.c:597 ++#, c-format ++msgid "" ++"the file containing the function '%s' might not be compiled with -fpic/-" ++"fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:585 ++#, 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:605 ++#, c-format ++msgid "" ++"a relocation modifies memory at offset %llu in a write-protected segment\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:69 ++msgid "Control options:" ++msgstr "" ++ ++#: ../src/elfcmp.c:70 ++msgid "" ++"Control treatment of gaps in loadable segments [ignore|match] (default: " ++"ignore)" ++msgstr "" ++ ++#: ../src/elfcmp.c:72 ++msgid "Ignore permutation of buckets in SHT_HASH section" ++msgstr "" ++ ++#: ../src/elfcmp.c:73 ++msgid "Output nothing; yield exit status only" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elfcmp.c:80 ++msgid "Compare relevant parts of two ELF files for equality." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/elfcmp.c:84 ++msgid "FILE1 FILE2" ++msgstr "" ++ ++#: ../src/elfcmp.c:140 ++msgid "Invalid number of parameters.\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:168 ../src/elfcmp.c:173 ++#, c-format ++msgid "cannot get ELF header of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:190 ++#, c-format ++msgid "%s %s diff: ELF header" ++msgstr "" ++ ++#: ../src/elfcmp.c:248 ++#, c-format ++msgid "%s %s differ: section header" ++msgstr "" ++ ++#: ../src/elfcmp.c:276 ../src/elfcmp.c:282 ++#, c-format ++msgid "cannot get content of section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:298 ../src/elfcmp.c:304 ++#, c-format ++msgid "cannot get symbol in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:325 ++#, c-format ++msgid "%s %s differ: symbol table [%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:328 ++#, c-format ++msgid "%s %s differ: symbol table [%zu,%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:376 ++#, c-format ++msgid "%s %s differ: section [%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:380 ++#, c-format ++msgid "%s %s differ: section [%zu,%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:396 ++#, c-format ++msgid "%s %s differ: unequal amount of important sections" ++msgstr "" ++ ++#: ../src/elfcmp.c:430 ../src/elfcmp.c:435 ++#, c-format ++msgid "cannot load data of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:454 ../src/elfcmp.c:460 ++#, c-format ++msgid "cannot get program header entry %d of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:466 ++#, c-format ++msgid "%s %s differ: program header %d" ++msgstr "" ++ ++#: ../src/elfcmp.c:491 ++#, c-format ++msgid "%s %s differ: gap" ++msgstr "" ++ ++#: ../src/elfcmp.c:550 ++#, c-format ++msgid "Invalid value '%s' for --gaps parameter." ++msgstr "" ++ ++#: ../src/elfcmp.c:583 ++#, c-format ++msgid "cannot create EBL descriptor for '%s'" ++msgstr "" ++ ++#: ../src/elfcmp.c:601 ++#, c-format ++msgid "cannot get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:611 ++#, c-format ++msgid "cannot get content of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:621 ../src/elfcmp.c:635 ++#, c-format ++msgid "cannot get relocation: %s" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ranlib.c:74 ++msgid "Generate an index to speed access to archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ranlib.c:77 ++msgid "ARCHIVE" ++msgstr "" ++ ++#: ../src/ranlib.c:116 ++#, c-format ++msgid "Archive name required" ++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/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 "" ++ ++#. Short description of program. ++#: ../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 ../src/strings.c:680 ++#, c-format ++msgid "re-mmap failed" ++msgstr "" ++ ++#: ../src/strings.c:653 ++#, c-format ++msgid "mprotect failed" ++msgstr "" ++ ++#: ../src/unstrip.c:77 ++msgid "Match MODULE against file names, not module names" ++msgstr "" ++ ++#: ../src/unstrip.c:78 ++msgid "Silently skip unfindable files" ++msgstr "" ++ ++#: ../src/unstrip.c:81 ++msgid "Place output into FILE" ++msgstr "" ++ ++#: ../src/unstrip.c:83 ++msgid "Create multiple output files under DIRECTORY" ++msgstr "" ++ ++#: ../src/unstrip.c:84 ++msgid "Use module rather than file names" ++msgstr "" ++ ++#: ../src/unstrip.c:86 ++msgid "Create output for modules that have no separate debug information" ++msgstr "" ++ ++#: ../src/unstrip.c:89 ++msgid "Apply relocations to section contents in ET_REL files" ++msgstr "" ++ ++#: ../src/unstrip.c:91 ++msgid "Only list module and file names, build IDs" ++msgstr "" ++ ++#: ../src/unstrip.c:133 ++#, c-format ++msgid "-d option specified twice" ++msgstr "" ++ ++#: ../src/unstrip.c:165 ++#, c-format ++msgid "only one of -o or -d allowed" ++msgstr "" ++ ++#: ../src/unstrip.c:174 ++#, c-format ++msgid "-n cannot be used with explicit files or -o or -d" ++msgstr "" ++ ++#: ../src/unstrip.c:189 ++#, c-format ++msgid "output directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:198 ++#, c-format ++msgid "exactly two file arguments are required" ++msgstr "" ++ ++#: ../src/unstrip.c:204 ++#, c-format ++msgid "-m, -a, -R, and -i options not allowed with explicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:217 ++#, c-format ++msgid "-o or -d is required when using implicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:253 ++#, c-format ++msgid "cannot create ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:258 ++#, c-format ++msgid "cannot copy ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:263 ../src/unstrip.c:1816 ++#, c-format ++msgid "cannot create program headers: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:269 ++#, c-format ++msgid "cannot copy program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:279 ++#, c-format ++msgid "cannot copy section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:282 ../src/unstrip.c:1504 ++#, c-format ++msgid "cannot get section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:284 ../src/unstrip.c:1506 ++#, c-format ++msgid "cannot copy section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:308 ++#, c-format ++msgid "cannot create directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:348 ../src/unstrip.c:762 ../src/unstrip.c:1539 ++#, c-format ++msgid "cannot get symbol table entry: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:364 ../src/unstrip.c:579 ../src/unstrip.c:600 ++#: ../src/unstrip.c:612 ../src/unstrip.c:1560 ../src/unstrip.c:1690 ++#: ../src/unstrip.c:1714 ++#, c-format ++msgid "cannot update symbol table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:381 ../src/unstrip.c:431 ../src/unstrip.c:561 ++#: ../src/unstrip.c:1208 ../src/unstrip.c:1524 ../src/unstrip.c:1719 ++#: ../src/unstrip.c:1790 ++#, c-format ++msgid "cannot update section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:407 ../src/unstrip.c:418 ++#, c-format ++msgid "cannot update relocation: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:506 ++#, c-format ++msgid "cannot get symbol version: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:518 ++#, c-format ++msgid "unexpected section type in [%Zu] with sh_link to symtab" ++msgstr "" ++ ++#: ../src/unstrip.c:768 ++#, c-format ++msgid "invalid string offset in symbol [%Zu]" ++msgstr "" ++ ++#: ../src/unstrip.c:910 ../src/unstrip.c:1247 ++#, c-format ++msgid "cannot read section [%Zu] name: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:951 ../src/unstrip.c:970 ../src/unstrip.c:1003 ++#, c-format ++msgid "cannot read '.gnu.prelink_undo' section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:991 ++#, c-format ++msgid "invalid contents in '%s' section" ++msgstr "" ++ ++#: ../src/unstrip.c:1046 ../src/unstrip.c:1369 ++#, c-format ++msgid "cannot find matching section for [%Zu] '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:1170 ../src/unstrip.c:1185 ../src/unstrip.c:1450 ++#, c-format ++msgid "cannot add section name to string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1194 ++#, c-format ++msgid "cannot update section header string table data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1222 ../src/unstrip.c:1226 ++#, c-format ++msgid "cannot get section header string table section index: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1230 ../src/unstrip.c:1234 ../src/unstrip.c:1465 ++#, c-format ++msgid "cannot get section count: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1292 ../src/unstrip.c:1384 ++#, c-format ++msgid "cannot read section header string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1444 ++#, c-format ++msgid "cannot add new section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1547 ++#, c-format ++msgid "symbol [%Zu] has invalid section index" ++msgstr "" ++ ++#: ../src/unstrip.c:1799 ++#, c-format ++msgid "cannot get ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1826 ++#, c-format ++msgid "cannot update program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1831 ../src/unstrip.c:1910 ++#, c-format ++msgid "cannot write output file: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1879 ++#, c-format ++msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1882 ++#, c-format ++msgid "" ++"DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1901 ../src/unstrip.c:1941 ../src/unstrip.c:1953 ++#: ../src/unstrip.c:2033 ++#, c-format ++msgid "cannot create ELF descriptor: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1959 ++#, c-format ++msgid "'%s' and '%s' do not seem to match" ++msgstr "" ++ ++#: ../src/unstrip.c:1990 ++#, c-format ++msgid "cannot find stripped file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1994 ++#, c-format ++msgid "cannot open stripped file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2009 ++#, c-format ++msgid "cannot find debug file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2013 ++#, c-format ++msgid "cannot open debug file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2026 ++#, c-format ++msgid "module '%s' file '%s' is not stripped" ++msgstr "" ++ ++#: ../src/unstrip.c:2057 ++#, c-format ++msgid "cannot cache section addresses for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2190 ++#, c-format ++msgid "no matching modules found" ++msgstr "" ++ ++#: ../src/unstrip.c:2199 ++#, c-format ++msgid "matched more than one module" ++msgstr "" ++ ++#: ../src/unstrip.c:2246 ++msgid "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++msgstr "" ++ ++#: ../src/unstrip.c:2247 ++msgid "" ++"Combine stripped files with separate symbols and debug information. 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." ++msgstr "" ++ ++#: ../src/objdump.c:61 ++msgid "Mode selection:" ++msgstr "" ++ ++#: ../src/objdump.c:62 ++msgid "Display relocation information." ++msgstr "" ++ ++#: ../src/objdump.c:64 ++msgid "Display the full contents of all sections requested" ++msgstr "" ++ ++#: ../src/objdump.c:66 ++msgid "Display assembler code of executable sections" ++msgstr "" ++ ++#: ../src/objdump.c:68 ++msgid "Output option selection:" ++msgstr "" ++ ++#: ../src/objdump.c:70 ++msgid "Only display information for section NAME." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/objdump.c:76 ++msgid "Show information from FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/objdump.c:274 ../src/objdump.c:286 ++#, c-format ++msgid "while close `%s'" ++msgstr "" ++ ++#: ../src/objdump.c:510 ++#, c-format ++msgid "" ++"\n" ++"RELOCATION RECORDS FOR [%s]:\n" ++"%-*s TYPE VALUE\n" ++msgstr "" ++ ++#: ../src/objdump.c:513 ++msgid "OFFSET" ++msgstr "" ++ ++#: ../src/objdump.c:576 ++#, c-format ++msgid "Contents of section %s:\n" ++msgstr "" ++ ++#: ../src/objdump.c:676 ++#, c-format ++msgid "cannot disassemble" ++msgstr "" +diff --git a/po/nl.po b/po/nl.po +new file mode 100644 +index 0000000..38066c9 +--- /dev/null ++++ b/po/nl.po +@@ -0,0 +1,5610 @@ ++# Dutch translation of elfutils ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++# Geert Warrink , 2009. ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: Elfutils\n" ++"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" ++"POT-Creation-Date: 2009-09-01 14:45+0000\n" ++"PO-Revision-Date: 2009-09-01 18:02+0200\n" ++"Last-Translator: Geert Warrink \n" ++"Language-Team: nl \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: \n" ++ ++#: ../lib/xmalloc.c:51 ../lib/xmalloc.c:65 ../lib/xmalloc.c:79 ++#: ../src/readelf.c:2796 ../src/readelf.c:3135 ../src/unstrip.c:2086 ++#: ../src/unstrip.c:2294 ++#, c-format ++msgid "memory exhausted" ++msgstr "" ++ ++#: ../libelf/elf_error.c:81 ../libasm/asm_error.c:62 ../libdw/dwarf_error.c:79 ++msgid "no error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:84 ../libasm/asm_error.c:81 ../libdw/dwarf_error.c:80 ++msgid "unknown error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:88 ++msgid "unknown version" ++msgstr "" ++ ++#: ../libelf/elf_error.c:92 ++msgid "unknown type" ++msgstr "" ++ ++#: ../libelf/elf_error.c:96 ++msgid "invalid `Elf' handle" ++msgstr "" ++ ++#: ../libelf/elf_error.c:100 ++msgid "invalid size of source operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:104 ++msgid "invalid size of destination operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:108 ../src/readelf.c:4742 ++#, c-format ++msgid "invalid encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:112 ../libasm/asm_error.c:63 ++#: ../libdw/dwarf_error.c:88 ++msgid "out of memory" ++msgstr "" ++ ++#: ../libelf/elf_error.c:116 ++msgid "invalid file descriptor" ++msgstr "" ++ ++#: ../libelf/elf_error.c:120 ++msgid "invalid operation" ++msgstr "" ++ ++#: ../libelf/elf_error.c:124 ++msgid "ELF version not set" ++msgstr "" ++ ++#: ../libelf/elf_error.c:128 ../libelf/elf_error.c:176 ++#: ../libdw/dwarf_error.c:90 ++msgid "invalid command" ++msgstr "" ++ ++#: ../libelf/elf_error.c:132 ../libelf/elf_error.c:192 ++msgid "offset out of range" ++msgstr "" ++ ++#: ../libelf/elf_error.c:136 ++msgid "invalid fmag field in archive header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:140 ++msgid "invalid archive file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:144 ++msgid "descriptor is not for an archive" ++msgstr "" ++ ++#: ../libelf/elf_error.c:148 ++msgid "no index available" ++msgstr "" ++ ++#: ../libelf/elf_error.c:152 ++msgid "cannot read data from file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:156 ++msgid "cannot write data to file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:160 ++msgid "invalid binary class" ++msgstr "" ++ ++#: ../libelf/elf_error.c:164 ++msgid "invalid section index" ++msgstr "" ++ ++#: ../libelf/elf_error.c:168 ++msgid "invalid operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:172 ++msgid "invalid section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:180 ++msgid "executable header not created first" ++msgstr "" ++ ++#: ../libelf/elf_error.c:184 ++msgid "file descriptor disabled" ++msgstr "" ++ ++#: ../libelf/elf_error.c:188 ++msgid "archive/member fildes mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:196 ++msgid "cannot manipulate null section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:200 ++msgid "data/scn mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:204 ++msgid "invalid section header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:208 ../src/readelf.c:6226 ../src/readelf.c:6327 ++#, c-format ++msgid "invalid data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:212 ++msgid "unknown data encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:216 ++msgid "section `sh_size' too small for data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:220 ++msgid "invalid section alignment" ++msgstr "" ++ ++#: ../libelf/elf_error.c:224 ++msgid "invalid section entry size" ++msgstr "" ++ ++#: ../libelf/elf_error.c:228 ++msgid "update() for write on read-only file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:232 ++msgid "no such file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:236 ++msgid "only relocatable files can contain section groups" ++msgstr "" ++ ++#: ../libelf/elf_error.c:241 ++msgid "" ++"program header only allowed in executables, shared objects, and core files" ++msgstr "" ++ ++#: ../libelf/elf_error.c:248 ++msgid "file has no program header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:253 ../libdw/dwarf_error.c:112 ++msgid "invalid offset" ++msgstr "" ++ ++#: ../libasm/asm_error.c:64 ../src/ldgeneric.c:2687 ++#, c-format ++msgid "cannot create output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:65 ++msgid "invalid parameter" ++msgstr "" ++ ++#: ../libasm/asm_error.c:66 ++msgid "cannot change mode of output file" ++msgstr "" ++ ++#. Something went wrong. ++#: ../libasm/asm_error.c:67 ../src/ldgeneric.c:7001 ++#, c-format ++msgid "cannot rename output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:68 ++msgid "duplicate symbol" ++msgstr "" ++ ++#: ../libasm/asm_error.c:69 ++msgid "invalid section type for operation" ++msgstr "" ++ ++#: ../libasm/asm_error.c:70 ++msgid "error during output of data" ++msgstr "" ++ ++#: ../libasm/asm_error.c:71 ++msgid "no backend support available" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:81 ++msgid "invalid access" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:82 ++msgid "no regular file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:83 ++msgid "I/O error" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:84 ++msgid "invalid ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:85 ++msgid "no DWARF information" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:86 ++msgid "no ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:87 ++msgid "cannot get ELF header" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:89 ++msgid "not implemented" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:91 ++msgid "invalid version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:92 ++msgid "invalid file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:93 ++msgid "no entries found" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:94 ++msgid "invalid DWARF" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:95 ++msgid "no string data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:96 ++msgid "no address value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:97 ++msgid "no constant value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:98 ++msgid "no reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:99 ++msgid "invalid reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:100 ++msgid ".debug_line section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:101 ++msgid "invalid .debug_line section" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:102 ++msgid "debug information too big" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:103 ++msgid "invalid DWARF version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:104 ++msgid "invalid directory index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:105 ++msgid "address out of range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:106 ++msgid "no location list value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:107 ++msgid "no block data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:108 ++msgid "invalid line index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:109 ++msgid "invalid address range index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:110 ++msgid "no matching address range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:111 ++msgid "no flag value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:113 ++msgid ".debug_ranges section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:114 ++msgid "invalid CFI section" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:67 ../src/unstrip.c:2236 ++msgid "Input selection options:" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:68 ++msgid "Find addresses in FILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:70 ++msgid "Find addresses from signatures found in COREFILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:72 ++msgid "Find addresses in files mapped into process PID" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:74 ++msgid "" ++"Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " ++"format" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:76 ++msgid "Find addresses in the running kernel" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:78 ++msgid "Kernel with all modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:80 ++msgid "Search path for separate debuginfo files" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:163 ++msgid "only one of -e, -p, -k, -K, or --core allowed" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:223 ++#, c-format ++msgid "cannot read ELF core file: %s" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:243 ++msgid "No modules recognized in core file" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:255 ++msgid "cannot load kernel symbols" ++msgstr "" ++ ++#. Non-fatal to have no modules since we do have the kernel. ++#: ../libdwfl/argp-std.c:259 ++msgid "cannot find kernel modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:273 ++msgid "cannot find kernel or modules" ++msgstr "" ++ ++#: ../libebl/eblbackendname.c:63 ++msgid "No backend" ++msgstr "" ++ ++#: ../libebl/eblcorenotetypename.c:107 ../libebl/eblobjecttypename.c:78 ++#: ../libebl/eblobjnotetypename.c:86 ../libebl/eblosabiname.c:98 ++#: ../libebl/eblsectionname.c:110 ../libebl/eblsectiontypename.c:140 ++#: ../libebl/eblsegmenttypename.c:104 ++msgid "" ++msgstr "" ++ ++#: ../libebl/ebldynamictagname.c:126 ++#, c-format ++msgid ": %#" ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:76 ++#, c-format ++msgid " Build ID: " ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:88 ++msgid " Version String: " ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:136 ++#, c-format ++msgid " OS: %s, ABI: " ++msgstr "" ++ ++#: ../libebl/eblosabiname.c:95 ++msgid "Stand alone" ++msgstr "" ++ ++#: ../libebl/eblsymbolbindingname.c:92 ../libebl/eblsymboltypename.c:98 ++#, c-format ++msgid ": %d" ++msgstr "" ++ ++#: ../src/ar.c:75 ++msgid "Commands:" ++msgstr "" ++ ++#: ../src/ar.c:76 ++msgid "Delete files from archive." ++msgstr "" ++ ++#: ../src/ar.c:77 ++msgid "Move files in archive." ++msgstr "" ++ ++#: ../src/ar.c:78 ++msgid "Print files in archive." ++msgstr "" ++ ++#: ../src/ar.c:79 ++msgid "Quick append files to archive." ++msgstr "" ++ ++#: ../src/ar.c:81 ++msgid "Replace existing or insert new file into archive." ++msgstr "" ++ ++#: ../src/ar.c:82 ++msgid "Display content of archive." ++msgstr "" ++ ++#: ../src/ar.c:83 ++msgid "Extract files from archive." ++msgstr "" ++ ++#: ../src/ar.c:85 ++msgid "Command Modifiers:" ++msgstr "" ++ ++#: ../src/ar.c:86 ++msgid "Preserve original dates." ++msgstr "" ++ ++#: ../src/ar.c:87 ++msgid "Use instance [COUNT] of name." ++msgstr "" ++ ++#: ../src/ar.c:89 ++msgid "Do not replace existing files with extracted files." ++msgstr "" ++ ++#: ../src/ar.c:90 ++msgid "Allow filename to be truncated if necessary." ++msgstr "" ++ ++#: ../src/ar.c:92 ++msgid "Provide verbose output." ++msgstr "" ++ ++#: ../src/ar.c:93 ++msgid "Force regeneration of symbol table." ++msgstr "" ++ ++#: ../src/ar.c:94 ++msgid "Insert file after [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:95 ++msgid "Insert file before [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:96 ++msgid "Same as -b." ++msgstr "" ++ ++#: ../src/ar.c:97 ++msgid "Suppress message when library has to be created." ++msgstr "" ++ ++#: ../src/ar.c:99 ++msgid "Use full path for file matching." ++msgstr "" ++ ++#: ../src/ar.c:100 ++msgid "Update only older files in archive." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ar.c:106 ++msgid "Create, modify, and extract from archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ar.c:109 ++msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++msgstr "" ++ ++#: ../src/ar.c:191 ++#, c-format ++msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" ++msgstr "" ++ ++#: ../src/ar.c:196 ++#, c-format ++msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" ++msgstr "" ++ ++#: ../src/ar.c:212 ++#, c-format ++msgid "'N' is only meaningful with the 'x' and 'd' options" ++msgstr "" ++ ++#: ../src/ar.c:217 ++#, c-format ++msgid "COUNT parameter required" ++msgstr "" ++ ++#: ../src/ar.c:229 ++#, c-format ++msgid "invalid COUNT parameter %s" ++msgstr "" ++ ++#: ../src/ar.c:236 ++#, c-format ++msgid "'%' is only meaningful with the 'x' option" ++msgstr "" ++ ++#: ../src/ar.c:242 ++#, c-format ++msgid "archive name required" ++msgstr "" ++ ++#: ../src/ar.c:288 ../src/nm.c:253 ../src/readelf.c:442 ../src/size.c:219 ++#: ../src/strip.c:203 ../src/ld.c:957 ../src/elflint.c:238 ++#: ../src/addr2line.c:185 ../src/findtextrel.c:170 ../src/elfcmp.c:522 ++#: ../src/ranlib.c:136 ../src/strings.c:227 ../src/unstrip.c:233 ++#: ../src/objdump.c:181 ++#, 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/ar.c:293 ../src/nm.c:258 ../src/readelf.c:447 ../src/size.c:224 ++#: ../src/strip.c:208 ../src/ld.c:962 ../src/elflint.c:243 ++#: ../src/addr2line.c:190 ../src/findtextrel.c:175 ../src/elfcmp.c:527 ++#: ../src/ranlib.c:141 ../src/strings.c:232 ../src/unstrip.c:238 ++#: ../src/objdump.c:186 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "" ++ ++#: ../src/ar.c:313 ++#, c-format ++msgid "More than one operation specified" ++msgstr "" ++ ++#: ../src/ar.c:403 ++#, c-format ++msgid "cannot open archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:413 ++#, c-format ++msgid "cannot open archive '%s': %s" ++msgstr "" ++ ++#: ../src/ar.c:417 ++#, c-format ++msgid "%s: not an archive file" ++msgstr "" ++ ++#: ../src/ar.c:421 ++#, c-format ++msgid "cannot stat archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:433 ++#, c-format ++msgid "no entry %s in archive\n" ++msgstr "" ++ ++#: ../src/ar.c:486 ../src/ar.c:928 ../src/ar.c:1128 ++#, c-format ++msgid "cannot create hash table" ++msgstr "" ++ ++#: ../src/ar.c:493 ../src/ar.c:935 ../src/ar.c:1137 ++#, c-format ++msgid "cannot insert into hash table" ++msgstr "" ++ ++#: ../src/ar.c:501 ../src/ranlib.c:176 ++#, c-format ++msgid "cannot stat '%s'" ++msgstr "" ++ ++#: ../src/ar.c:597 ++#, c-format ++msgid "cannot read content of %s: %s" ++msgstr "" ++ ++#: ../src/ar.c:640 ++#, c-format ++msgid "cannot open %.*s" ++msgstr "" ++ ++#: ../src/ar.c:662 ++#, c-format ++msgid "failed to write %s" ++msgstr "" ++ ++#: ../src/ar.c:674 ++#, c-format ++msgid "cannot change mode of %s" ++msgstr "" ++ ++#: ../src/ar.c:690 ++#, c-format ++msgid "cannot change modification time of %s" ++msgstr "" ++ ++#: ../src/ar.c:736 ++#, c-format ++msgid "cannot rename temporary file to %.*s" ++msgstr "" ++ ++#: ../src/ar.c:772 ../src/ar.c:1020 ../src/ar.c:1418 ../src/ranlib.c:250 ++#, c-format ++msgid "cannot create new file" ++msgstr "" ++ ++#: ../src/ar.c:1219 ++#, c-format ++msgid "position member %s not found" ++msgstr "" ++ ++#: ../src/ar.c:1229 ++#, c-format ++msgid "%s: no entry %s in archive!\n" ++msgstr "" ++ ++#: ../src/ar.c:1258 ../src/ldgeneric.c:519 ../src/objdump.c:257 ++#, c-format ++msgid "cannot open %s" ++msgstr "" ++ ++#: ../src/ar.c:1263 ++#, c-format ++msgid "cannot stat %s" ++msgstr "" ++ ++#: ../src/ar.c:1269 ++#, c-format ++msgid "%s is no regular file" ++msgstr "" ++ ++#: ../src/ar.c:1282 ++#, c-format ++msgid "cannot get ELF descriptor for %s: %s\n" ++msgstr "" ++ ++#: ../src/ar.c:1301 ++#, c-format ++msgid "cannot read %s: %s" ++msgstr "" ++ ++#. The archive is too big. ++#: ../src/arlib.c:215 ++#, c-format ++msgid "the archive '%s' is too large" ++msgstr "" ++ ++#: ../src/arlib.c:228 ++#, c-format ++msgid "cannot read ELF header of %s(%s): %s" ++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 ../src/unstrip.c:80 ++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:75 ../src/findtextrel.c:75 ++#: ../src/elfcmp.c:75 ../src/strings.c:83 ++msgid "Miscellaneous:" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/nm.c:108 ++msgid "List symbols from FILEs (a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/nm.c:111 ../src/size.c:92 ../src/strip.c:96 ../src/findtextrel.c:84 ++#: ../src/strings.c:92 ../src/objdump.c:80 ++msgid "[FILE...]" ++msgstr "" ++ ++#: ../src/nm.c:136 ../src/size.c:117 ../src/strip.c:120 ../src/objdump.c:105 ++#, c-format ++msgid "%s: INTERNAL ERROR %d (%s-%s): %s" ++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:229 ++#: ../src/elfcmp.c:574 ../src/ranlib.c:169 ../src/strings.c:183 ++#: ../src/unstrip.c:1899 ../src/unstrip.c:1928 ++#, c-format ++msgid "cannot open '%s'" ++msgstr "" ++ ++#: ../src/nm.c:380 ../src/nm.c:392 ../src/size.c:317 ../src/size.c:326 ++#: ../src/size.c:337 ../src/strip.c:1815 ++#, c-format ++msgid "while closing '%s'" ++msgstr "" ++ ++#: ../src/nm.c:402 ../src/strip.c:358 ../src/objdump.c:296 ++#, c-format ++msgid "%s: File format not recognized" ++msgstr "" ++ ++#. Note: 0 is no valid offset. ++#: ../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 ../src/objdump.c:344 ++#, 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:860 ../src/readelf.c:1003 ++#: ../src/readelf.c:1144 ../src/readelf.c:1326 ../src/readelf.c:1524 ++#: ../src/readelf.c:1710 ../src/readelf.c:1920 ../src/readelf.c:2174 ++#: ../src/readelf.c:2240 ../src/readelf.c:2318 ../src/readelf.c:2815 ++#: ../src/readelf.c:2851 ../src/readelf.c:2913 ../src/readelf.c:6476 ++#: ../src/readelf.c:7329 ../src/readelf.c:7474 ../src/readelf.c:7543 ++#: ../src/size.c:425 ../src/size.c:499 ../src/strip.c:482 ../src/objdump.c:744 ++#, 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 "" ++ ++#. The header line. ++#: ../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 "" ++ ++#. XXX Add machine specific object file types. ++#: ../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: -e -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, macinfo, or exception" ++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:99 ++msgid "Display sections for exception handling" ++msgstr "" ++ ++#: ../src/readelf.c:102 ++msgid "Output control:" ++msgstr "" ++ ++#: ../src/readelf.c:104 ++msgid "Do not find symbol names for addresses in DWARF data" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/readelf.c:110 ++msgid "Print information from ELF file in human-readable form." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/readelf.c:114 ../src/elflint.c:85 ++msgid "FILE..." ++msgstr "" ++ ++#: ../src/readelf.c:266 ../src/elflint.c:158 ++#, c-format ++msgid "cannot open input file" ++msgstr "" ++ ++#: ../src/readelf.c:394 ++#, c-format ++msgid "Unknown DWARF debug section `%s'.\n" ++msgstr "" ++ ++#: ../src/readelf.c:418 ../src/elflint.c:222 ++msgid "Missing file name.\n" ++msgstr "" ++ ++#: ../src/readelf.c:423 ../src/objdump.c:236 ++msgid "No operation specified.\n" ++msgstr "" ++ ++#: ../src/readelf.c:458 ++#, c-format ++msgid "cannot generate Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:470 ++#, c-format ++msgid "'%s' is not an archive, cannot print archive index" ++msgstr "" ++ ++#: ../src/readelf.c:475 ++#, c-format ++msgid "error while closing Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:567 ++#, c-format ++msgid "cannot stat input file" ++msgstr "" ++ ++#: ../src/readelf.c:569 ++#, c-format ++msgid "input file is empty" ++msgstr "" ++ ++#: ../src/readelf.c:571 ++#, c-format ++msgid "failed reading '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:606 ++#, c-format ++msgid "cannot read ELF header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:614 ++#, c-format ++msgid "cannot create EBL handle" ++msgstr "" ++ ++#: ../src/readelf.c:621 ../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:707 ++msgid "NONE (None)" ++msgstr "" ++ ++#: ../src/readelf.c:708 ++msgid "REL (Relocatable file)" ++msgstr "" ++ ++#: ../src/readelf.c:709 ++msgid "EXEC (Executable file)" ++msgstr "" ++ ++#: ../src/readelf.c:710 ++msgid "DYN (Shared object file)" ++msgstr "" ++ ++#: ../src/readelf.c:711 ++msgid "CORE (Core file)" ++msgstr "" ++ ++#: ../src/readelf.c:716 ++#, c-format ++msgid "OS Specific: (%x)\n" ++msgstr "" ++ ++#. && e_type <= ET_HIPROC always true ++#: ../src/readelf.c:718 ++#, c-format ++msgid "Processor Specific: (%x)\n" ++msgstr "" ++ ++#: ../src/readelf.c:728 ++msgid "" ++"ELF Header:\n" ++" Magic: " ++msgstr "" ++ ++#: ../src/readelf.c:732 ++#, c-format ++msgid "" ++"\n" ++" Class: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:737 ++#, c-format ++msgid " Data: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:743 ++#, c-format ++msgid " Ident Version: %hhd %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:745 ../src/readelf.c:762 ++msgid "(current)" ++msgstr "" ++ ++#: ../src/readelf.c:749 ++#, c-format ++msgid " OS/ABI: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:752 ++#, c-format ++msgid " ABI Version: %hhd\n" ++msgstr "" ++ ++#: ../src/readelf.c:755 ++msgid " Type: " ++msgstr "" ++ ++#: ../src/readelf.c:758 ++#, c-format ++msgid " Machine: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:760 ++#, c-format ++msgid " Version: %d %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:764 ++#, c-format ++msgid " Entry point address: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:767 ++#, c-format ++msgid " Start of program headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:768 ../src/readelf.c:771 ++msgid "(bytes into file)" ++msgstr "" ++ ++#: ../src/readelf.c:770 ++#, c-format ++msgid " Start of section headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:773 ++#, c-format ++msgid " Flags: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:776 ++#, c-format ++msgid " Size of this header: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:777 ../src/readelf.c:780 ../src/readelf.c:786 ++msgid "(bytes)" ++msgstr "" ++ ++#: ../src/readelf.c:779 ++#, c-format ++msgid " Size of program header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:782 ++#, c-format ++msgid " Number of program headers entries: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:785 ++#, c-format ++msgid " Size of section header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:788 ++#, c-format ++msgid " Number of section headers entries: %" ++msgstr "" ++ ++#: ../src/readelf.c:795 ++#, c-format ++msgid " (% in [0].sh_size)" ++msgstr "" ++ ++#: ../src/readelf.c:798 ../src/readelf.c:812 ++msgid " ([0] not available)" ++msgstr "" ++ ++#. We managed to get the zeroth section. ++#: ../src/readelf.c:808 ++#, c-format ++msgid " (% in [0].sh_link)" ++msgstr "" ++ ++#: ../src/readelf.c:816 ++#, c-format ++msgid "" ++" Section header string table index: XINDEX%s\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:820 ++#, c-format ++msgid "" ++" Section header string table index: %\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:852 ++#, c-format ++msgid "" ++"There are %d section headers, starting at offset %#:\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:862 ++msgid "Section Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:865 ++msgid "" ++"[Nr] Name Type Addr Off Size ES Flags Lk " ++"Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:867 ++msgid "" ++"[Nr] Name Type Addr Off Size ES " ++"Flags Lk Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:874 ../src/readelf.c:1027 ++#, c-format ++msgid "cannot get section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:881 ../src/readelf.c:1035 ../src/readelf.c:7494 ++#: ../src/unstrip.c:352 ../src/unstrip.c:376 ../src/unstrip.c:426 ++#: ../src/unstrip.c:535 ../src/unstrip.c:552 ../src/unstrip.c:590 ++#: ../src/unstrip.c:788 ../src/unstrip.c:1056 ../src/unstrip.c:1243 ++#: ../src/unstrip.c:1304 ../src/unstrip.c:1426 ../src/unstrip.c:1479 ++#: ../src/unstrip.c:1587 ../src/unstrip.c:1777 ++#, c-format ++msgid "cannot get section header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:939 ++msgid "Program Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:941 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:944 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz " ++"MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:984 ++#, c-format ++msgid "\t[Requesting program interpreter: %s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1005 ++msgid "" ++"\n" ++" Section to Segment mapping:\n" ++" Segment Sections..." ++msgstr "" ++ ++#: ../src/readelf.c:1016 ../src/unstrip.c:1823 ../src/unstrip.c:1862 ++#: ../src/unstrip.c:1869 ++#, c-format ++msgid "cannot get program header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:1150 ++#, 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:1155 ++#, 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:1163 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1177 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1328 ++#, c-format ++msgid "" ++"\n" ++"Dynamic segment contains %lu entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Dynamic segment contains %lu entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1340 ++msgid " Type Value\n" ++msgstr "" ++ ++#: ../src/readelf.c:1364 ++#, c-format ++msgid "Shared library: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1369 ++#, c-format ++msgid "Library soname: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1374 ++#, c-format ++msgid "Library rpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1379 ++#, c-format ++msgid "Library runpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1399 ++#, c-format ++msgid "% (bytes)\n" ++msgstr "" ++ ++#: ../src/readelf.c:1509 ../src/readelf.c:1695 ++#, c-format ++msgid "" ++"\n" ++"Invalid symbol table at offset %#0\n" ++msgstr "" ++ ++#: ../src/readelf.c:1527 ../src/readelf.c:1712 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#. 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. ++#: ../src/readelf.c:1542 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1552 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1554 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1607 ../src/readelf.c:1618 ../src/readelf.c:1631 ++#: ../src/readelf.c:1649 ../src/readelf.c:1661 ../src/readelf.c:1780 ++#: ../src/readelf.c:1792 ../src/readelf.c:1806 ../src/readelf.c:1825 ++#: ../src/readelf.c:1838 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1619 ../src/readelf.c:1793 ../src/objdump.c:379 ++msgid "INVALID SYMBOL" ++msgstr "" ++ ++#: ../src/readelf.c:1650 ../src/readelf.c:1826 ../src/objdump.c:394 ++msgid "INVALID SECTION" ++msgstr "" ++ ++#: ../src/readelf.c:1724 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1726 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1927 ++#, 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:1933 ++#, 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:1943 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1945 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1965 ++#, c-format ++msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++msgstr "" ++ ++#: ../src/readelf.c:2053 ++#, c-format ++msgid "bad dynamic symbol" ++msgstr "" ++ ++#: ../src/readelf.c:2135 ++msgid "none" ++msgstr "" ++ ++#: ../src/readelf.c:2152 ++msgid "| " ++msgstr "" ++ ++#: ../src/readelf.c:2177 ++#, c-format ++msgid "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2200 ++#, c-format ++msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2213 ++#, c-format ++msgid " %#06x: Name: %s Flags: %s Version: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2244 ++#, c-format ++msgid "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2274 ++#, c-format ++msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2289 ++#, c-format ++msgid " %#06x: Parent %d: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2521 ++#, c-format ++msgid "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgid_plural "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2551 ++msgid " 0 *local* " ++msgstr "" ++ ++#: ../src/readelf.c:2556 ++msgid " 1 *global* " ++msgstr "" ++ ++#: ../src/readelf.c:2587 ++#, c-format ++msgid "" ++"\n" ++"Histogram for bucket list length in section [%2u] '%s' (total of %d " ++"bucket):\n" ++" Addr: %#0* Offset: %#08 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* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2610 ++#, c-format ++msgid " Length Number % of total Coverage\n" ++msgstr "" ++ ++#: ../src/readelf.c:2612 ++#, c-format ++msgid " 0 %6 %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2619 ++#, c-format ++msgid "%7d %6 %5.1f%% %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2632 ++#, c-format ++msgid "" ++" Average number of tests: successful lookup: %f\n" ++" unsuccessful lookup: %f\n" ++msgstr "" ++ ++#: ../src/readelf.c:2650 ../src/readelf.c:2692 ../src/readelf.c:2733 ++#, c-format ++msgid "cannot get data for section %d: %s" ++msgstr "" ++ ++#: ../src/readelf.c:2787 ++#, c-format ++msgid "" ++" Symbol Bias: %u\n" ++" Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:2861 ++#, c-format ++msgid "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2875 ++msgid "" ++" Library Time Stamp Checksum Version " ++"Flags" ++msgstr "" ++ ++#: ../src/readelf.c:2925 ++#, c-format ++msgid "" ++"\n" ++"Object attributes section [%2zu] '%s' of % bytes at offset %" ++"#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:2941 ++msgid " Owner Size\n" ++msgstr "" ++ ++#: ../src/readelf.c:2967 ++#, c-format ++msgid " %-13s %4\n" ++msgstr "" ++ ++#: ../src/readelf.c:2999 ++#, c-format ++msgid " %-4u %12\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/readelf.c:3004 ++#, c-format ++msgid " File: %11\n" ++msgstr "" ++ ++#: ../src/readelf.c:3039 ++#, c-format ++msgid " %s: %, %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3042 ++#, c-format ++msgid " %s: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:3045 ++#, c-format ++msgid " %s: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3052 ++#, c-format ++msgid " %u: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:3055 ++#, c-format ++msgid " %u: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3091 ++#, c-format ++msgid "%s+%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3094 ++#, c-format ++msgid "%s+%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3099 ++#, c-format ++msgid "%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3102 ++#, c-format ++msgid "%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3108 ++#, c-format ++msgid "%s+%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3111 ++#, c-format ++msgid "%s+%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3115 ++#, c-format ++msgid "%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3118 ++#, c-format ++msgid "%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3123 ++#, c-format ++msgid "%s+%#" ++msgstr "" ++ ++#: ../src/readelf.c:3126 ++#, c-format ++msgid "%s+%#0*" ++msgstr "" ++ ++#: ../src/readelf.c:3234 ++#, c-format ++msgid "unknown tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3236 ++#, c-format ++msgid "unknown user tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3446 ++#, c-format ++msgid "unknown attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3449 ++#, c-format ++msgid "unknown user attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3495 ++#, c-format ++msgid "unknown form %" ++msgstr "" ++ ++#: ../src/readelf.c:3729 ++msgid "empty block" ++msgstr "" ++ ++#: ../src/readelf.c:3732 ++#, c-format ++msgid "%zu byte block:" ++msgstr "" ++ ++#: ../src/readelf.c:4141 ++#, c-format ++msgid "%*s[%4] %s \n" ++msgstr "" ++ ++#: ../src/readelf.c:4154 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [ Code]\n" ++msgstr "" ++ ++#: ../src/readelf.c:4161 ++#, c-format ++msgid "" ++"\n" ++"Abbreviation section at offset %:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4174 ++#, c-format ++msgid " *** error while reading abbreviation: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4190 ++#, c-format ++msgid " [%5u] offset: %, children: %s, tag: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4193 ++msgid "yes" ++msgstr "" ++ ++#: ../src/readelf.c:4193 ++msgid "no" ++msgstr "" ++ ++#: ../src/readelf.c:4229 ++#, c-format ++msgid "cannot get .debug_aranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4234 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entry:\n" ++msgid_plural "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:4264 ++#, c-format ++msgid " [%*zu] ???\n" ++msgstr "" ++ ++#: ../src/readelf.c:4266 ++#, c-format ++msgid "" ++" [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" ++msgstr "" ++ ++#: ../src/readelf.c:4285 ++#, c-format ++msgid "cannot get .debug_ranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4290 ../src/readelf.c:4773 ../src/readelf.c:5436 ++#: ../src/readelf.c:5881 ../src/readelf.c:5976 ../src/readelf.c:6148 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4304 ../src/readelf.c:5895 ++#, c-format ++msgid " [%6tx] \n" ++msgstr "" ++ ++#: ../src/readelf.c:4326 ../src/readelf.c:5917 ++#, c-format ++msgid " [%6tx] base address %s\n" ++msgstr "" ++ ++#. We have an address range entry. ++#. First address range entry in a list. ++#: ../src/readelf.c:4337 ++#, c-format ++msgid " [%6tx] %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4339 ++#, c-format ++msgid " %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4762 ../src/readelf.c:6214 ../src/readelf.c:6316 ++#, c-format ++msgid "cannot get %s content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4769 ++#, c-format ++msgid "" ++"\n" ++"Call frame information section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4796 ../src/readelf.c:5470 ++#, c-format ++msgid "invalid data in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:4818 ++#, c-format ++msgid "" ++"\n" ++" [%6tx] Zero terminator\n" ++msgstr "" ++ ++#: ../src/readelf.c:4896 ++msgid "FDE address encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4902 ++msgid "LSDA pointer encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4947 ++#, c-format ++msgid "invalid augmentation encoding" ++msgstr "" ++ ++#: ../src/readelf.c:5018 ++#, c-format ++msgid " (offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:5025 ++#, c-format ++msgid " (end offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:5052 ++#, c-format ++msgid " %-26sLSDA pointer: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:5098 ++#, c-format ++msgid "cannot get attribute code: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5106 ++#, c-format ++msgid "cannot get attribute form: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5119 ++#, c-format ++msgid "cannot get attribute value: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5315 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [Offset]\n" ++msgstr "" ++ ++#: ../src/readelf.c:5340 ++#, c-format ++msgid "" ++" Compilation unit at offset %:\n" ++" Version: %, Abbreviation section offset: %, Address size: %" ++", Offset size: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5358 ++#, c-format ++msgid "cannot get DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5369 ++#, c-format ++msgid "cannot get DIE offset: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5377 ++#, c-format ++msgid "cannot get tag of DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5406 ++#, c-format ++msgid "cannot get next DIE: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5413 ++#, c-format ++msgid "cannot get next DIE: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5448 ++#, c-format ++msgid "cannot get line data section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5461 ++#, c-format ++msgid "" ++"\n" ++"Table at offset %Zu:\n" ++msgstr "" ++ ++#. Print what we got so far. ++#: ../src/readelf.c:5513 ++#, c-format ++msgid "" ++"\n" ++" Length: %\n" ++" DWARF version: %\n" ++" Prologue length: %\n" ++" Minimum instruction length: %\n" ++" Initial value if '%s': %\n" ++" Line base: %\n" ++" Line range: %\n" ++" Opcode base: %\n" ++"\n" ++"Opcodes:\n" ++msgstr "" ++ ++#: ../src/readelf.c:5532 ++#, c-format ++msgid "invalid data at offset %tu in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:5547 ++#, c-format ++msgid " [%*] %hhu argument\n" ++msgid_plural " [%*] %hhu arguments\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5555 ++msgid "" ++"\n" ++"Directory table:" ++msgstr "" ++ ++#: ../src/readelf.c:5571 ++msgid "" ++"\n" ++"File name table:\n" ++" Entry Dir Time Size Name" ++msgstr "" ++ ++#: ../src/readelf.c:5600 ++msgid "" ++"\n" ++"Line number statements:" ++msgstr "" ++ ++#: ../src/readelf.c:5661 ++#, c-format ++msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" ++msgstr "" ++ ++#: ../src/readelf.c:5681 ++#, c-format ++msgid " extended opcode %u: " ++msgstr "" ++ ++#: ../src/readelf.c:5686 ++msgid "end of sequence" ++msgstr "" ++ ++#: ../src/readelf.c:5701 ++#, c-format ++msgid "set address to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5722 ++#, c-format ++msgid "define new file: dir=%u, mtime=%, length=%, name=%s\n" ++msgstr "" ++ ++#. Unknown, ignore it. ++#: ../src/readelf.c:5731 ++msgid "unknown opcode" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5743 ++msgid " copy" ++msgstr "" ++ ++#: ../src/readelf.c:5753 ++#, c-format ++msgid "advance address by %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5764 ++#, c-format ++msgid " advance line by constant %d to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5772 ++#, c-format ++msgid " set file to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5782 ++#, c-format ++msgid " set column to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5789 ++#, c-format ++msgid " set '%s' to %\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5795 ++msgid " set basic block flag" ++msgstr "" ++ ++#: ../src/readelf.c:5805 ++#, c-format ++msgid "advance address by constant %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5821 ++#, c-format ++msgid "advance address by fixed value %u to %s\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5830 ++msgid " set prologue end flag" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5835 ++msgid " set epilogue begin flag" ++msgstr "" ++ ++#. 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. ++#: ../src/readelf.c:5844 ++#, c-format ++msgid " unknown opcode with % parameter:" ++msgid_plural " unknown opcode with % parameters:" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5876 ++#, c-format ++msgid "cannot get .debug_loc content: %s" ++msgstr "" ++ ++#. First entry in a list. ++#: ../src/readelf.c:5931 ++#, c-format ++msgid " [%6tx] %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5933 ++#, c-format ++msgid " %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5986 ++#, c-format ++msgid "cannot get macro information section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6065 ++#, c-format ++msgid "%*s*** non-terminated string at end of section" ++msgstr "" ++ ++#: ../src/readelf.c:6133 ++#, c-format ++msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6172 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" %*s String\n" ++msgstr "" ++ ++#: ../src/readelf.c:6186 ++#, c-format ++msgid " *** error while reading strings: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6206 ++#, c-format ++msgid "" ++"\n" ++"Call frame search table section [%2zu] '.eh_frame_hdr':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6308 ++#, c-format ++msgid "" ++"\n" ++"Exception handling table section [%2zu] '.gcc_except_table':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6331 ++#, c-format ++msgid " LPStart encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6343 ++#, c-format ++msgid " TType encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6357 ++#, c-format ++msgid " Call site encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6370 ++msgid "" ++"\n" ++" Call site table:" ++msgstr "" ++ ++#: ../src/readelf.c:6384 ++#, c-format ++msgid "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:6444 ++#, c-format ++msgid "invalid TType encoding" ++msgstr "" ++ ++#: ../src/readelf.c:6467 ++#, c-format ++msgid "cannot get debug context descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6602 ../src/readelf.c:7167 ++#, c-format ++msgid "cannot convert core note data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6907 ++#, c-format ++msgid "" ++"\n" ++"%*s... ..." ++msgstr "" ++ ++#: ../src/readelf.c:7265 ++msgid " Owner Data size Type\n" ++msgstr "" ++ ++#: ../src/readelf.c:7283 ++#, c-format ++msgid " %-13.*s %9 %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:7314 ++#, c-format ++msgid "cannot get content of note section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7341 ++#, c-format ++msgid "" ++"\n" ++"Note section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7364 ++#, c-format ++msgid "" ++"\n" ++"Note segment of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7410 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no data to dump.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7416 ../src/readelf.c:7438 ++#, c-format ++msgid "cannot get data for section [%Zu] '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7420 ++#, c-format ++msgid "" ++"\n" ++"Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7433 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' is empty.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7442 ++#, c-format ++msgid "" ++"\n" ++"String section [%Zu] '%s' contains % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7489 ++#, c-format ++msgid "" ++"\n" ++"section [%lu] does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7515 ++#, c-format ++msgid "" ++"\n" ++"section '%s' does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7576 ++#, c-format ++msgid "cannot get symbol index of archive '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7579 ++#, c-format ++msgid "" ++"\n" ++"Archive '%s' has no symbol index\n" ++msgstr "" ++ ++#: ../src/readelf.c:7583 ++#, c-format ++msgid "" ++"\n" ++"Index of archive '%s' has %Zu entries:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7601 ++#, c-format ++msgid "cannot extract member at offset %Zu in '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7606 ++#, 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 "" ++ ++#. Short description of program. ++#: ../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:339 ++#, c-format ++msgid "%s: file format not recognized" ++msgstr "" ++ ++#: ../src/size.c:446 ../src/size.c:589 ++#, c-format ++msgid " (ex %s)" ++msgstr "" ++ ++#: ../src/size.c:614 ++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 "" ++ ++#. Short description of program. ++#: ../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 ../src/unstrip.c:124 ++#, c-format ++msgid "-o option specified twice" ++msgstr "" ++ ++#: ../src/strip.c:259 ++#, c-format ++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:868 ../src/strip.c:955 ++#, c-format ++msgid "while generating output file: %s" ++msgstr "" ++ ++#: ../src/strip.c:928 ../src/strip.c:1667 ++#, c-format ++msgid "%s: error while creating ELF header: %s" ++msgstr "" ++ ++#: ../src/strip.c:942 ++#, c-format ++msgid "while preparing output for '%s'" ++msgstr "" ++ ++#: ../src/strip.c:993 ../src/strip.c:1049 ++#, c-format ++msgid "while create section header section: %s" ++msgstr "" ++ ++#: ../src/strip.c:999 ++#, c-format ++msgid "cannot allocate section data: %s" ++msgstr "" ++ ++#: ../src/strip.c:1058 ++#, c-format ++msgid "while create section header string table: %s" ++msgstr "" ++ ++#: ../src/strip.c:1592 ../src/strip.c:1689 ++#, c-format ++msgid "while writing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1603 ++#, c-format ++msgid "while creating '%s'" ++msgstr "" ++ ++#: ../src/strip.c:1615 ++#, c-format ++msgid "while computing checksum for debug information" ++msgstr "" ++ ++#: ../src/strip.c:1675 ++#, c-format ++msgid "%s: error while reading the file: %s" ++msgstr "" ++ ++#: ../src/strip.c:1721 ../src/strip.c:1728 ++#, c-format ++msgid "error while finishing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1751 ../src/strip.c:1808 ++#, 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 "" ++ ++#. Short description of program. ++#: ../src/ld.c:197 ++msgid "Combine object and archive files." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../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:1446 ++#, c-format ++msgid "cannot read version script '%s'" ++msgstr "" ++ ++#. The symbol is already defined and now again ++#. in the linker script. This is an error. ++#: ../src/ld.c:1512 ../src/ld.c:1551 ++#, 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: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 % in %s to % in %s" ++msgstr "" ++ ++#: ../src/ldgeneric.c:677 ++#, c-format ++msgid "(%s+%#): multiple definition of %s `%s'\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:700 ++#, c-format ++msgid "(%s+%#): first defined here\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:819 ++#, c-format ++msgid "%s: cannot get section group data: %s" ++msgstr "" ++ ++#. If we come here no section group contained the given section ++#. despite the SHF_GROUP flag. This is an error in the input ++#. file. ++#: ../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 "" ++ ++#. This should never happen. ++#: ../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: %" ++"" ++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 "" ++ ++#. 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. ++#: ../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 '%' 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*" ++msgstr "" ++ ++#: ../src/ldgeneric.c:3690 ++#, c-format ++msgid "no entry symbol specified: defaulting to %#0*" ++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 ../src/unstrip.c:1807 ++#, 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 "" ++ ++#. This cannot be implemented generally. There should have been a ++#. machine dependent implementation and we should never have arrived ++#. here. ++#: ../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/i386_ld.c:210 ++#, c-format ++msgid "cannot allocate PLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:232 ++#, c-format ++msgid "cannot allocate PLTREL section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:253 ++#, c-format ++msgid "cannot allocate GOT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:274 ++#, c-format ++msgid "cannot allocate GOTPLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:661 ++#, c-format ++msgid "initial-executable TLS relocation cannot be used " ++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:71 ++msgid "Be extremely strict, flag level 2 features." ++msgstr "" ++ ++#: ../src/elflint.c:72 ++msgid "Do not print anything if successful" ++msgstr "" ++ ++#: ../src/elflint.c:73 ++msgid "Binary is a separate debuginfo file" ++msgstr "" ++ ++#: ../src/elflint.c:75 ++msgid "" ++"Binary has been created with GNU ld and is therefore known to be broken in " ++"certain ways" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elflint.c:81 ++msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." ++msgstr "" ++ ++#: ../src/elflint.c:165 ++#, c-format ++msgid "cannot generate Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:184 ++#, c-format ++msgid "error while closing Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:188 ++msgid "No errors" ++msgstr "" ++ ++#: ../src/elflint.c:301 ++#, c-format ++msgid " error while freeing sub-ELF descriptor: %s\n" ++msgstr "" ++ ++#. We cannot do anything. ++#: ../src/elflint.c:309 ++#, c-format ++msgid "Not an ELF file - it has the wrong magic bytes at the start\n" ++msgstr "" ++ ++#: ../src/elflint.c:368 ++#, c-format ++msgid "e_ident[%d] == %d is no known class\n" ++msgstr "" ++ ++#: ../src/elflint.c:373 ++#, c-format ++msgid "e_ident[%d] == %d is no known data encoding\n" ++msgstr "" ++ ++#: ../src/elflint.c:377 ++#, c-format ++msgid "unknown ELF header version number e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:383 ++#, c-format ++msgid "unsupported OS ABI e_ident[%d] == '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:389 ++#, c-format ++msgid "unsupport ABI version e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:394 ++#, c-format ++msgid "e_ident[%zu] is not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:399 ++#, c-format ++msgid "unknown object file type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:406 ++#, c-format ++msgid "unknown machine type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:410 ++#, c-format ++msgid "unknown object file version\n" ++msgstr "" ++ ++#: ../src/elflint.c:416 ++#, c-format ++msgid "invalid program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:418 ++#, c-format ++msgid "executables and DSOs cannot have zero program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:422 ++#, c-format ++msgid "invalid number of program header entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:430 ++#, c-format ++msgid "invalid section header table offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:433 ++#, c-format ++msgid "section header table must be present\n" ++msgstr "" ++ ++#: ../src/elflint.c:447 ++#, c-format ++msgid "invalid number of section header table entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:464 ++#, c-format ++msgid "invalid section header index\n" ++msgstr "" ++ ++#: ../src/elflint.c:469 ++#, c-format ++msgid "invalid machine flags: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:476 ../src/elflint.c:493 ++#, c-format ++msgid "invalid ELF header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:479 ../src/elflint.c:496 ++#, c-format ++msgid "invalid program header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:482 ../src/elflint.c:499 ++#, c-format ++msgid "invalid program header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:485 ../src/elflint.c:502 ++#, c-format ++msgid "invalid section header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:488 ../src/elflint.c:505 ++#, c-format ++msgid "invalid section header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:549 ++#, c-format ++msgid "" ++"section [%2d] '%s': section with SHF_GROUP flag set not part of a section " ++"group\n" ++msgstr "" ++ ++#: ../src/elflint.c:553 ++#, c-format ++msgid "" ++"section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n" ++msgstr "" ++ ++#: ../src/elflint.c:569 ../src/elflint.c:1412 ../src/elflint.c:1462 ++#: ../src/elflint.c:1571 ../src/elflint.c:2165 ../src/elflint.c:2679 ++#: ../src/elflint.c:2840 ../src/elflint.c:2970 ../src/elflint.c:3142 ++#: ../src/elflint.c:4040 ++#, c-format ++msgid "section [%2d] '%s': cannot get section data\n" ++msgstr "" ++ ++#: ../src/elflint.c:582 ../src/elflint.c:1578 ++#, 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:605 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol table cannot have more than one extended index " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:616 ++#, c-format ++msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" ++msgstr "" ++ ++#: ../src/elflint.c:625 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:630 ../src/elflint.c:633 ../src/elflint.c:636 ++#: ../src/elflint.c:639 ../src/elflint.c:642 ../src/elflint.c:645 ++#, c-format ++msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:648 ++#, c-format ++msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:658 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:667 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid name value\n" ++msgstr "" ++ ++#: ../src/elflint.c:680 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: too large section index but no extended " ++"section index section\n" ++msgstr "" ++ ++#: ../src/elflint.c:686 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " ++"st_shndx (%)\n" ++msgstr "" ++ ++#. || sym->st_shndx > SHN_HIRESERVE always false ++#: ../src/elflint.c:698 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:706 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown type\n" ++msgstr "" ++ ++#: ../src/elflint.c:712 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" ++msgstr "" ++ ++#: ../src/elflint.c:717 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" ++msgstr "" ++ ++#: ../src/elflint.c:725 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" ++msgstr "" ++ ++#: ../src/elflint.c:729 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:733 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:765 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:771 ../src/elflint.c:796 ../src/elflint.c:839 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu does not fit completely in referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:780 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " ++"SHF_TLS flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:790 ../src/elflint.c:832 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:817 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:825 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:852 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:859 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: non-local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:866 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" ++msgstr "" ++ ++#: ../src/elflint.c:916 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%" ++"2d]\n" ++msgstr "" ++ ++#: ../src/elflint.c:923 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#. 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. ++#: ../src/elflint.c:939 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " ++"match %s section address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:946 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " ++"match %s section size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:954 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:970 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " ++"segment address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:977 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " ++"segment size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:990 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" ++"default visibility\n" ++msgstr "" ++ ++#: ../src/elflint.c:994 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" ++msgstr "" ++ ++#: ../src/elflint.c:1039 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1048 ../src/elflint.c:1100 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1073 ../src/elflint.c:1125 ++#, c-format ++msgid "" ++"section [%2d] '%s': relative relocations after index %d as specified by " ++"DT_RELCOUNT\n" ++msgstr "" ++ ++#: ../src/elflint.c:1079 ../src/elflint.c:1131 ++#, c-format ++msgid "" ++"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " ++"specified %d relative relocations\n" ++msgstr "" ++ ++#: ../src/elflint.c:1091 ++#, c-format ++msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1173 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1186 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1194 ++#, c-format ++msgid "section [%2d] '%s': sh_info should be zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1201 ++#, c-format ++msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" ++msgstr "" ++ ++#: ../src/elflint.c:1208 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" ++msgstr "" ++ ++#: ../src/elflint.c:1268 ++#, c-format ++msgid "text relocation flag set but there is no read-only segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1295 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1303 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: relocation type invalid for the file " ++"type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1311 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1329 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " ++"be used with %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1346 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1361 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: copy relocation against symbol of type %" ++"s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1382 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: read-only section modified but text " ++"relocation flag not set\n" ++msgstr "" ++ ++#: ../src/elflint.c:1397 ++#, c-format ++msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" ++msgstr "" ++ ++#: ../src/elflint.c:1436 ../src/elflint.c:1486 ++#, c-format ++msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1566 ++#, c-format ++msgid "more than one dynamic section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1584 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" ++msgstr "" ++ ++#: ../src/elflint.c:1589 ../src/elflint.c:1881 ++#, c-format ++msgid "section [%2d] '%s': sh_info not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1599 ++#, c-format ++msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1607 ++#, c-format ++msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:1614 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: unknown tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:1625 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1635 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" ++msgstr "" ++ ++#: ../src/elflint.c:1653 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" ++msgstr "" ++ ++#: ../src/elflint.c:1675 ++#, 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:1718 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1733 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must be valid offset in section [%" ++"2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:1753 ../src/elflint.c:1781 ++#, c-format ++msgid "section [%2d] '%s': contains %s entry but not %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1765 ++#, c-format ++msgid "section [%2d] '%s': mandatory tag %s not present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1774 ++#, c-format ++msgid "section [%2d] '%s': no hash section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1789 ../src/elflint.c:1796 ++#, c-format ++msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1806 ../src/elflint.c:1810 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" ++msgstr "" ++ ++#: ../src/elflint.c:1816 ++#, c-format ++msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" ++msgstr "" ++ ++#: ../src/elflint.c:1827 ../src/elflint.c:1831 ../src/elflint.c:1835 ++#: ../src/elflint.c:1839 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:1851 ++#, c-format ++msgid "" ++"section [%2d] '%s': only relocatable files can have extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1861 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index section not for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1866 ++#, c-format ++msgid "cannot get data for symbol section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1869 ++#, c-format ++msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" ++msgstr "" ++ ++#: ../src/elflint.c:1876 ++#, c-format ++msgid "section [%2d] '%s': extended index table too small for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1891 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " ++"same symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1902 ++#, c-format ++msgid "symbol 0 should have zero extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1914 ++#, c-format ++msgid "cannot get data for symbol %zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:1919 ++#, c-format ++msgid "extended section index is % but symbol index is not XINDEX\n" ++msgstr "" ++ ++#: ../src/elflint.c:1935 ../src/elflint.c:1976 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:1947 ../src/elflint.c:1988 ++#, c-format ++msgid "section [%2d] '%s': chain array too large\n" ++msgstr "" ++ ++#: ../src/elflint.c:1956 ../src/elflint.c:1997 ++#, c-format ++msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1962 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2003 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference % out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2018 ++#, c-format ++msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2029 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected at " ++"least%ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2037 ++#, c-format ++msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2069 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" ++msgstr "" ++ ++#: ../src/elflint.c:2090 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " ++"undefined\n" ++msgstr "" ++ ++#: ../src/elflint.c:2101 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" ++msgstr "" ++ ++#: ../src/elflint.c:2132 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2137 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2143 ++#, c-format ++msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2156 ++#, c-format ++msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:2174 ++#, c-format ++msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2182 ++#, c-format ++msgid "section [%2d] '%s': hash table entry size incorrect\n" ++msgstr "" ++ ++#: ../src/elflint.c:2187 ++#, c-format ++msgid "section [%2d] '%s': not marked to be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:2192 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table has not even room for initial administrative " ++"entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:2240 ++#, c-format ++msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" ++msgstr "" ++ ++#: ../src/elflint.c:2318 ../src/elflint.c:2322 ++#, c-format ++msgid "section [%2zu] '%s': reference to symbol index 0\n" ++msgstr "" ++ ++#: ../src/elflint.c:2329 ++#, 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:2341 ++#, 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:2357 ++#, c-format ++msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:2377 ++#, c-format ++msgid "" ++"section [%2d] '%s': section groups only allowed in relocatable object files\n" ++msgstr "" ++ ++#: ../src/elflint.c:2388 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol table: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2393 ++#, c-format ++msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2399 ++#, c-format ++msgid "section [%2d] '%s': invalid symbol index in sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:2404 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:2411 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol for signature\n" ++msgstr "" ++ ++#: ../src/elflint.c:2416 ++#, c-format ++msgid "section [%2d] '%s': signature symbol canot be empty string\n" ++msgstr "" ++ ++#: ../src/elflint.c:2422 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not set correctly\n" ++msgstr "" ++ ++#: ../src/elflint.c:2428 ++#, c-format ++msgid "section [%2d] '%s': cannot get data: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2437 ++#, c-format ++msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2442 ++#, c-format ++msgid "section [%2d] '%s': section group without flags word\n" ++msgstr "" ++ ++#: ../src/elflint.c:2448 ++#, c-format ++msgid "section [%2d] '%s': section group without member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2452 ++#, c-format ++msgid "section [%2d] '%s': section group with only one member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2463 ++#, c-format ++msgid "section [%2d] '%s': unknown section group flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:2475 ++#, c-format ++msgid "section [%2d] '%s': section index %Zu out of range\n" ++msgstr "" ++ ++#: ../src/elflint.c:2484 ++#, c-format ++msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2491 ++#, c-format ++msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2497 ++#, c-format ++msgid "" ++"section [%2d] '%s': element %Zu references section [%2d] '%s' without " ++"SHF_GROUP flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:2504 ++#, c-format ++msgid "section [%2d] '%s' is contained in more than one section group\n" ++msgstr "" ++ ++#: ../src/elflint.c:2693 ++#, 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:2704 ++#, c-format ++msgid "" ++"section [%2d] '%s' has different number of entries than symbol table [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2720 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: cannot read version data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2736 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" ++msgstr "" ++ ++#: ../src/elflint.c:2744 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2758 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2763 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for defined version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2773 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for requested version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2825 ++#, c-format ++msgid "more than one version reference section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2833 ../src/elflint.c:2962 ++#, c-format ++msgid "section [%2d] '%s': sh_link does not link to string table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2856 ../src/elflint.c:3014 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong version %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2862 ../src/elflint.c:3020 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2870 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid file reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2878 ++#, c-format ++msgid "section [%2d] '%s': entry %d references unknown dependency\n" ++msgstr "" ++ ++#: ../src/elflint.c:2890 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:2897 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " ++"reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2904 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %" ++"#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:2914 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " ++"name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2925 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" ++msgstr "" ++ ++#: ../src/elflint.c:2941 ../src/elflint.c:3099 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:2954 ++#, c-format ++msgid "more than one version definition section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2999 ++#, c-format ++msgid "section [%2d] '%s': more than one BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3003 ++#, c-format ++msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" ++msgstr "" ++ ++#: ../src/elflint.c:3009 ++#, c-format ++msgid "section [%2d] '%s': entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3033 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:3040 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:3049 ++#, c-format ++msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3068 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3083 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3105 ++#, c-format ++msgid "section [%2d] '%s': no BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3121 ++#, c-format ++msgid "section [%2d] '%s': unknown parent version '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3134 ++#, c-format ++msgid "section [%2d] '%s': empty object attributes section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3155 ++#, c-format ++msgid "section [%2d] '%s': unrecognized attribute format\n" ++msgstr "" ++ ++#: ../src/elflint.c:3171 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3180 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3192 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" ++msgstr "" ++ ++#: ../src/elflint.c:3209 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3218 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3227 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" ++msgstr "" ++ ++#: ../src/elflint.c:3240 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/elflint.c:3251 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3269 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3280 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" ++msgstr "" ++ ++#: ../src/elflint.c:3293 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3297 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3307 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" ++msgstr "" ++ ++#: ../src/elflint.c:3313 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3402 ++#, c-format ++msgid "cannot get section header of zeroth section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3406 ++#, c-format ++msgid "zeroth section has nonzero name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3408 ++#, c-format ++msgid "zeroth section has nonzero type\n" ++msgstr "" ++ ++#: ../src/elflint.c:3410 ++#, c-format ++msgid "zeroth section has nonzero flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:3412 ++#, c-format ++msgid "zeroth section has nonzero address\n" ++msgstr "" ++ ++#: ../src/elflint.c:3414 ++#, c-format ++msgid "zeroth section has nonzero offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:3416 ++#, c-format ++msgid "zeroth section has nonzero info field\n" ++msgstr "" ++ ++#: ../src/elflint.c:3418 ++#, c-format ++msgid "zeroth section has nonzero align value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3420 ++#, c-format ++msgid "zeroth section has nonzero entry size value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3423 ++#, c-format ++msgid "" ++"zeroth section has nonzero size value while ELF header has nonzero shnum " ++"value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3427 ++#, c-format ++msgid "" ++"zeroth section has nonzero link value while ELF header does not signal " ++"overflow in shstrndx\n" ++msgstr "" ++ ++#: ../src/elflint.c:3444 ++#, c-format ++msgid "cannot get section header for section [%2zu] '%s': %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3453 ++#, c-format ++msgid "section [%2zu]: invalid name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3480 ++#, c-format ++msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3496 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3513 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3531 ++#, c-format ++msgid "section [%2zu] '%s' present in object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3537 ../src/elflint.c:3569 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3542 ../src/elflint.c:3574 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " ++"segments\n" ++msgstr "" ++ ++#: ../src/elflint.c:3550 ++#, c-format ++msgid "" ++"section [%2zu] '%s' is extension section index table in non-object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3593 ++#, c-format ++msgid "section [%2zu] '%s': size not multiple of entry size\n" ++msgstr "" ++ ++#: ../src/elflint.c:3598 ++#, c-format ++msgid "cannot get section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:3608 ++#, c-format ++msgid "section [%2zu] '%s' has unsupported type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3622 ++#, c-format ++msgid "" ++"section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3629 ++#, c-format ++msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3637 ++#, c-format ++msgid "section [%2zu] '%s': thread-local data sections address not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3645 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in link value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3650 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in info value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3657 ++#, c-format ++msgid "section [%2zu] '%s': strings flag set without merge flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3662 ++#, c-format ++msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3680 ++#, c-format ++msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3689 ++#, c-format ++msgid "section [%2zu] '%s' is both executable and writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:3716 ++#, c-format ++msgid "" ++"section [%2zu] '%s' not fully contained in segment of program header entry %" ++"d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3724 ++#, 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:3733 ++#, 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:3744 ++#, c-format ++msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3754 ++#, c-format ++msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3764 ++#, c-format ++msgid "" ++"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3770 ++#, 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:3778 ++#, c-format ++msgid "" ++"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:3829 ++#, c-format ++msgid "more than one version symbol table present\n" ++msgstr "" ++ ++#: ../src/elflint.c:3852 ++#, c-format ++msgid "INTERP program header entry but no .interp section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3863 ++#, c-format ++msgid "" ++"loadable segment [%u] is executable but contains no executable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3869 ++#, c-format ++msgid "loadable segment [%u] is writable but contains no writable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3880 ++#, c-format ++msgid "" ++"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " ++"exist\n" ++msgstr "" ++ ++#: ../src/elflint.c:3893 ++#, c-format ++msgid "duplicate version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3907 ++#, c-format ++msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" ++msgstr "" ++ ++#: ../src/elflint.c:3956 ++#, c-format ++msgid "phdr[%d]: unknown core file note type % at offset %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3960 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown core file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3983 ++#, c-format ++msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3987 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:4004 ++#, c-format ++msgid "phdr[%d]: no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4023 ++#, c-format ++msgid "phdr[%d]: cannot get content of note section: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4026 ++#, c-format ++msgid "phdr[%d]: extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4047 ++#, c-format ++msgid "section [%2d] '%s': no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4054 ++#, c-format ++msgid "section [%2d] '%s': cannot get content of note section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4057 ++#, c-format ++msgid "section [%2d] '%s': extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4075 ++#, c-format ++msgid "" ++"only executables, shared objects, and core files can have program headers\n" ++msgstr "" ++ ++#: ../src/elflint.c:4090 ++#, c-format ++msgid "cannot get program header entry %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4099 ++#, c-format ++msgid "program header entry %d: unknown program header entry type %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:4110 ++#, c-format ++msgid "more than one INTERP entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4118 ++#, c-format ++msgid "more than one TLS entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4125 ++#, c-format ++msgid "static executable cannot have dynamic sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:4139 ++#, c-format ++msgid "dynamic section reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4142 ++#, c-format ++msgid "dynamic section size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4152 ++#, c-format ++msgid "more than one GNU_RELRO entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4173 ++#, c-format ++msgid "loadable segment GNU_RELRO applies to is not writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4176 ++#, c-format ++msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:4184 ../src/elflint.c:4207 ++#, c-format ++msgid "%s segment not contained in a loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4213 ++#, c-format ++msgid "program header offset in ELF header and PHDR entry do not match" ++msgstr "" ++ ++#: ../src/elflint.c:4237 ++#, c-format ++msgid "call frame search table reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4240 ++#, c-format ++msgid "call frame search table size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4253 ++#, c-format ++msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4261 ++#, c-format ++msgid "call frame search table must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4264 ++#, c-format ++msgid "section [%2zu] '%s' must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4268 ++#, c-format ++msgid "call frame search table must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4271 ++#, c-format ++msgid "section [%2zu] '%s' must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4276 ++#, c-format ++msgid "call frame search table must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4279 ++#, c-format ++msgid "section [%2zu] '%s' must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4290 ++#, c-format ++msgid "program header entry %d: file size greater than memory size\n" ++msgstr "" ++ ++#: ../src/elflint.c:4297 ++#, c-format ++msgid "program header entry %d: alignment not a power of 2\n" ++msgstr "" ++ ++#: ../src/elflint.c:4300 ++#, c-format ++msgid "" ++"program header entry %d: file offset and virtual address not module of " ++"alignment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4313 ++#, c-format ++msgid "" ++"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " ++"program header entry" ++msgstr "" ++ ++#: ../src/elflint.c:4347 ++#, c-format ++msgid "cannot read ELF header: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4373 ++#, c-format ++msgid "text relocation flag set but not needed\n" ++msgstr "" ++ ++#: ../src/addr2line.c:66 ++msgid "Output selection options:" ++msgstr "" ++ ++#: ../src/addr2line.c:67 ++msgid "Show only base names of source files" ++msgstr "" ++ ++#: ../src/addr2line.c:69 ++msgid "Show absolute file names using compilation directory" ++msgstr "" ++ ++#: ../src/addr2line.c:70 ++msgid "Also show function names" ++msgstr "" ++ ++#: ../src/addr2line.c:71 ++msgid "Also show symbol or section names" ++msgstr "" ++ ++#: ../src/addr2line.c:73 ++msgid "Treat addresses as offsets relative to NAME section." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/addr2line.c:84 ++msgid "" ++"Locate source files and line information for ADDRs (in a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/addr2line.c:88 ++msgid "[ADDR...]" ++msgstr "" ++ ++#: ../src/addr2line.c:405 ++#, c-format ++msgid "Section syntax requires exactly one module" ++msgstr "" ++ ++#: ../src/addr2line.c:428 ++#, c-format ++msgid "offset %# lies outside section '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:461 ++#, c-format ++msgid "cannot find symbol '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:466 ++#, c-format ++msgid "offset %# lies outside contents of '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:70 ++msgid "Input Selection:" ++msgstr "" ++ ++#: ../src/findtextrel.c:71 ++msgid "Prepend PATH to all file names" ++msgstr "" ++ ++#: ../src/findtextrel.c:73 ++msgid "Use PATH as root of debuginfo hierarchy" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/findtextrel.c:80 ++msgid "Locate source of text relocations in FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/findtextrel.c:236 ../src/elfcmp.c:578 ../src/ranlib.c:186 ++#, c-format ++msgid "cannot create ELF descriptor for '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:246 ++#, c-format ++msgid "cannot get ELF header '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:257 ++#, c-format ++msgid "'%s' is not a DSO or PIE" ++msgstr "" ++ ++#: ../src/findtextrel.c:274 ++#, c-format ++msgid "getting get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:292 ++#, c-format ++msgid "cannot read dynamic section: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:307 ++#, c-format ++msgid "no text relocations reported in '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:319 ++#, c-format ++msgid "while reading ELF file" ++msgstr "" ++ ++#: ../src/findtextrel.c:328 ../src/findtextrel.c:345 ++#, c-format ++msgid "cannot get program header index at offset %d: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:397 ++#, c-format ++msgid "cannot get section header of section %Zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:409 ++#, c-format ++msgid "cannot get symbol table section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:429 ../src/findtextrel.c:452 ++#, c-format ++msgid "cannot get relocation at index %d in section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:517 ++#, c-format ++msgid "%s not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:570 ++#, c-format ++msgid "" ++"the file containing the function '%s' is not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:577 ../src/findtextrel.c:597 ++#, c-format ++msgid "" ++"the file containing the function '%s' might not be compiled with -fpic/-" ++"fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:585 ++#, 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:605 ++#, c-format ++msgid "" ++"a relocation modifies memory at offset %llu in a write-protected segment\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:69 ++msgid "Control options:" ++msgstr "" ++ ++#: ../src/elfcmp.c:70 ++msgid "" ++"Control treatment of gaps in loadable segments [ignore|match] (default: " ++"ignore)" ++msgstr "" ++ ++#: ../src/elfcmp.c:72 ++msgid "Ignore permutation of buckets in SHT_HASH section" ++msgstr "" ++ ++#: ../src/elfcmp.c:73 ++msgid "Output nothing; yield exit status only" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elfcmp.c:80 ++msgid "Compare relevant parts of two ELF files for equality." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/elfcmp.c:84 ++msgid "FILE1 FILE2" ++msgstr "" ++ ++#: ../src/elfcmp.c:140 ++msgid "Invalid number of parameters.\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:168 ../src/elfcmp.c:173 ++#, c-format ++msgid "cannot get ELF header of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:190 ++#, c-format ++msgid "%s %s diff: ELF header" ++msgstr "" ++ ++#: ../src/elfcmp.c:248 ++#, c-format ++msgid "%s %s differ: section header" ++msgstr "" ++ ++#: ../src/elfcmp.c:276 ../src/elfcmp.c:282 ++#, c-format ++msgid "cannot get content of section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:298 ../src/elfcmp.c:304 ++#, c-format ++msgid "cannot get symbol in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:325 ++#, c-format ++msgid "%s %s differ: symbol table [%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:328 ++#, c-format ++msgid "%s %s differ: symbol table [%zu,%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:376 ++#, c-format ++msgid "%s %s differ: section [%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:380 ++#, c-format ++msgid "%s %s differ: section [%zu,%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:396 ++#, c-format ++msgid "%s %s differ: unequal amount of important sections" ++msgstr "" ++ ++#: ../src/elfcmp.c:430 ../src/elfcmp.c:435 ++#, c-format ++msgid "cannot load data of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:454 ../src/elfcmp.c:460 ++#, c-format ++msgid "cannot get program header entry %d of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:466 ++#, c-format ++msgid "%s %s differ: program header %d" ++msgstr "" ++ ++#: ../src/elfcmp.c:491 ++#, c-format ++msgid "%s %s differ: gap" ++msgstr "" ++ ++#: ../src/elfcmp.c:550 ++#, c-format ++msgid "Invalid value '%s' for --gaps parameter." ++msgstr "" ++ ++#: ../src/elfcmp.c:583 ++#, c-format ++msgid "cannot create EBL descriptor for '%s'" ++msgstr "" ++ ++#: ../src/elfcmp.c:601 ++#, c-format ++msgid "cannot get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:611 ++#, c-format ++msgid "cannot get content of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:621 ../src/elfcmp.c:635 ++#, c-format ++msgid "cannot get relocation: %s" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ranlib.c:74 ++msgid "Generate an index to speed access to archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ranlib.c:77 ++msgid "ARCHIVE" ++msgstr "" ++ ++#: ../src/ranlib.c:116 ++#, c-format ++msgid "Archive name required" ++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/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 "" ++ ++#. Short description of program. ++#: ../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 ../src/strings.c:680 ++#, c-format ++msgid "re-mmap failed" ++msgstr "" ++ ++#: ../src/strings.c:653 ++#, c-format ++msgid "mprotect failed" ++msgstr "" ++ ++#: ../src/unstrip.c:77 ++msgid "Match MODULE against file names, not module names" ++msgstr "" ++ ++#: ../src/unstrip.c:78 ++msgid "Silently skip unfindable files" ++msgstr "" ++ ++#: ../src/unstrip.c:81 ++msgid "Place output into FILE" ++msgstr "" ++ ++#: ../src/unstrip.c:83 ++msgid "Create multiple output files under DIRECTORY" ++msgstr "" ++ ++#: ../src/unstrip.c:84 ++msgid "Use module rather than file names" ++msgstr "" ++ ++#: ../src/unstrip.c:86 ++msgid "Create output for modules that have no separate debug information" ++msgstr "" ++ ++#: ../src/unstrip.c:89 ++msgid "Apply relocations to section contents in ET_REL files" ++msgstr "" ++ ++#: ../src/unstrip.c:91 ++msgid "Only list module and file names, build IDs" ++msgstr "" ++ ++#: ../src/unstrip.c:133 ++#, c-format ++msgid "-d option specified twice" ++msgstr "" ++ ++#: ../src/unstrip.c:165 ++#, c-format ++msgid "only one of -o or -d allowed" ++msgstr "" ++ ++#: ../src/unstrip.c:174 ++#, c-format ++msgid "-n cannot be used with explicit files or -o or -d" ++msgstr "" ++ ++#: ../src/unstrip.c:189 ++#, c-format ++msgid "output directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:198 ++#, c-format ++msgid "exactly two file arguments are required" ++msgstr "" ++ ++#: ../src/unstrip.c:204 ++#, c-format ++msgid "-m, -a, -R, and -i options not allowed with explicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:217 ++#, c-format ++msgid "-o or -d is required when using implicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:253 ++#, c-format ++msgid "cannot create ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:258 ++#, c-format ++msgid "cannot copy ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:263 ../src/unstrip.c:1816 ++#, c-format ++msgid "cannot create program headers: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:269 ++#, c-format ++msgid "cannot copy program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:279 ++#, c-format ++msgid "cannot copy section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:282 ../src/unstrip.c:1504 ++#, c-format ++msgid "cannot get section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:284 ../src/unstrip.c:1506 ++#, c-format ++msgid "cannot copy section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:308 ++#, c-format ++msgid "cannot create directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:348 ../src/unstrip.c:762 ../src/unstrip.c:1539 ++#, c-format ++msgid "cannot get symbol table entry: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:364 ../src/unstrip.c:579 ../src/unstrip.c:600 ++#: ../src/unstrip.c:612 ../src/unstrip.c:1560 ../src/unstrip.c:1690 ++#: ../src/unstrip.c:1714 ++#, c-format ++msgid "cannot update symbol table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:381 ../src/unstrip.c:431 ../src/unstrip.c:561 ++#: ../src/unstrip.c:1208 ../src/unstrip.c:1524 ../src/unstrip.c:1719 ++#: ../src/unstrip.c:1790 ++#, c-format ++msgid "cannot update section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:407 ../src/unstrip.c:418 ++#, c-format ++msgid "cannot update relocation: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:506 ++#, c-format ++msgid "cannot get symbol version: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:518 ++#, c-format ++msgid "unexpected section type in [%Zu] with sh_link to symtab" ++msgstr "" ++ ++#: ../src/unstrip.c:768 ++#, c-format ++msgid "invalid string offset in symbol [%Zu]" ++msgstr "" ++ ++#: ../src/unstrip.c:910 ../src/unstrip.c:1247 ++#, c-format ++msgid "cannot read section [%Zu] name: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:951 ../src/unstrip.c:970 ../src/unstrip.c:1003 ++#, c-format ++msgid "cannot read '.gnu.prelink_undo' section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:991 ++#, c-format ++msgid "invalid contents in '%s' section" ++msgstr "" ++ ++#: ../src/unstrip.c:1046 ../src/unstrip.c:1369 ++#, c-format ++msgid "cannot find matching section for [%Zu] '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:1170 ../src/unstrip.c:1185 ../src/unstrip.c:1450 ++#, c-format ++msgid "cannot add section name to string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1194 ++#, c-format ++msgid "cannot update section header string table data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1222 ../src/unstrip.c:1226 ++#, c-format ++msgid "cannot get section header string table section index: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1230 ../src/unstrip.c:1234 ../src/unstrip.c:1465 ++#, c-format ++msgid "cannot get section count: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1292 ../src/unstrip.c:1384 ++#, c-format ++msgid "cannot read section header string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1444 ++#, c-format ++msgid "cannot add new section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1547 ++#, c-format ++msgid "symbol [%Zu] has invalid section index" ++msgstr "" ++ ++#: ../src/unstrip.c:1799 ++#, c-format ++msgid "cannot get ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1826 ++#, c-format ++msgid "cannot update program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1831 ../src/unstrip.c:1910 ++#, c-format ++msgid "cannot write output file: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1879 ++#, c-format ++msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1882 ++#, c-format ++msgid "" ++"DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1901 ../src/unstrip.c:1941 ../src/unstrip.c:1953 ++#: ../src/unstrip.c:2033 ++#, c-format ++msgid "cannot create ELF descriptor: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1959 ++#, c-format ++msgid "'%s' and '%s' do not seem to match" ++msgstr "" ++ ++#: ../src/unstrip.c:1990 ++#, c-format ++msgid "cannot find stripped file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1994 ++#, c-format ++msgid "cannot open stripped file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2009 ++#, c-format ++msgid "cannot find debug file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2013 ++#, c-format ++msgid "cannot open debug file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2026 ++#, c-format ++msgid "module '%s' file '%s' is not stripped" ++msgstr "" ++ ++#: ../src/unstrip.c:2057 ++#, c-format ++msgid "cannot cache section addresses for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2190 ++#, c-format ++msgid "no matching modules found" ++msgstr "" ++ ++#: ../src/unstrip.c:2199 ++#, c-format ++msgid "matched more than one module" ++msgstr "" ++ ++#: ../src/unstrip.c:2246 ++msgid "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++msgstr "" ++ ++#: ../src/unstrip.c:2247 ++msgid "" ++"Combine stripped files with separate symbols and debug information.\vThe " ++"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." ++msgstr "" ++ ++#: ../src/objdump.c:61 ++msgid "Mode selection:" ++msgstr "" ++ ++#: ../src/objdump.c:62 ++msgid "Display relocation information." ++msgstr "" ++ ++#: ../src/objdump.c:64 ++msgid "Display the full contents of all sections requested" ++msgstr "" ++ ++#: ../src/objdump.c:66 ++msgid "Display assembler code of executable sections" ++msgstr "" ++ ++#: ../src/objdump.c:68 ++msgid "Output option selection:" ++msgstr "" ++ ++#: ../src/objdump.c:70 ++msgid "Only display information for section NAME." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/objdump.c:76 ++msgid "Show information from FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/objdump.c:274 ../src/objdump.c:286 ++#, c-format ++msgid "while close `%s'" ++msgstr "" ++ ++#: ../src/objdump.c:510 ++#, c-format ++msgid "" ++"\n" ++"RELOCATION RECORDS FOR [%s]:\n" ++"%-*s TYPE VALUE\n" ++msgstr "" ++ ++#: ../src/objdump.c:513 ++msgid "OFFSET" ++msgstr "" ++ ++#: ../src/objdump.c:576 ++#, c-format ++msgid "Contents of section %s:\n" ++msgstr "" ++ ++#: ../src/objdump.c:676 ++#, c-format ++msgid "cannot disassemble" ++msgstr "" +diff --git a/po/ru.po b/po/ru.po +new file mode 100644 +index 0000000..90e33a5 +--- /dev/null ++++ b/po/ru.po +@@ -0,0 +1,5570 @@ ++# translation of ru.po to ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# ++# ++msgid "" ++msgstr "" ++"Project-Id-Version: ru\n" ++"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" ++"POT-Creation-Date: 2009-11-11 20:45+0000\n" ++"PO-Revision-Date: 2009-11-12 10:27+1100\n" ++"Last-Translator: NAME \n" ++"Language-Team: \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: KBabel 1.11.4\n" ++ ++#: ../lib/xmalloc.c:51 ../lib/xmalloc.c:65 ../lib/xmalloc.c:79 ++#: ../src/readelf.c:2796 ../src/readelf.c:3135 ../src/unstrip.c:2086 ++#: ../src/unstrip.c:2294 ++#, c-format ++msgid "memory exhausted" ++msgstr "" ++ ++#: ../libelf/elf_error.c:81 ../libasm/asm_error.c:62 ../libdw/dwarf_error.c:79 ++msgid "no error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:84 ../libasm/asm_error.c:81 ../libdw/dwarf_error.c:80 ++msgid "unknown error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:88 ++msgid "unknown version" ++msgstr "" ++ ++#: ../libelf/elf_error.c:92 ++msgid "unknown type" ++msgstr "" ++ ++#: ../libelf/elf_error.c:96 ++msgid "invalid `Elf' handle" ++msgstr "" ++ ++#: ../libelf/elf_error.c:100 ++msgid "invalid size of source operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:104 ++msgid "invalid size of destination operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:108 ../src/readelf.c:4742 ++#, c-format ++msgid "invalid encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:112 ../libasm/asm_error.c:63 ++#: ../libdw/dwarf_error.c:88 ++msgid "out of memory" ++msgstr "" ++ ++#: ../libelf/elf_error.c:116 ++msgid "invalid file descriptor" ++msgstr "" ++ ++#: ../libelf/elf_error.c:120 ++msgid "invalid operation" ++msgstr "" ++ ++#: ../libelf/elf_error.c:124 ++msgid "ELF version not set" ++msgstr "" ++ ++#: ../libelf/elf_error.c:128 ../libelf/elf_error.c:176 ++#: ../libdw/dwarf_error.c:90 ++msgid "invalid command" ++msgstr "" ++ ++#: ../libelf/elf_error.c:132 ../libelf/elf_error.c:192 ++msgid "offset out of range" ++msgstr "" ++ ++#: ../libelf/elf_error.c:136 ++msgid "invalid fmag field in archive header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:140 ++msgid "invalid archive file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:144 ++msgid "descriptor is not for an archive" ++msgstr "" ++ ++#: ../libelf/elf_error.c:148 ++msgid "no index available" ++msgstr "" ++ ++#: ../libelf/elf_error.c:152 ++msgid "cannot read data from file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:156 ++msgid "cannot write data to file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:160 ++msgid "invalid binary class" ++msgstr "" ++ ++#: ../libelf/elf_error.c:164 ++msgid "invalid section index" ++msgstr "" ++ ++#: ../libelf/elf_error.c:168 ++msgid "invalid operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:172 ++msgid "invalid section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:180 ++msgid "executable header not created first" ++msgstr "" ++ ++#: ../libelf/elf_error.c:184 ++msgid "file descriptor disabled" ++msgstr "" ++ ++#: ../libelf/elf_error.c:188 ++msgid "archive/member fildes mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:196 ++msgid "cannot manipulate null section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:200 ++msgid "data/scn mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:204 ++msgid "invalid section header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:208 ../src/readelf.c:6226 ../src/readelf.c:6327 ++#, c-format ++msgid "invalid data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:212 ++msgid "unknown data encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:216 ++msgid "section `sh_size' too small for data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:220 ++msgid "invalid section alignment" ++msgstr "" ++ ++#: ../libelf/elf_error.c:224 ++msgid "invalid section entry size" ++msgstr "" ++ ++#: ../libelf/elf_error.c:228 ++msgid "update() for write on read-only file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:232 ++msgid "no such file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:236 ++msgid "only relocatable files can contain section groups" ++msgstr "" ++ ++#: ../libelf/elf_error.c:241 ++msgid "program header only allowed in executables, shared objects, and core files" ++msgstr "" ++ ++#: ../libelf/elf_error.c:248 ++msgid "file has no program header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:253 ../libdw/dwarf_error.c:112 ++msgid "invalid offset" ++msgstr "" ++ ++#: ../libasm/asm_error.c:64 ../src/ldgeneric.c:2687 ++#, c-format ++msgid "cannot create output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:65 ++msgid "invalid parameter" ++msgstr "" ++ ++#: ../libasm/asm_error.c:66 ++msgid "cannot change mode of output file" ++msgstr "" ++ ++#. Something went wrong. ++#: ../libasm/asm_error.c:67 ../src/ldgeneric.c:7001 ++#, c-format ++msgid "cannot rename output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:68 ++msgid "duplicate symbol" ++msgstr "" ++ ++#: ../libasm/asm_error.c:69 ++msgid "invalid section type for operation" ++msgstr "" ++ ++#: ../libasm/asm_error.c:70 ++msgid "error during output of data" ++msgstr "" ++ ++#: ../libasm/asm_error.c:71 ++msgid "no backend support available" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:81 ++msgid "invalid access" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:82 ++msgid "no regular file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:83 ++msgid "I/O error" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:84 ++msgid "invalid ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:85 ++msgid "no DWARF information" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:86 ++msgid "no ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:87 ++msgid "cannot get ELF header" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:89 ++msgid "not implemented" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:91 ++msgid "invalid version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:92 ++msgid "invalid file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:93 ++msgid "no entries found" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:94 ++msgid "invalid DWARF" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:95 ++msgid "no string data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:96 ++msgid "no address value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:97 ++msgid "no constant value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:98 ++msgid "no reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:99 ++msgid "invalid reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:100 ++msgid ".debug_line section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:101 ++msgid "invalid .debug_line section" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:102 ++msgid "debug information too big" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:103 ++msgid "invalid DWARF version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:104 ++msgid "invalid directory index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:105 ++msgid "address out of range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:106 ++msgid "no location list value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:107 ++msgid "no block data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:108 ++msgid "invalid line index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:109 ++msgid "invalid address range index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:110 ++msgid "no matching address range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:111 ++msgid "no flag value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:113 ++msgid ".debug_ranges section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:114 ++msgid "invalid CFI section" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:67 ../src/unstrip.c:2236 ++msgid "Input selection options:" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:68 ++msgid "Find addresses in FILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:70 ++msgid "Find addresses from signatures found in COREFILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:72 ++msgid "Find addresses in files mapped into process PID" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:74 ++msgid "" ++"Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " ++"format" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:76 ++msgid "Find addresses in the running kernel" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:78 ++msgid "Kernel with all modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:80 ++msgid "Search path for separate debuginfo files" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:163 ++msgid "only one of -e, -p, -k, -K, or --core allowed" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:223 ++#, c-format ++msgid "cannot read ELF core file: %s" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:243 ++msgid "No modules recognized in core file" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:255 ++msgid "cannot load kernel symbols" ++msgstr "" ++ ++#. Non-fatal to have no modules since we do have the kernel. ++#: ../libdwfl/argp-std.c:259 ++msgid "cannot find kernel modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:273 ++msgid "cannot find kernel or modules" ++msgstr "" ++ ++#: ../libebl/eblbackendname.c:63 ++msgid "No backend" ++msgstr "" ++ ++#: ../libebl/eblcorenotetypename.c:107 ../libebl/eblobjecttypename.c:78 ++#: ../libebl/eblobjnotetypename.c:86 ../libebl/eblosabiname.c:98 ++#: ../libebl/eblsectionname.c:110 ../libebl/eblsectiontypename.c:140 ++#: ../libebl/eblsegmenttypename.c:104 ++msgid "" ++msgstr "" ++ ++#: ../libebl/ebldynamictagname.c:126 ++#, c-format ++msgid ": %#" ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:76 ++#, c-format ++msgid " Build ID: " ++msgstr "" ++ ++#. A non-null terminated version string. ++#: ../libebl/eblobjnote.c:87 ++#, c-format ++msgid " Linker version: %.*s\n" ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:136 ++#, c-format ++msgid " OS: %s, ABI: " ++msgstr "" ++ ++#: ../libebl/eblosabiname.c:95 ++msgid "Stand alone" ++msgstr "" ++ ++#: ../libebl/eblsymbolbindingname.c:92 ../libebl/eblsymboltypename.c:98 ++#, c-format ++msgid ": %d" ++msgstr "" ++ ++#: ../src/ar.c:75 ++msgid "Commands:" ++msgstr "" ++ ++#: ../src/ar.c:76 ++msgid "Delete files from archive." ++msgstr "" ++ ++#: ../src/ar.c:77 ++msgid "Move files in archive." ++msgstr "" ++ ++#: ../src/ar.c:78 ++msgid "Print files in archive." ++msgstr "" ++ ++#: ../src/ar.c:79 ++msgid "Quick append files to archive." ++msgstr "" ++ ++#: ../src/ar.c:81 ++msgid "Replace existing or insert new file into archive." ++msgstr "" ++ ++#: ../src/ar.c:82 ++msgid "Display content of archive." ++msgstr "" ++ ++#: ../src/ar.c:83 ++msgid "Extract files from archive." ++msgstr "" ++ ++#: ../src/ar.c:85 ++msgid "Command Modifiers:" ++msgstr "" ++ ++#: ../src/ar.c:86 ++msgid "Preserve original dates." ++msgstr "" ++ ++#: ../src/ar.c:87 ++msgid "Use instance [COUNT] of name." ++msgstr "" ++ ++#: ../src/ar.c:89 ++msgid "Do not replace existing files with extracted files." ++msgstr "" ++ ++#: ../src/ar.c:90 ++msgid "Allow filename to be truncated if necessary." ++msgstr "" ++ ++#: ../src/ar.c:92 ++msgid "Provide verbose output." ++msgstr "" ++ ++#: ../src/ar.c:93 ++msgid "Force regeneration of symbol table." ++msgstr "" ++ ++#: ../src/ar.c:94 ++msgid "Insert file after [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:95 ++msgid "Insert file before [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:96 ++msgid "Same as -b." ++msgstr "" ++ ++#: ../src/ar.c:97 ++msgid "Suppress message when library has to be created." ++msgstr "" ++ ++#: ../src/ar.c:99 ++msgid "Use full path for file matching." ++msgstr "" ++ ++#: ../src/ar.c:100 ++msgid "Update only older files in archive." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ar.c:106 ++msgid "Create, modify, and extract from archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ar.c:109 ++msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++msgstr "" ++ ++#: ../src/ar.c:191 ++#, c-format ++msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" ++msgstr "" ++ ++#: ../src/ar.c:196 ++#, c-format ++msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" ++msgstr "" ++ ++#: ../src/ar.c:212 ++#, c-format ++msgid "'N' is only meaningful with the 'x' and 'd' options" ++msgstr "" ++ ++#: ../src/ar.c:217 ++#, c-format ++msgid "COUNT parameter required" ++msgstr "" ++ ++#: ../src/ar.c:229 ++#, c-format ++msgid "invalid COUNT parameter %s" ++msgstr "" ++ ++#: ../src/ar.c:236 ++#, c-format ++msgid "'%c' is only meaningful with the 'x' option" ++msgstr "" ++ ++#: ../src/ar.c:242 ++#, c-format ++msgid "archive name required" ++msgstr "" ++ ++#: ../src/ar.c:288 ../src/nm.c:253 ../src/readelf.c:442 ../src/size.c:219 ++#: ../src/strip.c:203 ../src/ld.c:957 ../src/elflint.c:238 ++#: ../src/addr2line.c:185 ../src/findtextrel.c:170 ../src/elfcmp.c:522 ++#: ../src/ranlib.c:136 ../src/strings.c:227 ../src/unstrip.c:233 ++#: ../src/objdump.c:181 ++#, 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/ar.c:293 ../src/nm.c:258 ../src/readelf.c:447 ../src/size.c:224 ++#: ../src/strip.c:208 ../src/ld.c:962 ../src/elflint.c:243 ++#: ../src/addr2line.c:190 ../src/findtextrel.c:175 ../src/elfcmp.c:527 ++#: ../src/ranlib.c:141 ../src/strings.c:232 ../src/unstrip.c:238 ++#: ../src/objdump.c:186 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "" ++ ++#: ../src/ar.c:313 ++#, c-format ++msgid "More than one operation specified" ++msgstr "" ++ ++#: ../src/ar.c:403 ++#, c-format ++msgid "cannot open archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:413 ++#, c-format ++msgid "cannot open archive '%s': %s" ++msgstr "" ++ ++#: ../src/ar.c:417 ++#, c-format ++msgid "%s: not an archive file" ++msgstr "" ++ ++#: ../src/ar.c:421 ++#, c-format ++msgid "cannot stat archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:433 ++#, c-format ++msgid "no entry %s in archive\n" ++msgstr "" ++ ++#: ../src/ar.c:486 ../src/ar.c:928 ../src/ar.c:1128 ++#, c-format ++msgid "cannot create hash table" ++msgstr "" ++ ++#: ../src/ar.c:493 ../src/ar.c:935 ../src/ar.c:1137 ++#, c-format ++msgid "cannot insert into hash table" ++msgstr "" ++ ++#: ../src/ar.c:501 ../src/ranlib.c:176 ++#, c-format ++msgid "cannot stat '%s'" ++msgstr "" ++ ++#: ../src/ar.c:597 ++#, c-format ++msgid "cannot read content of %s: %s" ++msgstr "" ++ ++#: ../src/ar.c:640 ++#, c-format ++msgid "cannot open %.*s" ++msgstr "" ++ ++#: ../src/ar.c:662 ++#, c-format ++msgid "failed to write %s" ++msgstr "" ++ ++#: ../src/ar.c:674 ++#, c-format ++msgid "cannot change mode of %s" ++msgstr "" ++ ++#: ../src/ar.c:690 ++#, c-format ++msgid "cannot change modification time of %s" ++msgstr "" ++ ++#: ../src/ar.c:736 ++#, c-format ++msgid "cannot rename temporary file to %.*s" ++msgstr "" ++ ++#: ../src/ar.c:772 ../src/ar.c:1020 ../src/ar.c:1418 ../src/ranlib.c:250 ++#, c-format ++msgid "cannot create new file" ++msgstr "" ++ ++#: ../src/ar.c:1219 ++#, c-format ++msgid "position member %s not found" ++msgstr "" ++ ++#: ../src/ar.c:1229 ++#, c-format ++msgid "%s: no entry %s in archive!\n" ++msgstr "" ++ ++#: ../src/ar.c:1258 ../src/ldgeneric.c:519 ../src/objdump.c:257 ++#, c-format ++msgid "cannot open %s" ++msgstr "" ++ ++#: ../src/ar.c:1263 ++#, c-format ++msgid "cannot stat %s" ++msgstr "" ++ ++#: ../src/ar.c:1269 ++#, c-format ++msgid "%s is no regular file" ++msgstr "" ++ ++#: ../src/ar.c:1282 ++#, c-format ++msgid "cannot get ELF descriptor for %s: %s\n" ++msgstr "" ++ ++#: ../src/ar.c:1301 ++#, c-format ++msgid "cannot read %s: %s" ++msgstr "" ++ ++#. The archive is too big. ++#: ../src/arlib.c:215 ++#, c-format ++msgid "the archive '%s' is too large" ++msgstr "" ++ ++#: ../src/arlib.c:228 ++#, c-format ++msgid "cannot read ELF header of %s(%s): %s" ++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 ../src/unstrip.c:80 ++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:75 ../src/findtextrel.c:75 ++#: ../src/elfcmp.c:75 ../src/strings.c:83 ++msgid "Miscellaneous:" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/nm.c:108 ++msgid "List symbols from FILEs (a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/nm.c:111 ../src/size.c:92 ../src/strip.c:96 ../src/findtextrel.c:84 ++#: ../src/strings.c:92 ../src/objdump.c:80 ++msgid "[FILE...]" ++msgstr "" ++ ++#: ../src/nm.c:136 ../src/size.c:117 ../src/strip.c:120 ../src/objdump.c:105 ++#, c-format ++msgid "%s: INTERNAL ERROR %d (%s-%s): %s" ++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:229 ++#: ../src/elfcmp.c:574 ../src/ranlib.c:169 ../src/strings.c:183 ++#: ../src/unstrip.c:1899 ../src/unstrip.c:1928 ++#, c-format ++msgid "cannot open '%s'" ++msgstr "" ++ ++#: ../src/nm.c:380 ../src/nm.c:392 ../src/size.c:317 ../src/size.c:326 ++#: ../src/size.c:337 ../src/strip.c:1815 ++#, c-format ++msgid "while closing '%s'" ++msgstr "" ++ ++#: ../src/nm.c:402 ../src/strip.c:358 ../src/objdump.c:296 ++#, c-format ++msgid "%s: File format not recognized" ++msgstr "" ++ ++#. Note: 0 is no valid offset. ++#: ../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 ../src/objdump.c:344 ++#, 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:860 ../src/readelf.c:1003 ++#: ../src/readelf.c:1144 ../src/readelf.c:1326 ../src/readelf.c:1524 ++#: ../src/readelf.c:1710 ../src/readelf.c:1920 ../src/readelf.c:2174 ++#: ../src/readelf.c:2240 ../src/readelf.c:2318 ../src/readelf.c:2815 ++#: ../src/readelf.c:2851 ../src/readelf.c:2913 ../src/readelf.c:6476 ++#: ../src/readelf.c:7329 ../src/readelf.c:7474 ../src/readelf.c:7543 ++#: ../src/size.c:425 ../src/size.c:499 ../src/strip.c:482 ../src/objdump.c:744 ++#, 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 "" ++ ++#. The header line. ++#: ../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 "" ++ ++#. XXX Add machine specific object file types. ++#: ../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: -e -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, macinfo, or exception" ++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:99 ++msgid "Display sections for exception handling" ++msgstr "" ++ ++#: ../src/readelf.c:102 ++msgid "Output control:" ++msgstr "" ++ ++#: ../src/readelf.c:104 ++msgid "Do not find symbol names for addresses in DWARF data" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/readelf.c:110 ++msgid "Print information from ELF file in human-readable form." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/readelf.c:114 ../src/elflint.c:85 ++msgid "FILE..." ++msgstr "" ++ ++#: ../src/readelf.c:266 ../src/elflint.c:158 ++#, c-format ++msgid "cannot open input file" ++msgstr "" ++ ++#: ../src/readelf.c:394 ++#, c-format ++msgid "Unknown DWARF debug section `%s'.\n" ++msgstr "" ++ ++#: ../src/readelf.c:418 ../src/elflint.c:222 ++msgid "Missing file name.\n" ++msgstr "" ++ ++#: ../src/readelf.c:423 ../src/objdump.c:236 ++msgid "No operation specified.\n" ++msgstr "" ++ ++#: ../src/readelf.c:458 ++#, c-format ++msgid "cannot generate Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:470 ++#, c-format ++msgid "'%s' is not an archive, cannot print archive index" ++msgstr "" ++ ++#: ../src/readelf.c:475 ++#, c-format ++msgid "error while closing Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:567 ++#, c-format ++msgid "cannot stat input file" ++msgstr "" ++ ++#: ../src/readelf.c:569 ++#, c-format ++msgid "input file is empty" ++msgstr "" ++ ++#: ../src/readelf.c:571 ++#, c-format ++msgid "failed reading '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:606 ++#, c-format ++msgid "cannot read ELF header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:614 ++#, c-format ++msgid "cannot create EBL handle" ++msgstr "" ++ ++#: ../src/readelf.c:621 ../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:707 ++msgid "NONE (None)" ++msgstr "" ++ ++#: ../src/readelf.c:708 ++msgid "REL (Relocatable file)" ++msgstr "" ++ ++#: ../src/readelf.c:709 ++msgid "EXEC (Executable file)" ++msgstr "" ++ ++#: ../src/readelf.c:710 ++msgid "DYN (Shared object file)" ++msgstr "" ++ ++#: ../src/readelf.c:711 ++msgid "CORE (Core file)" ++msgstr "" ++ ++#: ../src/readelf.c:716 ++#, c-format ++msgid "OS Specific: (%x)\n" ++msgstr "" ++ ++#. && e_type <= ET_HIPROC always true ++#: ../src/readelf.c:718 ++#, c-format ++msgid "Processor Specific: (%x)\n" ++msgstr "" ++ ++#: ../src/readelf.c:728 ++msgid "" ++"ELF Header:\n" ++" Magic: " ++msgstr "" ++ ++#: ../src/readelf.c:732 ++#, c-format ++msgid "" ++"\n" ++" Class: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:737 ++#, c-format ++msgid " Data: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:743 ++#, c-format ++msgid " Ident Version: %hhd %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:745 ../src/readelf.c:762 ++msgid "(current)" ++msgstr "" ++ ++#: ../src/readelf.c:749 ++#, c-format ++msgid " OS/ABI: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:752 ++#, c-format ++msgid " ABI Version: %hhd\n" ++msgstr "" ++ ++#: ../src/readelf.c:755 ++msgid " Type: " ++msgstr "" ++ ++#: ../src/readelf.c:758 ++#, c-format ++msgid " Machine: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:760 ++#, c-format ++msgid " Version: %d %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:764 ++#, c-format ++msgid " Entry point address: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:767 ++#, c-format ++msgid " Start of program headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:768 ../src/readelf.c:771 ++msgid "(bytes into file)" ++msgstr "" ++ ++#: ../src/readelf.c:770 ++#, c-format ++msgid " Start of section headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:773 ++#, c-format ++msgid " Flags: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:776 ++#, c-format ++msgid " Size of this header: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:777 ../src/readelf.c:780 ../src/readelf.c:786 ++msgid "(bytes)" ++msgstr "" ++ ++#: ../src/readelf.c:779 ++#, c-format ++msgid " Size of program header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:782 ++#, c-format ++msgid " Number of program headers entries: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:785 ++#, c-format ++msgid " Size of section header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:788 ++#, c-format ++msgid " Number of section headers entries: %" ++msgstr "" ++ ++#: ../src/readelf.c:795 ++#, c-format ++msgid " (% in [0].sh_size)" ++msgstr "" ++ ++#: ../src/readelf.c:798 ../src/readelf.c:812 ++msgid " ([0] not available)" ++msgstr "" ++ ++#. We managed to get the zeroth section. ++#: ../src/readelf.c:808 ++#, c-format ++msgid " (% in [0].sh_link)" ++msgstr "" ++ ++#: ../src/readelf.c:816 ++#, c-format ++msgid "" ++" Section header string table index: XINDEX%s\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:820 ++#, c-format ++msgid "" ++" Section header string table index: %\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:852 ++#, c-format ++msgid "" ++"There are %d section headers, starting at offset %#:\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:862 ++msgid "Section Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:865 ++msgid "" ++"[Nr] Name Type Addr Off Size ES Flags Lk " ++"Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:867 ++msgid "" ++"[Nr] Name Type Addr Off Size ES " ++"Flags Lk Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:874 ../src/readelf.c:1027 ++#, c-format ++msgid "cannot get section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:881 ../src/readelf.c:1035 ../src/readelf.c:7494 ++#: ../src/unstrip.c:352 ../src/unstrip.c:376 ../src/unstrip.c:426 ++#: ../src/unstrip.c:535 ../src/unstrip.c:552 ../src/unstrip.c:590 ++#: ../src/unstrip.c:788 ../src/unstrip.c:1056 ../src/unstrip.c:1243 ++#: ../src/unstrip.c:1304 ../src/unstrip.c:1426 ../src/unstrip.c:1479 ++#: ../src/unstrip.c:1587 ../src/unstrip.c:1777 ++#, c-format ++msgid "cannot get section header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:939 ++msgid "Program Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:941 ++msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:944 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz " ++"MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:984 ++#, c-format ++msgid "\t[Requesting program interpreter: %s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1005 ++msgid "" ++"\n" ++" Section to Segment mapping:\n" ++" Segment Sections..." ++msgstr "" ++ ++#: ../src/readelf.c:1016 ../src/unstrip.c:1823 ../src/unstrip.c:1862 ++#: ../src/unstrip.c:1869 ++#, c-format ++msgid "cannot get program header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:1150 ++#, 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:1155 ++#, 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:1163 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1177 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1328 ++#, c-format ++msgid "" ++"\n" ++"Dynamic segment contains %lu entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Dynamic segment contains %lu entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1340 ++msgid " Type Value\n" ++msgstr "" ++ ++#: ../src/readelf.c:1364 ++#, c-format ++msgid "Shared library: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1369 ++#, c-format ++msgid "Library soname: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1374 ++#, c-format ++msgid "Library rpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1379 ++#, c-format ++msgid "Library runpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1399 ++#, c-format ++msgid "% (bytes)\n" ++msgstr "" ++ ++#: ../src/readelf.c:1509 ../src/readelf.c:1695 ++#, c-format ++msgid "" ++"\n" ++"Invalid symbol table at offset %#0\n" ++msgstr "" ++ ++#: ../src/readelf.c:1527 ../src/readelf.c:1712 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#. 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. ++#: ../src/readelf.c:1542 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1552 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1554 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1607 ../src/readelf.c:1618 ../src/readelf.c:1631 ++#: ../src/readelf.c:1649 ../src/readelf.c:1661 ../src/readelf.c:1780 ++#: ../src/readelf.c:1792 ../src/readelf.c:1806 ../src/readelf.c:1825 ++#: ../src/readelf.c:1838 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1619 ../src/readelf.c:1793 ../src/objdump.c:379 ++msgid "INVALID SYMBOL" ++msgstr "" ++ ++#: ../src/readelf.c:1650 ../src/readelf.c:1826 ../src/objdump.c:394 ++msgid "INVALID SECTION" ++msgstr "" ++ ++#: ../src/readelf.c:1724 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1726 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1927 ++#, 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:1933 ++#, 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:1943 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1945 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1965 ++#, c-format ++msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++msgstr "" ++ ++#: ../src/readelf.c:2053 ++#, c-format ++msgid "bad dynamic symbol" ++msgstr "" ++ ++#: ../src/readelf.c:2135 ++msgid "none" ++msgstr "" ++ ++#: ../src/readelf.c:2152 ++msgid "| " ++msgstr "" ++ ++#: ../src/readelf.c:2177 ++#, c-format ++msgid "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2200 ++#, c-format ++msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2213 ++#, c-format ++msgid " %#06x: Name: %s Flags: %s Version: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2244 ++#, c-format ++msgid "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2274 ++#, c-format ++msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2289 ++#, c-format ++msgid " %#06x: Parent %d: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2521 ++#, c-format ++msgid "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgid_plural "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2551 ++msgid " 0 *local* " ++msgstr "" ++ ++#: ../src/readelf.c:2556 ++msgid " 1 *global* " ++msgstr "" ++ ++#: ../src/readelf.c:2587 ++#, c-format ++msgid "" ++"\n" ++"Histogram for bucket list length in section [%2u] '%s' (total of %d " ++"bucket):\n" ++" Addr: %#0* Offset: %#08 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* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2610 ++#, c-format ++msgid " Length Number % of total Coverage\n" ++msgstr "" ++ ++#: ../src/readelf.c:2612 ++#, c-format ++msgid " 0 %6 %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2619 ++#, c-format ++msgid "%7d %6 %5.1f%% %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2632 ++#, c-format ++msgid "" ++" Average number of tests: successful lookup: %f\n" ++" unsuccessful lookup: %f\n" ++msgstr "" ++ ++#: ../src/readelf.c:2650 ../src/readelf.c:2692 ../src/readelf.c:2733 ++#, c-format ++msgid "cannot get data for section %d: %s" ++msgstr "" ++ ++#: ../src/readelf.c:2787 ++#, c-format ++msgid "" ++" Symbol Bias: %u\n" ++" Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:2861 ++#, c-format ++msgid "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2875 ++msgid "" ++" Library Time Stamp Checksum Version " ++"Flags" ++msgstr "" ++ ++#: ../src/readelf.c:2925 ++#, c-format ++msgid "" ++"\n" ++"Object attributes section [%2zu] '%s' of % bytes at offset %" ++"#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:2941 ++msgid " Owner Size\n" ++msgstr "" ++ ++#: ../src/readelf.c:2967 ++#, c-format ++msgid " %-13s %4\n" ++msgstr "" ++ ++#: ../src/readelf.c:2999 ++#, c-format ++msgid " %-4u %12\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/readelf.c:3004 ++#, c-format ++msgid " File: %11\n" ++msgstr "" ++ ++#: ../src/readelf.c:3039 ++#, c-format ++msgid " %s: %, %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3042 ++#, c-format ++msgid " %s: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:3045 ++#, c-format ++msgid " %s: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3052 ++#, c-format ++msgid " %u: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:3055 ++#, c-format ++msgid " %u: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3091 ++#, c-format ++msgid "%s+%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3094 ++#, c-format ++msgid "%s+%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3099 ++#, c-format ++msgid "%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3102 ++#, c-format ++msgid "%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3108 ++#, c-format ++msgid "%s+%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3111 ++#, c-format ++msgid "%s+%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3115 ++#, c-format ++msgid "%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3118 ++#, c-format ++msgid "%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3123 ++#, c-format ++msgid "%s+%#" ++msgstr "" ++ ++#: ../src/readelf.c:3126 ++#, c-format ++msgid "%s+%#0*" ++msgstr "" ++ ++#: ../src/readelf.c:3234 ++#, c-format ++msgid "unknown tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3236 ++#, c-format ++msgid "unknown user tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3446 ++#, c-format ++msgid "unknown attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3449 ++#, c-format ++msgid "unknown user attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3495 ++#, c-format ++msgid "unknown form %" ++msgstr "" ++ ++#: ../src/readelf.c:3729 ++msgid "empty block" ++msgstr "" ++ ++#: ../src/readelf.c:3732 ++#, c-format ++msgid "%zu byte block:" ++msgstr "" ++ ++#: ../src/readelf.c:4141 ++#, c-format ++msgid "%*s[%4] %s \n" ++msgstr "" ++ ++#: ../src/readelf.c:4154 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [ Code]\n" ++msgstr "" ++ ++#: ../src/readelf.c:4161 ++#, c-format ++msgid "" ++"\n" ++"Abbreviation section at offset %:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4174 ++#, c-format ++msgid " *** error while reading abbreviation: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4190 ++#, c-format ++msgid " [%5u] offset: %, children: %s, tag: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4193 ++msgid "yes" ++msgstr "" ++ ++#: ../src/readelf.c:4193 ++msgid "no" ++msgstr "" ++ ++#: ../src/readelf.c:4229 ++#, c-format ++msgid "cannot get .debug_aranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4234 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entry:\n" ++msgid_plural "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:4264 ++#, c-format ++msgid " [%*zu] ???\n" ++msgstr "" ++ ++#: ../src/readelf.c:4266 ++#, c-format ++msgid " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" ++msgstr "" ++ ++#: ../src/readelf.c:4285 ++#, c-format ++msgid "cannot get .debug_ranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4290 ../src/readelf.c:4773 ../src/readelf.c:5436 ++#: ../src/readelf.c:5881 ../src/readelf.c:5976 ../src/readelf.c:6148 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4304 ../src/readelf.c:5895 ++#, c-format ++msgid " [%6tx] \n" ++msgstr "" ++ ++#: ../src/readelf.c:4326 ../src/readelf.c:5917 ++#, c-format ++msgid " [%6tx] base address %s\n" ++msgstr "" ++ ++#. We have an address range entry. ++#. First address range entry in a list. ++#: ../src/readelf.c:4337 ++#, c-format ++msgid " [%6tx] %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4339 ++#, c-format ++msgid " %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4762 ../src/readelf.c:6214 ../src/readelf.c:6316 ++#, c-format ++msgid "cannot get %s content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4769 ++#, c-format ++msgid "" ++"\n" ++"Call frame information section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4796 ../src/readelf.c:5470 ++#, c-format ++msgid "invalid data in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:4818 ++#, c-format ++msgid "" ++"\n" ++" [%6tx] Zero terminator\n" ++msgstr "" ++ ++#: ../src/readelf.c:4896 ++msgid "FDE address encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4902 ++msgid "LSDA pointer encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4947 ++#, c-format ++msgid "invalid augmentation encoding" ++msgstr "" ++ ++#: ../src/readelf.c:5018 ++#, c-format ++msgid " (offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:5025 ++#, c-format ++msgid " (end offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:5052 ++#, c-format ++msgid " %-26sLSDA pointer: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:5098 ++#, c-format ++msgid "cannot get attribute code: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5106 ++#, c-format ++msgid "cannot get attribute form: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5119 ++#, c-format ++msgid "cannot get attribute value: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5315 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [Offset]\n" ++msgstr "" ++ ++#: ../src/readelf.c:5340 ++#, c-format ++msgid "" ++" Compilation unit at offset %:\n" ++" Version: %, Abbreviation section offset: %, Address size: %" ++", Offset size: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5358 ++#, c-format ++msgid "cannot get DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5369 ++#, c-format ++msgid "cannot get DIE offset: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5377 ++#, c-format ++msgid "cannot get tag of DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5406 ++#, c-format ++msgid "cannot get next DIE: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5413 ++#, c-format ++msgid "cannot get next DIE: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5448 ++#, c-format ++msgid "cannot get line data section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5461 ++#, c-format ++msgid "" ++"\n" ++"Table at offset %Zu:\n" ++msgstr "" ++ ++#. Print what we got so far. ++#: ../src/readelf.c:5513 ++#, c-format ++msgid "" ++"\n" ++" Length: %\n" ++" DWARF version: %\n" ++" Prologue length: %\n" ++" Minimum instruction length: %\n" ++" Initial value if '%s': %\n" ++" Line base: %\n" ++" Line range: %\n" ++" Opcode base: %\n" ++"\n" ++"Opcodes:\n" ++msgstr "" ++ ++#: ../src/readelf.c:5532 ++#, c-format ++msgid "invalid data at offset %tu in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:5547 ++#, c-format ++msgid " [%*] %hhu argument\n" ++msgid_plural " [%*] %hhu arguments\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5555 ++msgid "" ++"\n" ++"Directory table:" ++msgstr "" ++ ++#: ../src/readelf.c:5571 ++msgid "" ++"\n" ++"File name table:\n" ++" Entry Dir Time Size Name" ++msgstr "" ++ ++#: ../src/readelf.c:5600 ++msgid "" ++"\n" ++"Line number statements:" ++msgstr "" ++ ++#: ../src/readelf.c:5661 ++#, c-format ++msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" ++msgstr "" ++ ++#: ../src/readelf.c:5681 ++#, c-format ++msgid " extended opcode %u: " ++msgstr "" ++ ++#: ../src/readelf.c:5686 ++msgid "end of sequence" ++msgstr "" ++ ++#: ../src/readelf.c:5701 ++#, c-format ++msgid "set address to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5722 ++#, c-format ++msgid "define new file: dir=%u, mtime=%, length=%, name=%s\n" ++msgstr "" ++ ++#. Unknown, ignore it. ++#: ../src/readelf.c:5731 ++msgid "unknown opcode" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5743 ++msgid " copy" ++msgstr "" ++ ++#: ../src/readelf.c:5753 ++#, c-format ++msgid "advance address by %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5764 ++#, c-format ++msgid " advance line by constant %d to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5772 ++#, c-format ++msgid " set file to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5782 ++#, c-format ++msgid " set column to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5789 ++#, c-format ++msgid " set '%s' to %\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5795 ++msgid " set basic block flag" ++msgstr "" ++ ++#: ../src/readelf.c:5805 ++#, c-format ++msgid "advance address by constant %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5821 ++#, c-format ++msgid "advance address by fixed value %u to %s\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5830 ++msgid " set prologue end flag" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5835 ++msgid " set epilogue begin flag" ++msgstr "" ++ ++#. 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. ++#: ../src/readelf.c:5844 ++#, c-format ++msgid " unknown opcode with % parameter:" ++msgid_plural " unknown opcode with % parameters:" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5876 ++#, c-format ++msgid "cannot get .debug_loc content: %s" ++msgstr "" ++ ++#. First entry in a list. ++#: ../src/readelf.c:5931 ++#, c-format ++msgid " [%6tx] %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5933 ++#, c-format ++msgid " %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5986 ++#, c-format ++msgid "cannot get macro information section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6065 ++#, c-format ++msgid "%*s*** non-terminated string at end of section" ++msgstr "" ++ ++#: ../src/readelf.c:6133 ++#, c-format ++msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6172 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" %*s String\n" ++msgstr "" ++ ++#: ../src/readelf.c:6186 ++#, c-format ++msgid " *** error while reading strings: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6206 ++#, c-format ++msgid "" ++"\n" ++"Call frame search table section [%2zu] '.eh_frame_hdr':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6308 ++#, c-format ++msgid "" ++"\n" ++"Exception handling table section [%2zu] '.gcc_except_table':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6331 ++#, c-format ++msgid " LPStart encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6343 ++#, c-format ++msgid " TType encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6357 ++#, c-format ++msgid " Call site encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6370 ++msgid "" ++"\n" ++" Call site table:" ++msgstr "" ++ ++#: ../src/readelf.c:6384 ++#, c-format ++msgid "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:6444 ++#, c-format ++msgid "invalid TType encoding" ++msgstr "" ++ ++#: ../src/readelf.c:6467 ++#, c-format ++msgid "cannot get debug context descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6602 ../src/readelf.c:7167 ++#, c-format ++msgid "cannot convert core note data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6907 ++#, c-format ++msgid "" ++"\n" ++"%*s... ..." ++msgstr "" ++ ++#: ../src/readelf.c:7265 ++msgid " Owner Data size Type\n" ++msgstr "" ++ ++#: ../src/readelf.c:7283 ++#, c-format ++msgid " %-13.*s %9 %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:7314 ++#, c-format ++msgid "cannot get content of note section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7341 ++#, c-format ++msgid "" ++"\n" ++"Note section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7364 ++#, c-format ++msgid "" ++"\n" ++"Note segment of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7410 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no data to dump.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7416 ../src/readelf.c:7438 ++#, c-format ++msgid "cannot get data for section [%Zu] '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7420 ++#, c-format ++msgid "" ++"\n" ++"Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7433 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' is empty.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7442 ++#, c-format ++msgid "" ++"\n" ++"String section [%Zu] '%s' contains % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7489 ++#, c-format ++msgid "" ++"\n" ++"section [%lu] does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7515 ++#, c-format ++msgid "" ++"\n" ++"section '%s' does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7576 ++#, c-format ++msgid "cannot get symbol index of archive '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7579 ++#, c-format ++msgid "" ++"\n" ++"Archive '%s' has no symbol index\n" ++msgstr "" ++ ++#: ../src/readelf.c:7583 ++#, c-format ++msgid "" ++"\n" ++"Index of archive '%s' has %Zu entries:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7601 ++#, c-format ++msgid "cannot extract member at offset %Zu in '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7606 ++#, 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 "" ++ ++#. Short description of program. ++#: ../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:339 ++#, c-format ++msgid "%s: file format not recognized" ++msgstr "" ++ ++#: ../src/size.c:446 ../src/size.c:589 ++#, c-format ++msgid " (ex %s)" ++msgstr "" ++ ++#: ../src/size.c:614 ++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 "" ++ ++#. Short description of program. ++#: ../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 ../src/unstrip.c:124 ++#, c-format ++msgid "-o option specified twice" ++msgstr "" ++ ++#: ../src/strip.c:259 ++#, c-format ++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:868 ../src/strip.c:955 ++#, c-format ++msgid "while generating output file: %s" ++msgstr "" ++ ++#: ../src/strip.c:928 ../src/strip.c:1667 ++#, c-format ++msgid "%s: error while creating ELF header: %s" ++msgstr "" ++ ++#: ../src/strip.c:942 ++#, c-format ++msgid "while preparing output for '%s'" ++msgstr "" ++ ++#: ../src/strip.c:993 ../src/strip.c:1049 ++#, c-format ++msgid "while create section header section: %s" ++msgstr "" ++ ++#: ../src/strip.c:999 ++#, c-format ++msgid "cannot allocate section data: %s" ++msgstr "" ++ ++#: ../src/strip.c:1058 ++#, c-format ++msgid "while create section header string table: %s" ++msgstr "" ++ ++#: ../src/strip.c:1592 ../src/strip.c:1689 ++#, c-format ++msgid "while writing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1603 ++#, c-format ++msgid "while creating '%s'" ++msgstr "" ++ ++#: ../src/strip.c:1615 ++#, c-format ++msgid "while computing checksum for debug information" ++msgstr "" ++ ++#: ../src/strip.c:1675 ++#, c-format ++msgid "%s: error while reading the file: %s" ++msgstr "" ++ ++#: ../src/strip.c:1721 ../src/strip.c:1728 ++#, c-format ++msgid "error while finishing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1751 ../src/strip.c:1808 ++#, 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 "" ++ ++#. Short description of program. ++#: ../src/ld.c:197 ++msgid "Combine object and archive files." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../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:1446 ++#, c-format ++msgid "cannot read version script '%s'" ++msgstr "" ++ ++#. The symbol is already defined and now again ++#. in the linker script. This is an error. ++#: ../src/ld.c:1512 ../src/ld.c:1551 ++#, 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: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 % in %s to % in %s" ++msgstr "" ++ ++#: ../src/ldgeneric.c:677 ++#, c-format ++msgid "(%s+%#): multiple definition of %s `%s'\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:700 ++#, c-format ++msgid "(%s+%#): first defined here\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:819 ++#, c-format ++msgid "%s: cannot get section group data: %s" ++msgstr "" ++ ++#. If we come here no section group contained the given section ++#. despite the SHF_GROUP flag. This is an error in the input ++#. file. ++#: ../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 "" ++ ++#. This should never happen. ++#: ../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: %" ++"" ++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 "" ++ ++#. 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. ++#: ../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 '%' 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*" ++msgstr "" ++ ++#: ../src/ldgeneric.c:3690 ++#, c-format ++msgid "no entry symbol specified: defaulting to %#0*" ++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 ../src/unstrip.c:1807 ++#, 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 "" ++ ++#. This cannot be implemented generally. There should have been a ++#. machine dependent implementation and we should never have arrived ++#. here. ++#: ../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/i386_ld.c:210 ++#, c-format ++msgid "cannot allocate PLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:232 ++#, c-format ++msgid "cannot allocate PLTREL section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:253 ++#, c-format ++msgid "cannot allocate GOT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:274 ++#, c-format ++msgid "cannot allocate GOTPLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:661 ++#, c-format ++msgid "initial-executable TLS relocation cannot be used " ++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:71 ++msgid "Be extremely strict, flag level 2 features." ++msgstr "" ++ ++#: ../src/elflint.c:72 ++msgid "Do not print anything if successful" ++msgstr "" ++ ++#: ../src/elflint.c:73 ++msgid "Binary is a separate debuginfo file" ++msgstr "" ++ ++#: ../src/elflint.c:75 ++msgid "" ++"Binary has been created with GNU ld and is therefore known to be broken in " ++"certain ways" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elflint.c:81 ++msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." ++msgstr "" ++ ++#: ../src/elflint.c:165 ++#, c-format ++msgid "cannot generate Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:184 ++#, c-format ++msgid "error while closing Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:188 ++msgid "No errors" ++msgstr "" ++ ++#: ../src/elflint.c:301 ++#, c-format ++msgid " error while freeing sub-ELF descriptor: %s\n" ++msgstr "" ++ ++#. We cannot do anything. ++#: ../src/elflint.c:309 ++#, c-format ++msgid "Not an ELF file - it has the wrong magic bytes at the start\n" ++msgstr "" ++ ++#: ../src/elflint.c:368 ++#, c-format ++msgid "e_ident[%d] == %d is no known class\n" ++msgstr "" ++ ++#: ../src/elflint.c:373 ++#, c-format ++msgid "e_ident[%d] == %d is no known data encoding\n" ++msgstr "" ++ ++#: ../src/elflint.c:377 ++#, c-format ++msgid "unknown ELF header version number e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:383 ++#, c-format ++msgid "unsupported OS ABI e_ident[%d] == '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:389 ++#, c-format ++msgid "unsupport ABI version e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:394 ++#, c-format ++msgid "e_ident[%zu] is not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:399 ++#, c-format ++msgid "unknown object file type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:406 ++#, c-format ++msgid "unknown machine type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:410 ++#, c-format ++msgid "unknown object file version\n" ++msgstr "" ++ ++#: ../src/elflint.c:416 ++#, c-format ++msgid "invalid program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:418 ++#, c-format ++msgid "executables and DSOs cannot have zero program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:422 ++#, c-format ++msgid "invalid number of program header entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:430 ++#, c-format ++msgid "invalid section header table offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:433 ++#, c-format ++msgid "section header table must be present\n" ++msgstr "" ++ ++#: ../src/elflint.c:447 ++#, c-format ++msgid "invalid number of section header table entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:464 ++#, c-format ++msgid "invalid section header index\n" ++msgstr "" ++ ++#: ../src/elflint.c:469 ++#, c-format ++msgid "invalid machine flags: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:476 ../src/elflint.c:493 ++#, c-format ++msgid "invalid ELF header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:479 ../src/elflint.c:496 ++#, c-format ++msgid "invalid program header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:482 ../src/elflint.c:499 ++#, c-format ++msgid "invalid program header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:485 ../src/elflint.c:502 ++#, c-format ++msgid "invalid section header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:488 ../src/elflint.c:505 ++#, c-format ++msgid "invalid section header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:549 ++#, c-format ++msgid "" ++"section [%2d] '%s': section with SHF_GROUP flag set not part of a section " ++"group\n" ++msgstr "" ++ ++#: ../src/elflint.c:553 ++#, c-format ++msgid "section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n" ++msgstr "" ++ ++#: ../src/elflint.c:569 ../src/elflint.c:1412 ../src/elflint.c:1462 ++#: ../src/elflint.c:1571 ../src/elflint.c:2165 ../src/elflint.c:2679 ++#: ../src/elflint.c:2840 ../src/elflint.c:2970 ../src/elflint.c:3142 ++#: ../src/elflint.c:4040 ++#, c-format ++msgid "section [%2d] '%s': cannot get section data\n" ++msgstr "" ++ ++#: ../src/elflint.c:582 ../src/elflint.c:1578 ++#, 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:605 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol table cannot have more than one extended index " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:616 ++#, c-format ++msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" ++msgstr "" ++ ++#: ../src/elflint.c:625 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:630 ../src/elflint.c:633 ../src/elflint.c:636 ++#: ../src/elflint.c:639 ../src/elflint.c:642 ../src/elflint.c:645 ++#, c-format ++msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:648 ++#, c-format ++msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:658 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:667 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid name value\n" ++msgstr "" ++ ++#: ../src/elflint.c:680 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: too large section index but no extended " ++"section index section\n" ++msgstr "" ++ ++#: ../src/elflint.c:686 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " ++"st_shndx (%)\n" ++msgstr "" ++ ++#. || sym->st_shndx > SHN_HIRESERVE always false ++#: ../src/elflint.c:698 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:706 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown type\n" ++msgstr "" ++ ++#: ../src/elflint.c:712 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" ++msgstr "" ++ ++#: ../src/elflint.c:717 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" ++msgstr "" ++ ++#: ../src/elflint.c:725 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" ++msgstr "" ++ ++#: ../src/elflint.c:729 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:733 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:765 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:771 ../src/elflint.c:796 ../src/elflint.c:839 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu does not fit completely in referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:780 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " ++"SHF_TLS flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:790 ../src/elflint.c:832 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:817 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:825 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:852 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:859 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: non-local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:866 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" ++msgstr "" ++ ++#: ../src/elflint.c:916 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%" ++"2d]\n" ++msgstr "" ++ ++#: ../src/elflint.c:923 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#. 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. ++#: ../src/elflint.c:939 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " ++"match %s section address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:946 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " ++"match %s section size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:954 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:970 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " ++"segment address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:977 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " ++"segment size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:990 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" ++"default visibility\n" ++msgstr "" ++ ++#: ../src/elflint.c:994 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" ++msgstr "" ++ ++#: ../src/elflint.c:1039 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1048 ../src/elflint.c:1100 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1073 ../src/elflint.c:1125 ++#, c-format ++msgid "" ++"section [%2d] '%s': relative relocations after index %d as specified by " ++"DT_RELCOUNT\n" ++msgstr "" ++ ++#: ../src/elflint.c:1079 ../src/elflint.c:1131 ++#, c-format ++msgid "" ++"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " ++"specified %d relative relocations\n" ++msgstr "" ++ ++#: ../src/elflint.c:1091 ++#, c-format ++msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1173 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1186 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1194 ++#, c-format ++msgid "section [%2d] '%s': sh_info should be zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1201 ++#, c-format ++msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" ++msgstr "" ++ ++#: ../src/elflint.c:1208 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" ++msgstr "" ++ ++#: ../src/elflint.c:1268 ++#, c-format ++msgid "text relocation flag set but there is no read-only segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1295 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1303 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: relocation type invalid for the file " ++"type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1311 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1329 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " ++"be used with %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1346 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1361 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: copy relocation against symbol of type %" ++"s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1382 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: read-only section modified but text " ++"relocation flag not set\n" ++msgstr "" ++ ++#: ../src/elflint.c:1397 ++#, c-format ++msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" ++msgstr "" ++ ++#: ../src/elflint.c:1436 ../src/elflint.c:1486 ++#, c-format ++msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1566 ++#, c-format ++msgid "more than one dynamic section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1584 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" ++msgstr "" ++ ++#: ../src/elflint.c:1589 ../src/elflint.c:1881 ++#, c-format ++msgid "section [%2d] '%s': sh_info not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1599 ++#, c-format ++msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1607 ++#, c-format ++msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:1614 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: unknown tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:1625 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1635 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" ++msgstr "" ++ ++#: ../src/elflint.c:1653 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" ++msgstr "" ++ ++#: ../src/elflint.c:1675 ++#, 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:1718 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1733 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must be valid offset in section [%" ++"2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:1753 ../src/elflint.c:1781 ++#, c-format ++msgid "section [%2d] '%s': contains %s entry but not %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1765 ++#, c-format ++msgid "section [%2d] '%s': mandatory tag %s not present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1774 ++#, c-format ++msgid "section [%2d] '%s': no hash section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1789 ../src/elflint.c:1796 ++#, c-format ++msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1806 ../src/elflint.c:1810 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" ++msgstr "" ++ ++#: ../src/elflint.c:1816 ++#, c-format ++msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" ++msgstr "" ++ ++#: ../src/elflint.c:1827 ../src/elflint.c:1831 ../src/elflint.c:1835 ++#: ../src/elflint.c:1839 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:1851 ++#, c-format ++msgid "section [%2d] '%s': only relocatable files can have extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1861 ++#, c-format ++msgid "section [%2d] '%s': extended section index section not for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1866 ++#, c-format ++msgid "cannot get data for symbol section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1869 ++#, c-format ++msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" ++msgstr "" ++ ++#: ../src/elflint.c:1876 ++#, c-format ++msgid "section [%2d] '%s': extended index table too small for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1891 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " ++"same symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1902 ++#, c-format ++msgid "symbol 0 should have zero extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1914 ++#, c-format ++msgid "cannot get data for symbol %zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:1919 ++#, c-format ++msgid "extended section index is % but symbol index is not XINDEX\n" ++msgstr "" ++ ++#: ../src/elflint.c:1935 ../src/elflint.c:1976 ++#, c-format ++msgid "section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:1947 ../src/elflint.c:1988 ++#, c-format ++msgid "section [%2d] '%s': chain array too large\n" ++msgstr "" ++ ++#: ../src/elflint.c:1956 ../src/elflint.c:1997 ++#, c-format ++msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1962 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2003 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference % out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2018 ++#, c-format ++msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2029 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected at " ++"least%ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2037 ++#, c-format ++msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2069 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" ++msgstr "" ++ ++#: ../src/elflint.c:2090 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " ++"undefined\n" ++msgstr "" ++ ++#: ../src/elflint.c:2101 ++#, c-format ++msgid "section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" ++msgstr "" ++ ++#: ../src/elflint.c:2132 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2137 ++#, c-format ++msgid "section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2143 ++#, c-format ++msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2156 ++#, c-format ++msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:2174 ++#, c-format ++msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2182 ++#, c-format ++msgid "section [%2d] '%s': hash table entry size incorrect\n" ++msgstr "" ++ ++#: ../src/elflint.c:2187 ++#, c-format ++msgid "section [%2d] '%s': not marked to be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:2192 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table has not even room for initial administrative " ++"entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:2240 ++#, c-format ++msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" ++msgstr "" ++ ++#: ../src/elflint.c:2318 ../src/elflint.c:2322 ++#, c-format ++msgid "section [%2zu] '%s': reference to symbol index 0\n" ++msgstr "" ++ ++#: ../src/elflint.c:2329 ++#, 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:2341 ++#, 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:2357 ++#, c-format ++msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:2377 ++#, c-format ++msgid "section [%2d] '%s': section groups only allowed in relocatable object files\n" ++msgstr "" ++ ++#: ../src/elflint.c:2388 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol table: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2393 ++#, c-format ++msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2399 ++#, c-format ++msgid "section [%2d] '%s': invalid symbol index in sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:2404 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:2411 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol for signature\n" ++msgstr "" ++ ++#: ../src/elflint.c:2416 ++#, c-format ++msgid "section [%2d] '%s': signature symbol canot be empty string\n" ++msgstr "" ++ ++#: ../src/elflint.c:2422 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not set correctly\n" ++msgstr "" ++ ++#: ../src/elflint.c:2428 ++#, c-format ++msgid "section [%2d] '%s': cannot get data: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2437 ++#, c-format ++msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2442 ++#, c-format ++msgid "section [%2d] '%s': section group without flags word\n" ++msgstr "" ++ ++#: ../src/elflint.c:2448 ++#, c-format ++msgid "section [%2d] '%s': section group without member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2452 ++#, c-format ++msgid "section [%2d] '%s': section group with only one member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2463 ++#, c-format ++msgid "section [%2d] '%s': unknown section group flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:2475 ++#, c-format ++msgid "section [%2d] '%s': section index %Zu out of range\n" ++msgstr "" ++ ++#: ../src/elflint.c:2484 ++#, c-format ++msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2491 ++#, c-format ++msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2497 ++#, c-format ++msgid "" ++"section [%2d] '%s': element %Zu references section [%2d] '%s' without " ++"SHF_GROUP flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:2504 ++#, c-format ++msgid "section [%2d] '%s' is contained in more than one section group\n" ++msgstr "" ++ ++#: ../src/elflint.c:2693 ++#, 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:2704 ++#, c-format ++msgid "" ++"section [%2d] '%s' has different number of entries than symbol table [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2720 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: cannot read version data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2736 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" ++msgstr "" ++ ++#: ../src/elflint.c:2744 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2758 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2763 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: version index %d is for defined version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2773 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: version index %d is for requested version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2825 ++#, c-format ++msgid "more than one version reference section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2833 ../src/elflint.c:2962 ++#, c-format ++msgid "section [%2d] '%s': sh_link does not link to string table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2856 ../src/elflint.c:3014 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong version %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2862 ../src/elflint.c:3020 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2870 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid file reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2878 ++#, c-format ++msgid "section [%2d] '%s': entry %d references unknown dependency\n" ++msgstr "" ++ ++#: ../src/elflint.c:2890 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:2897 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " ++"reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2904 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %" ++"#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:2914 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " ++"name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2925 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" ++msgstr "" ++ ++#: ../src/elflint.c:2941 ../src/elflint.c:3099 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:2954 ++#, c-format ++msgid "more than one version definition section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2999 ++#, c-format ++msgid "section [%2d] '%s': more than one BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3003 ++#, c-format ++msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" ++msgstr "" ++ ++#: ../src/elflint.c:3009 ++#, c-format ++msgid "section [%2d] '%s': entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3033 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:3040 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:3049 ++#, c-format ++msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3068 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3083 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3105 ++#, c-format ++msgid "section [%2d] '%s': no BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3121 ++#, c-format ++msgid "section [%2d] '%s': unknown parent version '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3134 ++#, c-format ++msgid "section [%2d] '%s': empty object attributes section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3155 ++#, c-format ++msgid "section [%2d] '%s': unrecognized attribute format\n" ++msgstr "" ++ ++#: ../src/elflint.c:3171 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: zero length field in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3180 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3192 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" ++msgstr "" ++ ++#: ../src/elflint.c:3209 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3218 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3227 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" ++msgstr "" ++ ++#: ../src/elflint.c:3240 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/elflint.c:3251 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3269 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3280 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" ++msgstr "" ++ ++#: ../src/elflint.c:3293 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3297 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3307 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" ++msgstr "" ++ ++#: ../src/elflint.c:3313 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3402 ++#, c-format ++msgid "cannot get section header of zeroth section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3406 ++#, c-format ++msgid "zeroth section has nonzero name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3408 ++#, c-format ++msgid "zeroth section has nonzero type\n" ++msgstr "" ++ ++#: ../src/elflint.c:3410 ++#, c-format ++msgid "zeroth section has nonzero flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:3412 ++#, c-format ++msgid "zeroth section has nonzero address\n" ++msgstr "" ++ ++#: ../src/elflint.c:3414 ++#, c-format ++msgid "zeroth section has nonzero offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:3416 ++#, c-format ++msgid "zeroth section has nonzero info field\n" ++msgstr "" ++ ++#: ../src/elflint.c:3418 ++#, c-format ++msgid "zeroth section has nonzero align value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3420 ++#, c-format ++msgid "zeroth section has nonzero entry size value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3423 ++#, c-format ++msgid "" ++"zeroth section has nonzero size value while ELF header has nonzero shnum " ++"value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3427 ++#, c-format ++msgid "" ++"zeroth section has nonzero link value while ELF header does not signal " ++"overflow in shstrndx\n" ++msgstr "" ++ ++#: ../src/elflint.c:3444 ++#, c-format ++msgid "cannot get section header for section [%2zu] '%s': %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3453 ++#, c-format ++msgid "section [%2zu]: invalid name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3480 ++#, c-format ++msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3496 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3513 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3531 ++#, c-format ++msgid "section [%2zu] '%s' present in object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3537 ../src/elflint.c:3569 ++#, c-format ++msgid "section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3542 ../src/elflint.c:3574 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " ++"segments\n" ++msgstr "" ++ ++#: ../src/elflint.c:3550 ++#, c-format ++msgid "section [%2zu] '%s' is extension section index table in non-object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3593 ++#, c-format ++msgid "section [%2zu] '%s': size not multiple of entry size\n" ++msgstr "" ++ ++#: ../src/elflint.c:3598 ++#, c-format ++msgid "cannot get section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:3608 ++#, c-format ++msgid "section [%2zu] '%s' has unsupported type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3622 ++#, c-format ++msgid "section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3629 ++#, c-format ++msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3637 ++#, c-format ++msgid "section [%2zu] '%s': thread-local data sections address not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3645 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in link value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3650 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in info value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3657 ++#, c-format ++msgid "section [%2zu] '%s': strings flag set without merge flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3662 ++#, c-format ++msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3680 ++#, c-format ++msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3689 ++#, c-format ++msgid "section [%2zu] '%s' is both executable and writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:3716 ++#, c-format ++msgid "" ++"section [%2zu] '%s' not fully contained in segment of program header entry %" ++"d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3724 ++#, 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:3733 ++#, 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:3744 ++#, c-format ++msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3754 ++#, c-format ++msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3764 ++#, c-format ++msgid "section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3770 ++#, 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:3778 ++#, c-format ++msgid "section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:3829 ++#, c-format ++msgid "more than one version symbol table present\n" ++msgstr "" ++ ++#: ../src/elflint.c:3852 ++#, c-format ++msgid "INTERP program header entry but no .interp section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3863 ++#, c-format ++msgid "loadable segment [%u] is executable but contains no executable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3869 ++#, c-format ++msgid "loadable segment [%u] is writable but contains no writable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3880 ++#, c-format ++msgid "" ++"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " ++"exist\n" ++msgstr "" ++ ++#: ../src/elflint.c:3893 ++#, c-format ++msgid "duplicate version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3907 ++#, c-format ++msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" ++msgstr "" ++ ++#: ../src/elflint.c:3956 ++#, c-format ++msgid "phdr[%d]: unknown core file note type % at offset %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3960 ++#, c-format ++msgid "section [%2d] '%s': unknown core file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3983 ++#, c-format ++msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3987 ++#, c-format ++msgid "section [%2d] '%s': unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:4004 ++#, c-format ++msgid "phdr[%d]: no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4023 ++#, c-format ++msgid "phdr[%d]: cannot get content of note section: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4026 ++#, c-format ++msgid "phdr[%d]: extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4047 ++#, c-format ++msgid "section [%2d] '%s': no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4054 ++#, c-format ++msgid "section [%2d] '%s': cannot get content of note section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4057 ++#, c-format ++msgid "section [%2d] '%s': extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4075 ++#, c-format ++msgid "only executables, shared objects, and core files can have program headers\n" ++msgstr "" ++ ++#: ../src/elflint.c:4090 ++#, c-format ++msgid "cannot get program header entry %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4099 ++#, c-format ++msgid "program header entry %d: unknown program header entry type %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:4110 ++#, c-format ++msgid "more than one INTERP entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4118 ++#, c-format ++msgid "more than one TLS entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4125 ++#, c-format ++msgid "static executable cannot have dynamic sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:4139 ++#, c-format ++msgid "dynamic section reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4142 ++#, c-format ++msgid "dynamic section size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4152 ++#, c-format ++msgid "more than one GNU_RELRO entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4173 ++#, c-format ++msgid "loadable segment GNU_RELRO applies to is not writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4176 ++#, c-format ++msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:4184 ../src/elflint.c:4207 ++#, c-format ++msgid "%s segment not contained in a loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4213 ++#, c-format ++msgid "program header offset in ELF header and PHDR entry do not match" ++msgstr "" ++ ++#: ../src/elflint.c:4237 ++#, c-format ++msgid "call frame search table reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4240 ++#, c-format ++msgid "call frame search table size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4253 ++#, c-format ++msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4261 ++#, c-format ++msgid "call frame search table must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4264 ++#, c-format ++msgid "section [%2zu] '%s' must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4268 ++#, c-format ++msgid "call frame search table must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4271 ++#, c-format ++msgid "section [%2zu] '%s' must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4276 ++#, c-format ++msgid "call frame search table must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4279 ++#, c-format ++msgid "section [%2zu] '%s' must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4290 ++#, c-format ++msgid "program header entry %d: file size greater than memory size\n" ++msgstr "" ++ ++#: ../src/elflint.c:4297 ++#, c-format ++msgid "program header entry %d: alignment not a power of 2\n" ++msgstr "" ++ ++#: ../src/elflint.c:4300 ++#, c-format ++msgid "" ++"program header entry %d: file offset and virtual address not module of " ++"alignment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4313 ++#, c-format ++msgid "" ++"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " ++"program header entry" ++msgstr "" ++ ++#: ../src/elflint.c:4347 ++#, c-format ++msgid "cannot read ELF header: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4373 ++#, c-format ++msgid "text relocation flag set but not needed\n" ++msgstr "" ++ ++#: ../src/addr2line.c:66 ++msgid "Output selection options:" ++msgstr "" ++ ++#: ../src/addr2line.c:67 ++msgid "Show only base names of source files" ++msgstr "" ++ ++#: ../src/addr2line.c:69 ++msgid "Show absolute file names using compilation directory" ++msgstr "" ++ ++#: ../src/addr2line.c:70 ++msgid "Also show function names" ++msgstr "" ++ ++#: ../src/addr2line.c:71 ++msgid "Also show symbol or section names" ++msgstr "" ++ ++#: ../src/addr2line.c:73 ++msgid "Treat addresses as offsets relative to NAME section." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/addr2line.c:84 ++msgid "Locate source files and line information for ADDRs (in a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/addr2line.c:88 ++msgid "[ADDR...]" ++msgstr "" ++ ++#: ../src/addr2line.c:405 ++#, c-format ++msgid "Section syntax requires exactly one module" ++msgstr "" ++ ++#: ../src/addr2line.c:428 ++#, c-format ++msgid "offset %# lies outside section '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:461 ++#, c-format ++msgid "cannot find symbol '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:466 ++#, c-format ++msgid "offset %# lies outside contents of '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:70 ++msgid "Input Selection:" ++msgstr "" ++ ++#: ../src/findtextrel.c:71 ++msgid "Prepend PATH to all file names" ++msgstr "" ++ ++#: ../src/findtextrel.c:73 ++msgid "Use PATH as root of debuginfo hierarchy" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/findtextrel.c:80 ++msgid "Locate source of text relocations in FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/findtextrel.c:236 ../src/elfcmp.c:578 ../src/ranlib.c:186 ++#, c-format ++msgid "cannot create ELF descriptor for '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:246 ++#, c-format ++msgid "cannot get ELF header '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:257 ++#, c-format ++msgid "'%s' is not a DSO or PIE" ++msgstr "" ++ ++#: ../src/findtextrel.c:274 ++#, c-format ++msgid "getting get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:292 ++#, c-format ++msgid "cannot read dynamic section: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:307 ++#, c-format ++msgid "no text relocations reported in '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:319 ++#, c-format ++msgid "while reading ELF file" ++msgstr "" ++ ++#: ../src/findtextrel.c:328 ../src/findtextrel.c:345 ++#, c-format ++msgid "cannot get program header index at offset %d: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:397 ++#, c-format ++msgid "cannot get section header of section %Zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:409 ++#, c-format ++msgid "cannot get symbol table section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:429 ../src/findtextrel.c:452 ++#, c-format ++msgid "cannot get relocation at index %d in section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:517 ++#, c-format ++msgid "%s not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:570 ++#, c-format ++msgid "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:577 ../src/findtextrel.c:597 ++#, c-format ++msgid "" ++"the file containing the function '%s' might not be compiled with -fpic/-" ++"fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:585 ++#, 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:605 ++#, c-format ++msgid "a relocation modifies memory at offset %llu in a write-protected segment\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:69 ++msgid "Control options:" ++msgstr "" ++ ++#: ../src/elfcmp.c:70 ++msgid "" ++"Control treatment of gaps in loadable segments [ignore|match] (default: " ++"ignore)" ++msgstr "" ++ ++#: ../src/elfcmp.c:72 ++msgid "Ignore permutation of buckets in SHT_HASH section" ++msgstr "" ++ ++#: ../src/elfcmp.c:73 ++msgid "Output nothing; yield exit status only" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elfcmp.c:80 ++msgid "Compare relevant parts of two ELF files for equality." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/elfcmp.c:84 ++msgid "FILE1 FILE2" ++msgstr "" ++ ++#: ../src/elfcmp.c:140 ++msgid "Invalid number of parameters.\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:168 ../src/elfcmp.c:173 ++#, c-format ++msgid "cannot get ELF header of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:190 ++#, c-format ++msgid "%s %s diff: ELF header" ++msgstr "" ++ ++#: ../src/elfcmp.c:248 ++#, c-format ++msgid "%s %s differ: section header" ++msgstr "" ++ ++#: ../src/elfcmp.c:276 ../src/elfcmp.c:282 ++#, c-format ++msgid "cannot get content of section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:298 ../src/elfcmp.c:304 ++#, c-format ++msgid "cannot get symbol in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:325 ++#, c-format ++msgid "%s %s differ: symbol table [%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:328 ++#, c-format ++msgid "%s %s differ: symbol table [%zu,%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:376 ++#, c-format ++msgid "%s %s differ: section [%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:380 ++#, c-format ++msgid "%s %s differ: section [%zu,%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:396 ++#, c-format ++msgid "%s %s differ: unequal amount of important sections" ++msgstr "" ++ ++#: ../src/elfcmp.c:430 ../src/elfcmp.c:435 ++#, c-format ++msgid "cannot load data of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:454 ../src/elfcmp.c:460 ++#, c-format ++msgid "cannot get program header entry %d of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:466 ++#, c-format ++msgid "%s %s differ: program header %d" ++msgstr "" ++ ++#: ../src/elfcmp.c:491 ++#, c-format ++msgid "%s %s differ: gap" ++msgstr "" ++ ++#: ../src/elfcmp.c:550 ++#, c-format ++msgid "Invalid value '%s' for --gaps parameter." ++msgstr "" ++ ++#: ../src/elfcmp.c:583 ++#, c-format ++msgid "cannot create EBL descriptor for '%s'" ++msgstr "" ++ ++#: ../src/elfcmp.c:601 ++#, c-format ++msgid "cannot get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:611 ++#, c-format ++msgid "cannot get content of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:621 ../src/elfcmp.c:635 ++#, c-format ++msgid "cannot get relocation: %s" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ranlib.c:74 ++msgid "Generate an index to speed access to archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ranlib.c:77 ++msgid "ARCHIVE" ++msgstr "" ++ ++#: ../src/ranlib.c:116 ++#, c-format ++msgid "Archive name required" ++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/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 "" ++ ++#. Short description of program. ++#: ../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 ../src/strings.c:680 ++#, c-format ++msgid "re-mmap failed" ++msgstr "" ++ ++#: ../src/strings.c:653 ++#, c-format ++msgid "mprotect failed" ++msgstr "" ++ ++#: ../src/unstrip.c:77 ++msgid "Match MODULE against file names, not module names" ++msgstr "" ++ ++#: ../src/unstrip.c:78 ++msgid "Silently skip unfindable files" ++msgstr "" ++ ++#: ../src/unstrip.c:81 ++msgid "Place output into FILE" ++msgstr "" ++ ++#: ../src/unstrip.c:83 ++msgid "Create multiple output files under DIRECTORY" ++msgstr "" ++ ++#: ../src/unstrip.c:84 ++msgid "Use module rather than file names" ++msgstr "" ++ ++#: ../src/unstrip.c:86 ++msgid "Create output for modules that have no separate debug information" ++msgstr "" ++ ++#: ../src/unstrip.c:89 ++msgid "Apply relocations to section contents in ET_REL files" ++msgstr "" ++ ++#: ../src/unstrip.c:91 ++msgid "Only list module and file names, build IDs" ++msgstr "" ++ ++#: ../src/unstrip.c:133 ++#, c-format ++msgid "-d option specified twice" ++msgstr "" ++ ++#: ../src/unstrip.c:165 ++#, c-format ++msgid "only one of -o or -d allowed" ++msgstr "" ++ ++#: ../src/unstrip.c:174 ++#, c-format ++msgid "-n cannot be used with explicit files or -o or -d" ++msgstr "" ++ ++#: ../src/unstrip.c:189 ++#, c-format ++msgid "output directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:198 ++#, c-format ++msgid "exactly two file arguments are required" ++msgstr "" ++ ++#: ../src/unstrip.c:204 ++#, c-format ++msgid "-m, -a, -R, and -i options not allowed with explicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:217 ++#, c-format ++msgid "-o or -d is required when using implicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:253 ++#, c-format ++msgid "cannot create ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:258 ++#, c-format ++msgid "cannot copy ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:263 ../src/unstrip.c:1816 ++#, c-format ++msgid "cannot create program headers: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:269 ++#, c-format ++msgid "cannot copy program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:279 ++#, c-format ++msgid "cannot copy section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:282 ../src/unstrip.c:1504 ++#, c-format ++msgid "cannot get section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:284 ../src/unstrip.c:1506 ++#, c-format ++msgid "cannot copy section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:308 ++#, c-format ++msgid "cannot create directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:348 ../src/unstrip.c:762 ../src/unstrip.c:1539 ++#, c-format ++msgid "cannot get symbol table entry: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:364 ../src/unstrip.c:579 ../src/unstrip.c:600 ++#: ../src/unstrip.c:612 ../src/unstrip.c:1560 ../src/unstrip.c:1690 ++#: ../src/unstrip.c:1714 ++#, c-format ++msgid "cannot update symbol table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:381 ../src/unstrip.c:431 ../src/unstrip.c:561 ++#: ../src/unstrip.c:1208 ../src/unstrip.c:1524 ../src/unstrip.c:1719 ++#: ../src/unstrip.c:1790 ++#, c-format ++msgid "cannot update section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:407 ../src/unstrip.c:418 ++#, c-format ++msgid "cannot update relocation: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:506 ++#, c-format ++msgid "cannot get symbol version: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:518 ++#, c-format ++msgid "unexpected section type in [%Zu] with sh_link to symtab" ++msgstr "" ++ ++#: ../src/unstrip.c:768 ++#, c-format ++msgid "invalid string offset in symbol [%Zu]" ++msgstr "" ++ ++#: ../src/unstrip.c:910 ../src/unstrip.c:1247 ++#, c-format ++msgid "cannot read section [%Zu] name: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:951 ../src/unstrip.c:970 ../src/unstrip.c:1003 ++#, c-format ++msgid "cannot read '.gnu.prelink_undo' section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:991 ++#, c-format ++msgid "invalid contents in '%s' section" ++msgstr "" ++ ++#: ../src/unstrip.c:1046 ../src/unstrip.c:1369 ++#, c-format ++msgid "cannot find matching section for [%Zu] '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:1170 ../src/unstrip.c:1185 ../src/unstrip.c:1450 ++#, c-format ++msgid "cannot add section name to string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1194 ++#, c-format ++msgid "cannot update section header string table data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1222 ../src/unstrip.c:1226 ++#, c-format ++msgid "cannot get section header string table section index: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1230 ../src/unstrip.c:1234 ../src/unstrip.c:1465 ++#, c-format ++msgid "cannot get section count: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1292 ../src/unstrip.c:1384 ++#, c-format ++msgid "cannot read section header string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1444 ++#, c-format ++msgid "cannot add new section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1547 ++#, c-format ++msgid "symbol [%Zu] has invalid section index" ++msgstr "" ++ ++#: ../src/unstrip.c:1799 ++#, c-format ++msgid "cannot get ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1826 ++#, c-format ++msgid "cannot update program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1831 ../src/unstrip.c:1910 ++#, c-format ++msgid "cannot write output file: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1879 ++#, c-format ++msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1882 ++#, c-format ++msgid "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1901 ../src/unstrip.c:1941 ../src/unstrip.c:1953 ++#: ../src/unstrip.c:2033 ++#, c-format ++msgid "cannot create ELF descriptor: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1959 ++#, c-format ++msgid "'%s' and '%s' do not seem to match" ++msgstr "" ++ ++#: ../src/unstrip.c:1990 ++#, c-format ++msgid "cannot find stripped file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1994 ++#, c-format ++msgid "cannot open stripped file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2009 ++#, c-format ++msgid "cannot find debug file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2013 ++#, c-format ++msgid "cannot open debug file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2026 ++#, c-format ++msgid "module '%s' file '%s' is not stripped" ++msgstr "" ++ ++#: ../src/unstrip.c:2057 ++#, c-format ++msgid "cannot cache section addresses for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2190 ++#, c-format ++msgid "no matching modules found" ++msgstr "" ++ ++#: ../src/unstrip.c:2199 ++#, c-format ++msgid "matched more than one module" ++msgstr "" ++ ++#: ../src/unstrip.c:2246 ++msgid "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++msgstr "" ++ ++#: ../src/unstrip.c:2247 ++msgid "" ++"Combine stripped files with separate symbols and debug information.\vThe " ++"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." ++msgstr "" ++ ++#: ../src/objdump.c:61 ++msgid "Mode selection:" ++msgstr "" ++ ++#: ../src/objdump.c:62 ++msgid "Display relocation information." ++msgstr "" ++ ++#: ../src/objdump.c:64 ++msgid "Display the full contents of all sections requested" ++msgstr "" ++ ++#: ../src/objdump.c:66 ++msgid "Display assembler code of executable sections" ++msgstr "" ++ ++#: ../src/objdump.c:68 ++msgid "Output option selection:" ++msgstr "" ++ ++#: ../src/objdump.c:70 ++msgid "Only display information for section NAME." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/objdump.c:76 ++msgid "Show information from FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/objdump.c:274 ../src/objdump.c:286 ++#, c-format ++msgid "while close `%s'" ++msgstr "" ++ ++#: ../src/objdump.c:510 ++#, c-format ++msgid "" ++"\n" ++"RELOCATION RECORDS FOR [%s]:\n" ++"%-*s TYPE VALUE\n" ++msgstr "" ++ ++#: ../src/objdump.c:513 ++msgid "OFFSET" ++msgstr "" ++ ++#: ../src/objdump.c:576 ++#, c-format ++msgid "Contents of section %s:\n" ++msgstr "" ++ ++#: ../src/objdump.c:676 ++#, c-format ++msgid "cannot disassemble" ++msgstr "" ++ +diff --git a/po/zh_CN.po b/po/zh_CN.po +new file mode 100644 +index 0000000..907c7ae +--- /dev/null ++++ b/po/zh_CN.po +@@ -0,0 +1,5610 @@ ++# SOME DESCRIPTIVE TITLE. ++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER ++# This file is distributed under the same license as the PACKAGE package. ++# FIRST AUTHOR , YEAR. ++# ++#, fuzzy ++msgid "" ++msgstr "" ++"Project-Id-Version: PACKAGE VERSION\n" ++"Report-Msgid-Bugs-To: http://bugzilla.redhat.com/\n" ++"POT-Creation-Date: 2009-08-12 19:40+0000\n" ++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" ++"Last-Translator: FULL NAME \n" ++"Language-Team: LANGUAGE \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=CHARSET\n" ++"Content-Transfer-Encoding: 8bit\n" ++"Plural-Forms: nplurals=1; plural=0;\n" ++ ++#: ../lib/xmalloc.c:51 ../lib/xmalloc.c:65 ../lib/xmalloc.c:79 ++#: ../src/readelf.c:2796 ../src/readelf.c:3135 ../src/unstrip.c:2086 ++#: ../src/unstrip.c:2294 ++#, c-format ++msgid "memory exhausted" ++msgstr "" ++ ++#: ../libelf/elf_error.c:81 ../libasm/asm_error.c:62 ../libdw/dwarf_error.c:79 ++msgid "no error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:84 ../libasm/asm_error.c:81 ../libdw/dwarf_error.c:80 ++msgid "unknown error" ++msgstr "" ++ ++#: ../libelf/elf_error.c:88 ++msgid "unknown version" ++msgstr "" ++ ++#: ../libelf/elf_error.c:92 ++msgid "unknown type" ++msgstr "" ++ ++#: ../libelf/elf_error.c:96 ++msgid "invalid `Elf' handle" ++msgstr "" ++ ++#: ../libelf/elf_error.c:100 ++msgid "invalid size of source operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:104 ++msgid "invalid size of destination operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:108 ../src/readelf.c:4742 ++#, c-format ++msgid "invalid encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:112 ../libasm/asm_error.c:63 ++#: ../libdw/dwarf_error.c:88 ++msgid "out of memory" ++msgstr "" ++ ++#: ../libelf/elf_error.c:116 ++msgid "invalid file descriptor" ++msgstr "" ++ ++#: ../libelf/elf_error.c:120 ++msgid "invalid operation" ++msgstr "" ++ ++#: ../libelf/elf_error.c:124 ++msgid "ELF version not set" ++msgstr "" ++ ++#: ../libelf/elf_error.c:128 ../libelf/elf_error.c:176 ++#: ../libdw/dwarf_error.c:90 ++msgid "invalid command" ++msgstr "" ++ ++#: ../libelf/elf_error.c:132 ../libelf/elf_error.c:192 ++msgid "offset out of range" ++msgstr "" ++ ++#: ../libelf/elf_error.c:136 ++msgid "invalid fmag field in archive header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:140 ++msgid "invalid archive file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:144 ++msgid "descriptor is not for an archive" ++msgstr "" ++ ++#: ../libelf/elf_error.c:148 ++msgid "no index available" ++msgstr "" ++ ++#: ../libelf/elf_error.c:152 ++msgid "cannot read data from file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:156 ++msgid "cannot write data to file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:160 ++msgid "invalid binary class" ++msgstr "" ++ ++#: ../libelf/elf_error.c:164 ++msgid "invalid section index" ++msgstr "" ++ ++#: ../libelf/elf_error.c:168 ++msgid "invalid operand" ++msgstr "" ++ ++#: ../libelf/elf_error.c:172 ++msgid "invalid section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:180 ++msgid "executable header not created first" ++msgstr "" ++ ++#: ../libelf/elf_error.c:184 ++msgid "file descriptor disabled" ++msgstr "" ++ ++#: ../libelf/elf_error.c:188 ++msgid "archive/member fildes mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:196 ++msgid "cannot manipulate null section" ++msgstr "" ++ ++#: ../libelf/elf_error.c:200 ++msgid "data/scn mismatch" ++msgstr "" ++ ++#: ../libelf/elf_error.c:204 ++msgid "invalid section header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:208 ../src/readelf.c:6223 ../src/readelf.c:6324 ++#, c-format ++msgid "invalid data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:212 ++msgid "unknown data encoding" ++msgstr "" ++ ++#: ../libelf/elf_error.c:216 ++msgid "section `sh_size' too small for data" ++msgstr "" ++ ++#: ../libelf/elf_error.c:220 ++msgid "invalid section alignment" ++msgstr "" ++ ++#: ../libelf/elf_error.c:224 ++msgid "invalid section entry size" ++msgstr "" ++ ++#: ../libelf/elf_error.c:228 ++msgid "update() for write on read-only file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:232 ++msgid "no such file" ++msgstr "" ++ ++#: ../libelf/elf_error.c:236 ++msgid "only relocatable files can contain section groups" ++msgstr "" ++ ++#: ../libelf/elf_error.c:241 ++msgid "" ++"program header only allowed in executables, shared objects, and core files" ++msgstr "" ++ ++#: ../libelf/elf_error.c:248 ++msgid "file has no program header" ++msgstr "" ++ ++#: ../libelf/elf_error.c:253 ../libdw/dwarf_error.c:112 ++msgid "invalid offset" ++msgstr "" ++ ++#: ../libasm/asm_error.c:64 ../src/ldgeneric.c:2687 ++#, c-format ++msgid "cannot create output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:65 ++msgid "invalid parameter" ++msgstr "" ++ ++#: ../libasm/asm_error.c:66 ++msgid "cannot change mode of output file" ++msgstr "" ++ ++#. Something went wrong. ++#: ../libasm/asm_error.c:67 ../src/ldgeneric.c:7001 ++#, c-format ++msgid "cannot rename output file" ++msgstr "" ++ ++#: ../libasm/asm_error.c:68 ++msgid "duplicate symbol" ++msgstr "" ++ ++#: ../libasm/asm_error.c:69 ++msgid "invalid section type for operation" ++msgstr "" ++ ++#: ../libasm/asm_error.c:70 ++msgid "error during output of data" ++msgstr "" ++ ++#: ../libasm/asm_error.c:71 ++msgid "no backend support available" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:81 ++msgid "invalid access" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:82 ++msgid "no regular file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:83 ++msgid "I/O error" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:84 ++msgid "invalid ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:85 ++msgid "no DWARF information" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:86 ++msgid "no ELF file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:87 ++msgid "cannot get ELF header" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:89 ++msgid "not implemented" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:91 ++msgid "invalid version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:92 ++msgid "invalid file" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:93 ++msgid "no entries found" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:94 ++msgid "invalid DWARF" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:95 ++msgid "no string data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:96 ++msgid "no address value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:97 ++msgid "no constant value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:98 ++msgid "no reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:99 ++msgid "invalid reference value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:100 ++msgid ".debug_line section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:101 ++msgid "invalid .debug_line section" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:102 ++msgid "debug information too big" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:103 ++msgid "invalid DWARF version" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:104 ++msgid "invalid directory index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:105 ++msgid "address out of range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:106 ++msgid "no location list value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:107 ++msgid "no block data" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:108 ++msgid "invalid line index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:109 ++msgid "invalid address range index" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:110 ++msgid "no matching address range" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:111 ++msgid "no flag value" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:113 ++msgid ".debug_ranges section missing" ++msgstr "" ++ ++#: ../libdw/dwarf_error.c:114 ++msgid "invalid CFI section" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:67 ../src/unstrip.c:2236 ++msgid "Input selection options:" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:68 ++msgid "Find addresses in FILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:70 ++msgid "Find addresses from signatures found in COREFILE" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:72 ++msgid "Find addresses in files mapped into process PID" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:74 ++msgid "" ++"Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " ++"format" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:76 ++msgid "Find addresses in the running kernel" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:78 ++msgid "Kernel with all modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:80 ++msgid "Search path for separate debuginfo files" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:163 ++msgid "only one of -e, -p, -k, -K, or --core allowed" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:223 ++#, c-format ++msgid "cannot read ELF core file: %s" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:243 ++msgid "No modules recognized in core file" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:255 ++msgid "cannot load kernel symbols" ++msgstr "" ++ ++#. Non-fatal to have no modules since we do have the kernel. ++#: ../libdwfl/argp-std.c:259 ++msgid "cannot find kernel modules" ++msgstr "" ++ ++#: ../libdwfl/argp-std.c:273 ++msgid "cannot find kernel or modules" ++msgstr "" ++ ++#: ../libebl/eblbackendname.c:63 ++msgid "No backend" ++msgstr "" ++ ++#: ../libebl/eblcorenotetypename.c:107 ../libebl/eblobjecttypename.c:78 ++#: ../libebl/eblobjnotetypename.c:86 ../libebl/eblosabiname.c:98 ++#: ../libebl/eblsectionname.c:110 ../libebl/eblsectiontypename.c:140 ++#: ../libebl/eblsegmenttypename.c:104 ++msgid "" ++msgstr "" ++ ++#: ../libebl/ebldynamictagname.c:126 ++#, c-format ++msgid ": %#" ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:76 ++#, c-format ++msgid " Build ID: " ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:88 ++msgid " Version String: " ++msgstr "" ++ ++#: ../libebl/eblobjnote.c:136 ++#, c-format ++msgid " OS: %s, ABI: " ++msgstr "" ++ ++#: ../libebl/eblosabiname.c:95 ++msgid "Stand alone" ++msgstr "" ++ ++#: ../libebl/eblsymbolbindingname.c:92 ../libebl/eblsymboltypename.c:98 ++#, c-format ++msgid ": %d" ++msgstr "" ++ ++#: ../src/ar.c:76 ++msgid "Commands:" ++msgstr "" ++ ++#: ../src/ar.c:77 ++msgid "Delete files from archive." ++msgstr "" ++ ++#: ../src/ar.c:78 ++msgid "Move files in archive." ++msgstr "" ++ ++#: ../src/ar.c:79 ++msgid "Print files in archive." ++msgstr "" ++ ++#: ../src/ar.c:80 ++msgid "Quick append files to archive." ++msgstr "" ++ ++#: ../src/ar.c:82 ++msgid "Replace existing or insert new file into archive." ++msgstr "" ++ ++#: ../src/ar.c:83 ++msgid "Display content of archive." ++msgstr "" ++ ++#: ../src/ar.c:84 ++msgid "Extract files from archive." ++msgstr "" ++ ++#: ../src/ar.c:86 ++msgid "Command Modifiers:" ++msgstr "" ++ ++#: ../src/ar.c:87 ++msgid "Preserve original dates." ++msgstr "" ++ ++#: ../src/ar.c:88 ++msgid "Use instance [COUNT] of name." ++msgstr "" ++ ++#: ../src/ar.c:90 ++msgid "Do not replace existing files with extracted files." ++msgstr "" ++ ++#: ../src/ar.c:91 ++msgid "Allow filename to be truncated if necessary." ++msgstr "" ++ ++#: ../src/ar.c:93 ++msgid "Provide verbose output." ++msgstr "" ++ ++#: ../src/ar.c:94 ++msgid "Force regeneration of symbol table." ++msgstr "" ++ ++#: ../src/ar.c:95 ++msgid "Insert file after [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:96 ++msgid "Insert file before [MEMBER]." ++msgstr "" ++ ++#: ../src/ar.c:97 ++msgid "Same as -b." ++msgstr "" ++ ++#: ../src/ar.c:98 ++msgid "Suppress message when library has to be created." ++msgstr "" ++ ++#: ../src/ar.c:100 ++msgid "Use full path for file matching." ++msgstr "" ++ ++#: ../src/ar.c:101 ++msgid "Update only older files in archive." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ar.c:107 ++msgid "Create, modify, and extract from archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ar.c:110 ++msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" ++msgstr "" ++ ++#: ../src/ar.c:192 ++#, c-format ++msgid "'a', 'b', and 'i' are only allowed with the 'm' and 'r' options" ++msgstr "" ++ ++#: ../src/ar.c:197 ++#, c-format ++msgid "MEMBER parameter required for 'a', 'b', and 'i' modifiers" ++msgstr "" ++ ++#: ../src/ar.c:213 ++#, c-format ++msgid "'N' is only meaningful with the 'x' and 'd' options" ++msgstr "" ++ ++#: ../src/ar.c:218 ++#, c-format ++msgid "COUNT parameter required" ++msgstr "" ++ ++#: ../src/ar.c:230 ++#, c-format ++msgid "invalid COUNT parameter %s" ++msgstr "" ++ ++#: ../src/ar.c:237 ++#, c-format ++msgid "'%' is only meaningful with the 'x' option" ++msgstr "" ++ ++#: ../src/ar.c:243 ++#, c-format ++msgid "archive name required" ++msgstr "" ++ ++#: ../src/ar.c:289 ../src/nm.c:253 ../src/readelf.c:442 ../src/size.c:219 ++#: ../src/strip.c:203 ../src/ld.c:957 ../src/elflint.c:238 ++#: ../src/addr2line.c:185 ../src/findtextrel.c:170 ../src/elfcmp.c:522 ++#: ../src/ranlib.c:136 ../src/strings.c:227 ../src/unstrip.c:233 ++#: ../src/objdump.c:181 ++#, 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/ar.c:294 ../src/nm.c:258 ../src/readelf.c:447 ../src/size.c:224 ++#: ../src/strip.c:208 ../src/ld.c:962 ../src/elflint.c:243 ++#: ../src/addr2line.c:190 ../src/findtextrel.c:175 ../src/elfcmp.c:527 ++#: ../src/ranlib.c:141 ../src/strings.c:232 ../src/unstrip.c:238 ++#: ../src/objdump.c:186 ++#, c-format ++msgid "Written by %s.\n" ++msgstr "" ++ ++#: ../src/ar.c:314 ++#, c-format ++msgid "More than one operation specified" ++msgstr "" ++ ++#: ../src/ar.c:404 ++#, c-format ++msgid "cannot open archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:414 ++#, c-format ++msgid "cannot open archive '%s': %s" ++msgstr "" ++ ++#: ../src/ar.c:418 ++#, c-format ++msgid "%s: not an archive file" ++msgstr "" ++ ++#: ../src/ar.c:422 ++#, c-format ++msgid "cannot stat archive '%s'" ++msgstr "" ++ ++#: ../src/ar.c:434 ++#, c-format ++msgid "no entry %s in archive\n" ++msgstr "" ++ ++#: ../src/ar.c:474 ../src/ar.c:918 ../src/ar.c:1118 ++#, c-format ++msgid "cannot create hash table" ++msgstr "" ++ ++#: ../src/ar.c:481 ../src/ar.c:925 ../src/ar.c:1127 ++#, c-format ++msgid "cannot insert into hash table" ++msgstr "" ++ ++#: ../src/ar.c:489 ../src/ranlib.c:176 ++#, c-format ++msgid "cannot stat '%s'" ++msgstr "" ++ ++#: ../src/ar.c:585 ++#, c-format ++msgid "cannot read content of %s: %s" ++msgstr "" ++ ++#: ../src/ar.c:629 ++#, c-format ++msgid "cannot open %.*s" ++msgstr "" ++ ++#: ../src/ar.c:651 ++#, c-format ++msgid "failed to write %s" ++msgstr "" ++ ++#: ../src/ar.c:663 ++#, c-format ++msgid "cannot change mode of %s" ++msgstr "" ++ ++#: ../src/ar.c:679 ++#, c-format ++msgid "cannot change modification time of %s" ++msgstr "" ++ ++#: ../src/ar.c:726 ++#, c-format ++msgid "cannot rename temporary file to %.*s" ++msgstr "" ++ ++#: ../src/ar.c:762 ../src/ar.c:1010 ../src/ar.c:1408 ../src/ranlib.c:250 ++#, c-format ++msgid "cannot create new file" ++msgstr "" ++ ++#: ../src/ar.c:1209 ++#, c-format ++msgid "position member %s not found" ++msgstr "" ++ ++#: ../src/ar.c:1219 ++#, c-format ++msgid "%s: no entry %s in archive!\n" ++msgstr "" ++ ++#: ../src/ar.c:1248 ../src/ldgeneric.c:519 ../src/objdump.c:257 ++#, c-format ++msgid "cannot open %s" ++msgstr "" ++ ++#: ../src/ar.c:1253 ++#, c-format ++msgid "cannot stat %s" ++msgstr "" ++ ++#: ../src/ar.c:1259 ++#, c-format ++msgid "%s is no regular file" ++msgstr "" ++ ++#: ../src/ar.c:1272 ++#, c-format ++msgid "cannot get ELF descriptor for %s: %s\n" ++msgstr "" ++ ++#: ../src/ar.c:1291 ++#, c-format ++msgid "cannot read %s: %s" ++msgstr "" ++ ++#. The archive is too big. ++#: ../src/arlib.c:215 ++#, c-format ++msgid "the archive '%s' is too large" ++msgstr "" ++ ++#: ../src/arlib.c:228 ++#, c-format ++msgid "cannot read ELF header of %s(%s): %s" ++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 ../src/unstrip.c:80 ++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:75 ../src/findtextrel.c:75 ++#: ../src/elfcmp.c:75 ../src/strings.c:83 ++msgid "Miscellaneous:" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/nm.c:108 ++msgid "List symbols from FILEs (a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/nm.c:111 ../src/size.c:92 ../src/strip.c:96 ../src/findtextrel.c:84 ++#: ../src/strings.c:92 ../src/objdump.c:80 ++msgid "[FILE...]" ++msgstr "" ++ ++#: ../src/nm.c:136 ../src/size.c:117 ../src/strip.c:120 ../src/objdump.c:105 ++#, c-format ++msgid "%s: INTERNAL ERROR %d (%s-%s): %s" ++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:229 ++#: ../src/elfcmp.c:574 ../src/ranlib.c:169 ../src/strings.c:183 ++#: ../src/unstrip.c:1899 ../src/unstrip.c:1928 ++#, c-format ++msgid "cannot open '%s'" ++msgstr "" ++ ++#: ../src/nm.c:380 ../src/nm.c:392 ../src/size.c:317 ../src/size.c:326 ++#: ../src/size.c:337 ../src/strip.c:1815 ++#, c-format ++msgid "while closing '%s'" ++msgstr "" ++ ++#: ../src/nm.c:402 ../src/strip.c:358 ../src/objdump.c:296 ++#, c-format ++msgid "%s: File format not recognized" ++msgstr "" ++ ++#. Note: 0 is no valid offset. ++#: ../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 ../src/objdump.c:344 ++#, 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:860 ../src/readelf.c:1003 ++#: ../src/readelf.c:1144 ../src/readelf.c:1326 ../src/readelf.c:1524 ++#: ../src/readelf.c:1710 ../src/readelf.c:1920 ../src/readelf.c:2174 ++#: ../src/readelf.c:2240 ../src/readelf.c:2318 ../src/readelf.c:2815 ++#: ../src/readelf.c:2851 ../src/readelf.c:2913 ../src/readelf.c:6473 ++#: ../src/readelf.c:7326 ../src/readelf.c:7471 ../src/readelf.c:7540 ++#: ../src/size.c:425 ../src/size.c:499 ../src/strip.c:482 ../src/objdump.c:744 ++#, 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 "" ++ ++#. The header line. ++#: ../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 "" ++ ++#. XXX Add machine specific object file types. ++#: ../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: -e -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, macinfo, or exception" ++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:99 ++msgid "Display sections for exception handling" ++msgstr "" ++ ++#: ../src/readelf.c:102 ++msgid "Output control:" ++msgstr "" ++ ++#: ../src/readelf.c:104 ++msgid "Do not find symbol names for addresses in DWARF data" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/readelf.c:110 ++msgid "Print information from ELF file in human-readable form." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/readelf.c:114 ../src/elflint.c:85 ++msgid "FILE..." ++msgstr "" ++ ++#: ../src/readelf.c:266 ../src/elflint.c:158 ++#, c-format ++msgid "cannot open input file" ++msgstr "" ++ ++#: ../src/readelf.c:394 ++#, c-format ++msgid "Unknown DWARF debug section `%s'.\n" ++msgstr "" ++ ++#: ../src/readelf.c:418 ../src/elflint.c:222 ++msgid "Missing file name.\n" ++msgstr "" ++ ++#: ../src/readelf.c:423 ../src/objdump.c:236 ++msgid "No operation specified.\n" ++msgstr "" ++ ++#: ../src/readelf.c:458 ++#, c-format ++msgid "cannot generate Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:470 ++#, c-format ++msgid "'%s' is not an archive, cannot print archive index" ++msgstr "" ++ ++#: ../src/readelf.c:475 ++#, c-format ++msgid "error while closing Elf descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:567 ++#, c-format ++msgid "cannot stat input file" ++msgstr "" ++ ++#: ../src/readelf.c:569 ++#, c-format ++msgid "input file is empty" ++msgstr "" ++ ++#: ../src/readelf.c:571 ++#, c-format ++msgid "failed reading '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:606 ++#, c-format ++msgid "cannot read ELF header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:614 ++#, c-format ++msgid "cannot create EBL handle" ++msgstr "" ++ ++#: ../src/readelf.c:621 ../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:707 ++msgid "NONE (None)" ++msgstr "" ++ ++#: ../src/readelf.c:708 ++msgid "REL (Relocatable file)" ++msgstr "" ++ ++#: ../src/readelf.c:709 ++msgid "EXEC (Executable file)" ++msgstr "" ++ ++#: ../src/readelf.c:710 ++msgid "DYN (Shared object file)" ++msgstr "" ++ ++#: ../src/readelf.c:711 ++msgid "CORE (Core file)" ++msgstr "" ++ ++#: ../src/readelf.c:716 ++#, c-format ++msgid "OS Specific: (%x)\n" ++msgstr "" ++ ++#. && e_type <= ET_HIPROC always true ++#: ../src/readelf.c:718 ++#, c-format ++msgid "Processor Specific: (%x)\n" ++msgstr "" ++ ++#: ../src/readelf.c:728 ++msgid "" ++"ELF Header:\n" ++" Magic: " ++msgstr "" ++ ++#: ../src/readelf.c:732 ++#, c-format ++msgid "" ++"\n" ++" Class: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:737 ++#, c-format ++msgid " Data: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:743 ++#, c-format ++msgid " Ident Version: %hhd %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:745 ../src/readelf.c:762 ++msgid "(current)" ++msgstr "" ++ ++#: ../src/readelf.c:749 ++#, c-format ++msgid " OS/ABI: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:752 ++#, c-format ++msgid " ABI Version: %hhd\n" ++msgstr "" ++ ++#: ../src/readelf.c:755 ++msgid " Type: " ++msgstr "" ++ ++#: ../src/readelf.c:758 ++#, c-format ++msgid " Machine: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:760 ++#, c-format ++msgid " Version: %d %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:764 ++#, c-format ++msgid " Entry point address: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:767 ++#, c-format ++msgid " Start of program headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:768 ../src/readelf.c:771 ++msgid "(bytes into file)" ++msgstr "" ++ ++#: ../src/readelf.c:770 ++#, c-format ++msgid " Start of section headers: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:773 ++#, c-format ++msgid " Flags: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:776 ++#, c-format ++msgid " Size of this header: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:777 ../src/readelf.c:780 ../src/readelf.c:786 ++msgid "(bytes)" ++msgstr "" ++ ++#: ../src/readelf.c:779 ++#, c-format ++msgid " Size of program header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:782 ++#, c-format ++msgid " Number of program headers entries: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:785 ++#, c-format ++msgid " Size of section header entries: % %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:788 ++#, c-format ++msgid " Number of section headers entries: %" ++msgstr "" ++ ++#: ../src/readelf.c:795 ++#, c-format ++msgid " (% in [0].sh_size)" ++msgstr "" ++ ++#: ../src/readelf.c:798 ../src/readelf.c:812 ++msgid " ([0] not available)" ++msgstr "" ++ ++#. We managed to get the zeroth section. ++#: ../src/readelf.c:808 ++#, c-format ++msgid " (% in [0].sh_link)" ++msgstr "" ++ ++#: ../src/readelf.c:816 ++#, c-format ++msgid "" ++" Section header string table index: XINDEX%s\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:820 ++#, c-format ++msgid "" ++" Section header string table index: %\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:852 ++#, c-format ++msgid "" ++"There are %d section headers, starting at offset %#:\n" ++"\n" ++msgstr "" ++ ++#: ../src/readelf.c:862 ++msgid "Section Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:865 ++msgid "" ++"[Nr] Name Type Addr Off Size ES Flags Lk " ++"Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:867 ++msgid "" ++"[Nr] Name Type Addr Off Size ES " ++"Flags Lk Inf Al" ++msgstr "" ++ ++#: ../src/readelf.c:874 ../src/readelf.c:1027 ++#, c-format ++msgid "cannot get section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:881 ../src/readelf.c:1035 ../src/readelf.c:7491 ++#: ../src/unstrip.c:352 ../src/unstrip.c:376 ../src/unstrip.c:426 ++#: ../src/unstrip.c:535 ../src/unstrip.c:552 ../src/unstrip.c:590 ++#: ../src/unstrip.c:788 ../src/unstrip.c:1056 ../src/unstrip.c:1243 ++#: ../src/unstrip.c:1304 ../src/unstrip.c:1426 ../src/unstrip.c:1479 ++#: ../src/unstrip.c:1587 ../src/unstrip.c:1777 ++#, c-format ++msgid "cannot get section header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:939 ++msgid "Program Headers:" ++msgstr "" ++ ++#: ../src/readelf.c:941 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:944 ++msgid "" ++" Type Offset VirtAddr PhysAddr FileSiz " ++"MemSiz Flg Align" ++msgstr "" ++ ++#: ../src/readelf.c:984 ++#, c-format ++msgid "\t[Requesting program interpreter: %s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1005 ++msgid "" ++"\n" ++" Section to Segment mapping:\n" ++" Segment Sections..." ++msgstr "" ++ ++#: ../src/readelf.c:1016 ../src/unstrip.c:1823 ../src/unstrip.c:1862 ++#: ../src/unstrip.c:1869 ++#, c-format ++msgid "cannot get program header: %s" ++msgstr "" ++ ++#: ../src/readelf.c:1150 ++#, 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:1155 ++#, 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:1163 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1177 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1328 ++#, c-format ++msgid "" ++"\n" ++"Dynamic segment contains %lu entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Dynamic segment contains %lu entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1340 ++msgid " Type Value\n" ++msgstr "" ++ ++#: ../src/readelf.c:1364 ++#, c-format ++msgid "Shared library: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1369 ++#, c-format ++msgid "Library soname: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1374 ++#, c-format ++msgid "Library rpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1379 ++#, c-format ++msgid "Library runpath: [%s]\n" ++msgstr "" ++ ++#: ../src/readelf.c:1399 ++#, c-format ++msgid "% (bytes)\n" ++msgstr "" ++ ++#: ../src/readelf.c:1509 ../src/readelf.c:1695 ++#, c-format ++msgid "" ++"\n" ++"Invalid symbol table at offset %#0\n" ++msgstr "" ++ ++#: ../src/readelf.c:1527 ../src/readelf.c:1712 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0 " ++"contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#. 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. ++#: ../src/readelf.c:1542 ++#, c-format ++msgid "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Relocation section [%2u] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:1552 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1554 ++msgid " Offset Type Value Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1607 ../src/readelf.c:1618 ../src/readelf.c:1631 ++#: ../src/readelf.c:1649 ../src/readelf.c:1661 ../src/readelf.c:1780 ++#: ../src/readelf.c:1792 ../src/readelf.c:1806 ../src/readelf.c:1825 ++#: ../src/readelf.c:1838 ++msgid "" ++msgstr "" ++ ++#: ../src/readelf.c:1619 ../src/readelf.c:1793 ../src/objdump.c:379 ++msgid "INVALID SYMBOL" ++msgstr "" ++ ++#: ../src/readelf.c:1650 ../src/readelf.c:1826 ../src/objdump.c:394 ++msgid "INVALID SECTION" ++msgstr "" ++ ++#: ../src/readelf.c:1724 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1726 ++msgid " Offset Type Value Addend Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1927 ++#, 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:1933 ++#, 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:1943 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1945 ++msgid " Num: Value Size Type Bind Vis Ndx Name\n" ++msgstr "" ++ ++#: ../src/readelf.c:1965 ++#, c-format ++msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" ++msgstr "" ++ ++#: ../src/readelf.c:2053 ++#, c-format ++msgid "bad dynamic symbol" ++msgstr "" ++ ++#: ../src/readelf.c:2135 ++msgid "none" ++msgstr "" ++ ++#: ../src/readelf.c:2152 ++msgid "| " ++msgstr "" ++ ++#: ../src/readelf.c:2177 ++#, c-format ++msgid "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version needs section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2200 ++#, c-format ++msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2213 ++#, c-format ++msgid " %#06x: Name: %s Flags: %s Version: %hu\n" ++msgstr "" ++ ++#: ../src/readelf.c:2244 ++#, c-format ++msgid "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgid_plural "" ++"\n" ++"Version definition section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2274 ++#, c-format ++msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2289 ++#, c-format ++msgid " %#06x: Parent %d: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:2521 ++#, c-format ++msgid "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entry:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgid_plural "" ++"\n" ++"Version symbols section [%2u] '%s' contains %d entries:\n" ++" Addr: %#0* Offset: %#08 Link to section: [%2u] '%s'" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2551 ++msgid " 0 *local* " ++msgstr "" ++ ++#: ../src/readelf.c:2556 ++msgid " 1 *global* " ++msgstr "" ++ ++#: ../src/readelf.c:2587 ++#, c-format ++msgid "" ++"\n" ++"Histogram for bucket list length in section [%2u] '%s' (total of %d " ++"bucket):\n" ++" Addr: %#0* Offset: %#08 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* Offset: %#08 Link to section: [%2u] '%s'\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2610 ++#, c-format ++msgid " Length Number % of total Coverage\n" ++msgstr "" ++ ++#: ../src/readelf.c:2612 ++#, c-format ++msgid " 0 %6 %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2619 ++#, c-format ++msgid "%7d %6 %5.1f%% %5.1f%%\n" ++msgstr "" ++ ++#: ../src/readelf.c:2632 ++#, c-format ++msgid "" ++" Average number of tests: successful lookup: %f\n" ++" unsuccessful lookup: %f\n" ++msgstr "" ++ ++#: ../src/readelf.c:2650 ../src/readelf.c:2692 ../src/readelf.c:2733 ++#, c-format ++msgid "cannot get data for section %d: %s" ++msgstr "" ++ ++#: ../src/readelf.c:2787 ++#, c-format ++msgid "" ++" Symbol Bias: %u\n" ++" Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:2861 ++#, c-format ++msgid "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entry:\n" ++msgid_plural "" ++"\n" ++"Library list section [%2zu] '%s' at offset %#0 contains %d entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:2875 ++msgid "" ++" Library Time Stamp Checksum Version " ++"Flags" ++msgstr "" ++ ++#: ../src/readelf.c:2925 ++#, c-format ++msgid "" ++"\n" ++"Object attributes section [%2zu] '%s' of % bytes at offset %" ++"#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:2941 ++msgid " Owner Size\n" ++msgstr "" ++ ++#: ../src/readelf.c:2967 ++#, c-format ++msgid " %-13s %4\n" ++msgstr "" ++ ++#: ../src/readelf.c:2999 ++#, c-format ++msgid " %-4u %12\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/readelf.c:3004 ++#, c-format ++msgid " File: %11\n" ++msgstr "" ++ ++#: ../src/readelf.c:3039 ++#, c-format ++msgid " %s: %, %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3042 ++#, c-format ++msgid " %s: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:3045 ++#, c-format ++msgid " %s: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3052 ++#, c-format ++msgid " %u: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:3055 ++#, c-format ++msgid " %u: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:3091 ++#, c-format ++msgid "%s+%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3094 ++#, c-format ++msgid "%s+%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3099 ++#, c-format ++msgid "%# <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3102 ++#, c-format ++msgid "%#0* <%s+%#>" ++msgstr "" ++ ++#: ../src/readelf.c:3108 ++#, c-format ++msgid "%s+%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3111 ++#, c-format ++msgid "%s+%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3115 ++#, c-format ++msgid "%# <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3118 ++#, c-format ++msgid "%#0* <%s>" ++msgstr "" ++ ++#: ../src/readelf.c:3123 ++#, c-format ++msgid "%s+%#" ++msgstr "" ++ ++#: ../src/readelf.c:3126 ++#, c-format ++msgid "%s+%#0*" ++msgstr "" ++ ++#: ../src/readelf.c:3234 ++#, c-format ++msgid "unknown tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3236 ++#, c-format ++msgid "unknown user tag %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3446 ++#, c-format ++msgid "unknown attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3449 ++#, c-format ++msgid "unknown user attribute %hx" ++msgstr "" ++ ++#: ../src/readelf.c:3495 ++#, c-format ++msgid "unknown form %" ++msgstr "" ++ ++#: ../src/readelf.c:3729 ++msgid "empty block" ++msgstr "" ++ ++#: ../src/readelf.c:3732 ++#, c-format ++msgid "%zu byte block:" ++msgstr "" ++ ++#: ../src/readelf.c:4141 ++#, c-format ++msgid "%*s[%4] %s \n" ++msgstr "" ++ ++#: ../src/readelf.c:4154 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [ Code]\n" ++msgstr "" ++ ++#: ../src/readelf.c:4161 ++#, c-format ++msgid "" ++"\n" ++"Abbreviation section at offset %:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4174 ++#, c-format ++msgid " *** error while reading abbreviation: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4190 ++#, c-format ++msgid " [%5u] offset: %, children: %s, tag: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4193 ++msgid "yes" ++msgstr "" ++ ++#: ../src/readelf.c:4193 ++msgid "no" ++msgstr "" ++ ++#: ../src/readelf.c:4229 ++#, c-format ++msgid "cannot get .debug_aranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4234 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entry:\n" ++msgid_plural "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %# contains %zu entries:\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:4264 ++#, c-format ++msgid " [%*zu] ???\n" ++msgstr "" ++ ++#: ../src/readelf.c:4266 ++#, c-format ++msgid "" ++" [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" ++msgstr "" ++ ++#: ../src/readelf.c:4285 ++#, c-format ++msgid "cannot get .debug_ranges content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4290 ../src/readelf.c:4773 ../src/readelf.c:5433 ++#: ../src/readelf.c:5878 ../src/readelf.c:5973 ../src/readelf.c:6145 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4304 ../src/readelf.c:5892 ++#, c-format ++msgid " [%6tx] \n" ++msgstr "" ++ ++#: ../src/readelf.c:4326 ../src/readelf.c:5914 ++#, c-format ++msgid " [%6tx] base address %s\n" ++msgstr "" ++ ++#. We have an address range entry. ++#. First address range entry in a list. ++#: ../src/readelf.c:4337 ++#, c-format ++msgid " [%6tx] %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4339 ++#, c-format ++msgid " %s..%s\n" ++msgstr "" ++ ++#: ../src/readelf.c:4762 ../src/readelf.c:6211 ../src/readelf.c:6313 ++#, c-format ++msgid "cannot get %s content: %s" ++msgstr "" ++ ++#: ../src/readelf.c:4769 ++#, c-format ++msgid "" ++"\n" ++"Call frame information section [%2zu] '%s' at offset %#:\n" ++msgstr "" ++ ++#: ../src/readelf.c:4796 ../src/readelf.c:5467 ++#, c-format ++msgid "invalid data in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:4818 ++#, c-format ++msgid "" ++"\n" ++" [%6tx] Zero terminator\n" ++msgstr "" ++ ++#: ../src/readelf.c:4896 ++msgid "FDE address encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4902 ++msgid "LSDA pointer encoding: " ++msgstr "" ++ ++#: ../src/readelf.c:4947 ++#, c-format ++msgid "invalid augmentation encoding" ++msgstr "" ++ ++#: ../src/readelf.c:5018 ++#, c-format ++msgid " (offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:5025 ++#, c-format ++msgid " (end offset: %#)" ++msgstr "" ++ ++#: ../src/readelf.c:5052 ++#, c-format ++msgid " %-26sLSDA pointer: %#\n" ++msgstr "" ++ ++#: ../src/readelf.c:5098 ++#, c-format ++msgid "cannot get attribute code: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5106 ++#, c-format ++msgid "cannot get attribute form: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5119 ++#, c-format ++msgid "cannot get attribute value: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5312 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" [Offset]\n" ++msgstr "" ++ ++#: ../src/readelf.c:5337 ++#, c-format ++msgid "" ++" Compilation unit at offset %:\n" ++" Version: %, Abbreviation section offset: %, Address size: %" ++", Offset size: %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5355 ++#, c-format ++msgid "cannot get DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5366 ++#, c-format ++msgid "cannot get DIE offset: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5374 ++#, c-format ++msgid "cannot get tag of DIE at offset % in section '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:5403 ++#, c-format ++msgid "cannot get next DIE: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5410 ++#, c-format ++msgid "cannot get next DIE: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5445 ++#, c-format ++msgid "cannot get line data section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:5458 ++#, c-format ++msgid "" ++"\n" ++"Table at offset %Zu:\n" ++msgstr "" ++ ++#. Print what we got so far. ++#: ../src/readelf.c:5510 ++#, c-format ++msgid "" ++"\n" ++" Length: %\n" ++" DWARF version: %\n" ++" Prologue length: %\n" ++" Minimum instruction length: %\n" ++" Initial value if '%s': %\n" ++" Line base: %\n" ++" Line range: %\n" ++" Opcode base: %\n" ++"\n" ++"Opcodes:\n" ++msgstr "" ++ ++#: ../src/readelf.c:5529 ++#, c-format ++msgid "invalid data at offset %tu in section [%zu] '%s'" ++msgstr "" ++ ++#: ../src/readelf.c:5544 ++#, c-format ++msgid " [%*] %hhu argument\n" ++msgid_plural " [%*] %hhu arguments\n" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5552 ++msgid "" ++"\n" ++"Directory table:" ++msgstr "" ++ ++#: ../src/readelf.c:5568 ++msgid "" ++"\n" ++"File name table:\n" ++" Entry Dir Time Size Name" ++msgstr "" ++ ++#: ../src/readelf.c:5597 ++msgid "" ++"\n" ++"Line number statements:" ++msgstr "" ++ ++#: ../src/readelf.c:5658 ++#, c-format ++msgid " special opcode %u: address+%u = %s, line%+d = %zu\n" ++msgstr "" ++ ++#: ../src/readelf.c:5678 ++#, c-format ++msgid " extended opcode %u: " ++msgstr "" ++ ++#: ../src/readelf.c:5683 ++msgid "end of sequence" ++msgstr "" ++ ++#: ../src/readelf.c:5698 ++#, c-format ++msgid "set address to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5719 ++#, c-format ++msgid "define new file: dir=%u, mtime=%, length=%, name=%s\n" ++msgstr "" ++ ++#. Unknown, ignore it. ++#: ../src/readelf.c:5728 ++msgid "unknown opcode" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5740 ++msgid " copy" ++msgstr "" ++ ++#: ../src/readelf.c:5750 ++#, c-format ++msgid "advance address by %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5761 ++#, c-format ++msgid " advance line by constant %d to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5769 ++#, c-format ++msgid " set file to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5779 ++#, c-format ++msgid " set column to %\n" ++msgstr "" ++ ++#: ../src/readelf.c:5786 ++#, c-format ++msgid " set '%s' to %\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5792 ++msgid " set basic block flag" ++msgstr "" ++ ++#: ../src/readelf.c:5802 ++#, c-format ++msgid "advance address by constant %u to %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:5818 ++#, c-format ++msgid "advance address by fixed value %u to %s\n" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5827 ++msgid " set prologue end flag" ++msgstr "" ++ ++#. Takes no argument. ++#: ../src/readelf.c:5832 ++msgid " set epilogue begin flag" ++msgstr "" ++ ++#. 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. ++#: ../src/readelf.c:5841 ++#, c-format ++msgid " unknown opcode with % parameter:" ++msgid_plural " unknown opcode with % parameters:" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: ../src/readelf.c:5873 ++#, c-format ++msgid "cannot get .debug_loc content: %s" ++msgstr "" ++ ++#. First entry in a list. ++#: ../src/readelf.c:5928 ++#, c-format ++msgid " [%6tx] %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5930 ++#, c-format ++msgid " %s..%s" ++msgstr "" ++ ++#: ../src/readelf.c:5983 ++#, c-format ++msgid "cannot get macro information section data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6062 ++#, c-format ++msgid "%*s*** non-terminated string at end of section" ++msgstr "" ++ ++#: ../src/readelf.c:6130 ++#, c-format ++msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6169 ++#, c-format ++msgid "" ++"\n" ++"DWARF section [%2zu] '%s' at offset %#:\n" ++" %*s String\n" ++msgstr "" ++ ++#: ../src/readelf.c:6183 ++#, c-format ++msgid " *** error while reading strings: %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:6203 ++#, c-format ++msgid "" ++"\n" ++"Call frame search table section [%2zu] '.eh_frame_hdr':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6305 ++#, c-format ++msgid "" ++"\n" ++"Exception handling table section [%2zu] '.gcc_except_table':\n" ++msgstr "" ++ ++#: ../src/readelf.c:6328 ++#, c-format ++msgid " LPStart encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6340 ++#, c-format ++msgid " TType encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6354 ++#, c-format ++msgid " Call site encoding: %#x " ++msgstr "" ++ ++#: ../src/readelf.c:6367 ++msgid "" ++"\n" ++" Call site table:" ++msgstr "" ++ ++#: ../src/readelf.c:6381 ++#, c-format ++msgid "" ++" [%4u] Call site start: %#\n" ++" Call site length: %\n" ++" Landing pad: %#\n" ++" Action: %u\n" ++msgstr "" ++ ++#: ../src/readelf.c:6441 ++#, c-format ++msgid "invalid TType encoding" ++msgstr "" ++ ++#: ../src/readelf.c:6464 ++#, c-format ++msgid "cannot get debug context descriptor: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6599 ../src/readelf.c:7164 ++#, c-format ++msgid "cannot convert core note data: %s" ++msgstr "" ++ ++#: ../src/readelf.c:6904 ++#, c-format ++msgid "" ++"\n" ++"%*s... ..." ++msgstr "" ++ ++#: ../src/readelf.c:7262 ++msgid " Owner Data size Type\n" ++msgstr "" ++ ++#: ../src/readelf.c:7280 ++#, c-format ++msgid " %-13.*s %9 %s\n" ++msgstr "" ++ ++#: ../src/readelf.c:7311 ++#, c-format ++msgid "cannot get content of note section: %s" ++msgstr "" ++ ++#: ../src/readelf.c:7338 ++#, c-format ++msgid "" ++"\n" ++"Note section [%2zu] '%s' of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7361 ++#, c-format ++msgid "" ++"\n" ++"Note segment of % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7407 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' has no data to dump.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7413 ../src/readelf.c:7435 ++#, c-format ++msgid "cannot get data for section [%Zu] '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7417 ++#, c-format ++msgid "" ++"\n" ++"Hex dump of section [%Zu] '%s', % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7430 ++#, c-format ++msgid "" ++"\n" ++"Section [%Zu] '%s' is empty.\n" ++msgstr "" ++ ++#: ../src/readelf.c:7439 ++#, c-format ++msgid "" ++"\n" ++"String section [%Zu] '%s' contains % bytes at offset %#0:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7486 ++#, c-format ++msgid "" ++"\n" ++"section [%lu] does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7512 ++#, c-format ++msgid "" ++"\n" ++"section '%s' does not exist" ++msgstr "" ++ ++#: ../src/readelf.c:7573 ++#, c-format ++msgid "cannot get symbol index of archive '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7576 ++#, c-format ++msgid "" ++"\n" ++"Archive '%s' has no symbol index\n" ++msgstr "" ++ ++#: ../src/readelf.c:7580 ++#, c-format ++msgid "" ++"\n" ++"Index of archive '%s' has %Zu entries:\n" ++msgstr "" ++ ++#: ../src/readelf.c:7598 ++#, c-format ++msgid "cannot extract member at offset %Zu in '%s': %s" ++msgstr "" ++ ++#: ../src/readelf.c:7603 ++#, 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 "" ++ ++#. Short description of program. ++#: ../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:339 ++#, c-format ++msgid "%s: file format not recognized" ++msgstr "" ++ ++#: ../src/size.c:446 ../src/size.c:589 ++#, c-format ++msgid " (ex %s)" ++msgstr "" ++ ++#: ../src/size.c:614 ++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 "" ++ ++#. Short description of program. ++#: ../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 ../src/unstrip.c:124 ++#, c-format ++msgid "-o option specified twice" ++msgstr "" ++ ++#: ../src/strip.c:259 ++#, c-format ++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:868 ../src/strip.c:955 ++#, c-format ++msgid "while generating output file: %s" ++msgstr "" ++ ++#: ../src/strip.c:928 ../src/strip.c:1667 ++#, c-format ++msgid "%s: error while creating ELF header: %s" ++msgstr "" ++ ++#: ../src/strip.c:942 ++#, c-format ++msgid "while preparing output for '%s'" ++msgstr "" ++ ++#: ../src/strip.c:993 ../src/strip.c:1049 ++#, c-format ++msgid "while create section header section: %s" ++msgstr "" ++ ++#: ../src/strip.c:999 ++#, c-format ++msgid "cannot allocate section data: %s" ++msgstr "" ++ ++#: ../src/strip.c:1058 ++#, c-format ++msgid "while create section header string table: %s" ++msgstr "" ++ ++#: ../src/strip.c:1592 ../src/strip.c:1689 ++#, c-format ++msgid "while writing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1603 ++#, c-format ++msgid "while creating '%s'" ++msgstr "" ++ ++#: ../src/strip.c:1615 ++#, c-format ++msgid "while computing checksum for debug information" ++msgstr "" ++ ++#: ../src/strip.c:1675 ++#, c-format ++msgid "%s: error while reading the file: %s" ++msgstr "" ++ ++#: ../src/strip.c:1721 ../src/strip.c:1728 ++#, c-format ++msgid "error while finishing '%s': %s" ++msgstr "" ++ ++#: ../src/strip.c:1751 ../src/strip.c:1808 ++#, 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 "" ++ ++#. Short description of program. ++#: ../src/ld.c:197 ++msgid "Combine object and archive files." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../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:1446 ++#, c-format ++msgid "cannot read version script '%s'" ++msgstr "" ++ ++#. The symbol is already defined and now again ++#. in the linker script. This is an error. ++#: ../src/ld.c:1512 ../src/ld.c:1551 ++#, 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: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 % in %s to % in %s" ++msgstr "" ++ ++#: ../src/ldgeneric.c:677 ++#, c-format ++msgid "(%s+%#): multiple definition of %s `%s'\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:700 ++#, c-format ++msgid "(%s+%#): first defined here\n" ++msgstr "" ++ ++#: ../src/ldgeneric.c:819 ++#, c-format ++msgid "%s: cannot get section group data: %s" ++msgstr "" ++ ++#. If we come here no section group contained the given section ++#. despite the SHF_GROUP flag. This is an error in the input ++#. file. ++#: ../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 "" ++ ++#. This should never happen. ++#: ../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: %" ++"" ++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 "" ++ ++#. 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. ++#: ../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 '%' 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*" ++msgstr "" ++ ++#: ../src/ldgeneric.c:3690 ++#, c-format ++msgid "no entry symbol specified: defaulting to %#0*" ++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 ../src/unstrip.c:1807 ++#, 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 "" ++ ++#. This cannot be implemented generally. There should have been a ++#. machine dependent implementation and we should never have arrived ++#. here. ++#: ../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/i386_ld.c:210 ++#, c-format ++msgid "cannot allocate PLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:232 ++#, c-format ++msgid "cannot allocate PLTREL section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:253 ++#, c-format ++msgid "cannot allocate GOT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:274 ++#, c-format ++msgid "cannot allocate GOTPLT section: %s" ++msgstr "" ++ ++#: ../src/i386_ld.c:661 ++#, c-format ++msgid "initial-executable TLS relocation cannot be used " ++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:71 ++msgid "Be extremely strict, flag level 2 features." ++msgstr "" ++ ++#: ../src/elflint.c:72 ++msgid "Do not print anything if successful" ++msgstr "" ++ ++#: ../src/elflint.c:73 ++msgid "Binary is a separate debuginfo file" ++msgstr "" ++ ++#: ../src/elflint.c:75 ++msgid "" ++"Binary has been created with GNU ld and is therefore known to be broken in " ++"certain ways" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elflint.c:81 ++msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." ++msgstr "" ++ ++#: ../src/elflint.c:165 ++#, c-format ++msgid "cannot generate Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:184 ++#, c-format ++msgid "error while closing Elf descriptor: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:188 ++msgid "No errors" ++msgstr "" ++ ++#: ../src/elflint.c:301 ++#, c-format ++msgid " error while freeing sub-ELF descriptor: %s\n" ++msgstr "" ++ ++#. We cannot do anything. ++#: ../src/elflint.c:309 ++#, c-format ++msgid "Not an ELF file - it has the wrong magic bytes at the start\n" ++msgstr "" ++ ++#: ../src/elflint.c:368 ++#, c-format ++msgid "e_ident[%d] == %d is no known class\n" ++msgstr "" ++ ++#: ../src/elflint.c:373 ++#, c-format ++msgid "e_ident[%d] == %d is no known data encoding\n" ++msgstr "" ++ ++#: ../src/elflint.c:377 ++#, c-format ++msgid "unknown ELF header version number e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:383 ++#, c-format ++msgid "unsupported OS ABI e_ident[%d] == '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:389 ++#, c-format ++msgid "unsupport ABI version e_ident[%d] == %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:394 ++#, c-format ++msgid "e_ident[%zu] is not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:399 ++#, c-format ++msgid "unknown object file type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:406 ++#, c-format ++msgid "unknown machine type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:410 ++#, c-format ++msgid "unknown object file version\n" ++msgstr "" ++ ++#: ../src/elflint.c:416 ++#, c-format ++msgid "invalid program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:418 ++#, c-format ++msgid "executables and DSOs cannot have zero program header offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:422 ++#, c-format ++msgid "invalid number of program header entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:430 ++#, c-format ++msgid "invalid section header table offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:433 ++#, c-format ++msgid "section header table must be present\n" ++msgstr "" ++ ++#: ../src/elflint.c:447 ++#, c-format ++msgid "invalid number of section header table entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:464 ++#, c-format ++msgid "invalid section header index\n" ++msgstr "" ++ ++#: ../src/elflint.c:469 ++#, c-format ++msgid "invalid machine flags: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:476 ../src/elflint.c:493 ++#, c-format ++msgid "invalid ELF header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:479 ../src/elflint.c:496 ++#, c-format ++msgid "invalid program header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:482 ../src/elflint.c:499 ++#, c-format ++msgid "invalid program header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:485 ../src/elflint.c:502 ++#, c-format ++msgid "invalid section header size: %hd\n" ++msgstr "" ++ ++#: ../src/elflint.c:488 ../src/elflint.c:505 ++#, c-format ++msgid "invalid section header position or size\n" ++msgstr "" ++ ++#: ../src/elflint.c:549 ++#, c-format ++msgid "" ++"section [%2d] '%s': section with SHF_GROUP flag set not part of a section " ++"group\n" ++msgstr "" ++ ++#: ../src/elflint.c:553 ++#, c-format ++msgid "" ++"section [%2d] '%s': section group [%2zu] '%s' does not preceed group member\n" ++msgstr "" ++ ++#: ../src/elflint.c:569 ../src/elflint.c:1412 ../src/elflint.c:1462 ++#: ../src/elflint.c:1571 ../src/elflint.c:2165 ../src/elflint.c:2679 ++#: ../src/elflint.c:2840 ../src/elflint.c:2970 ../src/elflint.c:3142 ++#: ../src/elflint.c:4040 ++#, c-format ++msgid "section [%2d] '%s': cannot get section data\n" ++msgstr "" ++ ++#: ../src/elflint.c:582 ../src/elflint.c:1578 ++#, 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:605 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol table cannot have more than one extended index " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:616 ++#, c-format ++msgid "section [%2u] '%s': entry size is does not match ElfXX_Sym\n" ++msgstr "" ++ ++#: ../src/elflint.c:625 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:630 ../src/elflint.c:633 ../src/elflint.c:636 ++#: ../src/elflint.c:639 ../src/elflint.c:642 ../src/elflint.c:645 ++#, c-format ++msgid "section [%2d] '%s': '%s' in zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:648 ++#, c-format ++msgid "section [%2d] '%s': XINDEX for zeroth entry not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:658 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:667 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid name value\n" ++msgstr "" ++ ++#: ../src/elflint.c:680 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: too large section index but no extended " ++"section index section\n" ++msgstr "" ++ ++#: ../src/elflint.c:686 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: XINDEX used for index which would fit in " ++"st_shndx (%)\n" ++msgstr "" ++ ++#. || sym->st_shndx > SHN_HIRESERVE always false ++#: ../src/elflint.c:698 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: invalid section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:706 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown type\n" ++msgstr "" ++ ++#: ../src/elflint.c:712 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown symbol binding\n" ++msgstr "" ++ ++#: ../src/elflint.c:717 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unique symbol not of object type\n" ++msgstr "" ++ ++#: ../src/elflint.c:725 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: COMMON only allowed in relocatable files\n" ++msgstr "" ++ ++#: ../src/elflint.c:729 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: local COMMON symbols are nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:733 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n" ++msgstr "" ++ ++#: ../src/elflint.c:765 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: st_value out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:771 ../src/elflint.c:796 ../src/elflint.c:839 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu does not fit completely in referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:780 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have " ++"SHF_TLS flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:790 ../src/elflint.c:832 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value out of bounds of referenced section " ++"[%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:817 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:825 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: st_value short of referenced section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:852 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:859 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: non-local symbol outside range described in " ++"sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:866 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: non-local section symbol\n" ++msgstr "" ++ ++#: ../src/elflint.c:916 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to bad section [%" ++"2d]\n" ++msgstr "" ++ ++#: ../src/elflint.c:923 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol refers to section [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#. 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. ++#: ../src/elflint.c:939 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol value %# does not " ++"match %s section address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:946 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol size % does not " ++"match %s section size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:954 ++#, c-format ++msgid "" ++"section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got " ++"section\n" ++msgstr "" ++ ++#: ../src/elflint.c:970 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC_ symbol value %# does not match dynamic " ++"segment address %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:977 ++#, c-format ++msgid "" ++"section [%2d] '%s': _DYNAMIC symbol size % does not match dynamic " ++"segment size %\n" ++msgstr "" ++ ++#: ../src/elflint.c:990 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-" ++"default visibility\n" ++msgstr "" ++ ++#: ../src/elflint.c:994 ++#, c-format ++msgid "section [%2d] '%s': symbol %zu: unknown bit set in st_other\n" ++msgstr "" ++ ++#: ../src/elflint.c:1039 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT used for this RELA section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1048 ../src/elflint.c:1100 ++#, c-format ++msgid "section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1073 ../src/elflint.c:1125 ++#, c-format ++msgid "" ++"section [%2d] '%s': relative relocations after index %d as specified by " ++"DT_RELCOUNT\n" ++msgstr "" ++ ++#: ../src/elflint.c:1079 ../src/elflint.c:1131 ++#, c-format ++msgid "" ++"section [%2d] '%s': non-relative relocation at index %zu; DT_RELCOUNT " ++"specified %d relative relocations\n" ++msgstr "" ++ ++#: ../src/elflint.c:1091 ++#, c-format ++msgid "section [%2d] '%s': DT_RELACOUNT used for this REL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1173 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1186 ++#, c-format ++msgid "section [%2d] '%s': invalid destination section type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1194 ++#, c-format ++msgid "section [%2d] '%s': sh_info should be zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1201 ++#, c-format ++msgid "section [%2d] '%s': no relocations for merge-able sections possible\n" ++msgstr "" ++ ++#: ../src/elflint.c:1208 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Rela\n" ++msgstr "" ++ ++#: ../src/elflint.c:1268 ++#, c-format ++msgid "text relocation flag set but there is no read-only segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1295 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1303 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: relocation type invalid for the file " ++"type\n" ++msgstr "" ++ ++#: ../src/elflint.c:1311 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: invalid symbol index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1329 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: only symbol '_GLOBAL_OFFSET_TABLE_' can " ++"be used with %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1346 ++#, c-format ++msgid "section [%2d] '%s': relocation %zu: offset out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1361 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: copy relocation against symbol of type %" ++"s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1382 ++#, c-format ++msgid "" ++"section [%2d] '%s': relocation %zu: read-only section modified but text " ++"relocation flag not set\n" ++msgstr "" ++ ++#: ../src/elflint.c:1397 ++#, c-format ++msgid "section [%2d] '%s': relocations are against loaded and unloaded data\n" ++msgstr "" ++ ++#: ../src/elflint.c:1436 ../src/elflint.c:1486 ++#, c-format ++msgid "section [%2d] '%s': cannot get relocation %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1566 ++#, c-format ++msgid "more than one dynamic section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1584 ++#, c-format ++msgid "section [%2d] '%s': section entry size does not match ElfXX_Dyn\n" ++msgstr "" ++ ++#: ../src/elflint.c:1589 ../src/elflint.c:1881 ++#, c-format ++msgid "section [%2d] '%s': sh_info not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:1599 ++#, c-format ++msgid "section [%2d] '%s': cannot get dynamic section entry %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1607 ++#, c-format ++msgid "section [%2d] '%s': non-DT_NULL entries follow DT_NULL entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:1614 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: unknown tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:1625 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: more than one entry with tag %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1635 ++#, c-format ++msgid "section [%2d] '%s': entry %zu: level 2 tag %s used\n" ++msgstr "" ++ ++#: ../src/elflint.c:1653 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: DT_PLTREL value must be DT_REL or DT_RELA\n" ++msgstr "" ++ ++#: ../src/elflint.c:1675 ++#, 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:1718 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must point into loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:1733 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %zu: %s value must be valid offset in section [%" ++"2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:1753 ../src/elflint.c:1781 ++#, c-format ++msgid "section [%2d] '%s': contains %s entry but not %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:1765 ++#, c-format ++msgid "section [%2d] '%s': mandatory tag %s not present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1774 ++#, c-format ++msgid "section [%2d] '%s': no hash section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1789 ../src/elflint.c:1796 ++#, c-format ++msgid "section [%2d] '%s': not all of %s, %s, and %s are present\n" ++msgstr "" ++ ++#: ../src/elflint.c:1806 ../src/elflint.c:1810 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in DSO marked during prelinking\n" ++msgstr "" ++ ++#: ../src/elflint.c:1816 ++#, c-format ++msgid "section [%2d] '%s': non-DSO file marked as dependency during prelink\n" ++msgstr "" ++ ++#: ../src/elflint.c:1827 ../src/elflint.c:1831 ../src/elflint.c:1835 ++#: ../src/elflint.c:1839 ++#, c-format ++msgid "section [%2d] '%s': %s tag missing in prelinked executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:1851 ++#, c-format ++msgid "" ++"section [%2d] '%s': only relocatable files can have extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1861 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index section not for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1866 ++#, c-format ++msgid "cannot get data for symbol section\n" ++msgstr "" ++ ++#: ../src/elflint.c:1869 ++#, c-format ++msgid "section [%2d] '%s': entry size does not match Elf32_Word\n" ++msgstr "" ++ ++#: ../src/elflint.c:1876 ++#, c-format ++msgid "section [%2d] '%s': extended index table too small for symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1891 ++#, c-format ++msgid "" ++"section [%2d] '%s': extended section index in section [%2zu] '%s' refers to " ++"same symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:1902 ++#, c-format ++msgid "symbol 0 should have zero extended section index\n" ++msgstr "" ++ ++#: ../src/elflint.c:1914 ++#, c-format ++msgid "cannot get data for symbol %zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:1919 ++#, c-format ++msgid "extended section index is % but symbol index is not XINDEX\n" ++msgstr "" ++ ++#: ../src/elflint.c:1935 ../src/elflint.c:1976 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected %ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:1947 ../src/elflint.c:1988 ++#, c-format ++msgid "section [%2d] '%s': chain array too large\n" ++msgstr "" ++ ++#: ../src/elflint.c:1956 ../src/elflint.c:1997 ++#, c-format ++msgid "section [%2d] '%s': hash bucket reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:1962 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2003 ++#, c-format ++msgid "section [%2d] '%s': hash chain reference % out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2018 ++#, c-format ++msgid "section [%2d] '%s': bitmask size not power of 2: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2029 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table section is too small (is %ld, expected at " ++"least%ld)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2037 ++#, c-format ++msgid "section [%2d] '%s': 2nd hash function shift too big: %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:2069 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash chain for bucket %zu lower than symbol index bias\n" ++msgstr "" ++ ++#: ../src/elflint.c:2090 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %u referenced in chain for bucket %zu is " ++"undefined\n" ++msgstr "" ++ ++#: ../src/elflint.c:2101 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash value for symbol %u in chain for bucket %zu wrong\n" ++msgstr "" ++ ++#: ../src/elflint.c:2132 ++#, c-format ++msgid "section [%2d] '%s': hash chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2137 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol reference in chain for bucket %zu out of bounds\n" ++msgstr "" ++ ++#: ../src/elflint.c:2143 ++#, c-format ++msgid "section [%2d] '%s': bitmask does not match names in the hash table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2156 ++#, c-format ++msgid "section [%2d] '%s': relocatable files cannot have hash tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:2174 ++#, c-format ++msgid "section [%2d] '%s': hash table not for dynamic symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2182 ++#, c-format ++msgid "section [%2d] '%s': hash table entry size incorrect\n" ++msgstr "" ++ ++#: ../src/elflint.c:2187 ++#, c-format ++msgid "section [%2d] '%s': not marked to be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:2192 ++#, c-format ++msgid "" ++"section [%2d] '%s': hash table has not even room for initial administrative " ++"entries\n" ++msgstr "" ++ ++#: ../src/elflint.c:2240 ++#, c-format ++msgid "sh_link in hash sections [%2zu] '%s' and [%2zu] '%s' not identical\n" ++msgstr "" ++ ++#: ../src/elflint.c:2318 ../src/elflint.c:2322 ++#, c-format ++msgid "section [%2zu] '%s': reference to symbol index 0\n" ++msgstr "" ++ ++#: ../src/elflint.c:2329 ++#, 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:2341 ++#, 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:2357 ++#, c-format ++msgid "section [%2d] '%s': nonzero sh_%s for NULL section\n" ++msgstr "" ++ ++#: ../src/elflint.c:2377 ++#, c-format ++msgid "" ++"section [%2d] '%s': section groups only allowed in relocatable object files\n" ++msgstr "" ++ ++#: ../src/elflint.c:2388 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol table: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2393 ++#, c-format ++msgid "section [%2d] '%s': section reference in sh_link is no symbol table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2399 ++#, c-format ++msgid "section [%2d] '%s': invalid symbol index in sh_info\n" ++msgstr "" ++ ++#: ../src/elflint.c:2404 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:2411 ++#, c-format ++msgid "section [%2d] '%s': cannot get symbol for signature\n" ++msgstr "" ++ ++#: ../src/elflint.c:2416 ++#, c-format ++msgid "section [%2d] '%s': signature symbol canot be empty string\n" ++msgstr "" ++ ++#: ../src/elflint.c:2422 ++#, c-format ++msgid "section [%2d] '%s': sh_flags not set correctly\n" ++msgstr "" ++ ++#: ../src/elflint.c:2428 ++#, c-format ++msgid "section [%2d] '%s': cannot get data: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2437 ++#, c-format ++msgid "section [%2d] '%s': section size not multiple of sizeof(Elf32_Word)\n" ++msgstr "" ++ ++#: ../src/elflint.c:2442 ++#, c-format ++msgid "section [%2d] '%s': section group without flags word\n" ++msgstr "" ++ ++#: ../src/elflint.c:2448 ++#, c-format ++msgid "section [%2d] '%s': section group without member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2452 ++#, c-format ++msgid "section [%2d] '%s': section group with only one member\n" ++msgstr "" ++ ++#: ../src/elflint.c:2463 ++#, c-format ++msgid "section [%2d] '%s': unknown section group flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:2475 ++#, c-format ++msgid "section [%2d] '%s': section index %Zu out of range\n" ++msgstr "" ++ ++#: ../src/elflint.c:2484 ++#, c-format ++msgid "section [%2d] '%s': cannot get section header for element %zu: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:2491 ++#, c-format ++msgid "section [%2d] '%s': section group contains another group [%2d] '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2497 ++#, c-format ++msgid "" ++"section [%2d] '%s': element %Zu references section [%2d] '%s' without " ++"SHF_GROUP flag set\n" ++msgstr "" ++ ++#: ../src/elflint.c:2504 ++#, c-format ++msgid "section [%2d] '%s' is contained in more than one section group\n" ++msgstr "" ++ ++#: ../src/elflint.c:2693 ++#, 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:2704 ++#, c-format ++msgid "" ++"section [%2d] '%s' has different number of entries than symbol table [%2d] '%" ++"s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2720 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: cannot read version data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2736 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with global scope\n" ++msgstr "" ++ ++#: ../src/elflint.c:2744 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: local symbol with version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2758 ++#, c-format ++msgid "section [%2d] '%s': symbol %d: invalid version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2763 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for defined version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2773 ++#, c-format ++msgid "" ++"section [%2d] '%s': symbol %d: version index %d is for requested version\n" ++msgstr "" ++ ++#: ../src/elflint.c:2825 ++#, c-format ++msgid "more than one version reference section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2833 ../src/elflint.c:2962 ++#, c-format ++msgid "section [%2d] '%s': sh_link does not link to string table\n" ++msgstr "" ++ ++#: ../src/elflint.c:2856 ../src/elflint.c:3014 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong version %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:2862 ../src/elflint.c:3020 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong offset of auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:2870 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid file reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2878 ++#, c-format ++msgid "section [%2d] '%s': entry %d references unknown dependency\n" ++msgstr "" ++ ++#: ../src/elflint.c:2890 ++#, c-format ++msgid "section [%2d] '%s': auxiliary entry %d of entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:2897 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has invalid name " ++"reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:2904 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong hash value: %" ++"#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:2914 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has duplicate version " ++"name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:2925 ++#, c-format ++msgid "" ++"section [%2d] '%s': auxiliary entry %d of entry %d has wrong next field\n" ++msgstr "" ++ ++#: ../src/elflint.c:2941 ../src/elflint.c:3099 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid offset to next entry\n" ++msgstr "" ++ ++#: ../src/elflint.c:2954 ++#, c-format ++msgid "more than one version definition section present\n" ++msgstr "" ++ ++#: ../src/elflint.c:2999 ++#, c-format ++msgid "section [%2d] '%s': more than one BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3003 ++#, c-format ++msgid "section [%2d] '%s': BASE definition must have index VER_NDX_GLOBAL\n" ++msgstr "" ++ ++#: ../src/elflint.c:3009 ++#, c-format ++msgid "section [%2d] '%s': entry %d has unknown flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3033 ++#, c-format ++msgid "section [%2d] '%s': entry %d has invalid name reference\n" ++msgstr "" ++ ++#: ../src/elflint.c:3040 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong hash value: %#x, expected %#x\n" ++msgstr "" ++ ++#: ../src/elflint.c:3049 ++#, c-format ++msgid "section [%2d] '%s': entry %d has duplicate version name '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3068 ++#, c-format ++msgid "" ++"section [%2d] '%s': entry %d has invalid name reference in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3083 ++#, c-format ++msgid "section [%2d] '%s': entry %d has wrong next field in auxiliary data\n" ++msgstr "" ++ ++#: ../src/elflint.c:3105 ++#, c-format ++msgid "section [%2d] '%s': no BASE definition\n" ++msgstr "" ++ ++#: ../src/elflint.c:3121 ++#, c-format ++msgid "section [%2d] '%s': unknown parent version '%s'\n" ++msgstr "" ++ ++#: ../src/elflint.c:3134 ++#, c-format ++msgid "section [%2d] '%s': empty object attributes section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3155 ++#, c-format ++msgid "section [%2d] '%s': unrecognized attribute format\n" ++msgstr "" ++ ++#: ../src/elflint.c:3171 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3180 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: invalid length in attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3192 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated vendor name string\n" ++msgstr "" ++ ++#: ../src/elflint.c:3209 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: endless ULEB128 in attribute subsection tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3218 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: truncated attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3227 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: zero length field in attribute subsection\n" ++msgstr "" ++ ++#: ../src/elflint.c:3240 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: invalid length in attribute subsection\n" ++msgstr "" ++ ++#. Tag_File ++#: ../src/elflint.c:3251 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: attribute subsection has unexpected tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3269 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: endless ULEB128 in attribute tag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3280 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unterminated string in attribute\n" ++msgstr "" ++ ++#: ../src/elflint.c:3293 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: unrecognized attribute tag %u\n" ++msgstr "" ++ ++#: ../src/elflint.c:3297 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: unrecognized %s attribute value %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3307 ++#, c-format ++msgid "section [%2d] '%s': offset %zu: vendor '%s' unknown\n" ++msgstr "" ++ ++#: ../src/elflint.c:3313 ++#, c-format ++msgid "" ++"section [%2d] '%s': offset %zu: extra bytes after last attribute section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3402 ++#, c-format ++msgid "cannot get section header of zeroth section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3406 ++#, c-format ++msgid "zeroth section has nonzero name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3408 ++#, c-format ++msgid "zeroth section has nonzero type\n" ++msgstr "" ++ ++#: ../src/elflint.c:3410 ++#, c-format ++msgid "zeroth section has nonzero flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:3412 ++#, c-format ++msgid "zeroth section has nonzero address\n" ++msgstr "" ++ ++#: ../src/elflint.c:3414 ++#, c-format ++msgid "zeroth section has nonzero offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:3416 ++#, c-format ++msgid "zeroth section has nonzero info field\n" ++msgstr "" ++ ++#: ../src/elflint.c:3418 ++#, c-format ++msgid "zeroth section has nonzero align value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3420 ++#, c-format ++msgid "zeroth section has nonzero entry size value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3423 ++#, c-format ++msgid "" ++"zeroth section has nonzero size value while ELF header has nonzero shnum " ++"value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3427 ++#, c-format ++msgid "" ++"zeroth section has nonzero link value while ELF header does not signal " ++"overflow in shstrndx\n" ++msgstr "" ++ ++#: ../src/elflint.c:3444 ++#, c-format ++msgid "cannot get section header for section [%2zu] '%s': %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3453 ++#, c-format ++msgid "section [%2zu]: invalid name\n" ++msgstr "" ++ ++#: ../src/elflint.c:3480 ++#, c-format ++msgid "section [%2d] '%s' has wrong type: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3496 ++#, c-format ++msgid "section [%2zu] '%s' has wrong flags: expected %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3513 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has wrong flags: expected %s and possibly %s, is %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:3531 ++#, c-format ++msgid "section [%2zu] '%s' present in object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3537 ../src/elflint.c:3569 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag set but there is no loadable segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3542 ../src/elflint.c:3574 ++#, c-format ++msgid "" ++"section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable " ++"segments\n" ++msgstr "" ++ ++#: ../src/elflint.c:3550 ++#, c-format ++msgid "" ++"section [%2zu] '%s' is extension section index table in non-object file\n" ++msgstr "" ++ ++#: ../src/elflint.c:3593 ++#, c-format ++msgid "section [%2zu] '%s': size not multiple of entry size\n" ++msgstr "" ++ ++#: ../src/elflint.c:3598 ++#, c-format ++msgid "cannot get section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:3608 ++#, c-format ++msgid "section [%2zu] '%s' has unsupported type %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3622 ++#, c-format ++msgid "" ++"section [%2zu] '%s' contains invalid processor-specific flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3629 ++#, c-format ++msgid "section [%2zu] '%s' contains unknown flag(s) %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:3637 ++#, c-format ++msgid "section [%2zu] '%s': thread-local data sections address not zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3645 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in link value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3650 ++#, c-format ++msgid "section [%2zu] '%s': invalid section reference in info value\n" ++msgstr "" ++ ++#: ../src/elflint.c:3657 ++#, c-format ++msgid "section [%2zu] '%s': strings flag set without merge flag\n" ++msgstr "" ++ ++#: ../src/elflint.c:3662 ++#, c-format ++msgid "section [%2zu] '%s': merge flag set but entry size is zero\n" ++msgstr "" ++ ++#: ../src/elflint.c:3680 ++#, c-format ++msgid "section [%2zu] '%s' has unexpected type %d for an executable section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3689 ++#, c-format ++msgid "section [%2zu] '%s' is both executable and writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:3716 ++#, c-format ++msgid "" ++"section [%2zu] '%s' not fully contained in segment of program header entry %" ++"d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3724 ++#, 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:3733 ++#, 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:3744 ++#, c-format ++msgid "section [%2zu] '%s' is executable in nonexecutable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3754 ++#, c-format ++msgid "section [%2zu] '%s' is writable in unwritable segment %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3764 ++#, c-format ++msgid "" ++"section [%2zu] '%s': alloc flag set but section not in any loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:3770 ++#, 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:3778 ++#, c-format ++msgid "" ++"section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n" ++msgstr "" ++ ++#: ../src/elflint.c:3829 ++#, c-format ++msgid "more than one version symbol table present\n" ++msgstr "" ++ ++#: ../src/elflint.c:3852 ++#, c-format ++msgid "INTERP program header entry but no .interp section\n" ++msgstr "" ++ ++#: ../src/elflint.c:3863 ++#, c-format ++msgid "" ++"loadable segment [%u] is executable but contains no executable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3869 ++#, c-format ++msgid "loadable segment [%u] is writable but contains no writable sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:3880 ++#, c-format ++msgid "" ++"no .gnu.versym section present but .gnu.versym_d or .gnu.versym_r section " ++"exist\n" ++msgstr "" ++ ++#: ../src/elflint.c:3893 ++#, c-format ++msgid "duplicate version index %d\n" ++msgstr "" ++ ++#: ../src/elflint.c:3907 ++#, c-format ++msgid ".gnu.versym section present without .gnu.versym_d or .gnu.versym_r\n" ++msgstr "" ++ ++#: ../src/elflint.c:3956 ++#, c-format ++msgid "phdr[%d]: unknown core file note type % at offset %\n" ++msgstr "" ++ ++#: ../src/elflint.c:3960 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown core file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3983 ++#, c-format ++msgid "phdr[%d]: unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:3987 ++#, c-format ++msgid "" ++"section [%2d] '%s': unknown object file note type % at offset %Zu\n" ++msgstr "" ++ ++#: ../src/elflint.c:4004 ++#, c-format ++msgid "phdr[%d]: no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4023 ++#, c-format ++msgid "phdr[%d]: cannot get content of note section: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4026 ++#, c-format ++msgid "phdr[%d]: extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4047 ++#, c-format ++msgid "section [%2d] '%s': no note entries defined for the type of file\n" ++msgstr "" ++ ++#: ../src/elflint.c:4054 ++#, c-format ++msgid "section [%2d] '%s': cannot get content of note section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4057 ++#, c-format ++msgid "section [%2d] '%s': extra % bytes after last note\n" ++msgstr "" ++ ++#: ../src/elflint.c:4075 ++#, c-format ++msgid "" ++"only executables, shared objects, and core files can have program headers\n" ++msgstr "" ++ ++#: ../src/elflint.c:4090 ++#, c-format ++msgid "cannot get program header entry %d: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4099 ++#, c-format ++msgid "program header entry %d: unknown program header entry type %#\n" ++msgstr "" ++ ++#: ../src/elflint.c:4110 ++#, c-format ++msgid "more than one INTERP entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4118 ++#, c-format ++msgid "more than one TLS entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4125 ++#, c-format ++msgid "static executable cannot have dynamic sections\n" ++msgstr "" ++ ++#: ../src/elflint.c:4139 ++#, c-format ++msgid "dynamic section reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4142 ++#, c-format ++msgid "dynamic section size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4152 ++#, c-format ++msgid "more than one GNU_RELRO entry in program header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4173 ++#, c-format ++msgid "loadable segment GNU_RELRO applies to is not writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4176 ++#, c-format ++msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" ++msgstr "" ++ ++#: ../src/elflint.c:4184 ../src/elflint.c:4207 ++#, c-format ++msgid "%s segment not contained in a loaded segment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4213 ++#, c-format ++msgid "program header offset in ELF header and PHDR entry do not match" ++msgstr "" ++ ++#: ../src/elflint.c:4237 ++#, c-format ++msgid "call frame search table reference in program header has wrong offset\n" ++msgstr "" ++ ++#: ../src/elflint.c:4240 ++#, c-format ++msgid "call frame search table size mismatch in program and section header\n" ++msgstr "" ++ ++#: ../src/elflint.c:4253 ++#, c-format ++msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" ++msgstr "" ++ ++#: ../src/elflint.c:4261 ++#, c-format ++msgid "call frame search table must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4264 ++#, c-format ++msgid "section [%2zu] '%s' must be allocated\n" ++msgstr "" ++ ++#: ../src/elflint.c:4268 ++#, c-format ++msgid "call frame search table must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4271 ++#, c-format ++msgid "section [%2zu] '%s' must not be writable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4276 ++#, c-format ++msgid "call frame search table must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4279 ++#, c-format ++msgid "section [%2zu] '%s' must not be executable\n" ++msgstr "" ++ ++#: ../src/elflint.c:4290 ++#, c-format ++msgid "program header entry %d: file size greater than memory size\n" ++msgstr "" ++ ++#: ../src/elflint.c:4297 ++#, c-format ++msgid "program header entry %d: alignment not a power of 2\n" ++msgstr "" ++ ++#: ../src/elflint.c:4300 ++#, c-format ++msgid "" ++"program header entry %d: file offset and virtual address not module of " ++"alignment\n" ++msgstr "" ++ ++#: ../src/elflint.c:4313 ++#, c-format ++msgid "" ++"executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " ++"program header entry" ++msgstr "" ++ ++#: ../src/elflint.c:4347 ++#, c-format ++msgid "cannot read ELF header: %s\n" ++msgstr "" ++ ++#: ../src/elflint.c:4373 ++#, c-format ++msgid "text relocation flag set but not needed\n" ++msgstr "" ++ ++#: ../src/addr2line.c:66 ++msgid "Output selection options:" ++msgstr "" ++ ++#: ../src/addr2line.c:67 ++msgid "Show only base names of source files" ++msgstr "" ++ ++#: ../src/addr2line.c:69 ++msgid "Show absolute file names using compilation directory" ++msgstr "" ++ ++#: ../src/addr2line.c:70 ++msgid "Also show function names" ++msgstr "" ++ ++#: ../src/addr2line.c:71 ++msgid "Also show symbol or section names" ++msgstr "" ++ ++#: ../src/addr2line.c:73 ++msgid "Treat addresses as offsets relative to NAME section." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/addr2line.c:84 ++msgid "" ++"Locate source files and line information for ADDRs (in a.out by default)." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/addr2line.c:88 ++msgid "[ADDR...]" ++msgstr "" ++ ++#: ../src/addr2line.c:405 ++#, c-format ++msgid "Section syntax requires exactly one module" ++msgstr "" ++ ++#: ../src/addr2line.c:428 ++#, c-format ++msgid "offset %# lies outside section '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:461 ++#, c-format ++msgid "cannot find symbol '%s'" ++msgstr "" ++ ++#: ../src/addr2line.c:466 ++#, c-format ++msgid "offset %# lies outside contents of '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:70 ++msgid "Input Selection:" ++msgstr "" ++ ++#: ../src/findtextrel.c:71 ++msgid "Prepend PATH to all file names" ++msgstr "" ++ ++#: ../src/findtextrel.c:73 ++msgid "Use PATH as root of debuginfo hierarchy" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/findtextrel.c:80 ++msgid "Locate source of text relocations in FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/findtextrel.c:236 ../src/elfcmp.c:578 ../src/ranlib.c:186 ++#, c-format ++msgid "cannot create ELF descriptor for '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:246 ++#, c-format ++msgid "cannot get ELF header '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:257 ++#, c-format ++msgid "'%s' is not a DSO or PIE" ++msgstr "" ++ ++#: ../src/findtextrel.c:274 ++#, c-format ++msgid "getting get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:292 ++#, c-format ++msgid "cannot read dynamic section: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:307 ++#, c-format ++msgid "no text relocations reported in '%s'" ++msgstr "" ++ ++#: ../src/findtextrel.c:319 ++#, c-format ++msgid "while reading ELF file" ++msgstr "" ++ ++#: ../src/findtextrel.c:328 ../src/findtextrel.c:345 ++#, c-format ++msgid "cannot get program header index at offset %d: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:397 ++#, c-format ++msgid "cannot get section header of section %Zu: %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:409 ++#, c-format ++msgid "cannot get symbol table section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:429 ../src/findtextrel.c:452 ++#, c-format ++msgid "cannot get relocation at index %d in section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/findtextrel.c:517 ++#, c-format ++msgid "%s not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:570 ++#, c-format ++msgid "" ++"the file containing the function '%s' is not compiled with -fpic/-fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:577 ../src/findtextrel.c:597 ++#, c-format ++msgid "" ++"the file containing the function '%s' might not be compiled with -fpic/-" ++"fPIC\n" ++msgstr "" ++ ++#: ../src/findtextrel.c:585 ++#, 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:605 ++#, c-format ++msgid "" ++"a relocation modifies memory at offset %llu in a write-protected segment\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:69 ++msgid "Control options:" ++msgstr "" ++ ++#: ../src/elfcmp.c:70 ++msgid "" ++"Control treatment of gaps in loadable segments [ignore|match] (default: " ++"ignore)" ++msgstr "" ++ ++#: ../src/elfcmp.c:72 ++msgid "Ignore permutation of buckets in SHT_HASH section" ++msgstr "" ++ ++#: ../src/elfcmp.c:73 ++msgid "Output nothing; yield exit status only" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/elfcmp.c:80 ++msgid "Compare relevant parts of two ELF files for equality." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/elfcmp.c:84 ++msgid "FILE1 FILE2" ++msgstr "" ++ ++#: ../src/elfcmp.c:140 ++msgid "Invalid number of parameters.\n" ++msgstr "" ++ ++#: ../src/elfcmp.c:168 ../src/elfcmp.c:173 ++#, c-format ++msgid "cannot get ELF header of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:190 ++#, c-format ++msgid "%s %s diff: ELF header" ++msgstr "" ++ ++#: ../src/elfcmp.c:248 ++#, c-format ++msgid "%s %s differ: section header" ++msgstr "" ++ ++#: ../src/elfcmp.c:276 ../src/elfcmp.c:282 ++#, c-format ++msgid "cannot get content of section %zu in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:298 ../src/elfcmp.c:304 ++#, c-format ++msgid "cannot get symbol in '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:325 ++#, c-format ++msgid "%s %s differ: symbol table [%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:328 ++#, c-format ++msgid "%s %s differ: symbol table [%zu,%zu]" ++msgstr "" ++ ++#: ../src/elfcmp.c:376 ++#, c-format ++msgid "%s %s differ: section [%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:380 ++#, c-format ++msgid "%s %s differ: section [%zu,%zu] '%s' content" ++msgstr "" ++ ++#: ../src/elfcmp.c:396 ++#, c-format ++msgid "%s %s differ: unequal amount of important sections" ++msgstr "" ++ ++#: ../src/elfcmp.c:430 ../src/elfcmp.c:435 ++#, c-format ++msgid "cannot load data of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:454 ../src/elfcmp.c:460 ++#, c-format ++msgid "cannot get program header entry %d of '%s': %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:466 ++#, c-format ++msgid "%s %s differ: program header %d" ++msgstr "" ++ ++#: ../src/elfcmp.c:491 ++#, c-format ++msgid "%s %s differ: gap" ++msgstr "" ++ ++#: ../src/elfcmp.c:550 ++#, c-format ++msgid "Invalid value '%s' for --gaps parameter." ++msgstr "" ++ ++#: ../src/elfcmp.c:583 ++#, c-format ++msgid "cannot create EBL descriptor for '%s'" ++msgstr "" ++ ++#: ../src/elfcmp.c:601 ++#, c-format ++msgid "cannot get section header of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:611 ++#, c-format ++msgid "cannot get content of section %zu: %s" ++msgstr "" ++ ++#: ../src/elfcmp.c:621 ../src/elfcmp.c:635 ++#, c-format ++msgid "cannot get relocation: %s" ++msgstr "" ++ ++#. Short description of program. ++#: ../src/ranlib.c:74 ++msgid "Generate an index to speed access to archives." ++msgstr "" ++ ++#. Strings for arguments in help texts. ++#: ../src/ranlib.c:77 ++msgid "ARCHIVE" ++msgstr "" ++ ++#: ../src/ranlib.c:116 ++#, c-format ++msgid "Archive name required" ++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/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 "" ++ ++#. Short description of program. ++#: ../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 ../src/strings.c:680 ++#, c-format ++msgid "re-mmap failed" ++msgstr "" ++ ++#: ../src/strings.c:653 ++#, c-format ++msgid "mprotect failed" ++msgstr "" ++ ++#: ../src/unstrip.c:77 ++msgid "Match MODULE against file names, not module names" ++msgstr "" ++ ++#: ../src/unstrip.c:78 ++msgid "Silently skip unfindable files" ++msgstr "" ++ ++#: ../src/unstrip.c:81 ++msgid "Place output into FILE" ++msgstr "" ++ ++#: ../src/unstrip.c:83 ++msgid "Create multiple output files under DIRECTORY" ++msgstr "" ++ ++#: ../src/unstrip.c:84 ++msgid "Use module rather than file names" ++msgstr "" ++ ++#: ../src/unstrip.c:86 ++msgid "Create output for modules that have no separate debug information" ++msgstr "" ++ ++#: ../src/unstrip.c:89 ++msgid "Apply relocations to section contents in ET_REL files" ++msgstr "" ++ ++#: ../src/unstrip.c:91 ++msgid "Only list module and file names, build IDs" ++msgstr "" ++ ++#: ../src/unstrip.c:133 ++#, c-format ++msgid "-d option specified twice" ++msgstr "" ++ ++#: ../src/unstrip.c:165 ++#, c-format ++msgid "only one of -o or -d allowed" ++msgstr "" ++ ++#: ../src/unstrip.c:174 ++#, c-format ++msgid "-n cannot be used with explicit files or -o or -d" ++msgstr "" ++ ++#: ../src/unstrip.c:189 ++#, c-format ++msgid "output directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:198 ++#, c-format ++msgid "exactly two file arguments are required" ++msgstr "" ++ ++#: ../src/unstrip.c:204 ++#, c-format ++msgid "-m, -a, -R, and -i options not allowed with explicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:217 ++#, c-format ++msgid "-o or -d is required when using implicit files" ++msgstr "" ++ ++#: ../src/unstrip.c:253 ++#, c-format ++msgid "cannot create ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:258 ++#, c-format ++msgid "cannot copy ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:263 ../src/unstrip.c:1816 ++#, c-format ++msgid "cannot create program headers: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:269 ++#, c-format ++msgid "cannot copy program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:279 ++#, c-format ++msgid "cannot copy section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:282 ../src/unstrip.c:1504 ++#, c-format ++msgid "cannot get section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:284 ../src/unstrip.c:1506 ++#, c-format ++msgid "cannot copy section data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:308 ++#, c-format ++msgid "cannot create directory '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:348 ../src/unstrip.c:762 ../src/unstrip.c:1539 ++#, c-format ++msgid "cannot get symbol table entry: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:364 ../src/unstrip.c:579 ../src/unstrip.c:600 ++#: ../src/unstrip.c:612 ../src/unstrip.c:1560 ../src/unstrip.c:1690 ++#: ../src/unstrip.c:1714 ++#, c-format ++msgid "cannot update symbol table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:381 ../src/unstrip.c:431 ../src/unstrip.c:561 ++#: ../src/unstrip.c:1208 ../src/unstrip.c:1524 ../src/unstrip.c:1719 ++#: ../src/unstrip.c:1790 ++#, c-format ++msgid "cannot update section header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:407 ../src/unstrip.c:418 ++#, c-format ++msgid "cannot update relocation: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:506 ++#, c-format ++msgid "cannot get symbol version: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:518 ++#, c-format ++msgid "unexpected section type in [%Zu] with sh_link to symtab" ++msgstr "" ++ ++#: ../src/unstrip.c:768 ++#, c-format ++msgid "invalid string offset in symbol [%Zu]" ++msgstr "" ++ ++#: ../src/unstrip.c:910 ../src/unstrip.c:1247 ++#, c-format ++msgid "cannot read section [%Zu] name: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:951 ../src/unstrip.c:970 ../src/unstrip.c:1003 ++#, c-format ++msgid "cannot read '.gnu.prelink_undo' section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:991 ++#, c-format ++msgid "invalid contents in '%s' section" ++msgstr "" ++ ++#: ../src/unstrip.c:1046 ../src/unstrip.c:1369 ++#, c-format ++msgid "cannot find matching section for [%Zu] '%s'" ++msgstr "" ++ ++#: ../src/unstrip.c:1170 ../src/unstrip.c:1185 ../src/unstrip.c:1450 ++#, c-format ++msgid "cannot add section name to string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1194 ++#, c-format ++msgid "cannot update section header string table data: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1222 ../src/unstrip.c:1226 ++#, c-format ++msgid "cannot get section header string table section index: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1230 ../src/unstrip.c:1234 ../src/unstrip.c:1465 ++#, c-format ++msgid "cannot get section count: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1292 ../src/unstrip.c:1384 ++#, c-format ++msgid "cannot read section header string table: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1444 ++#, c-format ++msgid "cannot add new section: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1547 ++#, c-format ++msgid "symbol [%Zu] has invalid section index" ++msgstr "" ++ ++#: ../src/unstrip.c:1799 ++#, c-format ++msgid "cannot get ELF header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1826 ++#, c-format ++msgid "cannot update program header: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1831 ../src/unstrip.c:1910 ++#, c-format ++msgid "cannot write output file: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1879 ++#, c-format ++msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1882 ++#, c-format ++msgid "" ++"DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" ++msgstr "" ++ ++#: ../src/unstrip.c:1901 ../src/unstrip.c:1941 ../src/unstrip.c:1953 ++#: ../src/unstrip.c:2033 ++#, c-format ++msgid "cannot create ELF descriptor: %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1959 ++#, c-format ++msgid "'%s' and '%s' do not seem to match" ++msgstr "" ++ ++#: ../src/unstrip.c:1990 ++#, c-format ++msgid "cannot find stripped file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:1994 ++#, c-format ++msgid "cannot open stripped file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2009 ++#, c-format ++msgid "cannot find debug file for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2013 ++#, c-format ++msgid "cannot open debug file '%s' for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2026 ++#, c-format ++msgid "module '%s' file '%s' is not stripped" ++msgstr "" ++ ++#: ../src/unstrip.c:2057 ++#, c-format ++msgid "cannot cache section addresses for module '%s': %s" ++msgstr "" ++ ++#: ../src/unstrip.c:2190 ++#, c-format ++msgid "no matching modules found" ++msgstr "" ++ ++#: ../src/unstrip.c:2199 ++#, c-format ++msgid "matched more than one module" ++msgstr "" ++ ++#: ../src/unstrip.c:2246 ++msgid "" ++"STRIPPED-FILE DEBUG-FILE\n" ++"[MODULE...]" ++msgstr "" ++ ++#: ../src/unstrip.c:2247 ++msgid "" ++"Combine stripped files with separate symbols and debug information.\vThe " ++"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." ++msgstr "" ++ ++#: ../src/objdump.c:61 ++msgid "Mode selection:" ++msgstr "" ++ ++#: ../src/objdump.c:62 ++msgid "Display relocation information." ++msgstr "" ++ ++#: ../src/objdump.c:64 ++msgid "Display the full contents of all sections requested" ++msgstr "" ++ ++#: ../src/objdump.c:66 ++msgid "Display assembler code of executable sections" ++msgstr "" ++ ++#: ../src/objdump.c:68 ++msgid "Output option selection:" ++msgstr "" ++ ++#: ../src/objdump.c:70 ++msgid "Only display information for section NAME." ++msgstr "" ++ ++#. Short description of program. ++#: ../src/objdump.c:76 ++msgid "Show information from FILEs (a.out by default)." ++msgstr "" ++ ++#: ../src/objdump.c:274 ../src/objdump.c:286 ++#, c-format ++msgid "while close `%s'" ++msgstr "" ++ ++#: ../src/objdump.c:510 ++#, c-format ++msgid "" ++"\n" ++"RELOCATION RECORDS FOR [%s]:\n" ++"%-*s TYPE VALUE\n" ++msgstr "" ++ ++#: ../src/objdump.c:513 ++msgid "OFFSET" ++msgstr "" ++ ++#: ../src/objdump.c:576 ++#, c-format ++msgid "Contents of section %s:\n" ++msgstr "" ++ ++#: ../src/objdump.c:676 ++#, c-format ++msgid "cannot disassemble" ++msgstr "" +diff --git a/src/ChangeLog b/src/ChangeLog +index 0bba5ca..0b7c51a 100644 +--- a/src/ChangeLog ++++ b/src/ChangeLog +@@ -1,3 +1,435 @@ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++ * readelf.c (print_debug_frame_section): Add a cast to avoid sign ++ mismatch in comparison. ++ ++2010-02-02 Roland McGrath ++ ++ * readelf.c (print_encoding_base): Handle DW_EH_PE_absptr (zero). ++ (read_encoded): Likewise. ++ (print_debug_frame_section): Check for bogus augmentation length. ++ For P augmentation, use read_encoded, print the encoding description, ++ and use hex for unsigned values. ++ ++2010-01-15 Roland McGrath ++ ++ * ar.c: Include . ++ * elflint.c: Likewise. ++ * readelf.c: Likewise. ++ * strip.c: Likewise. ++ * unstrip.c: Likewise ++ ++2010-01-07 Roland McGrath ++ ++ * readelf.c (print_ehdr): Handle PN_XNUM. ++ (phnum): New static variable. ++ (process_elf_file): Set it with elf_getphdrnum. ++ (print_phdr): Use phnum instead of EHDR->e_phnum. ++ (print_dynamic, handle_notes): Likewise. ++ (handle_relocs_rel, handle_relocs_rela): Likewise. ++ ++ * elfcmp.c (main): Use elf_getshdrnum and elf_getphdrnum. ++ ++ * elflint.c (phnum): New static variable. ++ (check_elf_header): Set it, handling PN_XNUM. ++ Use that in place of EHDR->e_phnum throughout. ++ (check_symtab, check_reloc_shdr, check_dynamic): Likewise. ++ (unknown_dependency_p, check_sections, check_program_header): Likewise. ++ ++2010-01-05 Roland McGrath ++ ++ * readelf.c (dwarf_attr_string): Match DW_AT_GNU_vector and ++ DW_AT_GNU_template_name. ++ ++2010-01-04 Roland McGrath ++ ++ * readelf.c (handle_notes_data): Grab NT_AUXV only for name "CORE". ++ (handle_core_note): Pass NHDR and NAME to ebl_core_note. ++ (handle_core_item): Handle .format of '\n' as \n-separated strings. ++ ++ * readelf.c (implicit_debug_sections): New variable. ++ (parse_opt): Set it instead of print_debug_sections for -a. ++ OR them together for print_debug check. ++ (print_debug): OR them together for section check. ++ ++ * readelf.c (options): Repartition into set implied by -a and others. ++ Correct -a text to match reality. ++ ++ * readelf.c (struct section_argument): Add bool member 'implicit'. ++ (parse_opt): Set it for -a cases, clear it for -x args. ++ (for_each_section_argument): Don't complain about a missing section by ++ name if it's implicit. ++ ++2009-11-16 Roland McGrath ++ ++ * readelf.c (print_string_section): Punt SHT_NOBITS like empty ++ sections, just as dump_data_section already does. ++ ++2009-09-21 Ulrich Drepper ++ ++ * elflint.c (special_sections): Allow MERGE and STRINGS flags to be ++ set for .comment section. ++ Patch by Mark Wielaard . ++ ++2009-09-08 Roland McGrath ++ ++ * ar.c (main): Fix typo in message format. ++ ++2009-08-21 Roland McGrath ++ ++ * readelf.c (attr_callback): Use print_block only when we don't use ++ print_ops. ++ ++2009-08-14 Roland McGrath ++ ++ * ar.c (do_oper_extract): Use pathconf instead of statfs. ++ ++2009-08-01 Ulrich Drepper ++ ++ * debugpred.h: Add two most const. ++ ++2009-07-26 Mark Wielaard ++ ++ * elflint.c (check_note_data): Recognize NT_GNU_GOLD_VERSION. ++ ++2009-07-25 Mark Wielaard ++ ++ * Makefile.am (addr2line_LDADD): Add $(libelf). ++ ++2009-07-24 Roland McGrath ++ ++ * readelf.c (print_block): New function. ++ (print_ops): Use it. ++ (attr_callback): Use it for DW_FORM_block* forms. ++ ++2009-07-20 Mark Wielaard ++ ++ * readelf.c (print_ops): Add handling of DW_OP_implicit_value ++ and DW_OP_stack_value. ++ ++2009-07-14 Ulrich Drepper ++ ++ * elflint.c (check_elf_header): Allow Linux ABI. ++ (check_symtab): Handle STB_GNU_UNIQUE. ++ ++2009-07-08 Mark Wielaard ++ ++ * readelf.c (attr_callback): Handle DW_Form constants for ++ DW_AT_data_member_location. ++ ++2009-07-06 Roland McGrath ++ ++ * readelf.c (register_info): New function. Handle unknown register #s. ++ (print_cfa_program): Use it. ++ (handle_core_register, handle_core_registers): Likewise. ++ ++2009-06-28 Roland McGrath ++ ++ * readelf.c (print_address_names): New static variable. ++ (options, parse_opt): Grok -N/--numeric-addresses to clear it. ++ (format_dwarf_addr): Don't look up name if !print_address_names. ++ ++2009-06-13 Ulrich Drepper ++ ++ * ldgeneric.c: Don't use deprecated libelf functions. ++ * nm.c: Likewise. ++ * objdump.c: Likewise. ++ * readelf.c: Likewise. ++ * size.c: Likewise. ++ * strip.c: Likewise. ++ * unstrip.c: Likewise. ++ * ld.h: Fix up comment. ++ ++2009-06-01 Ulrich Drepper ++ ++ * readelf.c (print_relocs): Expect ELF header argument and pass on ++ to handle_relocs_rel* functions. Adjust caller. ++ (handle_relocs_rel): Add ELF header argument. Add special case for ++ the IRELATIVE relocations in statically linked executables. ++ (handle_relocs_rela): Likewise. ++ ++2009-04-29 Ulrich Drepper ++ ++ * elflint.c (check_symtab): Add tests of st_other field. ++ ++2009-04-23 Ulrich Drepper ++ ++ * Makefile [BUILD_STATIC] (libdw): Add $(zip_LIBS). ++ ++2009-04-20 Roland McGrath ++ ++ * addr2line.c (print_dwarf_function): Honor -s and -A for file names ++ of inline call sites. ++ ++ * addr2line.c (just_section): New variable. ++ (adjust_to_section): New function, broken out of ... ++ (handle_address): ... here. ++ (options, parse_opt): Add -j/--section=NAME to set it. ++ ++2009-04-15 Roland McGrath ++ ++ * readelf.c (print_debug_frame_section): Check for DW_CIE_ID_64 in ++ 64-bit format header, DW_CIE_ID_32 in 32-bit format header. ++ ++2009-04-14 Roland McGrath ++ ++ * readelf.c (print_attributes): Treat SHT_ARM_ATTRIBUTES on EM_ARM ++ like SHT_GNU_ATTRIBUTES. ++ ++ * readelf.c (handle_core_registers): Fix error message. ++ ++ * strip.c (handle_elf: check_preserved): Don't note any change when ++ .debug_data is already filled from a previous pass. ++ ++2009-02-05 Ulrich Drepper ++ ++ * objdump.c (show_relocs_x): Minor cleanups. ++ ++ * readelf.c (print_cfa_program): Correct a few labels. ++ Print first DW_CFA_expression and DW_CFA_val_expression parameter ++ as register. ++ ++2009-02-01 Ulrich Drepper ++ ++ * objdump.c (show_relocs_rel, show_relocs_rela): Split common parts ++ into ... ++ (show_relocs_x): ...here. New function. ++ (show_relocs): Better spacing in output. ++ ++ * objdump.c (show_relocs_rela): Show offsets as signed values. ++ ++ * ar.c (main): Fix recognition of invalid modes for a, b, i modifiers. ++ Improve some error messages. ++ Use program_invocation_short_name instead of AR macro. ++ * Makefile.am (CFLAGS_ar): Remove. ++ * elflint.c (parse_opt): ARGP_HELP_EXIT_ERR does nothing for argp_help. ++ * objdump.c (parse_opt): Likewise. ++ * readelf.c (parse_opt): Likewise. ++ ++2009-01-27 Roland McGrath ++ ++ * readelf.c (print_ops): Notice short length, don't overrun buffer ++ (still need to fix LEB128). ++ ++ * readelf.c (print_ops): Fix DW_OP_call[24] decoding. ++ ++ * readelf.c (print_ops): Print (empty)\n when LEN == 0. ++ ++2009-01-24 Ulrich Drepper ++ ++ * readelf.c (print_debug_frame_section): Fix computation of vma_base ++ for PC-relative mode. ++ ++2009-01-23 Ulrich Drepper ++ ++ * size.c (process_file): When handling archive, close file descriptor ++ here. For unknown file format also close file descriptor. ++ (handle_ar): Don't close file descriptor here. ++ ++ * readelf.c (parse_opt): Move code to add to dump_data_sections and ++ string_sections list in local function add_dump_section. Adjust 'x' ++ key handling. For 'a' key add .strtab, .dynstr, and .comment section ++ to string_sections list. ++ ++2009-01-22 Roland McGrath ++ ++ * readelf.c (print_phdr): Don't print section mapping when no sections. ++ ++ * Makefile.am (AM_CFLAGS): Pass -Wno-format for *_no_Wformat. ++ ++ * readelf.c (print_debug_frame_section): Initialize IS_SIGNED to false ++ and reset it only for the 'true' cases. ++ ++ * Makefile.am (addr2line_no_Wformat): New variable. ++ ++ * readelf.c (print_debug_frame_section): Use t instead of j formats ++ for ptrdiff_t OFFSET. ++ ++2009-01-21 Ulrich Drepper ++ ++ * elflint.c (check_program_header): Fix typo in .eh_frame_hdr section ++ test. Handle debuginfo files. ++ (check_exception_data): First sanity test. ++ ++2009-01-17 Ulrich Drepper ++ ++ * readelf.c (print_debug_exception_table): Show target of ar_disp ++ field. ++ ++ * elflint.c (check_program_header): Add most consistency checks for ++ PT_GNU_EH_FRAME entry. ++ ++ * addr2line.c: Use ARGP_PROGRAM_VERSION_HOOK_DEF and ++ ARGP_PROGRAM_BUG_ADDRESS_DEF. ++ * 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. ++ ++2009-01-16 Ulrich Drepper ++ ++ * elflint.c (check_program_header): Check that PT_GNU_EH_FRAME entry ++ matches .eh_frame_hdr section, if it is available. Also check that ++ the segment is allocated, not writable, not executable. ++ ++ * readelf.c: Add -e option. Dump exception and unwind related ++ sections. Add -e to -a. ++ (print_encoding_base): Handle DW_EH_PE_omit. ++ (print_debug_exception_table): Beginning of support. ++ (print_debug): Hook up print_debug_exception_table for ++ .gcc_except_table sections. ++ ++ * readelf.c (print_debug_frame_section): Some fixes for last change. ++ ++2009-01-15 Ulrich Drepper ++ ++ * readelf.c (print_encoding): Now a toplevel function. ++ (print_relinfo): Likewise. ++ (print_encoding_base): Broken out of print_debug_frame_section. ++ (print_debug_frame_section): Print different header for .eh_frame ++ sections. Fix recognition of matching CIEs in .debug_frame sections. ++ Print absolute offset for PC-relative FDE locations. Don't print ++ table header for FDEs if the table is empty. ++ (read_encoded): New function. ++ (print_debug_frame_hdr_section): New function. ++ (print_debug): Hook up print_debug_frame_hdr_section for .eh_frame_hdr ++ sections. ++ ++ * readelf.c (handle_relocs_rel): Print section number. ++ (print_debug_abbrev_section): Likewise. ++ (print_debug_aranges_section): Likewise. ++ (print_debug_ranges_section): Likewise. ++ (print_debug_info_section): Likewise. ++ (print_debug_line_section): Likewise. ++ (print_debug_loc_section): Likewise. ++ (print_debug_macinfo_section): Likewise. ++ (print_debug_pubnames_section): Likewise. ++ (print_debug_str_section): Likewise. ++ ++2009-01-10 Ulrich Drepper ++ ++ * strings.c (read_block): Fix typo in error message string. ++ ++2009-01-07 Ulrich Drepper ++ ++ * ld.c (ld_new_searchdir): Fix adding to search path list. ++ ++2009-01-06 Ulrich Drepper ++ ++ * readelf.c: Implement call frame debug section dumping. ++ ++2009-01-05 Roland McGrath ++ ++ * elfcmp.c: Exit with status 2 for errors (like cmp, diff, grep). ++ Status 1 (aka EXIT_FAILURE) is only for completed OK but not equal. ++ ++2009-01-01 Ulrich Drepper ++ ++ * 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. ++ ++2008-12-11 Roland McGrath ++ ++ * 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 ++ ++ * readelf.c (count_dwflmod, process_file): Don't presume encoding of ++ nonzero OFFSET argument to dwfl_getmodules. ++ ++2008-08-07 Roland McGrath ++ ++ * 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 ++ ++ * readelf.c (handle_core_item): Handle 'B' type for 1-origin bitset. ++ For 'b' and 'B', print or ~ 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 ++ ++ * readelf.c (handle_core_items): Handle ELF_T_ADDR. ++ ++2008-04-10 Roland McGrath ++ ++ * 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 ++ ++ * 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 ++ ++ * elflint.c (check_sections): Check that executability and writability ++ of sections is reflected in segment p_flags. ++ ++2008-03-26 Roland McGrath ++ ++ * 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 + + * readelf.c (print_attributes): Add a cast. +diff --git a/src/Makefile.am b/src/Makefile.am +index f72bb45..afd3bd3 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. ++## Copyright (C) 1996-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 +@@ -24,24 +24,17 @@ + ## Network licensing program, please visit 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.. ++include $(top_srcdir)/config/eu.am ++DEFS += $(YYDEBUG) -DDEBUGPRED=@DEBUGPRED@ \ ++ -DSRCDIR=\"$(shell cd $(srcdir);pwd)\" -DOBJDIR=\"$(shell pwd)\" ++INCLUDES += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ ++ -I$(srcdir)/../libdw -I$(srcdir)/../libdwfl \ ++ -I$(srcdir)/../libasm + + AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw + ++no_mudflap.os = -fmudflap ++ + YACC = @YACC@ -d + AM_YFLAGS = -pld + AM_LFLAGS = -Pld -olex.yy.c +@@ -70,8 +63,6 @@ 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 +@@ -87,15 +78,11 @@ 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 ++CLEANFILES += make-debug-archive + + if BUILD_STATIC + libasm = ../libasm/libasm.a +-libdw = ../libdw/libdw.a $(libelf) $(libebl) -ldl ++libdw = ../libdw/libdw.a $(zip_LIBS) $(libelf) $(libebl) -ldl + libelf = ../libelf/libelf.a + else + libasm = ../libasm/libasm.so +@@ -108,6 +95,7 @@ libeu = ../lib/libeu.a + nm_no_Wformat = yes + size_no_Wformat = yes + strings_no_Wformat = yes ++addr2line_no_Wformat = yes + # XXX While the file is not finished, don't warn about this + ldgeneric_no_Wunused = yes + +@@ -123,13 +111,12 @@ endif + ld_LDFLAGS = -rdynamic + elflint_LDADD = $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl + findtextrel_LDADD = $(libdw) $(libelf) $(libmudflap) +-addr2line_LDADD = $(libdw) $(libmudflap) ++addr2line_LDADD = $(libdw) $(libelf) $(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 +@@ -151,16 +138,6 @@ libld_elf_i386.so: libld_elf_i386_pic.a 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 +@@ -183,7 +160,7 @@ installcheck-binPROGRAMS: $(bin_PROGRAMS) + done; \ + done; rm -f c$${pid}_.???; exit $$bad + +-CLEANFILES += none_ld.os $(ld_modules:.c=.os) *.gcno *.gcda *.gconv ++CLEANFILES += none_ld.os $(ld_modules:.c=.os) *.gconv + + MAINTAINERCLEANFILES = ldlex.c ldscript.c ldscript.h + +diff --git a/src/addr2line.c b/src/addr2line.c +index 4b1d13e..99264b0 100644 +--- a/src/addr2line.c ++++ b/src/addr2line.c +@@ -1,5 +1,5 @@ + /* Locate source files and line information for given addresses +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2007, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -46,13 +46,15 @@ + #include + #include + ++#include ++ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + + /* Values for the parameters which have no short form. */ +@@ -67,6 +69,8 @@ static const struct argp_option options[] = + 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 }, ++ { "section", 'j', "NAME", 0, ++ N_("Treat addresses as offsets relative to NAME section."), 0 }, + + { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 }, + /* Unsupported options. */ +@@ -96,7 +100,7 @@ static const struct argp argp = + + + /* Handle ADDR. */ +-static void handle_address (GElf_Addr addr, Dwfl *dwfl); ++static int handle_address (const char *addr, Dwfl *dwfl); + + + /* True if only base names of files should be shown. */ +@@ -111,6 +115,9 @@ static bool show_functions; + /* True if ELF symbol or section info should be shown. */ + static bool show_symbols; + ++/* If non-null, take address parameters as relative to named section. */ ++static const char *just_section; ++ + + int + main (int argc, char *argv[]) +@@ -154,12 +161,7 @@ main (int argc, char *argv[]) + 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; ++ result = handle_address (buf, dwfl); + } + + free (buf); +@@ -167,14 +169,7 @@ main (int argc, char *argv[]) + else + { + do +- { +- char *endp; +- uintmax_t addr = strtoumax (argv[remaining], &endp, 0); +- if (endp != argv[remaining]) +- handle_address (addr, dwfl); +- else +- result = 1; +- } ++ result = handle_address (argv[remaining], dwfl); + while (++remaining < argc); + } + +@@ -191,15 +186,14 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + 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) ++parse_opt (int key, char *arg, struct argp_state *state) + { + switch (key) + { +@@ -229,6 +223,10 @@ parse_opt (int key, char *arg __attribute__ ((unused)), + show_symbols = true; + break; + ++ case 'j': ++ just_section = arg; ++ break; ++ + default: + return ARGP_ERR_UNKNOWN; + } +@@ -286,15 +284,35 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr) + DW_AT_call_column, + &attr_mem), &val) == 0) + colno = val; +- if (lineno == 0) ++ ++ const char *comp_dir = ""; ++ const char *comp_dir_sep = ""; ++ ++ if (file == NULL) ++ file = "???"; ++ else if (only_basenames) ++ file = basename (file); ++ else if (use_comp_dir && file[0] != '/') + { +- if (file != NULL) +- printf (" from %s", file); ++ const char *const *dirs; ++ size_t ndirs; ++ if (dwarf_getsrcdirs (files, &dirs, &ndirs) == 0 ++ && dirs[0] != NULL) ++ { ++ comp_dir = dirs[0]; ++ comp_dir_sep = "/"; ++ } + } ++ ++ if (lineno == 0) ++ printf (" from %s%s%s", ++ comp_dir, comp_dir_sep, file); + else if (colno == 0) +- printf (" at %s:%u", file, lineno); ++ printf (" at %s%s%s:%u", ++ comp_dir, comp_dir_sep, file, lineno); + else +- printf (" at %s:%u:%u", file, lineno, colno); ++ printf (" at %s%s%s:%u:%u", ++ comp_dir, comp_dir_sep, file, lineno, colno); + } + } + printf (" in "); +@@ -328,9 +346,139 @@ print_addrsym (Dwfl_Module *mod, GElf_Addr addr) + printf ("%s+%#" PRIx64 "\n", name, addr - s.st_value); + } + +-static void +-handle_address (GElf_Addr addr, Dwfl *dwfl) ++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 bool ++adjust_to_section (const char *name, uintmax_t *addr, Dwfl *dwfl) ++{ ++ /* 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; ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++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') ++ parsed = adjust_to_section (name, &addr, dwfl); ++ 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; ++ } ++ else if (just_section != NULL ++ && !adjust_to_section (just_section, &addr, dwfl)) ++ return 1; ++ + Dwfl_Module *mod = dwfl_addrmodule (dwfl, addr); + + if (show_functions) +@@ -372,6 +520,8 @@ handle_address (GElf_Addr addr, Dwfl *dwfl) + } + else + puts ("??:0"); ++ ++ return 0; + } + + +diff --git a/src/ar.c b/src/ar.c +index aade351..149d116 100644 +--- a/src/ar.c ++++ b/src/ar.c +@@ -1,5 +1,5 @@ + /* Create, modify, and extract from archives. +- Copyright (C) 2005, 2007 Red Hat, Inc. ++ Copyright (C) 2005-2010 Red Hat, Inc. + Written by Ulrich Drepper , 2005. + + Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -45,7 +45,7 @@ + #include + #include + #include +-#include ++#include + #include + + #include +@@ -55,7 +55,8 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; ++ + /* Prototypes for local functions. */ + static int do_oper_extract (int oper, const char *arfname, char **argv, + int argc, long int instance); +@@ -66,7 +67,7 @@ static int do_oper_insert (int oper, const char *arfname, char **argv, + + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + + /* Definitions of arguments for argp functions. */ +@@ -187,14 +188,16 @@ main (int argc, char *argv[]) + if (ipos != ipos_none) + { + /* Only valid for certain operations. */ +- if (operation == oper_extract && operation == oper_delete) ++ if (operation != oper_move && operation != oper_replace) + 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); ++ error (0, 0, gettext ("\ ++MEMBER parameter required for 'a', 'b', and 'i' modifiers")); ++ argp_help (&argp, stderr, ARGP_HELP_USAGE | ARGP_HELP_SEE, ++ program_invocation_short_name); + exit (EXIT_FAILURE); + } + +@@ -213,7 +216,8 @@ main (int argc, char *argv[]) + if (remaining == argc) + { + error (0, 0, gettext ("COUNT parameter required")); +- argp_help (&argp, stderr, ARGP_HELP_SEE, AR); ++ argp_help (&argp, stderr, ARGP_HELP_SEE, ++ program_invocation_short_name); + exit (EXIT_FAILURE); + } + +@@ -230,14 +234,14 @@ main (int argc, char *argv[]) + + if ((dont_replace_existing || allow_truncate_fname) + && unlikely (operation != oper_extract)) +- error (1, 0, gettext ("'%' is only meaningful with the 'x' option"), ++ error (1, 0, gettext ("'%c' 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); ++ error (0, 0, gettext ("archive name required")); ++ argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name); + exit (EXIT_FAILURE); + } + +@@ -286,7 +290,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -308,7 +312,8 @@ parse_opt (int key, char *arg __attribute__ ((unused)), + if (operation != oper_none) + { + error (0, 0, gettext ("More than one operation specified")); +- argp_help (&argp, stderr, ARGP_HELP_SEE, AR); ++ argp_help (&argp, stderr, ARGP_HELP_SEE, ++ program_invocation_short_name); + exit (EXIT_FAILURE); + } + +@@ -454,8 +459,21 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc, + bool found[argc]; + memset (found, '\0', sizeof (found)); + +- struct statfs f; +- f.f_namelen = 0; ++ size_t name_max = 0; ++ inline bool should_truncate_fname (void) ++ { ++ if (errno == ENAMETOOLONG && allow_truncate_fname) ++ { ++ if (name_max == 0) ++ { ++ long int len = pathconf (".", _PC_NAME_MAX); ++ if (len > 0) ++ name_max = len; ++ } ++ return name_max != 0; ++ } ++ return false; ++ } + + off_t index_off = -1; + size_t index_size = 0; +@@ -606,15 +624,14 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc, + { + int printlen = INT_MAX; + +- if (errno == ENAMETOOLONG && allow_truncate_fname +- && (f.f_namelen != 0 || statfs (".", &f) == 0)) ++ if (should_truncate_fname ()) + { + /* Try to truncate the name. First find out by how + much. */ +- printlen = f.f_namelen; +- char truncfname[f.f_namelen + 1]; ++ printlen = name_max; ++ char truncfname[name_max + 1]; + *((char *) mempcpy (truncfname, arhdr->ar_name, +- f.f_namelen)) = '\0'; ++ name_max)) = '\0'; + + xfd = open (truncfname, flags, 0600); + } +@@ -696,15 +713,14 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc, + { + int printlen = INT_MAX; + +- if (errno == ENAMETOOLONG && allow_truncate_fname +- && (f.f_namelen != 0 || statfs (".", &f) == 0)) ++ if (should_truncate_fname ()) + { + /* Try to truncate the name. First find out by how + much. */ +- printlen = f.f_namelen; +- char truncfname[f.f_namelen + 1]; ++ printlen = name_max; ++ char truncfname[name_max + 1]; + *((char *) mempcpy (truncfname, arhdr->ar_name, +- f.f_namelen)) = '\0'; ++ name_max)) = '\0'; + + if (dont_replace_existing) + { +@@ -1097,7 +1113,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, + if (fd == -1) + { + if (!suppress_create_msg) +- fprintf (stderr, "%s: creating %s\n", AR, arfname); ++ fprintf (stderr, "%s: creating %s\n", ++ program_invocation_short_name, arfname); + + goto no_old; + } +@@ -1211,7 +1228,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, + if (found[cnt] == NULL) + { + fprintf (stderr, gettext ("%s: no entry %s in archive!\n"), +- AR, argv[cnt]); ++ program_invocation_short_name, argv[cnt]); + status = 1; + } + +diff --git a/src/debugpred.h b/src/debugpred.h +index 867f4ac..41d4679 100644 +--- a/src/debugpred.h ++++ b/src/debugpred.h +@@ -30,7 +30,7 @@ + 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; ++extern const char *const __start_predict_file; + + static void + __attribute__ ((destructor)) +@@ -39,7 +39,7 @@ 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; ++ const char *const *sf = &__start_predict_file; + while (s < e) + { + if (s[0] != 0 || s[1] != 0) +diff --git a/src/elfcmp.c b/src/elfcmp.c +index 0e134df..71a8009 100644 +--- a/src/elfcmp.c ++++ b/src/elfcmp.c +@@ -1,5 +1,5 @@ + /* Compare relevant content of two ELF files. +- Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2005-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -41,6 +41,7 @@ + #include + #include + ++#include + #include "../libelf/elf-knowledge.h" + #include "../libebl/libeblP.h" + +@@ -53,10 +54,10 @@ 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + /* Values for the parameters which have no short form. */ + #define OPT_GAPS 0x100 +@@ -164,12 +165,12 @@ main (int argc, char *argv[]) + 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"), ++ error (2, 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"), ++ error (2, 0, gettext ("cannot get ELF header of '%s': %s"), + fname2, elf_errmsg (-1)); + + /* Compare the ELF headers. */ +@@ -191,6 +192,39 @@ main (int argc, char *argv[]) + goto out; + } + ++ size_t shnum1; ++ size_t shnum2; ++ if (unlikely (elf_getshdrnum (elf1, &shnum1) != 0)) ++ error (2, 0, gettext ("cannot get section count of '%s': %s"), ++ fname1, elf_errmsg (-1)); ++ if (unlikely (elf_getshdrnum (elf2, &shnum2) != 0)) ++ error (2, 0, gettext ("cannot get section count of '%s': %s"), ++ fname2, elf_errmsg (-1)); ++ if (unlikely (shnum1 != shnum2)) ++ { ++ if (! quiet) ++ error (0, 0, gettext ("%s %s diff: section count"), fname1, fname2); ++ result = 1; ++ goto out; ++ } ++ ++ size_t phnum1; ++ size_t phnum2; ++ if (unlikely (elf_getphdrnum (elf1, &phnum1) != 0)) ++ error (2, 0, gettext ("cannot get program header count of '%s': %s"), ++ fname1, elf_errmsg (-1)); ++ if (unlikely (elf_getphdrnum (elf2, &phnum2) != 0)) ++ error (2, 0, gettext ("cannot get program header count of '%s': %s"), ++ fname2, elf_errmsg (-1)); ++ if (unlikely (phnum1 != phnum2)) ++ { ++ if (! quiet) ++ error (0, 0, gettext ("%s %s diff: program header count"), ++ 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; +@@ -271,13 +305,13 @@ main (int argc, char *argv[]) + + Elf_Data *data1 = elf_getdata (scn1, NULL); + if (data1 == NULL) +- error (EXIT_FAILURE, 0, ++ error (2, 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, ++ error (2, 0, + gettext ("cannot get content of section %zu in '%s': %s"), + elf_ndxscn (scn2), fname2, elf_errmsg (-1)); + +@@ -293,13 +327,13 @@ main (int argc, char *argv[]) + GElf_Sym sym1_mem; + GElf_Sym *sym1 = gelf_getsym (data1, ndx, &sym1_mem); + if (sym1 == NULL) +- error (EXIT_FAILURE, 0, ++ error (2, 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, ++ error (2, 0, + gettext ("cannot get symbol in '%s': %s"), + fname2, elf_errmsg (-1)); + +@@ -409,7 +443,7 @@ main (int argc, char *argv[]) + 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.to = ehdr1->e_phoff + phnum1 * ehdr1->e_phentsize; + phdr_region.next = regions; + + regions = &ehdr_region; +@@ -426,12 +460,12 @@ main (int argc, char *argv[]) + { + raw1 = elf_rawfile (elf1, &size1); + if (raw1 == NULL ) +- error (EXIT_FAILURE, 0, gettext ("cannot load data of '%s': %s"), ++ error (2, 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"), ++ error (2, 0, gettext ("cannot load data of '%s': %s"), + fname2, elf_errmsg (-1)); + + for (size_t cnt = 0; cnt < nregions; ++cnt) +@@ -444,18 +478,18 @@ main (int argc, char *argv[]) + } + + /* Compare the program header tables. */ +- for (int ndx = 0; ndx < ehdr1->e_phnum; ++ndx) ++ for (unsigned int ndx = 0; ndx < phnum1; ++ndx) + { + GElf_Phdr phdr1_mem; + GElf_Phdr *phdr1 = gelf_getphdr (elf1, ndx, &phdr1_mem); + if (ehdr1 == NULL) +- error (EXIT_FAILURE, 0, ++ error (2, 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, ++ error (2, 0, + gettext ("cannot get program header entry %d of '%s': %s"), + ndx, fname2, elf_errmsg (-1)); + +@@ -522,7 +556,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -570,15 +604,15 @@ 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); ++ error (2, errno, gettext ("cannot open '%s'"), fname); + Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); + if (elf == NULL) +- error (EXIT_FAILURE, 0, ++ error (2, 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, ++ error (2, 0, + gettext ("cannot create EBL descriptor for '%s'"), fname); + + *fdp = fd; +@@ -596,7 +630,7 @@ search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx) + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) +- error (EXIT_FAILURE, 0, ++ error (2, 0, + gettext ("cannot get section header of section %zu: %s"), + elf_ndxscn (scn), elf_errmsg (-1)); + +@@ -606,7 +640,7 @@ search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx) + + Elf_Data *data = elf_getdata (scn, NULL); + if (data == NULL) +- error (EXIT_FAILURE, 0, ++ error (2, 0, + gettext ("cannot get content of section %zu: %s"), + elf_ndxscn (scn), elf_errmsg (-1)); + +@@ -617,7 +651,7 @@ search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx) + 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"), ++ error (2, 0, gettext ("cannot get relocation: %s"), + elf_errmsg (-1)); + + if ((int) GELF_R_SYM (rel->r_info) == symndx +@@ -631,7 +665,7 @@ search_for_copy_reloc (Ebl *ebl, size_t scnndx, int symndx) + 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"), ++ error (2, 0, gettext ("cannot get relocation: %s"), + elf_errmsg (-1)); + + if ((int) GELF_R_SYM (rela->r_info) == symndx +diff --git a/src/elflint.c b/src/elflint.c +index 54aa111..531122b 100644 +--- a/src/elflint.c ++++ b/src/elflint.c +@@ -1,5 +1,5 @@ + /* Pedantic checking of ELF files compliance with gABI/psABI spec. +- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. ++ Copyright (C) 2001-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -42,6 +42,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -56,10 +57,10 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + #define ARGP_strict 300 + #define ARGP_gnuld 301 +@@ -67,7 +68,6 @@ const char *argp_program_bug_address = PACKAGE_BUGREPORT; + /* 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 }, +@@ -221,9 +221,8 @@ parse_opt (int key, char *arg __attribute__ ((unused)), + + 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); ++ argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name); ++ exit (EXIT_FAILURE); + + default: + return ARGP_ERR_UNKNOWN; +@@ -241,7 +240,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -345,8 +344,9 @@ static const int valid_e_machine[] = + (sizeof (valid_e_machine) / sizeof (valid_e_machine[0])) + + +-/* Number of sections. */ ++/* Numbers of sections and program headers. */ + static unsigned int shnum; ++static unsigned int phnum; + + + static void +@@ -379,8 +379,9 @@ check_elf_header (Ebl *ebl, GElf_Ehdr *ehdr, size_t size) + 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) ++ /* We currently don't handle any OS ABIs other than Linux. */ ++ if (ehdr->e_ident[EI_OSABI] != ELFOSABI_NONE ++ && ehdr->e_ident[EI_OSABI] != ELFOSABI_LINUX) + ERROR (gettext ("unsupported OS ABI e_ident[%d] == '%s'\n"), + EI_OSABI, + ebl_osabi_name (ebl, ehdr->e_ident[EI_OSABI], buf, sizeof (buf))); +@@ -465,6 +466,24 @@ invalid number of section header table entries\n")); + ERROR (gettext ("invalid section header index\n")); + } + ++ phnum = ehdr->e_phnum; ++ if (ehdr->e_phnum == PN_XNUM) ++ { ++ /* Get the header of the zeroth section. The sh_info field ++ might contain the phnum count. */ ++ 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_info < PN_XNUM) ++ ERROR (gettext ("\ ++invalid number of program header table entries\n")); ++ else ++ phnum = shdr->sh_info; ++ } ++ } ++ + /* Check the e_flags field. */ + if (!ebl_machine_flag_check (ebl, ehdr->e_flags)) + ERROR (gettext ("invalid machine flags: %s\n"), +@@ -479,13 +498,13 @@ invalid number of section header table entries\n")); + 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) ++ else if (ehdr->e_phoff + 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) ++ else if (ehdr->e_shoff + shnum * ehdr->e_shentsize > size) + ERROR (gettext ("invalid section header position or size\n")); + } + else if (gelf_getclass (ebl->elf) == ELFCLASS64) +@@ -496,7 +515,7 @@ invalid number of section header table entries\n")); + 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) ++ else if (ehdr->e_phoff + 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)) +@@ -579,9 +598,12 @@ check_symtab (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) + 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)); ++ { ++ 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; +@@ -659,7 +681,9 @@ section [%2d] '%s': XINDEX for zeroth entry not zero\n"), + } + + const char *name = NULL; +- if (sym->st_name >= strshdr->sh_size) ++ 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); +@@ -702,10 +726,17 @@ section [%2d] '%s': symbol %zu: invalid section index\n"), + 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) ++ if (GELF_ST_BIND (sym->st_info) >= STB_NUM ++ && !ebl_symbol_binding_name (ebl, GELF_ST_BIND (sym->st_info), NULL, ++ 0)) + ERROR (gettext ("\ + section [%2d] '%s': symbol %zu: unknown symbol binding\n"), + idx, section_name (ebl, idx), cnt); ++ if (GELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE ++ && GELF_ST_TYPE (sym->st_info) != STT_OBJECT) ++ ERROR (gettext ("\ ++section [%2d] '%s': symbol %zu: unique symbol not of object type\n"), ++ idx, section_name (ebl, idx), cnt); + + if (xndx == SHN_COMMON) + { +@@ -774,7 +805,7 @@ section [%2d] '%s': symbol %zu: referenced section [%2d] '%s' does not have SHF_ + if (ehdr->e_type == ET_REL) + { + /* For object files the symbol value must fall +- into the section. */ ++ 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"), +@@ -791,16 +822,16 @@ section [%2d] '%s': symbol %zu does not fit completely in referenced section [%2 + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = NULL; +- int pcnt; ++ unsigned int pcnt; + +- for (pcnt = 0; pcnt < ehdr->e_phnum; ++pcnt) ++ for (pcnt = 0; pcnt < 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 (pcnt == phnum) + { + if (no_pt_tls++ == 0) + ERROR (gettext ("\ +@@ -948,7 +979,7 @@ section [%2d] '%s': _GLOBAL_OFFSET_TABLE_ symbol present, but no .got section\n" + /* 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) ++ for (unsigned int pcnt = 0; pcnt < phnum; ++pcnt) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr (ebl->elf, pcnt, &phdr_mem); +@@ -973,6 +1004,17 @@ section [%2d] '%s': _DYNAMIC symbol size %" PRIu64 " does not match dynamic segm + } + } + } ++ ++ if (GELF_ST_VISIBILITY (sym->st_other) != STV_DEFAULT ++ && shdr->sh_type == SHT_DYNSYM) ++ ERROR (gettext ("\ ++section [%2d] '%s': symbol %zu: symbol in dynamic symbol table with non-default visibility\n"), ++ idx, section_name (ebl, idx), cnt); ++ if ((sym->st_other ^ GELF_ST_VISIBILITY (sym->st_other)) != 0) ++ ERROR (gettext ("\ ++section [%2d] '%s': symbol %zu: unknown bit set in st_other\n"), ++ idx, section_name (ebl, idx), cnt); ++ + } + } + +@@ -1194,7 +1236,7 @@ section [%2d] '%s': section entry size does not match ElfXX_Rel\n"), + 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) ++ for (unsigned int i = 0; i < phnum; ++i) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr (ebl->elf, i, &phdr_mem); +@@ -1681,7 +1723,7 @@ section [%2d] '%s': entry %zu: pointer does not match address of section [%2d] ' + case DT_VERNEED: + case DT_VERSYM: + check_addr: +- for (n = 0; n < ehdr->e_phnum; ++n) ++ for (n = 0; n < phnum; ++n) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr (ebl->elf, n, &phdr_mem); +@@ -1690,7 +1732,7 @@ section [%2d] '%s': entry %zu: pointer does not match address of section [%2d] ' + && phdr->p_vaddr + phdr->p_memsz > dyn->d_un.d_ptr) + break; + } +- if (unlikely (n >= ehdr->e_phnum)) ++ if (unlikely (n >= phnum)) + { + char buf[50]; + ERROR (gettext ("\ +@@ -2758,18 +2800,18 @@ section [%2d] '%s': symbol %d: version index %d is for requested version\n"), + + + static int +-unknown_dependency_p (Elf *elf, GElf_Ehdr *ehdr, const char *fname) ++unknown_dependency_p (Elf *elf, const char *fname) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = NULL; + +- int i; +- for (i = 0; i < ehdr->e_phnum; ++i) ++ unsigned int i; ++ for (i = 0; i < phnum; ++i) + if ((phdr = gelf_getphdr (elf, i, &phdr_mem)) != NULL + && phdr->p_type == PT_DYNAMIC) + break; + +- if (i == ehdr->e_phnum) ++ if (i == phnum) + return 1; + assert (phdr != NULL); + Elf_Scn *scn = gelf_offscn (elf, phdr->p_offset); +@@ -2797,7 +2839,7 @@ unknown_dependency_p (Elf *elf, GElf_Ehdr *ehdr, const char *fname) + static unsigned int nverneed; + + static void +-check_verneed (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) ++check_verneed (Ebl *ebl, GElf_Shdr *shdr, int idx) + { + if (++nverneed == 2) + ERROR (gettext ("more than one version reference section present\n")); +@@ -2852,7 +2894,7 @@ section [%2d] '%s': entry %d has invalid file reference\n"), + } + + /* Check that there is a DT_NEEDED entry for the referenced library. */ +- if (unknown_dependency_p (ebl->elf, ehdr, libname)) ++ if (unknown_dependency_p (ebl->elf, libname)) + ERROR (gettext ("\ + section [%2d] '%s': entry %d references unknown dependency\n"), + idx, section_name (ebl, idx), cnt); +@@ -3308,7 +3350,7 @@ static const struct + { + /* See figure 4-14 in the gABI. */ + { ".bss", 5, SHT_NOBITS, exact, SHF_ALLOC | SHF_WRITE, 0 }, +- { ".comment", 8, SHT_PROGBITS, exact, 0, 0 }, ++ { ".comment", 8, SHT_PROGBITS, atleast, 0, SHF_MERGE | SHF_STRINGS }, + { ".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 }, +@@ -3354,6 +3396,13 @@ static const struct + && !memcmp (special_sections[idx].name, string, \ + sizeof string - (prefix ? 1 : 0))) + ++ ++/* Indeces of some sections we need later. */ ++static size_t eh_frame_hdr_scnndx; ++static size_t eh_frame_scnndx; ++static size_t gcc_except_table_scnndx; ++ ++ + static void + check_sections (Ebl *ebl, GElf_Ehdr *ehdr) + { +@@ -3383,8 +3432,6 @@ check_sections (Ebl *ebl, GElf_Ehdr *ehdr) + 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) +@@ -3397,8 +3444,14 @@ 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")); ++ ++ if (shdr->sh_info != 0 && ehdr->e_phnum != PN_XNUM) ++ ERROR (gettext ("\ ++zeroth section has nonzero link value while ELF header does not signal overflow in phnum\n")); + } + ++ int *segment_flags = xcalloc (phnum, sizeof segment_flags[0]); ++ + bool dot_interp_section = false; + + size_t hash_idx = 0; +@@ -3548,6 +3601,14 @@ section [%2zu] '%s' has SHF_ALLOC flag not set but there are loadable segments\n + + break; + } ++ ++ /* Remember a few special sections for later. */ ++ if (strcmp (scnname, ".eh_frame_hdr") == 0) ++ eh_frame_hdr_scnndx = cnt; ++ else if (strcmp (scnname, ".eh_frame") == 0) ++ eh_frame_scnndx = cnt; ++ else if (strcmp (scnname, ".gcc_except_table") == 0) ++ gcc_except_table_scnndx = cnt; + } + + if (shdr->sh_entsize != 0 && shdr->sh_size % shdr->sh_entsize) +@@ -3627,15 +3688,40 @@ section [%2zu] '%s': merge flag set but entry size is zero\n"), + 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; ++ unsigned int pcnt; + GElf_Phdr phdr_mem; + GElf_Phdr *phdr; + +- for (pcnt = 0; pcnt < ehdr->e_phnum; ++pcnt) ++ for (pcnt = 0; pcnt < phnum; ++pcnt) + if ((phdr = gelf_getphdr (ebl->elf, pcnt, &phdr_mem)) != NULL + && ((phdr->p_type == PT_LOAD + && (shdr->sh_flags & SHF_TLS) == 0) +@@ -3671,10 +3757,32 @@ section [%2zu] '%s' has not type NOBITS but is not read from the file in segment + 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) ++ if (pcnt == phnum) + ERROR (gettext ("\ + section [%2zu] '%s': alloc flag set but section not in any loaded segment\n"), + cnt, section_name (ebl, cnt)); +@@ -3745,7 +3853,7 @@ section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"), + break; + + case SHT_GNU_verneed: +- check_verneed (ebl, ehdr, shdr, cnt); ++ check_verneed (ebl, shdr, cnt); + break; + + case SHT_GNU_verdef: +@@ -3765,6 +3873,29 @@ section [%2zu] '%s': relocatable files cannot have dynamic symbol tables\n"), + if (has_interp_segment && !dot_interp_section) + ERROR (gettext ("INTERP program header entry but no .interp section\n")); + ++ if (!is_debuginfo) ++ for (unsigned int pcnt = 0; pcnt < 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) +@@ -3860,6 +3991,7 @@ section [%2d] '%s': unknown core file note type %" PRIu32 + case NT_GNU_ABI_TAG: + case NT_GNU_HWCAP: + case NT_GNU_BUILD_ID: ++ case NT_GNU_GOLD_VERSION: + break; + + case 0: +@@ -3885,6 +4017,7 @@ section [%2d] '%s': unknown object file note type %" PRIu32 + return last_offset; + } + ++ + static void + check_note (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Phdr *phdr, int cnt) + { +@@ -3916,6 +4049,7 @@ phdr[%d]: no note entries defined for the type of file\n"), + cnt, phdr->p_filesz - notes_size); + } + ++ + static void + check_note_section (Ebl *ebl, GElf_Ehdr *ehdr, GElf_Shdr *shdr, int idx) + { +@@ -3947,6 +4081,11 @@ section [%2d] '%s': no note entries defined for the type of file\n"), + idx, section_name (ebl, idx), shdr->sh_size - notes_size); + } + ++ ++/* Index of the PT_GNU_EH_FRAME program eader entry. */ ++static int pt_gnu_eh_frame_pndx; ++ ++ + static void + check_program_header (Ebl *ebl, GElf_Ehdr *ehdr) + { +@@ -3962,7 +4101,7 @@ only executables, shared objects, and core files can have program headers\n")); + int num_pt_tls = 0; + int num_pt_relro = 0; + +- for (int cnt = 0; cnt < ehdr->e_phnum; ++cnt) ++ for (unsigned int cnt = 0; cnt < phnum; ++cnt) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr; +@@ -4037,8 +4176,8 @@ 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) ++ unsigned int inner; ++ for (inner = 0; inner < phnum; ++inner) + { + GElf_Phdr phdr2_mem; + GElf_Phdr *phdr2; +@@ -4055,14 +4194,15 @@ more than one GNU_RELRO entry in program header\n")); + if ((phdr2->p_flags & PF_W) == 0) + ERROR (gettext ("\ + loadable segment GNU_RELRO applies to is not writable\n")); +- if ((phdr2->p_flags & PF_X) != 0) ++ if ((phdr2->p_flags & ~PF_W) != (phdr->p_flags & ~PF_W)) + ERROR (gettext ("\ +-loadable segment GNU_RELRO applies to is executable\n")); ++loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n"), ++ cnt, inner); + break; + } + } + +- if (inner >= ehdr->e_phnum) ++ if (inner >= phnum) + ERROR (gettext ("\ + %s segment not contained in a loaded segment\n"), "GNU_RELRO"); + } +@@ -4070,8 +4210,8 @@ loadable segment GNU_RELRO applies to is executable\n")); + 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) ++ unsigned int inner; ++ for (inner = 0; inner < phnum; ++inner) + { + GElf_Phdr phdr2_mem; + GElf_Phdr *phdr2; +@@ -4085,7 +4225,7 @@ loadable segment GNU_RELRO applies to is executable\n")); + break; + } + +- if (inner >= ehdr->e_phnum) ++ if (inner >= phnum) + ERROR (gettext ("\ + %s segment not contained in a loaded segment\n"), "PHDR"); + +@@ -4095,6 +4235,77 @@ loadable segment GNU_RELRO applies to is executable\n")); + ERROR (gettext ("\ + program header offset in ELF header and PHDR entry do not match")); + } ++ else if (phdr->p_type == PT_GNU_EH_FRAME) ++ { ++ /* If there is an .eh_frame_hdr section it must be ++ referenced by this program header entry. */ ++ Elf_Scn *scn = NULL; ++ GElf_Shdr shdr_mem; ++ GElf_Shdr *shdr = NULL; ++ bool any = false; ++ while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) ++ { ++ any = true; ++ shdr = gelf_getshdr (scn, &shdr_mem); ++ if (shdr != NULL ++ && shdr->sh_type == (is_debuginfo ++ ? SHT_NOBITS : SHT_PROGBITS) ++ && ! strcmp (".eh_frame_hdr", ++ elf_strptr (ebl->elf, shstrndx, shdr->sh_name))) ++ { ++ if (! is_debuginfo) ++ { ++ if (phdr->p_offset != shdr->sh_offset) ++ ERROR (gettext ("\ ++call frame search table reference in program header has wrong offset\n")); ++ if (phdr->p_memsz != shdr->sh_size) ++ ERROR (gettext ("\ ++call frame search table size mismatch in program and section header\n")); ++ } ++ break; ++ } ++ } ++ ++ if (scn == NULL) ++ { ++ /* If there is no section header table we don't ++ complain. But if there is one there should be an ++ entry for .eh_frame_hdr. */ ++ if (any) ++ ERROR (gettext ("\ ++PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n")); ++ } ++ else ++ { ++ /* The section must be allocated and not be writable and ++ executable. */ ++ if ((phdr->p_flags & PF_R) == 0) ++ ERROR (gettext ("\ ++call frame search table must be allocated\n")); ++ else if (shdr != NULL && (shdr->sh_flags & SHF_ALLOC) == 0) ++ ERROR (gettext ("\ ++section [%2zu] '%s' must be allocated\n"), elf_ndxscn (scn), ".eh_frame_hdr"); ++ ++ if ((phdr->p_flags & PF_W) != 0) ++ ERROR (gettext ("\ ++call frame search table must not be writable\n")); ++ else if (shdr != NULL && (shdr->sh_flags & SHF_WRITE) != 0) ++ ERROR (gettext ("\ ++section [%2zu] '%s' must not be writable\n"), ++ elf_ndxscn (scn), ".eh_frame_hdr"); ++ ++ if ((phdr->p_flags & PF_X) != 0) ++ ERROR (gettext ("\ ++call frame search table must not be executable\n")); ++ else if (shdr != NULL && (shdr->sh_flags & SHF_EXECINSTR) != 0) ++ ERROR (gettext ("\ ++section [%2zu] '%s' must not be executable\n"), ++ elf_ndxscn (scn), ".eh_frame_hdr"); ++ } ++ ++ /* Remember which entry this is. */ ++ pt_gnu_eh_frame_pndx = cnt; ++ } + + if (phdr->p_filesz > phdr->p_memsz + && (phdr->p_memsz != 0 || phdr->p_type != PT_NOTE)) +@@ -4115,6 +4326,17 @@ program header entry %d: file offset and virtual address not module of alignment + } + + ++static void ++check_exception_data (Ebl *ebl __attribute__ ((unused)), ++ GElf_Ehdr *ehdr __attribute__ ((unused))) ++{ ++ if ((ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN) ++ && pt_gnu_eh_frame_pndx == 0 && eh_frame_hdr_scnndx != 0) ++ ERROR (gettext ("executable/DSO with .eh_frame_hdr section does not have " ++ "a PT_GNU_EH_FRAME program header entry")); ++} ++ ++ + /* Process one file. */ + static void + process_elf_file (Elf *elf, const char *prefix, const char *suffix, +@@ -4163,6 +4385,11 @@ process_elf_file (Elf *elf, const char *prefix, const char *suffix, + headers at all. */ + check_sections (ebl, ehdr); + ++ /* Check the exception handling data, if it exists. */ ++ if (pt_gnu_eh_frame_pndx != 0 || eh_frame_hdr_scnndx != 0 ++ || eh_frame_scnndx != 0 || gcc_except_table_scnndx != 0) ++ check_exception_data (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")); +diff --git a/src/findtextrel.c b/src/findtextrel.c +index 245db7f..9d10982 100644 +--- a/src/findtextrel.c ++++ b/src/findtextrel.c +@@ -1,5 +1,5 @@ + /* Locate source files or functions which caused text relocations. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -44,6 +44,8 @@ + #include + #include + ++#include ++ + + struct segments + { +@@ -54,10 +56,10 @@ struct segments + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + /* Values for the parameters which have no short form. */ + #define OPT_DEBUGINFO 0x100 +@@ -169,7 +171,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +diff --git a/src/ld.c b/src/ld.c +index 63fc378..989bfab 100644 +--- a/src/ld.c ++++ b/src/ld.c +@@ -1,4 +1,4 @@ +-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. ++/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -48,10 +48,10 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + + /* Values for the various options. */ +@@ -958,7 +958,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -1183,11 +1183,12 @@ ld_new_searchdir (const char *dir) + + /* Enqueue the file. */ + if (ld_state.tailpaths == NULL) +- ld_state.paths = ld_state.tailpaths = newpath; ++ ld_state.paths = ld_state.tailpaths = newpath->next = newpath; + else + { + ld_state.tailpaths->next = newpath; + ld_state.tailpaths = newpath; ++ newpath->next = ld_state.paths; + } + } + +diff --git a/src/ld.h b/src/ld.h +index 535f7cd..72d5b27 100644 +--- a/src/ld.h ++++ b/src/ld.h +@@ -1,4 +1,4 @@ +-/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2008 Red Hat, Inc. ++/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -146,7 +146,7 @@ struct usedfiles + 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 ++ elf_getshdrstrndx() function can find the value but it is too + costly to repeat this call over and over. */ + size_t shstrndx; + +diff --git a/src/ldgeneric.c b/src/ldgeneric.c +index 8df2a57..b2ea2f9 100644 +--- a/src/ldgeneric.c ++++ b/src/ldgeneric.c +@@ -1,4 +1,4 @@ +-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008 Red Hat, Inc. ++/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2001. + +@@ -656,7 +656,7 @@ check_definition (const XElf_Sym *sym, size_t shndx, size_t symidx, + Elf32_Word xndx; + size_t shnum; + +- if (elf_getshnum (fileinfo->elf, &shnum) < 0) ++ if (elf_getshdrnum (fileinfo->elf, &shnum) < 0) + error (EXIT_FAILURE, 0, + gettext ("cannot determine number of sections: %s"), + elf_errmsg (-1)); +@@ -1117,7 +1117,7 @@ add_relocatable_file (struct usedfiles *fileinfo, GElf_Word secttype) + assert (fileinfo->elf != NULL); + + /* Allocate memory for the sections. */ +- if (unlikely (elf_getshnum (fileinfo->elf, &scncnt) < 0)) ++ if (unlikely (elf_getshdrnum (fileinfo->elf, &scncnt) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot determine number of sections: %s"), + elf_errmsg (-1)); +@@ -1619,7 +1619,7 @@ add_relocatable_file (struct usedfiles *fileinfo, GElf_Word secttype) + + #ifndef NDEBUG + size_t shnum; +- assert (elf_getshnum (fileinfo->elf, &shnum) == 0); ++ assert (elf_getshdrnum (fileinfo->elf, &shnum) == 0); + assert (shndx < shnum); + #endif + +@@ -2038,7 +2038,7 @@ file_process2 (struct usedfiles *fileinfo) + } + + /* Determine the section header string table section index. */ +- if (unlikely (elf_getshstrndx (fileinfo->elf, &fileinfo->shstrndx) ++ if (unlikely (elf_getshdrstrndx (fileinfo->elf, &fileinfo->shstrndx) + < 0)) + { + fprintf (stderr, gettext ("\ +@@ -4148,7 +4148,7 @@ 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); ++ (void) elf_getshdrstrndx (ld_state.outelf, &shstrndx); + + const char *ident = elf_getident (ld_state.outelf, NULL); + bool same_byte_order = ((ident[EI_DATA] == ELFDATA2LSB +diff --git a/src/nm.c b/src/nm.c +index 1bef49f..01519a5 100644 +--- a/src/nm.c ++++ b/src/nm.c +@@ -1,5 +1,5 @@ + /* Print symbol information from ELF file in human-readable form. +- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2000-2008, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -58,10 +58,10 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + + /* Values for the parameters which have no short form. */ +@@ -254,7 +254,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -703,6 +703,18 @@ get_local_names (Dwarf *dbg) + } + } + ++/* 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 +@@ -712,7 +724,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, + int longest_where) + { + size_t shnum; +- if (elf_getshnum (ebl->elf, &shnum) < 0) ++ if (elf_getshdrnum (ebl->elf, &shnum) < 0) + INTERNAL_ERROR (fullname); + + bool scnnames_malloced = shnum * sizeof (const char *) > 128 * 1024; +@@ -723,7 +735,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, + 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) ++ if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -736,9 +748,15 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, + + assert (elf_ndxscn (scn) == cnt++); + +- scnnames[elf_ndxscn (scn)] +- = elf_strptr (ebl->elf, shstrndx, +- gelf_getshdr (scn, &shdr_mem)->sh_name); ++ 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]; +@@ -772,8 +790,10 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, + /* Iterate over all symbols. */ + for (cnt = 0; cnt < nsyms; ++cnt) + { +- const char *symstr = elf_strptr (ebl->elf, strndx, +- syms[cnt].sym.st_name); ++ 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]; +@@ -850,7 +870,9 @@ show_symbols_bsd (Elf *elf, GElf_Word strndx, + /* Iterate over all symbols. */ + for (size_t cnt = 0; cnt < nsyms; ++cnt) + { +- const char *symstr = elf_strptr (elf, strndx, syms[cnt].sym.st_name); ++ 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 +@@ -872,7 +894,7 @@ show_symbols_bsd (Elf *elf, GElf_Word strndx, + ? (GELF_ST_BIND (syms[cnt].sym.st_info) == STB_WEAK + ? "*" : " ") + : "", +- elf_strptr (elf, strndx, syms[cnt].sym.st_name)); ++ symstr); + else + printf (print_size ? sfmtstrs[radix] : fmtstrs[radix], + digits, syms[cnt].sym.st_value, +@@ -881,7 +903,7 @@ show_symbols_bsd (Elf *elf, GElf_Word strndx, + ? (GELF_ST_BIND (syms[cnt].sym.st_info) == STB_WEAK + ? "*" : " ") + : "", +- elf_strptr (elf, strndx, syms[cnt].sym.st_name), ++ symstr, + digits, (uint64_t) syms[cnt].sym.st_size); + } + } +@@ -907,7 +929,9 @@ show_symbols_posix (Elf *elf, GElf_Word strndx, const char *prefix, + /* Iterate over all symbols. */ + for (size_t cnt = 0; cnt < nsyms; ++cnt) + { +- const char *symstr = elf_strptr (elf, strndx, syms[cnt].sym.st_name); ++ 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 +@@ -973,7 +997,7 @@ show_symbols (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, Elf_Scn *xndxscn, + { + /* Get the section header string table index. */ + size_t shstrndx; +- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0) ++ if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -1056,6 +1080,8 @@ show_symbols (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, Elf_Scn *xndxscn, + { + 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)); + +diff --git a/src/objdump.c b/src/objdump.c +index 91fa875..1234c79 100644 +--- a/src/objdump.c ++++ b/src/objdump.c +@@ -1,5 +1,5 @@ + /* Print information from ELF file in human-readable form. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -49,10 +49,10 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + + /* Definitions of arguments for argp functions. */ +@@ -182,7 +182,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "20089"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -234,9 +234,9 @@ parse_opt (int key, char *arg, + if (! any_control_option) + { + fputs (gettext ("No operation specified.\n"), stderr); +- argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR, ++ argp_help (&argp, stderr, ARGP_HELP_SEE, + program_invocation_short_name); +- exit (1); ++ exit (EXIT_FAILURE); + } + + default: +@@ -358,11 +358,66 @@ handle_ar (int fd, Elf *elf, const char *prefix, const char *fname, + + + static void ++show_relocs_x (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *symdata, ++ Elf_Data *xndxdata, size_t symstrndx, size_t shstrndx, ++ GElf_Addr r_offset, GElf_Xword r_info, GElf_Sxword r_addend) ++{ ++ int elfclass = gelf_getclass (ebl->elf); ++ char buf[128]; ++ ++ printf ("%0*" PRIx64 " %-20s ", ++ elfclass == ELFCLASS32 ? 8 : 16, r_offset, ++ ebl_reloc_type_name (ebl, GELF_R_TYPE (r_info), buf, sizeof (buf))); ++ ++ Elf32_Word xndx; ++ GElf_Sym symmem; ++ GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (r_info), ++ &symmem, &xndx); ++ ++ if (sym == NULL) ++ printf ("<%s %ld>", ++ gettext ("INVALID SYMBOL"), (long int) GELF_R_SYM (r_info)); ++ else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION) ++ printf ("%s", ++ 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 ("<%s %ld>", ++ gettext ("INVALID SECTION"), ++ (long int) (sym->st_shndx == SHN_XINDEX ++ ? xndx : sym->st_shndx)); ++ else ++ printf ("%s", ++ elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); ++ } ++ ++ if (r_addend != 0) ++ { ++ char sign = '+'; ++ if (r_addend < 0) ++ { ++ sign = '-'; ++ r_addend = -r_addend; ++ } ++ printf ("%c%#" PRIx64, sign, r_addend); ++ } ++ putchar ('\n'); ++} ++ ++ ++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) +@@ -372,60 +427,8 @@ show_relocs_rel (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, + + 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 (""), +- 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 (""), +- 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 (""), +- 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 (""), +- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); +- } +- } ++ show_relocs_x (ebl, shdr, symdata, xndxdata, symstrndx, shstrndx, ++ rel->r_offset, rel->r_info, 0); + } + } + +@@ -435,7 +438,6 @@ 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) +@@ -445,64 +447,8 @@ show_relocs_rela (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, + + 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 (""), +- 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 (""), +- 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 (""), +- 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 (""), +- elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); +- } +- +- if (rel->r_addend != 0) +- printf ("+%#" PRIx64, rel->r_addend); +- putchar ('\n'); +- } ++ show_relocs_x (ebl, shdr, symdata, xndxdata, symstrndx, shstrndx, ++ rel->r_offset, rel->r_info, rel->r_addend); + } + } + +@@ -561,7 +507,7 @@ show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx) + shdr->sh_info), + &destshdr_mem); + +- printf (gettext ("RELOCATION RECORDS FOR [%s]:\n" ++ printf (gettext ("\nRELOCATION RECORDS FOR [%s]:\n" + "%-*s TYPE VALUE\n"), + elf_strptr (ebl->elf, shstrndx, destshdr->sh_name), + elfclass == ELFCLASS32 ? 8 : 16, gettext ("OFFSET")); +@@ -601,11 +547,11 @@ show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx) + else + show_relocs_rela (ebl, shdr, data, symdata, xndxdata, + symshdr->sh_link, shstrndx); ++ ++ putchar ('\n'); + } + } + +- fputs_unlocked ("\n\n", stdout); +- + return 0; + } + +@@ -793,7 +739,7 @@ handle_elf (Elf *elf, const char *prefix, const char *fname, + + /* Get the section header string table index. */ + size_t shstrndx; +- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0) ++ if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +diff --git a/src/ranlib.c b/src/ranlib.c +index a915e55..e92dc89 100644 +--- a/src/ranlib.c ++++ b/src/ranlib.c +@@ -1,5 +1,5 @@ + /* Generate an index to speed access to archives. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -58,10 +58,10 @@ 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + + /* Definitions of arguments for argp functions. */ +@@ -137,7 +137,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +diff --git a/src/readelf.c b/src/readelf.c +index 96b5d43..7b3c4f8 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -1,5 +1,5 @@ + /* Print information from ELF file in human-readable form. +- Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008 Red Hat, Inc. ++ Copyright (C) 1999-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 1999. + +@@ -49,6 +49,7 @@ + #include + #include + #include ++#include + + #include + #include "../libelf/libelfP.h" +@@ -61,16 +62,17 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = 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 }, ++ { NULL, 0, NULL, 0, N_("ELF output selection:"), 0 }, ++ { "all", 'a', NULL, 0, ++ N_("All these plus -p .strtab -p .dynstr -p .comment"), 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, +@@ -78,17 +80,21 @@ static const struct argp_option options[] = + { "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 }, ++ { "section-headers", 'S', NULL, 0, N_("Display the sections' headers"), 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 }, ++ { "notes", 'n', NULL, 0, N_("Display the ELF notes"), 0 }, ++ { "arch-specific", 'A', NULL, 0, ++ N_("Display architecture specific information, if any"), 0 }, ++ { "exception", 'e', NULL, 0, ++ N_("Display sections for exception handling"), 0 }, ++ ++ { NULL, 0, NULL, 0, N_("Additional output selection:"), 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 }, ++ "aranges, frame, info, loc, line, ranges, pubnames, str, macinfo, " ++ "or exception"), 0 }, + { "hex-dump", 'x', "SECTION", 0, + N_("Dump the uninterpreted contents of SECTION, by number or name"), 0 }, + { "strings", 'p', "SECTION", OPTION_ARG_OPTIONAL, +@@ -98,6 +104,8 @@ static const struct argp_option options[] = + N_("Display the symbol index of an archive"), 0 }, + + { NULL, 0, NULL, 0, N_("Output control:"), 0 }, ++ { "numeric-addresses", 'N', NULL, 0, ++ N_("Do not find symbol names for addresses in DWARF data"), 0 }, + + { NULL, 0, NULL, 0, NULL, 0 } + }; +@@ -163,24 +171,28 @@ static bool print_archive_index; + /* True if any of the control options except print_archive_index is set. */ + static bool any_control_option; + ++/* True if we should print addresses from DWARF in symbolic form. */ ++static bool print_address_names = true; ++ + /* 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_abbrev = 1, /* .debug_abbrev */ ++ section_aranges = 2, /* .debug_aranges */ ++ section_frame = 4, /* .debug_frame or .eh_frame & al. */ ++ 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_exception = 1024, /* .eh_frame & al. */ + 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; ++ | section_ranges | section_exception) ++} print_debug_sections, implicit_debug_sections; + + /* Select hex dumping of sections. */ + static struct section_argument *dump_data_sections; +@@ -194,10 +206,12 @@ struct section_argument + { + struct section_argument *next; + const char *arg; ++ bool implicit; + }; + +-/* Number of sections in the file. */ ++/* Numbers of sections and program headers in the file. */ + static size_t shnum; ++static size_t phnum; + + + /* Declarations of local functions. */ +@@ -207,10 +221,12 @@ 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_dynamic (Ebl *ebl); ++static void print_relocs (Ebl *ebl, GElf_Ehdr *ehdr); ++static void handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, ++ GElf_Shdr *shdr); ++static void handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, 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); +@@ -272,6 +288,18 @@ static error_t + parse_opt (int key, char *arg, + struct argp_state *state __attribute__ ((unused))) + { ++ void add_dump_section (const char *name, bool implicit) ++ { ++ struct section_argument *a = xmalloc (sizeof *a); ++ a->arg = name; ++ a->next = NULL; ++ a->implicit = implicit; ++ struct section_argument ***tailp ++ = key == 'x' ? &dump_data_sections_tail : &string_sections_tail; ++ **tailp = a; ++ *tailp = &a->next; ++ } ++ + switch (key) + { + case 'a': +@@ -286,6 +314,10 @@ parse_opt (int key, char *arg, + print_histogram = true; + print_arch = true; + print_notes = true; ++ implicit_debug_sections |= section_exception; ++ add_dump_section (".strtab", true); ++ add_dump_section (".dynstr", true); ++ add_dump_section (".comment", true); + any_control_option = true; + break; + case 'A': +@@ -296,6 +328,10 @@ parse_opt (int key, char *arg, + print_dynamic_table = true; + any_control_option = true; + break; ++ case 'e': ++ print_debug_sections |= section_exception; ++ any_control_option = true; ++ break; + case 'g': + print_section_groups = true; + any_control_option = true; +@@ -344,7 +380,7 @@ parse_opt (int key, char *arg, + print_debug_sections |= section_aranges; + else if (strcmp (arg, "ranges") == 0) + print_debug_sections |= section_ranges; +- else if (strcmp (arg, "frame") == 0) ++ else if (strcmp (arg, "frame") == 0 || strcmp (arg, "frames") == 0) + print_debug_sections |= section_frame; + else if (strcmp (arg, "info") == 0) + print_debug_sections |= section_info; +@@ -358,6 +394,8 @@ parse_opt (int key, char *arg, + print_debug_sections |= section_str; + else if (strcmp (arg, "macinfo") == 0) + print_debug_sections |= section_macinfo; ++ else if (strcmp (arg, "exception") == 0) ++ print_debug_sections |= section_exception; + else + { + fprintf (stderr, gettext ("Unknown DWARF debug section `%s'.\n"), +@@ -377,17 +415,12 @@ parse_opt (int key, char *arg, + } + /* 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; +- } ++ add_dump_section (arg, false); + any_control_option = true; + break; ++ case 'N': ++ print_address_names = false; ++ break; + case ARGP_KEY_NO_ARGS: + fputs (gettext ("Missing file name.\n"), stderr); + goto do_argp_help; +@@ -396,9 +429,9 @@ parse_opt (int key, char *arg, + { + fputs (gettext ("No operation specified.\n"), stderr); + do_argp_help: +- argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR, ++ argp_help (&argp, stderr, ARGP_HELP_SEE, + program_invocation_short_name); +- exit (1); ++ exit (EXIT_FAILURE); + } + break; + default: +@@ -417,7 +450,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -459,8 +492,10 @@ count_dwflmod (Dwfl_Module *dwflmod __attribute__ ((unused)), + Dwarf_Addr base __attribute__ ((unused)), + void *arg) + { +- *(bool *) arg = false; +- return DWARF_CB_ABORT; ++ if (*(bool *) arg) ++ return DWARF_CB_ABORT; ++ *(bool *) arg = true; ++ return DWARF_CB_OK; + } + + struct process_dwflmod_args +@@ -548,8 +583,11 @@ process_file (int fd, const char *fname, bool only_one) + dwfl_report_end (dwfl, NULL, NULL); + + if (only_one) +- /* Clear ONLY_ONE if we have multiple modules, from an archive. */ +- dwfl_getmodules (dwfl, &count_dwflmod, &only_one, 1); ++ { ++ /* 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 }; +@@ -585,11 +623,17 @@ process_elf_file (Dwfl_Module *dwflmod, int fd) + } + + /* Determine the number of sections. */ +- if (unlikely (elf_getshnum (ebl->elf, &shnum) < 0)) ++ if (unlikely (elf_getshdrnum (ebl->elf, &shnum) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot determine number of sections: %s"), + elf_errmsg (-1)); + ++ /* Determine the number of phdrs. */ ++ if (unlikely (elf_getphdrnum (ebl->elf, &phnum) < 0)) ++ error (EXIT_FAILURE, 0, ++ gettext ("cannot determine number of program headers: %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. */ +@@ -629,9 +673,9 @@ process_elf_file (Dwfl_Module *dwflmod, int fd) + if (print_section_groups) + print_scngrp (ebl); + if (print_dynamic_table) +- print_dynamic (ebl, ehdr); ++ print_dynamic (ebl); + if (print_relocations) +- print_relocs (pure_ebl); ++ print_relocs (pure_ebl, ehdr); + if (print_histogram) + handle_hash (ebl); + if (print_symbol_table) +@@ -648,7 +692,7 @@ process_elf_file (Dwfl_Module *dwflmod, int fd) + dump_data (pure_ebl); + if (string_sections != NULL) + dump_strings (ebl); +- if (print_debug_sections != 0) ++ if ((print_debug_sections | implicit_debug_sections) != 0) + print_debug (dwflmod, ebl, ehdr); + if (print_notes) + handle_notes (pure_ebl, ehdr); +@@ -748,8 +792,19 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr) + printf (gettext (" Size of program header entries: %" PRId16 " %s\n"), + ehdr->e_phentsize, gettext ("(bytes)")); + +- printf (gettext (" Number of program headers entries: %" PRId16 "\n"), ++ printf (gettext (" Number of program headers entries: %" PRId16), + ehdr->e_phnum); ++ if (ehdr->e_phnum == PN_XNUM) ++ { ++ 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_info)"), ++ (uint32_t) shdr->sh_info); ++ else ++ fputs_unlocked (gettext (" ([0] not available)"), stdout); ++ } ++ fputc_unlocked ('\n', stdout); + + printf (gettext (" Size of section header entries: %" PRId16 " %s\n"), + ehdr->e_shentsize, gettext ("(bytes)")); +@@ -824,7 +879,7 @@ There are %d section headers, starting at offset %#" PRIx64 ":\n\ + ehdr->e_shnum, ehdr->e_shoff); + + /* Get the section header string table index. */ +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -917,7 +972,7 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) + bool has_relro = false; + GElf_Addr relro_from = 0; + GElf_Addr relro_to = 0; +- for (size_t cnt = 0; cnt < ehdr->e_phnum; ++cnt) ++ for (size_t cnt = 0; cnt < phnum; ++cnt) + { + char buf[128]; + GElf_Phdr mem; +@@ -961,15 +1016,19 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) + } + } + ++ if (ehdr->e_shnum == 0) ++ /* No sections in the file. Punt. */ ++ return; ++ + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (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) ++ for (size_t cnt = 0; cnt < phnum; ++cnt) + { + /* Print the segment number. */ + printf (" %2.2zu ", cnt); +@@ -1039,7 +1098,7 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) + /* Determine the segment this section is part of. */ + size_t cnt2; + GElf_Phdr *phdr2 = NULL; +- for (cnt2 = 0; cnt2 < ehdr->e_phnum; ++cnt2) ++ for (cnt2 = 0; cnt2 < phnum; ++cnt2) + { + GElf_Phdr phdr2_mem; + phdr2 = gelf_getphdr (ebl->elf, cnt2, &phdr2_mem); +@@ -1051,7 +1110,7 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) + break; + } + +- if (cnt2 < ehdr->e_phnum) ++ if (cnt2 < phnum) + { + if ((phdr2->p_flags & PF_W) == 0 && !in_ro) + { +@@ -1104,7 +1163,7 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -1286,7 +1345,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + return; + + /* Get the section header string table index. */ +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -1402,9 +1461,9 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Print the dynamic segment. */ + static void +-print_dynamic (Ebl *ebl, GElf_Ehdr *ehdr) ++print_dynamic (Ebl *ebl) + { +- for (int i = 0; i < ehdr->e_phnum; ++i) ++ for (size_t i = 0; i < phnum; ++i) + { + GElf_Phdr phdr_mem; + GElf_Phdr *phdr = gelf_getphdr (ebl->elf, i, &phdr_mem); +@@ -1424,7 +1483,7 @@ print_dynamic (Ebl *ebl, GElf_Ehdr *ehdr) + + /* Print relocations. */ + static void +-print_relocs (Ebl *ebl) ++print_relocs (Ebl *ebl, GElf_Ehdr *ehdr) + { + /* Find all relocation sections and handle them. */ + Elf_Scn *scn = NULL; +@@ -1438,9 +1497,9 @@ print_relocs (Ebl *ebl) + if (likely (shdr != NULL)) + { + if (shdr->sh_type == SHT_REL) +- handle_relocs_rel (ebl, scn, shdr); ++ handle_relocs_rel (ebl, ehdr, scn, shdr); + else if (shdr->sh_type == SHT_RELA) +- handle_relocs_rela (ebl, scn, shdr); ++ handle_relocs_rela (ebl, ehdr, scn, shdr); + } + } + } +@@ -1448,7 +1507,7 @@ print_relocs (Ebl *ebl) + + /* Handle a relocation section. */ + static void +-handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) ++handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) + { + int class = gelf_getclass (ebl->elf); + int nentries = shdr->sh_size / shdr->sh_entsize; +@@ -1484,17 +1543,17 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (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 [%2zu] '%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", ++\nRelocation section [%2zu] '%s' for section [%2u] '%s' at offset %#0" PRIx64 " contains %d entries:\n", + nentries), +- (unsigned int) elf_ndxscn (scn), ++ elf_ndxscn (scn), + elf_strptr (ebl->elf, shstrndx, shdr->sh_name), + (unsigned int) shdr->sh_info, + elf_strptr (ebl->elf, shstrndx, destshdr->sh_name), +@@ -1520,6 +1579,7 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + Offset Type Value Name\n"), + stdout); + ++ int is_statically_linked = 0; + for (int cnt = 0; cnt < nentries; ++cnt) + { + GElf_Rel relmem; +@@ -1533,16 +1593,56 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + 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 (""), +- gettext ("INVALID SYMBOL"), +- (long int) GELF_R_SYM (rel->r_info)); ++ { ++ /* As a special case we have to handle relocations in static ++ executables. This only happens for IRELATIVE relocations ++ (so far). There is no symbol table. */ ++ if (is_statically_linked == 0) ++ { ++ /* Find the program header and look for a PT_INTERP entry. */ ++ is_statically_linked = -1; ++ if (ehdr->e_type == ET_EXEC) ++ { ++ is_statically_linked = 1; ++ ++ for (size_t inner = 0; inner < phnum; ++inner) ++ { ++ GElf_Phdr phdr_mem; ++ GElf_Phdr *phdr = gelf_getphdr (ebl->elf, inner, ++ &phdr_mem); ++ if (phdr != NULL && phdr->p_type == PT_INTERP) ++ { ++ is_statically_linked = -1; ++ break; ++ } ++ } ++ } ++ } ++ ++ if (is_statically_linked > 0 && shdr->sh_link == 0) ++ printf ("\ ++ %#0*" PRIx64 " %-20s %*s %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 (""), ++ class == ELFCLASS32 ? 10 : 18, "", ++ elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); ++ else ++ 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 (""), ++ 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, +@@ -1593,7 +1693,7 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Handle a relocation section. */ + static void +-handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) ++handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) + { + int class = gelf_getclass (ebl->elf); + int nentries = shdr->sh_size / shdr->sh_entsize; +@@ -1629,7 +1729,7 @@ handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -1651,6 +1751,7 @@ handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + Offset Type Value Addend Name\n"), + stdout); + ++ int is_statically_linked = 0; + for (int cnt = 0; cnt < nentries; ++cnt) + { + GElf_Rela relmem; +@@ -1665,16 +1766,57 @@ handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + &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 (""), +- gettext ("INVALID SYMBOL"), +- (long int) GELF_R_SYM (rel->r_info)); ++ { ++ /* As a special case we have to handle relocations in static ++ executables. This only happens for IRELATIVE relocations ++ (so far). There is no symbol table. */ ++ if (is_statically_linked == 0) ++ { ++ /* Find the program header and look for a PT_INTERP entry. */ ++ is_statically_linked = -1; ++ if (ehdr->e_type == ET_EXEC) ++ { ++ is_statically_linked = 1; ++ ++ for (size_t inner = 0; inner < phnum; ++inner) ++ { ++ GElf_Phdr phdr_mem; ++ GElf_Phdr *phdr = gelf_getphdr (ebl->elf, inner, ++ &phdr_mem); ++ if (phdr != NULL && phdr->p_type == PT_INTERP) ++ { ++ is_statically_linked = -1; ++ break; ++ } ++ } ++ } ++ } ++ ++ if (is_statically_linked > 0 && shdr->sh_link == 0) ++ printf ("\ ++ %#0*" PRIx64 " %-15s %*s %#6" 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 (""), ++ class == ELFCLASS32 ? 10 : 18, "", ++ rel->r_addend, ++ elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); ++ else ++ 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 (""), ++ 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", +@@ -1797,7 +1939,7 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -2051,7 +2193,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -2117,7 +2259,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -2195,7 +2337,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -2692,7 +2834,7 @@ handle_hash (Ebl *ebl) + { + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -2728,7 +2870,7 @@ print_liblist (Ebl *ebl) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -2790,7 +2932,7 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -2799,7 +2941,9 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + +- if (shdr == NULL || shdr->sh_type != SHT_GNU_ATTRIBUTES) ++ if (shdr == NULL || (shdr->sh_type != SHT_GNU_ATTRIBUTES ++ && (shdr->sh_type != SHT_ARM_ATTRIBUTES ++ || ehdr->e_machine != EM_ARM))) + continue; + + printf (gettext ("\ +@@ -2846,8 +2990,9 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) + + printf (gettext (" %-13s %4" PRIu32 "\n"), name, len); + +- if (q - name == sizeof "gnu" +- && !memcmp (name, "gnu", sizeof "gnu")) ++ if (shdr->sh_type != SHT_GNU_ATTRIBUTES ++ || (q - name == sizeof "gnu" ++ && !memcmp (name, "gnu", sizeof "gnu"))) + while (q < p) + { + const unsigned char *const sub = q; +@@ -2948,7 +3093,8 @@ format_dwarf_addr (Dwfl_Module *dwflmod, + { + /* 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); ++ const char *name = print_address_names ++ ? dwfl_module_addrsym (dwflmod, address, &sym, NULL) : NULL; + if (name != NULL) + sym.st_value = address - sym.st_value; + +@@ -3319,6 +3465,14 @@ dwarf_attr_string (unsigned int attrnum) + result = "body_end"; + break; + ++ case DW_AT_GNU_vector: ++ result = "GNU_vector"; ++ break; ++ ++ case DW_AT_GNU_template_name: ++ result = "GNU_template_name"; ++ break; ++ + default: + if (attrnum < DW_AT_lo_user) + snprintf (buf, sizeof buf, gettext ("unknown attribute %hx"), +@@ -3601,6 +3755,22 @@ dwarf_discr_list_string (unsigned int code) + + + static void ++print_block (size_t n, const void *block) ++{ ++ if (n == 0) ++ puts (_("empty block")); ++ else ++ { ++ printf (_("%zu byte block:"), n); ++ const unsigned char *data = block; ++ do ++ printf (" %02x", *data++); ++ while (--n > 0); ++ putchar ('\n'); ++ } ++} ++ ++static void + print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + unsigned int addrsize, Dwarf_Word len, const unsigned char *data) + { +@@ -3758,8 +3928,18 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + [DW_OP_form_tls_address] = "form_tls_address", + [DW_OP_call_frame_cfa] = "call_frame_cfa", + [DW_OP_bit_piece] = "bit_piece", ++ [DW_OP_implicit_value] = "implicit_value", ++ [DW_OP_stack_value] = "stack_value", + }; + ++ if (len == 0) ++ { ++ printf ("%*s(empty)\n", indent, ""); ++ return; ++ } ++ ++#define NEED(n) if (len < n) goto invalid; ++ + Dwarf_Word offset = 0; + while (len-- > 0) + { +@@ -3771,6 +3951,7 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + case DW_OP_addr:; + /* Address operand. */ + Dwarf_Word addr; ++ NEED (addrsize); + if (addrsize == 4) + addr = read_4ubyte_unaligned (dbg, data); + else +@@ -3785,14 +3966,13 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + { + char *a = format_dwarf_addr (dwflmod, 0, addr); + printf ("%*s[%4" PRIuMAX "] %s %s\n", +- indent, "", (uintmax_t) offset, +- known[op] ?: "???", a); ++ 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); ++ known[op], (uintmax_t) addr); + offset += 1 + addrsize; + break; + +@@ -3800,72 +3980,88 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + case DW_OP_xderef_size: + case DW_OP_pick: + case DW_OP_const1u: ++ // XXX value might be modified by relocation ++ NEED (1); + printf ("%*s[%4" PRIuMAX "] %s %" PRIu8 "\n", + indent, "", (uintmax_t) offset, +- known[op] ?: "???", *((uint8_t *) data)); ++ known[op], *((uint8_t *) data)); + ++data; + --len; + offset += 2; + break; + + case DW_OP_const2u: ++ NEED (2); ++ // XXX value might be modified by relocation + printf ("%*s[%4" PRIuMAX "] %s %" PRIu16 "\n", + indent, "", (uintmax_t) offset, +- known[op] ?: "???", read_2ubyte_unaligned (dbg, data)); ++ known[op], read_2ubyte_unaligned (dbg, data)); + len -= 2; + data += 2; + offset += 3; + break; + + case DW_OP_const4u: ++ NEED (4); ++ // XXX value might be modified by relocation + printf ("%*s[%4" PRIuMAX "] %s %" PRIu32 "\n", + indent, "", (uintmax_t) offset, +- known[op] ?: "???", read_4ubyte_unaligned (dbg, data)); ++ known[op], read_4ubyte_unaligned (dbg, data)); + len -= 4; + data += 4; + offset += 5; + break; + + case DW_OP_const8u: ++ NEED (8); ++ // XXX value might be modified by relocation + printf ("%*s[%4" PRIuMAX "] %s %" PRIu64 "\n", + indent, "", (uintmax_t) offset, +- known[op] ?: "???", read_8ubyte_unaligned (dbg, data)); ++ known[op], read_8ubyte_unaligned (dbg, data)); + len -= 8; + data += 8; + offset += 9; + break; + + case DW_OP_const1s: ++ NEED (1); ++ // XXX value might be modified by relocation + printf ("%*s[%4" PRIuMAX "] %s %" PRId8 "\n", + indent, "", (uintmax_t) offset, +- known[op] ?: "???", *((int8_t *) data)); ++ known[op], *((int8_t *) data)); + ++data; + --len; + offset += 2; + break; + + case DW_OP_const2s: ++ NEED (2); ++ // XXX value might be modified by relocation + printf ("%*s[%4" PRIuMAX "] %s %" PRId16 "\n", + indent, "", (uintmax_t) offset, +- known[op] ?: "???", read_2sbyte_unaligned (dbg, data)); ++ known[op], read_2sbyte_unaligned (dbg, data)); + len -= 2; + data += 2; + offset += 3; + break; + + case DW_OP_const4s: ++ NEED (4); ++ // XXX value might be modified by relocation + printf ("%*s[%4" PRIuMAX "] %s %" PRId32 "\n", + indent, "", (uintmax_t) offset, +- known[op] ?: "???", read_4sbyte_unaligned (dbg, data)); ++ known[op], read_4sbyte_unaligned (dbg, data)); + len -= 4; + data += 4; + offset += 5; + break; + + case DW_OP_const8s: ++ NEED (8); ++ // XXX value might be modified by relocation + printf ("%*s[%4" PRIuMAX "] %s %" PRId64 "\n", + indent, "", (uintmax_t) offset, +- known[op] ?: "???", read_8sbyte_unaligned (dbg, data)); ++ known[op], read_8sbyte_unaligned (dbg, data)); + len -= 8; + data += 8; + offset += 9; +@@ -3877,10 +4073,9 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + case DW_OP_constu:; + const unsigned char *start = data; + unsigned int uleb; +- get_uleb128 (uleb, data); ++ get_uleb128 (uleb, data); /* XXX check overrun */ + printf ("%*s[%4" PRIuMAX "] %s %u\n", +- indent, "", (uintmax_t) offset, +- known[op] ?: "???", uleb); ++ indent, "", (uintmax_t) offset, known[op], uleb); + len -= data - start; + offset += 1 + (data - start); + break; +@@ -3888,11 +4083,10 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + case DW_OP_bit_piece: + start = data; + unsigned int uleb2; +- get_uleb128 (uleb, data); +- get_uleb128 (uleb2, data); ++ get_uleb128 (uleb, data); /* XXX check overrun */ ++ get_uleb128 (uleb2, data); /* XXX check overrun */ + printf ("%*s[%4" PRIuMAX "] %s %u, %u\n", +- indent, "", (uintmax_t) offset, +- known[op] ?: "???", uleb, uleb2); ++ indent, "", (uintmax_t) offset, known[op], uleb, uleb2); + len -= data - start; + offset += 1 + (data - start); + break; +@@ -3902,38 +4096,64 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + case DW_OP_consts: + start = data; + unsigned int sleb; +- get_sleb128 (sleb, data); ++ get_sleb128 (sleb, data); /* XXX check overrun */ + printf ("%*s[%4" PRIuMAX "] %s %d\n", +- indent, "", (uintmax_t) offset, +- known[op] ?: "???", sleb); ++ 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); ++ get_uleb128 (uleb, data); /* XXX check overrun */ ++ get_sleb128 (sleb, data); /* XXX check overrun */ + printf ("%*s[%4" PRIuMAX "] %s %u %d\n", +- indent, "", (uintmax_t) offset, +- known[op] ?: "???", uleb, sleb); ++ indent, "", (uintmax_t) offset, known[op], uleb, sleb); + len -= data - start; + offset += 1 + (data - start); + break; + + case DW_OP_call2: ++ NEED (2); ++ printf ("%*s[%4" PRIuMAX "] %s %" PRIu16 "\n", ++ indent, "", (uintmax_t) offset, known[op], ++ read_2ubyte_unaligned (dbg, data)); ++ len -= 2; ++ offset += 3; ++ break; ++ + case DW_OP_call4: ++ NEED (4); ++ printf ("%*s[%4" PRIuMAX "] %s %" PRIu32 "\n", ++ indent, "", (uintmax_t) offset, known[op], ++ read_4ubyte_unaligned (dbg, data)); ++ len -= 4; ++ offset += 5; ++ break; ++ + case DW_OP_skip: + case DW_OP_bra: ++ NEED (2); + printf ("%*s[%4" PRIuMAX "] %s %" PRIuMAX "\n", +- indent, "", (uintmax_t) offset, +- known[op] ?: "???", ++ indent, "", (uintmax_t) offset, known[op], + (uintmax_t) (offset + read_2sbyte_unaligned (dbg, data))); + len -= 2; + data += 2; + offset += 3; + break; + ++ case DW_OP_implicit_value: ++ start = data; ++ get_uleb128 (uleb, data); /* XXX check overrun */ ++ printf ("%*s[%4" PRIuMAX "] %s: ", ++ indent, "", (uintmax_t) offset, known[op]); ++ NEED (uleb); ++ print_block (uleb, data); ++ data += uleb; ++ len -= data - start; ++ offset += 1 + (data - start); ++ break; ++ + default: + /* No Operand. */ + if (op < sizeof known / sizeof known[0] && known[op] != NULL) +@@ -3947,6 +4167,12 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, + } + + indent = indentrest; ++ continue; ++ ++ invalid: ++ printf (gettext ("%*s[%4" PRIuMAX "] %s \n"), ++ indent, "", (uintmax_t) offset, known[op]); ++ break; + } + } + +@@ -3955,12 +4181,11 @@ 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) ++ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) + { +- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n" ++ printf (gettext ("\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n" + " [ Code]\n"), +- ".debug_abbrev", (uint64_t) shdr->sh_offset); ++ elf_ndxscn (scn), ".debug_abbrev", (uint64_t) shdr->sh_offset); + + Dwarf_Off offset = 0; + while (offset < shdr->sh_size) +@@ -4026,8 +4251,7 @@ print_debug_abbrev_section (Dwfl_Module *dwflmod __attribute__ ((unused)), + 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_Ehdr *ehdr, Elf_Scn *scn, + GElf_Shdr *shdr, Dwarf *dbg) + { + Dwarf_Aranges *aranges; +@@ -4040,11 +4264,11 @@ print_debug_aranges_section (Dwfl_Module *dwflmod __attribute__ ((unused)), + } + + printf (ngettext ("\ +-\nDWARF section '%s' at offset %#" PRIx64 " contains %zu entry:\n", ++\nDWARF section [%2zu] '%s' at offset %#" PRIx64 " contains %zu entry:\n", + "\ +-\nDWARF section '%s' at offset %#" PRIx64 " contains %zu entries:\n", ++\nDWARF section [%2zu] '%s' at offset %#" PRIx64 " contains %zu entries:\n", + cnt), +- ".debug_aranges", (uint64_t) shdr->sh_offset, cnt); ++ elf_ndxscn (scn), ".debug_aranges", (uint64_t) shdr->sh_offset, cnt); + + /* Compute floor(log16(cnt)). */ + size_t tmp = cnt; +@@ -4096,8 +4320,8 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, + } + + printf (gettext ("\ +-\nDWARF section '%s' at offset %#" PRIx64 ":\n"), +- ".debug_ranges", (uint64_t) shdr->sh_offset); ++\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), ++ elf_ndxscn (scn), ".debug_ranges", (uint64_t) shdr->sh_offset); + + size_t address_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; + +@@ -4153,15 +4377,716 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, + } + } + ++#define REGNAMESZ 16 ++static const char * ++register_info (Ebl *ebl, unsigned int regno, const Ebl_Register_Location *loc, ++ char name[REGNAMESZ], int *bits, int *type) ++{ ++ const char *set; ++ const char *pfx; ++ int ignore; ++ ssize_t n = ebl_register_info (ebl, regno, name, REGNAMESZ, &pfx, &set, ++ bits ?: &ignore, type ?: &ignore); ++ if (n <= 0) ++ { ++ snprintf (name, sizeof name, "reg%u", loc->regno); ++ if (bits != NULL) ++ *bits = loc->bits; ++ if (type != NULL) ++ *type = DW_ATE_unsigned; ++ set = "??? unrecognized"; ++ } ++ else ++ { ++ if (bits != NULL && *bits <= 0) ++ *bits = loc->bits; ++ if (type != NULL && *type == DW_ATE_void) ++ *type = DW_ATE_unsigned; ++ ++ } ++ return set; ++} + + 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))) ++print_cfa_program (const unsigned char *readp, const unsigned char *const endp, ++ Dwarf_Word vma_base, unsigned int code_align, ++ int data_align, unsigned int ptr_size, Dwfl_Module *dwflmod, ++ Ebl *ebl, Dwarf *dbg) ++{ ++ char regnamebuf[REGNAMESZ]; ++ const char *regname (unsigned int regno) ++ { ++ register_info (ebl, regno, NULL, regnamebuf, NULL, NULL); ++ return regnamebuf; ++ } ++ ++ puts ("\n Program:"); ++ Dwarf_Word pc = vma_base; ++ while (readp < endp) ++ { ++ unsigned int opcode = *readp++; ++ ++ if (opcode < DW_CFA_advance_loc) ++ /* Extended opcode. */ ++ switch (opcode) ++ { ++ uint64_t op1; ++ int64_t sop1; ++ uint64_t op2; ++ int64_t sop2; ++ ++ case DW_CFA_nop: ++ puts (" nop"); ++ break; ++ case DW_CFA_set_loc: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ op1 += vma_base; ++ printf (" set_loc %" PRIu64 "\n", op1 * code_align); ++ break; ++ case DW_CFA_advance_loc1: ++ printf (" advance_loc1 %u to %#" PRIx64 "\n", ++ *readp, pc += *readp * code_align); ++ ++readp; ++ break; ++ case DW_CFA_advance_loc2: ++ op1 = read_2ubyte_unaligned_inc (dbg, readp); ++ printf (" advance_loc2 %" PRIu64 " to %#" PRIx64 "\n", ++ op1, pc += op1 * code_align); ++ break; ++ case DW_CFA_advance_loc4: ++ op1 = read_4ubyte_unaligned_inc (dbg, readp); ++ printf (" advance_loc4 %" PRIu64 " to %#" PRIx64 "\n", ++ op1, pc += op1 * code_align); ++ break; ++ case DW_CFA_offset_extended: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_uleb128 (op2, readp); ++ printf (" offset_extended r%" PRIu64 " (%s) at cfa%+" PRId64 ++ "\n", ++ op1, regname (op1), op2 * data_align); ++ break; ++ case DW_CFA_restore_extended: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ printf (" restore_extended r%" PRIu64 " (%s)\n", ++ op1, regname (op1)); ++ break; ++ case DW_CFA_undefined: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ printf (" undefined r%" PRIu64 " (%s)\n", op1, regname (op1)); ++ break; ++ case DW_CFA_same_value: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ printf (" same_value r%" PRIu64 " (%s)\n", op1, regname (op1)); ++ break; ++ case DW_CFA_register: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_uleb128 (op2, readp); ++ printf (" register r%" PRIu64 " (%s) in r%" PRIu64 " (%s)\n", ++ op1, regname (op1), op2, regname (op2)); ++ break; ++ case DW_CFA_remember_state: ++ puts (" remember_state"); ++ break; ++ case DW_CFA_restore_state: ++ puts (" restore_state"); ++ break; ++ case DW_CFA_def_cfa: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_uleb128 (op2, readp); ++ printf (" def_cfa r%" PRIu64 " (%s) at offset %" PRIu64 "\n", ++ op1, regname (op1), op2); ++ break; ++ case DW_CFA_def_cfa_register: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ printf (" def_cfa_register r%" PRIu64 " (%s)\n", ++ op1, regname (op1)); ++ break; ++ case DW_CFA_def_cfa_offset: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ printf (" def_cfa_offset %" PRIu64 "\n", op1); ++ break; ++ case DW_CFA_def_cfa_expression: ++ // XXX overflow check ++ get_uleb128 (op1, readp); /* Length of DW_FORM_block. */ ++ printf (" def_cfa_expression %" PRIu64 "\n", op1); ++ print_ops (dwflmod, dbg, 10, 10, ptr_size, op1, readp); ++ readp += op1; ++ break; ++ case DW_CFA_expression: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_uleb128 (op2, readp); /* Length of DW_FORM_block. */ ++ printf (" expression r%" PRIu64 " (%s) \n", ++ op1, regname (op1)); ++ print_ops (dwflmod, dbg, 10, 10, ptr_size, op2, readp); ++ readp += op2; ++ break; ++ case DW_CFA_offset_extended_sf: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_sleb128 (sop2, readp); ++ printf (" offset_extended_sf r%" PRIu64 " (%s) at cfa%+" ++ PRId64 "\n", ++ op1, regname (op1), sop2 * data_align); ++ break; ++ case DW_CFA_def_cfa_sf: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_sleb128 (sop2, readp); ++ printf (" def_cfa_sf r%" PRIu64 " (%s) at offset %" PRId64 "\n", ++ op1, regname (op1), sop2 * data_align); ++ break; ++ case DW_CFA_def_cfa_offset_sf: ++ // XXX overflow check ++ get_sleb128 (sop1, readp); ++ printf (" def_cfa_offset_sf %" PRId64 "\n", sop1 * data_align); ++ break; ++ case DW_CFA_val_offset: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_uleb128 (op2, readp); ++ printf (" val_offset %" PRIu64 " at offset %" PRIu64 "\n", ++ op1, op2 * data_align); ++ break; ++ case DW_CFA_val_offset_sf: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_sleb128 (sop2, readp); ++ printf (" val_offset_sf %" PRIu64 " at offset %" PRId64 "\n", ++ op1, sop2 * data_align); ++ break; ++ case DW_CFA_val_expression: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ get_uleb128 (op2, readp); /* Length of DW_FORM_block. */ ++ printf (" val_expression r%" PRIu64 " (%s)\n", ++ op1, regname (op1)); ++ print_ops (dwflmod, dbg, 10, 10, ptr_size, op2, readp); ++ readp += op2; ++ break; ++ case DW_CFA_MIPS_advance_loc8: ++ op1 = read_8ubyte_unaligned_inc (dbg, readp); ++ printf (" MIPS_advance_loc8 %" PRIu64 " to %#" PRIx64 "\n", ++ op1, pc += op1 * code_align); ++ break; ++ case DW_CFA_GNU_window_save: ++ puts (" GNU_window_save"); ++ break; ++ case DW_CFA_GNU_args_size: ++ // XXX overflow check ++ get_uleb128 (op1, readp); ++ printf (" args_size %" PRIu64 "\n", op1); ++ break; ++ default: ++ printf (" ??? (%u)\n", opcode); ++ break; ++ } ++ else if (opcode < DW_CFA_offset) ++ printf (" advance_loc %u to %#" PRIx64 "\n", ++ opcode & 0x3f, pc += (opcode & 0x3f) * code_align); ++ else if (opcode < DW_CFA_restore) ++ { ++ unsigned int offset; ++ // XXX overflow check ++ get_uleb128 (offset, readp); ++ printf (" offset r%u (%s) at cfa%+d\n", ++ opcode & 0x3f, regname (opcode & 0x3f), offset * data_align); ++ } ++ else ++ printf (" restore r%u (%s)\n", ++ opcode & 0x3f, regname (opcode & 0x3f)); ++ } ++} ++ ++ ++static unsigned int ++encoded_ptr_size (int encoding, unsigned int ptr_size) + { ++ switch (encoding & 7) ++ { ++ case 2: ++ return 2; ++ case 3: ++ return 4; ++ case 4: ++ return 8; ++ default: ++ return ptr_size; ++ } ++} ++ ++ ++static unsigned int ++print_encoding (unsigned int val) ++{ ++ switch (val & 0xf) ++ { ++ case DW_EH_PE_absptr: ++ fputs ("absptr", stdout); ++ break; ++ case DW_EH_PE_uleb128: ++ fputs ("uleb128", stdout); ++ break; ++ case DW_EH_PE_udata2: ++ fputs ("udata2", stdout); ++ break; ++ case DW_EH_PE_udata4: ++ fputs ("udata4", stdout); ++ break; ++ case DW_EH_PE_udata8: ++ fputs ("udata8", stdout); ++ break; ++ case DW_EH_PE_sleb128: ++ fputs ("sleb128", stdout); ++ break; ++ case DW_EH_PE_sdata2: ++ fputs ("sdata2", stdout); ++ break; ++ case DW_EH_PE_sdata4: ++ fputs ("sdata4", stdout); ++ break; ++ case DW_EH_PE_sdata8: ++ fputs ("sdata8", stdout); ++ break; ++ default: ++ /* We did not use any of the bits after all. */ ++ return val; ++ } ++ ++ return val & ~0xf; ++} ++ ++ ++static unsigned int ++print_relinfo (unsigned int val) ++{ ++ switch (val & 0x70) ++ { ++ case DW_EH_PE_pcrel: ++ fputs ("pcrel", stdout); ++ break; ++ case DW_EH_PE_textrel: ++ fputs ("textrel", stdout); ++ break; ++ case DW_EH_PE_datarel: ++ fputs ("datarel", stdout); ++ break; ++ case DW_EH_PE_funcrel: ++ fputs ("funcrel", stdout); ++ break; ++ case DW_EH_PE_aligned: ++ fputs ("aligned", stdout); ++ break; ++ default: ++ return val; ++ } ++ ++ return val & ~0x70; ++} ++ ++ ++static void ++print_encoding_base (const char *pfx, unsigned int fde_encoding) ++{ ++ printf ("(%s", pfx); ++ ++ if (fde_encoding == DW_EH_PE_omit) ++ puts ("omit)"); ++ else ++ { ++ unsigned int w = fde_encoding; ++ ++ w = print_encoding (w); ++ ++ if (w & 0x70) ++ { ++ if (w != fde_encoding) ++ fputc_unlocked (' ', stdout); ++ ++ w = print_relinfo (w); ++ } ++ ++ if (w != 0) ++ printf ("%s%x", w != fde_encoding ? " " : "", w); ++ ++ puts (")"); ++ } ++} ++ ++ ++static const unsigned char * ++read_encoded (unsigned int encoding, const unsigned char *readp, ++ const unsigned char *const endp, uint64_t *res, Dwarf *dbg) ++{ ++ if ((encoding & 0xf) == DW_EH_PE_absptr) ++ encoding = gelf_getclass (dbg->elf) == ELFCLASS32 ++ ? DW_EH_PE_udata4 : DW_EH_PE_udata8; ++ ++ switch (encoding & 0xf) ++ { ++ case DW_EH_PE_uleb128: ++ // XXX buffer overrun check ++ get_uleb128 (*res, readp); ++ break; ++ case DW_EH_PE_sleb128: ++ // XXX buffer overrun check ++ get_sleb128 (*res, readp); ++ break; ++ case DW_EH_PE_udata2: ++ if (readp + 2 > endp) ++ goto invalid; ++ *res = read_2ubyte_unaligned_inc (dbg, readp); ++ break; ++ case DW_EH_PE_udata4: ++ if (readp + 4 > endp) ++ goto invalid; ++ *res = read_4ubyte_unaligned_inc (dbg, readp); ++ break; ++ case DW_EH_PE_udata8: ++ if (readp + 8 > endp) ++ goto invalid; ++ *res = read_8ubyte_unaligned_inc (dbg, readp); ++ break; ++ case DW_EH_PE_sdata2: ++ if (readp + 2 > endp) ++ goto invalid; ++ *res = read_2sbyte_unaligned_inc (dbg, readp); ++ break; ++ case DW_EH_PE_sdata4: ++ if (readp + 4 > endp) ++ goto invalid; ++ *res = read_4sbyte_unaligned_inc (dbg, readp); ++ break; ++ case DW_EH_PE_sdata8: ++ if (readp + 8 > endp) ++ goto invalid; ++ *res = read_8sbyte_unaligned_inc (dbg, readp); ++ break; ++ default: ++ invalid: ++ error (1, 0, ++ gettext ("invalid encoding")); ++ } ++ ++ return readp; ++} ++ ++ ++static void ++print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, ++ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) ++{ ++ size_t shstrndx; ++ /* We know this call will succeed since it did in the caller. */ ++ (void) elf_getshdrstrndx (ebl->elf, &shstrndx); ++ const char *scnname = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); ++ ++ Elf_Data *data = elf_rawdata (scn, NULL); ++ ++ if (unlikely (data == NULL)) ++ { ++ error (0, 0, gettext ("cannot get %s content: %s"), ++ scnname, elf_errmsg (-1)); ++ return; ++ } ++ bool is_eh_frame = strcmp (scnname, ".eh_frame") == 0; ++ ++ if (is_eh_frame) ++ printf (gettext ("\ ++\nCall frame information section [%2zu] '%s' at offset %#" PRIx64 ":\n"), ++ elf_ndxscn (scn), scnname, (uint64_t) shdr->sh_offset); ++ else ++ printf (gettext ("\ ++\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), ++ elf_ndxscn (scn), scnname, (uint64_t) shdr->sh_offset); ++ ++ struct cieinfo ++ { ++ ptrdiff_t cie_offset; ++ const char *augmentation; ++ unsigned int code_alignment_factor; ++ unsigned int data_alignment_factor; ++ unsigned int fde_encoding; ++ unsigned int lsda_encoding; ++ struct cieinfo *next; ++ } *cies = NULL; ++ ++ const unsigned char *readp = data->d_buf; ++ const unsigned char *const dataend = ((unsigned char *) data->d_buf ++ + data->d_size); ++ while (readp < dataend) ++ { ++ if (unlikely (readp + 4 > dataend)) ++ { ++ invalid_data: ++ error (0, 0, gettext ("invalid data in section [%zu] '%s'"), ++ elf_ndxscn (scn), scnname); ++ return; ++ } ++ ++ /* At the beginning there must be a CIE. There can be multiple, ++ hence we test tis in a loop. */ ++ ptrdiff_t offset = readp - (unsigned char *) data->d_buf; ++ ++ Dwarf_Word unit_length = read_4ubyte_unaligned_inc (dbg, readp); ++ unsigned int length = 4; ++ if (unlikely (unit_length == 0xffffffff)) ++ { ++ if (unlikely (readp + 8 > dataend)) ++ goto invalid_data; ++ ++ unit_length = read_8ubyte_unaligned_inc (dbg, readp); ++ length = 8; ++ } ++ ++ if (unlikely (unit_length == 0)) ++ { ++ printf (gettext ("\n [%6tx] Zero terminator\n"), offset); ++ continue; ++ } ++ ++ unsigned int ptr_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; ++ ++ ptrdiff_t start = readp - (unsigned char *) data->d_buf; ++ const unsigned char *const cieend = readp + unit_length; ++ if (unlikely (cieend > dataend || readp + 8 > dataend)) ++ goto invalid_data; ++ ++ Dwarf_Off cie_id; ++ if (length == 4) ++ { ++ cie_id = read_4ubyte_unaligned_inc (dbg, readp); ++ if (!is_eh_frame && cie_id == DW_CIE_ID_32) ++ cie_id = DW_CIE_ID_64; ++ } ++ else ++ cie_id = read_8ubyte_unaligned_inc (dbg, readp); ++ ++ unsigned int code_alignment_factor; ++ int data_alignment_factor; ++ unsigned int fde_encoding = 0; ++ unsigned int lsda_encoding = 0; ++ Dwarf_Word initial_location = 0; ++ Dwarf_Word vma_base = 0; ++ ++ if (cie_id == (is_eh_frame ? 0 : DW_CIE_ID_64)) ++ { ++ uint_fast8_t version = *readp++; ++ const char *const augmentation = (const char *) readp; ++ readp = memchr (readp, '\0', cieend - readp); ++ if (unlikely (readp == NULL)) ++ goto invalid_data; ++ ++readp; ++ // XXX Check overflow ++ get_uleb128 (code_alignment_factor, readp); ++ // XXX Check overflow ++ get_sleb128 (data_alignment_factor, readp); ++ ++ /* In some variant for unwind data there is another field. */ ++ if (strcmp (augmentation, "eh") == 0) ++ readp += ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; ++ ++ unsigned int return_address_register; ++ if (unlikely (version == 1)) ++ return_address_register = *readp++; ++ else ++ // XXX Check overflow ++ get_uleb128 (return_address_register, readp); ++ ++ printf ("\n [%6tx] CIE length=%" PRIu64 "\n" ++ " CIE_id: %" PRIu64 "\n" ++ " version: %u\n" ++ " augmentation: \"%s\"\n" ++ " code_alignment_factor: %u\n" ++ " data_alignment_factor: %d\n" ++ " return_address_register: %u\n", ++ offset, (uint64_t) unit_length, (uint64_t) cie_id, ++ version, augmentation, code_alignment_factor, ++ data_alignment_factor, return_address_register); ++ ++ if (augmentation[0] == 'z') ++ { ++ unsigned int augmentationlen; ++ get_uleb128 (augmentationlen, readp); ++ ++ if (augmentationlen > (size_t) (dataend - readp)) ++ error (1, 0, gettext ("invalid augmentation length")); ++ ++ const char *hdr = "Augmentation data:"; ++ const char *cp = augmentation + 1; ++ while (*cp != '\0') ++ { ++ printf (" %-26s%#x ", hdr, *readp); ++ hdr = ""; ++ ++ if (*cp == 'R') ++ { ++ fde_encoding = *readp++; ++ print_encoding_base (gettext ("FDE address encoding: "), ++ fde_encoding); ++ } ++ else if (*cp == 'L') ++ { ++ lsda_encoding = *readp++; ++ print_encoding_base (gettext ("LSDA pointer encoding: "), ++ lsda_encoding); ++ } ++ else if (*cp == 'P') ++ { ++ /* Personality. This field usually has a relocation ++ attached pointing to __gcc_personality_v0. */ ++ const unsigned char *startp = readp; ++ unsigned int encoding = *readp++; ++ uint64_t val = 0; ++ readp = read_encoded (encoding, readp, ++ readp - 1 + augmentationlen, ++ &val, dbg); ++ ++ while (++startp < readp) ++ printf ("%#x ", *startp); ++ ++ putchar ('('); ++ print_encoding (encoding); ++ putchar (' '); ++ switch (encoding & 0xf) ++ { ++ case DW_EH_PE_sleb128: ++ case DW_EH_PE_sdata2: ++ case DW_EH_PE_sdata4: ++ printf ("%" PRId64 ")\n", val); ++ break; ++ default: ++ printf ("%#" PRIx64 ")\n", val); ++ break; ++ } ++ } ++ else ++ printf ("(%x)\n", *readp++); ++ ++ ++cp; ++ } ++ } ++ ++ struct cieinfo *newp = alloca (sizeof (*newp)); ++ newp->cie_offset = offset; ++ newp->augmentation = augmentation; ++ newp->fde_encoding = fde_encoding; ++ newp->lsda_encoding = lsda_encoding; ++ newp->code_alignment_factor = code_alignment_factor; ++ newp->data_alignment_factor = data_alignment_factor; ++ newp->next = cies; ++ cies = newp; ++ } ++ else ++ { ++ struct cieinfo *cie = cies; ++ while (cie != NULL) ++ if (is_eh_frame ++ ? start - (ptrdiff_t) cie_id == cie->cie_offset ++ : (ptrdiff_t) cie_id == cie->cie_offset) ++ break; ++ else ++ cie = cie->next; ++ if (unlikely (cie == NULL)) ++ { ++ puts ("invalid CIE reference in FDE"); ++ return; ++ } ++ ++ /* Initialize from CIE data. */ ++ fde_encoding = cie->fde_encoding; ++ lsda_encoding = cie->lsda_encoding; ++ ptr_size = encoded_ptr_size (fde_encoding, ptr_size); ++ code_alignment_factor = cie->code_alignment_factor; ++ data_alignment_factor = cie->data_alignment_factor; ++ ++ const unsigned char *base = readp; ++ // XXX There are sometimes relocations for this value ++ initial_location = read_ubyte_unaligned_inc (ptr_size, dbg, readp); ++ Dwarf_Word address_range ++ = read_ubyte_unaligned_inc (ptr_size, dbg, readp); ++ ++ printf ("\n [%6tx] FDE length=%" PRIu64 " cie=[%6tx]\n" ++ " CIE_pointer: %" PRIu64 "\n" ++ " initial_location: %#" PRIx64, ++ offset, (uint64_t) unit_length, ++ cie->cie_offset, (uint64_t) cie_id, ++ (uint64_t) initial_location); ++ if ((fde_encoding & 0x70) == DW_EH_PE_pcrel) ++ { ++ vma_base = (((uint64_t) shdr->sh_offset ++ + (base - (const unsigned char *) data->d_buf) ++ + (uint64_t) initial_location) ++ & (ptr_size == 4 ++ ? UINT64_C (0xffffffff) ++ : UINT64_C (0xffffffffffffffff))); ++ printf (gettext (" (offset: %#" PRIx64 ")"), ++ (uint64_t) vma_base); ++ } ++ ++ printf ("\n address_range: %#" PRIx64, ++ (uint64_t) address_range); ++ if ((fde_encoding & 0x70) == DW_EH_PE_pcrel) ++ printf (gettext (" (end offset: %#" PRIx64 ")"), ++ ((uint64_t) vma_base + (uint64_t) address_range) ++ & (ptr_size == 4 ++ ? UINT64_C (0xffffffff) ++ : UINT64_C (0xffffffffffffffff))); ++ putchar ('\n'); ++ ++ if (cie->augmentation[0] == 'z') ++ { ++ unsigned int augmentationlen; ++ get_uleb128 (augmentationlen, readp); ++ ++ if (augmentationlen > 0) ++ { ++ const char *hdr = "Augmentation data:"; ++ const char *cp = cie->augmentation + 1; ++ unsigned int u = 0; ++ while (*cp != '\0') ++ { ++ if (*cp == 'L') ++ { ++ uint64_t lsda_pointer; ++ const unsigned char *p ++ = read_encoded (lsda_encoding, &readp[u], ++ &readp[augmentationlen], ++ &lsda_pointer, dbg); ++ u = p - readp; ++ printf (gettext ("\ ++ %-26sLSDA pointer: %#" PRIx64 "\n"), ++ hdr, lsda_pointer); ++ hdr = ""; ++ } ++ ++cp; ++ } ++ ++ while (u < augmentationlen) ++ { ++ printf (" %-26s%#x\n", hdr, readp[u++]); ++ hdr = ""; ++ } ++ } ++ ++ readp += augmentationlen; ++ } ++ } ++ ++ /* Handle the initialization instructions. */ ++ print_cfa_program (readp, cieend, vma_base, code_alignment_factor, ++ data_alignment_factor, ptr_size, dwflmod, ebl, dbg); ++ readp = cieend; ++ } + } + + +@@ -4254,9 +5179,20 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) + const char *valuestr = NULL; + switch (attr) + { ++ /* This case can take either a constant or a loclistptr. */ ++ case DW_AT_data_member_location: ++ if (form != DW_FORM_data4 && form != DW_FORM_data8) ++ { ++ printf (" %*s%-20s %" PRIxMAX "\n", ++ (int) (level * 2), "", dwarf_attr_string (attr), ++ (uintmax_t) num); ++ return DWARF_CB_OK; ++ } ++ /* else fallthrough */ ++ ++ /* These cases always take a loclistptr and no constant. */ + 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: +@@ -4337,9 +5273,8 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) + 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); ++ printf (" %*s%-20s ", ++ (int) (level * 2), "", dwarf_attr_string (attr)); + + switch (attr) + { +@@ -4366,6 +5301,10 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) + 12 + level * 2, 12 + level * 2, + cbargs->addrsize, block.length, block.data); + break; ++ ++ default: ++ print_block (block.length, block.data); ++ break; + } + break; + +@@ -4384,12 +5323,12 @@ static void + print_debug_info_section (Dwfl_Module *dwflmod, + Ebl *ebl __attribute__ ((unused)), + GElf_Ehdr *ehdr __attribute__ ((unused)), +- Elf_Scn *scn __attribute__ ((unused)), ++ Elf_Scn *scn, + GElf_Shdr *shdr, Dwarf *dbg) + { + printf (gettext ("\ +-\nDWARF section '%s' at offset %#" PRIx64 ":\n [Offset]\n"), +- ".debug_info", (uint64_t) shdr->sh_offset); ++\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n [Offset]\n"), ++ elf_ndxscn (scn), ".debug_info", (uint64_t) shdr->sh_offset); + + /* If the section is empty we don't have to do anything. */ + if (shdr->sh_size == 0) +@@ -4509,8 +5448,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, + Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) + { + printf (gettext ("\ +-\nDWARF section '%s' at offset %#" PRIx64 ":\n"), +- ".debug_line", (uint64_t) shdr->sh_offset); ++\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), ++ elf_ndxscn (scn), ".debug_line", (uint64_t) shdr->sh_offset); + + if (shdr->sh_size == 0) + return; +@@ -4941,11 +5880,8 @@ advance address by fixed value %u to %s\n"), + + 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))) ++ Ebl *ebl __attribute__ ((unused)), GElf_Ehdr *ehdr, ++ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) + { + Elf_Data *data = elf_rawdata (scn, NULL); + +@@ -4957,8 +5893,8 @@ print_debug_loc_section (Dwfl_Module *dwflmod, + } + + printf (gettext ("\ +-\nDWARF section '%s' at offset %#" PRIx64 ":\n"), +- ".debug_loc", (uint64_t) shdr->sh_offset); ++\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), ++ elf_ndxscn (scn), ".debug_loc", (uint64_t) shdr->sh_offset); + + size_t address_size = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 4 : 8; + +@@ -5052,8 +5988,8 @@ print_debug_macinfo_section (Dwfl_Module *dwflmod __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); ++\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), ++ elf_ndxscn (scn), ".debug_macinfo", (uint64_t) shdr->sh_offset); + putc_unlocked ('\n', stdout); + + /* There is no function in libdw to iterate over the raw content of +@@ -5221,11 +6157,10 @@ 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) ++ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) + { +- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n"), +- ".debug_pubnames", (uint64_t) shdr->sh_offset); ++ printf (gettext ("\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n"), ++ elf_ndxscn (scn), ".debug_pubnames", (uint64_t) shdr->sh_offset); + + int n = 0; + (void) dwarf_getpubnames (dbg, print_pubnames, &n, 0); +@@ -5236,8 +6171,7 @@ 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) ++ Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) + { + /* Compute floor(log16(shdr->sh_size)). */ + GElf_Addr tmp = shdr->sh_size; +@@ -5249,8 +6183,9 @@ print_debug_str_section (Dwfl_Module *dwflmod __attribute__ ((unused)), + } + digits = MAX (4, digits); + +- printf (gettext ("\nDWARF section '%s' at offset %#" PRIx64 ":\n" ++ printf (gettext ("\nDWARF section [%2zu] '%s' at offset %#" PRIx64 ":\n" + " %*s String\n"), ++ elf_ndxscn (scn), + ".debug_str", (uint64_t) shdr->sh_offset, + /* TRANS: the debugstr| prefix makes the string unique. */ + digits + 2, sgettext ("debugstr|Offset")); +@@ -5273,6 +6208,268 @@ print_debug_str_section (Dwfl_Module *dwflmod __attribute__ ((unused)), + } + } + ++ ++/* Print the content of the call frame search table section ++ '.eh_frame_hdr'. */ ++static void ++print_debug_frame_hdr_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 ("\ ++\nCall frame search table section [%2zu] '.eh_frame_hdr':\n"), ++ elf_ndxscn (scn)); ++ ++ Elf_Data *data = elf_rawdata (scn, NULL); ++ ++ if (unlikely (data == NULL)) ++ { ++ error (0, 0, gettext ("cannot get %s content: %s"), ++ ".eh_frame_hdr", elf_errmsg (-1)); ++ return; ++ } ++ ++ const unsigned char *readp = data->d_buf; ++ const unsigned char *const dataend = ((unsigned char *) data->d_buf ++ + data->d_size); ++ ++ if (unlikely (readp + 4 > dataend)) ++ { ++ invalid_data: ++ error (0, 0, gettext ("invalid data")); ++ return; ++ } ++ ++ unsigned int version = *readp++; ++ unsigned int eh_frame_ptr_enc = *readp++; ++ unsigned int fde_count_enc = *readp++; ++ unsigned int table_enc = *readp++; ++ ++ printf (" version: %u\n" ++ " eh_frame_ptr_enc: %#x ", ++ version, eh_frame_ptr_enc); ++ print_encoding_base ("", eh_frame_ptr_enc); ++ printf (" fde_count_enc: %#x ", fde_count_enc); ++ print_encoding_base ("", fde_count_enc); ++ printf (" table_enc: %#x ", table_enc); ++ print_encoding_base ("", table_enc); ++ ++ uint64_t eh_frame_ptr = 0; ++ if (eh_frame_ptr_enc != DW_EH_PE_omit) ++ { ++ readp = read_encoded (eh_frame_ptr_enc, readp, dataend, &eh_frame_ptr, ++ dbg); ++ if (unlikely (readp == NULL)) ++ goto invalid_data; ++ ++ printf (" eh_frame_ptr: %#" PRIx64, eh_frame_ptr); ++ if ((eh_frame_ptr_enc & 0x70) == DW_EH_PE_pcrel) ++ printf (" (offset: %#" PRIx64 ")", ++ /* +4 because of the 4 byte header of the section. */ ++ (uint64_t) shdr->sh_offset + 4 + eh_frame_ptr); ++ ++ putchar_unlocked ('\n'); ++ } ++ ++ uint64_t fde_count = 0; ++ if (fde_count_enc != DW_EH_PE_omit) ++ { ++ readp = read_encoded (fde_count_enc, readp, dataend, &fde_count, dbg); ++ if (unlikely (readp == NULL)) ++ goto invalid_data; ++ ++ printf (" fde_count: %" PRIu64 "\n", fde_count); ++ } ++ ++ if (fde_count == 0 || table_enc == DW_EH_PE_omit) ++ return; ++ ++ puts (" Table:"); ++ ++ /* Optimize for the most common case. */ ++ if (table_enc == (DW_EH_PE_datarel | DW_EH_PE_sdata4)) ++ while (fde_count > 0 && readp + 8 <= dataend) ++ { ++ int32_t initial_location = read_4sbyte_unaligned_inc (dbg, readp); ++ uint64_t initial_offset = ((uint64_t) shdr->sh_offset ++ + (int64_t) initial_location); ++ int32_t address = read_4sbyte_unaligned_inc (dbg, readp); ++ // XXX Possibly print symbol name or section offset for initial_offset ++ printf (" %#" PRIx32 " (offset: %#6" PRIx64 ") -> %#" PRIx32 ++ " fde=[%6" PRIx64 "]\n", ++ initial_location, initial_offset, ++ address, address - (eh_frame_ptr + 4)); ++ } ++ else ++ while (0 && readp < dataend) ++ { ++ ++ } ++} ++ ++ ++/* Print the content of the exception handling table section ++ '.eh_frame_hdr'. */ ++static void ++print_debug_exception_table (Dwfl_Module *dwflmod __attribute__ ((unused)), ++ Ebl *ebl __attribute__ ((unused)), ++ GElf_Ehdr *ehdr __attribute__ ((unused)), ++ Elf_Scn *scn, ++ GElf_Shdr *shdr __attribute__ ((unused)), ++ Dwarf *dbg __attribute__ ((unused))) ++{ ++ printf (gettext ("\ ++\nException handling table section [%2zu] '.gcc_except_table':\n"), ++ elf_ndxscn (scn)); ++ ++ Elf_Data *data = elf_rawdata (scn, NULL); ++ ++ if (unlikely (data == NULL)) ++ { ++ error (0, 0, gettext ("cannot get %s content: %s"), ++ ".gcc_except_table", elf_errmsg (-1)); ++ return; ++ } ++ ++ const unsigned char *readp = data->d_buf; ++ const unsigned char *const dataend = readp + data->d_size; ++ ++ if (unlikely (readp + 1 > dataend)) ++ { ++ invalid_data: ++ error (0, 0, gettext ("invalid data")); ++ return; ++ } ++ unsigned int lpstart_encoding = *readp++; ++ printf (gettext (" LPStart encoding: %#x "), lpstart_encoding); ++ print_encoding_base ("", lpstart_encoding); ++ if (lpstart_encoding != DW_EH_PE_omit) ++ { ++ uint64_t lpstart; ++ readp = read_encoded (lpstart_encoding, readp, dataend, &lpstart, dbg); ++ printf (" LPStart: %#" PRIx64 "\n", lpstart); ++ } ++ ++ if (unlikely (readp + 1 > dataend)) ++ goto invalid_data; ++ unsigned int ttype_encoding = *readp++; ++ printf (gettext (" TType encoding: %#x "), ttype_encoding); ++ print_encoding_base ("", ttype_encoding); ++ const unsigned char *ttype_base = NULL; ++ if (ttype_encoding != DW_EH_PE_omit) ++ { ++ unsigned int ttype_base_offset; ++ get_uleb128 (ttype_base_offset, readp); ++ printf (" TType base offset: %#x\n", ttype_base_offset); ++ ttype_base = readp + ttype_base_offset; ++ } ++ ++ if (unlikely (readp + 1 > dataend)) ++ goto invalid_data; ++ unsigned int call_site_encoding = *readp++; ++ printf (gettext (" Call site encoding: %#x "), call_site_encoding); ++ print_encoding_base ("", call_site_encoding); ++ unsigned int call_site_table_len; ++ get_uleb128 (call_site_table_len, readp); ++ ++ const unsigned char *const action_table = readp + call_site_table_len; ++ if (unlikely (action_table > dataend)) ++ goto invalid_data; ++ unsigned int u = 0; ++ unsigned int max_action = 0; ++ while (readp < action_table) ++ { ++ if (u == 0) ++ puts (gettext ("\n Call site table:")); ++ ++ uint64_t call_site_start; ++ readp = read_encoded (call_site_encoding, readp, dataend, ++ &call_site_start, dbg); ++ uint64_t call_site_length; ++ readp = read_encoded (call_site_encoding, readp, dataend, ++ &call_site_length, dbg); ++ uint64_t landing_pad; ++ readp = read_encoded (call_site_encoding, readp, dataend, ++ &landing_pad, dbg); ++ unsigned int action; ++ get_uleb128 (action, readp); ++ max_action = MAX (action, max_action); ++ printf (gettext (" [%4u] Call site start: %#" PRIx64 "\n" ++ " Call site length: %" PRIu64 "\n" ++ " Landing pad: %#" PRIx64 "\n" ++ " Action: %u\n"), ++ u++, call_site_start, call_site_length, landing_pad, action); ++ } ++ assert (readp == action_table); ++ ++ unsigned int max_ar_filter = 0; ++ if (max_action > 0) ++ { ++ puts ("\n Action table:"); ++ ++ const unsigned char *const action_table_end ++ = action_table + max_action + 1; ++ ++ u = 0; ++ do ++ { ++ int ar_filter; ++ get_sleb128 (ar_filter, readp); ++ if (ar_filter > 0 && (unsigned int) ar_filter > max_ar_filter) ++ max_ar_filter = ar_filter; ++ int ar_disp; ++ get_sleb128 (ar_disp, readp); ++ ++ printf (" [%4u] ar_filter: % d\n" ++ " ar_disp: % -5d", ++ u, ar_filter, ar_disp); ++ if (abs (ar_disp) & 1) ++ printf (" -> [%4u]\n", u + (ar_disp + 1) / 2); ++ else if (ar_disp != 0) ++ puts (" -> ???"); ++ else ++ putchar_unlocked ('\n'); ++ ++u; ++ } ++ while (readp < action_table_end); ++ } ++ ++ if (max_ar_filter > 0) ++ { ++ puts ("\n TType table:"); ++ ++ // XXX Not *4, size of encoding; ++ switch (ttype_encoding & 7) ++ { ++ case DW_EH_PE_udata2: ++ case DW_EH_PE_sdata2: ++ readp = ttype_base - max_ar_filter * 2; ++ break; ++ case DW_EH_PE_udata4: ++ case DW_EH_PE_sdata4: ++ readp = ttype_base - max_ar_filter * 4; ++ break; ++ case DW_EH_PE_udata8: ++ case DW_EH_PE_sdata8: ++ readp = ttype_base - max_ar_filter * 8; ++ break; ++ default: ++ error (1, 0, gettext ("invalid TType encoding")); ++ } ++ ++ do ++ { ++ uint64_t ttype; ++ readp = read_encoded (ttype_encoding, readp, ttype_base, &ttype, ++ dbg); ++ printf (" [%4u] %#" PRIx64 "\n", max_ar_filter--, ttype); ++ } ++ while (readp < ttype_base); ++ } ++} ++ ++ + static void + print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) + { +@@ -5281,14 +6478,15 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) + Dwarf *dbg = dwfl_module_getdwarf (dwflmod, &dwbias); + if (dbg == NULL) + { +- error (0, 0, gettext ("cannot get debug context descriptor: %s"), +- dwfl_errmsg (-1)); ++ if (print_debug_sections != 0) ++ 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)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -5321,7 +6519,12 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) + NEW_SECTION (str), + NEW_SECTION (macinfo), + NEW_SECTION (ranges), +- { ".eh_frame", section_frame, print_debug_frame_section } ++ { ".eh_frame", section_frame | section_exception, ++ print_debug_frame_section }, ++ { ".eh_frame_hdr", section_frame | section_exception, ++ print_debug_frame_hdr_section }, ++ { ".gcc_except_table", section_frame | section_exception, ++ print_debug_exception_table } + }; + const int ndebug_sections = (sizeof (debug_sections) + / sizeof (debug_sections[0])); +@@ -5332,7 +6535,8 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) + for (n = 0; n < ndebug_sections; ++n) + if (strcmp (name, debug_sections[n].name) == 0) + { +- if (print_debug_sections & debug_sections[n].bitmask) ++ if ((print_debug_sections | implicit_debug_sections) ++ & debug_sections[n].bitmask) + debug_sections[n].fp (dwflmod, ebl, ehdr, scn, shdr, dbg); + break; + } +@@ -5389,13 +6593,13 @@ print_core_item (unsigned int colno, char sep, unsigned int wrap, + + static const void * + convert (Elf *core, Elf_Type type, uint_fast16_t count, +- void *value, const void *data) ++ void *value, const void *data, size_t size) + { + Elf_Data valuedata = + { + .d_type = type, + .d_buf = value, +- .d_size = gelf_fsize (core, type, count, EV_CURRENT), ++ .d_size = size ?: gelf_fsize (core, type, count, EV_CURRENT), + .d_version = EV_CURRENT, + }; + Elf_Data indata = +@@ -5420,7 +6624,7 @@ typedef uint8_t GElf_Byte; + + static unsigned int + handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, +- unsigned int colno) ++ unsigned int colno, size_t *repeated_size) + { + uint_fast16_t count = item->count ?: 1; + +@@ -5436,13 +6640,33 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, + union { TYPES; } value; + #undef DO_TYPE + +- desc = convert (core, item->type, count, &value, desc + item->offset); ++ 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 if (item->count != 0 || item->format != '\n') ++ *repeated_size -= size; ++ } ++ ++ 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 (item->type) ++ switch (type) + { + #define DO_TYPE(NAME, Name, hex, dec, max) \ + case ELF_T_##NAME: \ +@@ -5458,7 +6682,7 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, + + case 'x': + assert (count == 1); +- switch (item->type) ++ switch (type) + { + #define DO_TYPE(NAME, Name, hex, dec, max) \ + case ELF_T_##NAME: \ +@@ -5473,30 +6697,59 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, + break; + + case 'b': +- assert (count == 1); +- Dwarf_Word bits = 0; +- Dwarf_Word bit = 0; +- switch (item->type) +- { +-#define DO_TYPE(NAME, Name, hex, dec, max) \ +- case ELF_T_##NAME: \ +- bits = value.Name[0]; \ +- bit = (Dwarf_Word) 1 << ((sizeof value.Name[0] * 8) - 1); \ +- break +- TYPES; +-#undef DO_TYPE +- default: +- abort (); +- } +- char printed[sizeof (Dwarf_Word) * 8 + 1]; +- int i = 0; +- while (bit != 0) +- { +- printed[i++] = (bits & bit) ? '1' : '0'; +- bit >>= 1; +- } +- colno = print_core_item (colno, ',', ITEM_WRAP_COLUMN, 0, item->name, +- sizeof printed - 1, "%.*s", i, printed); ++ 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': +@@ -5505,7 +6758,7 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, + Dwarf_Word sec; + Dwarf_Word usec; + size_t maxfmt = 7; +- switch (item->type) ++ switch (type) + { + #define DO_TYPE(NAME, Name, hex, dec, max) \ + case ELF_T_##NAME: \ +@@ -5549,6 +6802,33 @@ handle_core_item (Elf *core, const Ebl_Core_Item *item, const void *desc, + count, "%.*s", (int) count, value.Byte); + break; + ++ case '\n': ++ /* This is a list of strings separated by '\n'. */ ++ assert (item->count == 0); ++ assert (repeated_size != NULL); ++ assert (item->name == NULL); ++ if (unlikely (item->offset >= *repeated_size)) ++ break; ++ ++ const char *s = desc + item->offset; ++ size = *repeated_size - item->offset; ++ *repeated_size = 0; ++ while (size > 0) ++ { ++ const char *eol = memchr (s, '\n', size); ++ int len = size; ++ if (eol != NULL) ++ len = eol - s; ++ printf ("%*s%.*s\n", ITEM_INDENT, "", len, s); ++ if (eol == NULL) ++ break; ++ size -= eol + 1 - s; ++ s = eol + 1; ++ } ++ ++ colno = ITEM_WRAP_COLUMN; ++ break; ++ + default: + error (0, 0, "XXX not handling format '%c' for %s", + item->format, item->name); +@@ -5615,6 +6895,17 @@ handle_core_items (Elf *core, const void *desc, size_t descsz, + /* 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) +@@ -5624,7 +6915,7 @@ handle_core_items (Elf *core, const void *desc, size_t descsz, + && ((*item)->group == groups[i][0]->group + || !strcmp ((*item)->group, groups[i][0]->group))); + ++item) +- colno = handle_core_item (core, *item, desc, colno); ++ colno = handle_core_item (core, *item, desc, colno, NULL); + + /* Force a line break at the end of the group. */ + colno = ITEM_WRAP_COLUMN; +@@ -5639,8 +6930,27 @@ handle_core_items (Elf *core, const void *desc, size_t descsz, + const Ebl_Core_Item *item = &items[nitems - 1]; + size_t eltsz = item->offset + gelf_fsize (core, item->type, + item->count ?: 1, EV_CURRENT); +- descsz -= eltsz; +- desc += eltsz; ++ ++ 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... ..."), ++ ITEM_INDENT, "", reps); ++ ++ last = desc; + } + while (descsz > 0); + +@@ -5670,17 +6980,10 @@ handle_core_register (Ebl *ebl, Elf *core, int maxregname, + + for (int reg = regloc->regno; reg < regloc->regno + regloc->count; ++reg) + { +- const char *pfx; +- const char *set; +- char name[16]; ++ char name[REGNAMESZ]; + 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); ++ register_info (ebl, reg, regloc, name, &bits, &type); + + #define TYPES \ + BITS (8, BYTE, "%4" PRId8, "0x%.2" PRIx8, 4); \ +@@ -5702,7 +7005,7 @@ handle_core_register (Ebl *ebl, Elf *core, int maxregname, + { + #define BITS(bits, xtype, sfmt, ufmt, max) \ + case bits: \ +- desc = convert (core, ELF_T_##xtype, 1, &value, desc); \ ++ 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, \ +@@ -5717,7 +7020,7 @@ handle_core_register (Ebl *ebl, Elf *core, int maxregname, + + case 128: + assert (type == DW_ATE_unsigned); +- desc = convert (core, ELF_T_XWORD, 2, &value, desc); ++ 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, +@@ -5768,10 +7071,10 @@ struct register_info + { + const Ebl_Register_Location *regloc; + const char *set; +- char name[16]; +- Dwarf_Half regno; +- uint8_t bits; +- uint8_t type; ++ char name[REGNAMESZ]; ++ int regno; ++ int bits; ++ int type; + }; + + static int +@@ -5825,8 +7128,12 @@ handle_core_registers (Ebl *ebl, Elf *core, const void *desc, + + 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)); ++ { ++ for (size_t i = 0; i < nregloc; ++i) ++ if (maxnreg < reglocs[i].regno + reglocs[i].count) ++ maxnreg = reglocs[i].regno + reglocs[i].count; ++ assert (maxnreg > 0); ++ } + + struct register_info regs[maxnreg]; + memset (regs, 0, sizeof regs); +@@ -5842,20 +7149,10 @@ handle_core_registers (Ebl *ebl, Elf *core, const void *desc, + 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; ++ info->set = register_info (ebl, reg, ®locs[i], ++ info->name, &info->bits, &info->type); + } + qsort (regs, maxreg + 1, sizeof regs[0], &compare_registers); + +@@ -5976,7 +7273,8 @@ handle_auxv_note (Ebl *ebl, Elf *core, GElf_Word descsz, GElf_Off desc_pos) + } + + static void +-handle_core_note (Ebl *ebl, const GElf_Nhdr *nhdr, const void *desc) ++handle_core_note (Ebl *ebl, const GElf_Nhdr *nhdr, ++ const char *name, const void *desc) + { + GElf_Word regs_offset; + size_t nregloc; +@@ -5984,7 +7282,7 @@ handle_core_note (Ebl *ebl, const GElf_Nhdr *nhdr, const void *desc) + size_t nitems; + const Ebl_Core_Item *items; + +- if (! ebl_core_note (ebl, nhdr->n_type, nhdr->n_descsz, ++ if (! ebl_core_note (ebl, nhdr, name, + ®s_offset, &nregloc, ®locs, &nitems, &items)) + return; + +@@ -6041,11 +7339,14 @@ handle_notes_data (Ebl *ebl, const GElf_Ehdr *ehdr, + { + if (ehdr->e_type == ET_CORE) + { +- if (nhdr.n_type == NT_AUXV) ++ if (nhdr.n_type == NT_AUXV ++ && (nhdr.n_namesz == 4 /* Broken old Linux kernels. */ ++ || (nhdr.n_namesz == 5 && name[4] == '\0')) ++ && !memcmp (name, "CORE", 4)) + handle_auxv_note (ebl, ebl->elf, nhdr.n_descsz, + start + desc_offset); + else +- handle_core_note (ebl, &nhdr, desc); ++ handle_core_note (ebl, &nhdr, name, desc); + } + else + ebl_object_note (ebl, name, nhdr.n_type, nhdr.n_descsz, desc); +@@ -6070,7 +7371,7 @@ handle_notes (Ebl *ebl, GElf_Ehdr *ehdr) + { + /* Get the section header string table index. */ + size_t shstrndx; +- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0) ++ if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -6098,7 +7399,7 @@ handle_notes (Ebl *ebl, GElf_Ehdr *ehdr) + + /* 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) ++ for (size_t cnt = 0; cnt < phnum; ++cnt) + { + GElf_Phdr mem; + GElf_Phdr *phdr = gelf_getphdr (ebl->elf, cnt, &mem); +@@ -6175,36 +7476,38 @@ dump_data_section (Elf_Scn *scn, const GElf_Shdr *shdr, const char *name) + 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"), ++ if (shdr->sh_size == 0 || shdr->sh_type == SHT_NOBITS) ++ printf (gettext ("\nSection [%Zu] '%s' has no strings to dump.\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 ++ 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 + { +- const char *end = memchr (start, '\0', limit - start); +- const size_t pos = start - (const char *) data->d_buf; +- if (unlikely (end == NULL)) ++ 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 + { +- printf (" [%6Zx]- %.*s\n", +- pos, (int) (limit - start), start); +- break; +- } +- printf (" [%6Zx] %s\n", pos, start); +- start = end + 1; +- } while (start < limit); ++ 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); ++ } + } + } + +@@ -6215,7 +7518,7 @@ for_each_section_argument (Elf *elf, const struct section_argument *list, + { + /* Get the section header string table index. */ + size_t shstrndx; +- if (elf_getshstrndx (elf, &shstrndx) < 0) ++ if (elf_getshdrstrndx (elf, &shstrndx) < 0) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -6258,7 +7561,8 @@ for_each_section_argument (Elf *elf, const struct section_argument *list, + + if (unlikely (scn == NULL)) + { +- error (0, 0, gettext ("\nsection '%s' does not exist"), a->arg); ++ if (!a->implicit) ++ error (0, 0, gettext ("\nsection '%s' does not exist"), a->arg); + continue; + } + } +@@ -6284,7 +7588,7 @@ print_strings (Ebl *ebl) + { + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +diff --git a/src/size.c b/src/size.c +index d226f40..d3dc1fe 100644 +--- a/src/size.c ++++ b/src/size.c +@@ -1,5 +1,5 @@ + /* Print size information from ELF file. +- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -50,10 +50,10 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + + /* Values for the parameters which have no short form. */ +@@ -220,7 +220,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -319,13 +319,23 @@ process_file (const char *fname) + return 0; + } + else if (likely (elf_kind (elf) == ELF_K_AR)) +- return handle_ar (fd, elf, NULL, fname); ++ { ++ int result = handle_ar (fd, elf, NULL, fname); ++ ++ if (unlikely (close (fd) != 0)) ++ error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname); ++ ++ return result; ++ } + + /* We cannot handle this type. Close the descriptor anyway. */ + if (unlikely (elf_end (elf) != 0)) + INTERNAL_ERROR (fname); + } + ++ if (unlikely (close (fd) != 0)) ++ error (EXIT_FAILURE, errno, gettext ("while closing '%s'"), fname); ++ + error (0, 0, gettext ("%s: file format not recognized"), fname); + + return 1; +@@ -396,9 +406,6 @@ handle_ar (int fd, Elf *elf, const char *prefix, const char *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; + } + +@@ -413,7 +420,7 @@ show_sysv (Elf *elf, const char *prefix, const char *fname, + + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -487,7 +494,7 @@ show_sysv_one_line (Elf *elf) + { + /* Get the section header string table index. */ + size_t shstrndx; +- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +diff --git a/src/strings.c b/src/strings.c +index b210996..b69f2ad 100644 +--- a/src/strings.c ++++ b/src/strings.c +@@ -1,5 +1,5 @@ + /* Print the strings of printable characters in files. +- Copyright (C) 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2005, 2006, 2007, 2009 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2005. + +@@ -59,10 +59,10 @@ 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + /* Definitions of arguments for argp functions. */ + static const struct argp_option options[] = +@@ -228,7 +228,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -677,7 +677,7 @@ read_block (int fd, const char *fname, off64_t fdlen, off64_t from, off64_t to) + 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")); ++ error (EXIT_FAILURE, errno, gettext ("re-mmap failed")); + elfmap_off = handled_to; + + process_chunk (fname, remap_base - to_keep, +diff --git a/src/strip.c b/src/strip.c +index 5fddeee..7b2b889 100644 +--- a/src/strip.c ++++ b/src/strip.c +@@ -1,5 +1,5 @@ + /* Discard section not used at runtime from object files. +- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. ++ Copyright (C) 2000-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2000. + +@@ -46,6 +46,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -55,10 +56,10 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + + /* Values for the parameters which have no short form. */ +@@ -204,7 +205,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); + } + +@@ -390,6 +391,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + 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. */ +@@ -436,7 +438,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + 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. */ ++ we need EBL so don't open the backend unless necessary. */ + Ebl *ebl = NULL; + if (remove_debug) + { +@@ -476,7 +478,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + INTERNAL_ERROR (fname); + + /* Get the section header string table index. */ +- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0)) ++ if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +@@ -536,7 +538,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + + /* Number of sections. */ + size_t shnum; +- if (unlikely (elf_getshnum (elf, &shnum) < 0)) ++ if (unlikely (elf_getshdrnum (elf, &shnum) < 0)) + { + error (0, 0, gettext ("cannot determine number of sections: %s"), + elf_errmsg (-1)); +@@ -720,8 +722,10 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + /* 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 (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM +- || shdr_info[cnt].shdr.sh_type == SHT_SYMTAB) ++ 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) +@@ -779,11 +783,10 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + scnidx = xndx; + + if (shdr_info[scnidx].idx == 0) +- { +- /* Mark this section as used. */ +- shdr_info[scnidx].idx = 1; +- changes |= scnidx < cnt; +- } ++ /* 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; + } + } + +@@ -819,6 +822,37 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + /* 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 ++ && shdr_info[i].debug_data == NULL) ++ { ++ 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); +@@ -836,6 +870,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + 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); + +@@ -866,6 +901,13 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + *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 +@@ -1078,7 +1120,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + /* We know the size. */ + shdr_info[cnt].shdr.sh_size = shdr_info[cnt].data->d_size; + +- /* We have to adjust symtol tables. The st_shndx member might ++ /* 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) +@@ -1206,7 +1248,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + shdr_info[cnt].shdr.sh_info = destidx - 1; + } + } +- else ++ 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); +@@ -1248,291 +1291,288 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + + /* 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) ++ /* 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) + { +- /* 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) + { +- 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; +- } ++ /* 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; ++ 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; + +- if (shdr_info[cnt].shdr.sh_type == SHT_REL +- || shdr_info[cnt].shdr.sh_type == SHT_RELA) ++ 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[shdr_info[cnt].old_sh_link].newsymidx == NULL) +- continue; +- +- Elf32_Word *newsymidx +- = shdr_info[shdr_info[cnt].old_sh_link].newsymidx; +- 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); ++ if (shdr_info[symtabidx].newsymidx == NULL) ++ return true; + +- 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 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); ++ } + +- 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); ++ case SHT_REL: ++ case SHT_RELA: ++ if (no_symtab_updates ()) ++ break; + +- 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)); ++ 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 (gelf_update_rela (d, relidx, &rel_mem) == 0) +- INTERNAL_ERROR (fname); +- } +- } +- } +- else if (shdr_info[cnt].shdr.sh_type == SHT_HASH) +- { +- /* We have to recompute the hash table. */ +- Elf32_Word symtabidx = shdr_info[cnt].old_sh_link; ++ 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); + +- /* We do not have to do anything if the symbol table was +- not changed. */ +- if (shdr_info[symtabidx].newsymidx == NULL) +- continue; ++ 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)); + +- assert (shdr_info[cnt].idx > 0); ++ 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); + +- /* The hash section in the new file. */ +- scn = elf_getscn (newelf, shdr_info[cnt].idx); ++ 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)); + +- /* The symbol table data. */ +- Elf_Data *symd = elf_getdata (elf_getscn (newelf, +- shdr_info[symtabidx].idx), +- NULL); +- assert (symd != NULL); ++ if (gelf_update_rela (d, relidx, &rel_mem) == 0) ++ INTERNAL_ERROR (fname); ++ } ++ } ++ break; + +- /* The hash table data. */ +- Elf_Data *hashd = elf_getdata (scn, NULL); +- assert (hashd != NULL); ++ case SHT_HASH: ++ if (no_symtab_updates ()) ++ break; + +- if (shdr_info[cnt].shdr.sh_entsize == sizeof (Elf32_Word)) +- { +- /* Sane arches first. */ +- Elf32_Word *bucket = (Elf32_Word *) hashd->d_buf; ++ /* We have to recompute the hash table. */ + +- size_t strshndx = shdr_info[symtabidx].old_sh_link; +- size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1, +- ehdr->e_version); ++ assert (shdr_info[cnt].idx > 0); + +- /* 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); ++ /* The hash section in the new file. */ ++ scn = elf_getscn (newelf, shdr_info[cnt].idx); + +- const char *name = elf_strptr (elf, strshndx, +- sym->st_name); +- assert (name != NULL); +- size_t hidx = elf_hash (name) % nbucket; ++ /* The symbol table data. */ ++ Elf_Data *symd = elf_getdata (elf_getscn (newelf, ++ shdr_info[symtabidx].idx), ++ NULL); ++ assert (symd != NULL); + +- if (bucket[hidx] == 0) +- bucket[hidx] = inner; +- else +- { +- hidx = bucket[hidx]; ++ /* The hash table data. */ ++ Elf_Data *hashd = elf_getdata (scn, NULL); ++ assert (hashd != NULL); + +- while (chain[hidx] != 0) +- hidx = chain[hidx]; ++ if (shdr_info[cnt].shdr.sh_entsize == sizeof (Elf32_Word)) ++ { ++ /* Sane arches first. */ ++ Elf32_Word *bucket = (Elf32_Word *) hashd->d_buf; + +- 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)); ++ size_t strshndx = shdr_info[symtabidx].old_sh_link; ++ size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1, ++ ehdr->e_version); + +- Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf; ++ /* 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); + +- size_t strshndx = shdr_info[symtabidx].old_sh_link; +- size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1, +- ehdr->e_version); ++ const char *name = elf_strptr (elf, strshndx, ++ sym->st_name); ++ assert (name != NULL); ++ size_t hidx = elf_hash (name) % nbucket; + +- /* 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); ++ if (bucket[hidx] == 0) ++ bucket[hidx] = inner; ++ else ++ { ++ hidx = bucket[hidx]; + +- const char *name = elf_strptr (elf, strshndx, +- sym->st_name); +- assert (name != NULL); +- size_t hidx = elf_hash (name) % nbucket; ++ while (chain[hidx] != 0) ++ hidx = chain[hidx]; + +- if (bucket[hidx] == 0) +- bucket[hidx] = inner; +- else +- { +- hidx = bucket[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)); + +- while (chain[hidx] != 0) +- hidx = chain[hidx]; ++ Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf; + +- chain[hidx] = inner; +- } +- } +- } +- } +- else if (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym) +- { +- /* If the symbol table changed we have to adjust the +- entries. */ +- Elf32_Word symtabidx = shdr_info[cnt].old_sh_link; ++ size_t strshndx = shdr_info[symtabidx].old_sh_link; ++ size_t elsize = gelf_fsize (elf, ELF_T_SYM, 1, ++ ehdr->e_version); + +- /* We do not have to do anything if the symbol table was +- not changed. */ +- if (shdr_info[symtabidx].newsymidx == NULL) +- continue; +- +- 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. */ +- Elf_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; +- +- /* New indices of the symbols. */ +- Elf32_Word *newsymidx = shdr_info[symtabidx].newsymidx; +- +- /* 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); +- } +- else if (shdr_info[cnt].shdr.sh_type == SHT_GROUP) +- { +- /* Check whether the associated symbol table changed. */ +- if (shdr_info[shdr_info[cnt].old_sh_link].newsymidx != NULL) +- { +- /* 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); ++ /* 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); + +- size_t stabidx = shdr_info[cnt].old_sh_link; +- shdr->sh_info = shdr_info[stabidx].newsymidx[shdr->sh_info]; ++ const char *name = elf_strptr (elf, strshndx, ++ sym->st_name); ++ assert (name != NULL); ++ size_t hidx = elf_hash (name) % nbucket; + +- (void) gelf_update_shdr (scn, shdr); +- } +- } +- } +- } ++ 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. */ +@@ -1659,7 +1699,11 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, + table indices. */ + if (any_symtab_changes) + for (cnt = 1; cnt <= shdridx; ++cnt) +- free (shdr_info[cnt].newsymidx); ++ { ++ 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) +diff --git a/src/unstrip.c b/src/unstrip.c +index 676a0c7..0984e6b 100644 +--- a/src/unstrip.c ++++ b/src/unstrip.c +@@ -1,5 +1,5 @@ + /* Combine stripped files with separate symbols and debug information. +- Copyright (C) 2007 Red Hat, Inc. ++ Copyright (C) 2007-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Roland McGrath , 2007. + +@@ -52,6 +52,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -64,11 +65,10 @@ + + /* 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; ++ARGP_PROGRAM_VERSION_HOOK_DEF = print_version; + + /* Bug report address. */ +-const char *argp_program_bug_address = PACKAGE_BUGREPORT; ++ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; + + /* Definitions of arguments for argp functions. */ + static const struct argp_option options[] = +@@ -235,7 +235,7 @@ print_version (FILE *stream, struct argp_state *state __attribute__ ((unused))) + 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"); ++"), "2009"); + fprintf (stream, gettext ("Written by %s.\n"), "Roland McGrath"); + } + +@@ -1219,19 +1219,19 @@ 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, ++ ELF_CHECK (elf_getshdrstrndx (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, ++ ELF_CHECK (elf_getshdrstrndx (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, ++ ELF_CHECK (elf_getshdrnum (unstripped, &unstripped_shnum) == 0, + _("cannot get section count: %s")); + + size_t stripped_shnum; +- ELF_CHECK (elf_getshnum (stripped, &stripped_shnum) == 0, ++ ELF_CHECK (elf_getshdrnum (stripped, &stripped_shnum) == 0, + _("cannot get section count: %s")); + + /* Cache the stripped file's section details. */ +@@ -1462,7 +1462,7 @@ copy_elided_sections (Elf *unstripped, Elf *stripped, + strtab); + + /* Get the updated section count. */ +- ELF_CHECK (elf_getshnum (unstripped, &unstripped_shnum) == 0, ++ ELF_CHECK (elf_getshdrnum (unstripped, &unstripped_shnum) == 0, + _("cannot get section count: %s")); + + bool placed[unstripped_shnum - 1]; +diff --git a/tests/ChangeLog b/tests/ChangeLog +index 82fcc12..c871baa 100644 +--- a/tests/ChangeLog ++++ b/tests/ChangeLog +@@ -1,3 +1,112 @@ ++2010-02-15 Roland McGrath ++ ++ * Makefile.am: Use config/eu.am for common stuff. ++ ++ * asm-tst9.c (main): Rename local to avoid shadowing another local. ++ ++2009-07-22 Roland McGrath ++ ++ * addrcfi.c: Update dwarf_frame_{cfa,register} calling convention. ++ ++2009-07-08 Roland McGrath ++ ++ * addrcfi.c: New file. ++ * Makefile.am (noinst_PROGRAMS): Add it. ++ (addrcfi_LDADD): New variable. ++ ++2009-05-07 Petr Machata ++ ++ * testfile51.bz2: New data file. ++ * dwarf-getmacros.c: New test core. ++ * run-dwarf-getmacros.sh: New test wrapper. ++ * Makefile.am (TESTS, EXTRA_DIST, noinst_PROGRAMS): Add them. ++ (dwarf_getmacros_LDADD): New variable. ++ ++2009-04-23 Ulrich Drepper ++ ++ * Makefile [BUILD_STATIC] (libdw): Add $(zip_LIBS). ++ (rdwrmmap_LDADD): Add $(libmudflap). ++ ++2009-04-21 Roland McGrath ++ ++ * testfile50.bz2: New data file. ++ * Makefile.am (EXTRA_DIST): Add it. ++ * run-dwfl-addr-sect.sh: Add a case using it. ++ ++2008-12-31 Ulrich Drepper ++ ++ * testfile44.S.bz2: Add tests for dppd, dpps, insertps, movntdqa, ++ mpsadbw, packusdw, pblendvb, pblendw, pcmpeqq, pcmpestri, pcmpestrm, ++ pcmpistri, pcmpistrm, pcmpgtq, phminposuw, pinsrb, pinsrd, pmaxsb, ++ pmaxsd, pmaxud, pmaxuw, pminsb, pminsd, pminud, pminuw, pmovsxbw, ++ pmovsxbd, pmovsxbq, pmovsxwd, pmovsxwq, pmovsxdq, pmovsxbw, pmovsxbd, ++ pmovsxbq, pmovsxwd, pmovsxwq, pmovsxdq, pmuldq, pmulld, popcnt, ptest, ++ roundss, roundps, roundpd, and roundsd. ++ * testfile45.S.bz2: Likewise. ++ * testfile44.expect.bz2: Adjust accordingly. ++ * testfile45.expect.bz2: Likewise. ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * dwfl-bug-getmodules.c: New file. ++ * Makefile.am (noinst_PROGRAMS): Add it. ++ (dwfl_bug_getmodules_LDADD): New variable. ++ ++2008-09-10 Roland McGrath ++ ++ * 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 ++ ++ * run-addrname-test.sh: Add a new case. ++ * testfile49.bz2: New data file. ++ * Makefile.am (EXTRA_DIST): Add it. ++ ++2008-04-10 Roland McGrath ++ ++ * 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 ++ ++ * 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 ++ ++ * run-addrname-test.sh: Add a new case. ++ + 2008-02-22 Roland McGrath + + * run-elflint-test.sh: Typo fix. +diff --git a/tests/Makefile.am b/tests/Makefile.am +index a058e58..1b9bc73 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -1,6 +1,6 @@ + ## Process this file with automake to create Makefile.in + ## +-## Copyright (C) 1996-2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. ++## Copyright (C) 1996-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 +@@ -24,26 +24,22 @@ + ## Network licensing program, please visit www.openinventionnetwork.com + ## . + ## +-DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE ++include $(top_srcdir)/config/eu.am + 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.. ++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 ++endif + + if TESTS_RPATH + AM_LDFLAGS += -Wl,-rpath,$(BUILT_RPATH) +@@ -59,8 +55,8 @@ noinst_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ + 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 +-# get-ciefde ++ dwfl-addr-sect dwfl-bug-report early-offscn \ ++ dwfl-bug-getmodules dwarf-getmacros addrcfi + asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ + asm-tst6 asm-tst7 asm-tst8 asm-tst9 + +@@ -71,7 +67,7 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ + 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-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 \ +@@ -84,7 +80,8 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ + 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-disasm-x86.sh run-disasm-x86-64.sh \ ++ run-early-offscn.sh run-dwarf-getmacros.sh + # run-show-ciefde.sh + + if !STANDALONE +@@ -109,13 +106,15 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ + 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-unstrip-test.sh run-unstrip-test2.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-dwfl-addr-sect.sh run-early-offscn.sh \ ++ run-dwarf-getmacros.sh \ + testfile15.bz2 testfile15.debug.bz2 \ + testfile16.bz2 testfile16.debug.bz2 \ + testfile17.bz2 testfile17.debug.bz2 \ +@@ -137,7 +136,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ + 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 ++ testfile46.bz2 testfile47.bz2 testfile48.bz2 testfile48.debug.bz2 \ ++ testfile49.bz2 testfile50.bz2 testfile51.bz2 + + installed_TESTS_ENVIRONMENT = libdir=$(DESTDIR)$(libdir) \ + bindir=$(DESTDIR)$(bindir) \ +@@ -156,8 +156,7 @@ installcheck-local: + endif !STANDALONE + + if MUDFLAP +-static_build=yes +-libmudflap = -lmudflap ++static_build = yes + endif + + if STANDALONE +@@ -167,7 +166,7 @@ libasm = -lasm + libebl = -lebl + else !STANDALONE + if BUILD_STATIC +-libdw = ../libdw/libdw.a $(libelf) $(libebl) -ldl ++libdw = ../libdw/libdw.a $(zip_LIBS) $(libelf) $(libebl) -ldl + libelf = ../libelf/libelf.a + libasm = ../libasm/libasm.a + else +@@ -190,6 +189,7 @@ 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) +@@ -220,15 +220,16 @@ 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) ++rdwrmmap_LDADD = $(libelf) $(libmudflap) + 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 ++dwarf_getmacros_LDADD = $(libdw) $(libmudflap) ++addrcfi_LDADD = $(libdw) $(libebl) $(libelf) $(libmudflap) -ldl + + if GCOV + check: check-am coverage +diff --git a/tests/addrcfi.c b/tests/addrcfi.c +new file mode 100644 +index 0000000..2a3db05 +--- /dev/null ++++ b/tests/addrcfi.c +@@ -0,0 +1,207 @@ ++/* Test program for CFI handling. ++ Copyright (C) 2009 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 ++ . */ ++ ++#include ++#include ++#include ++#include ELFUTILS_HEADER(dwfl) ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ ++static void ++print_detail (int result, const Dwarf_Op *ops, size_t nops, Dwarf_Addr bias) ++{ ++ if (result < 0) ++ printf ("indeterminate (%s)\n", dwarf_errmsg (-1)); ++ else if (nops == 0) ++ printf ("%s\n", result == 0 ? "same_value" : "undefined"); ++ else ++ { ++ printf ("%s expression:", result == 0 ? "location" : "value"); ++ for (size_t i = 0; i < nops; ++i) ++ { ++ printf (" %#x", ops[i].atom); ++ if (ops[i].number2 == 0) ++ { ++ if (ops[i].atom == DW_OP_addr) ++ printf ("(%#" PRIx64 ")", ops[i].number + bias); ++ else if (ops[i].number != 0) ++ printf ("(%" PRId64 ")", ops[i].number); ++ } ++ else ++ printf ("(%" PRId64 ",%" PRId64 ")", ++ ops[i].number, ops[i].number2); ++ } ++ puts (""); ++ } ++} ++ ++struct stuff ++{ ++ Dwarf_Frame *frame; ++ Dwarf_Addr bias; ++}; ++ ++static int ++print_register (void *arg, ++ int regno, ++ const char *setname, ++ const char *prefix, ++ const char *regname, ++ int bits __attribute__ ((unused)), ++ int type __attribute__ ((unused))) ++{ ++ struct stuff *stuff = arg; ++ ++ printf ("\t%s reg%u (%s%s): ", setname, regno, prefix, regname); ++ ++ Dwarf_Op ops_mem[2]; ++ Dwarf_Op *ops; ++ size_t nops; ++ int result = dwarf_frame_register (stuff->frame, regno, ops_mem, &ops, &nops); ++ print_detail (result, ops, nops, stuff->bias); ++ ++ return DWARF_CB_OK; ++} ++ ++static int ++handle_cfi (Dwfl *dwfl, const char *which, Dwarf_CFI *cfi, ++ GElf_Addr pc, struct stuff *stuff) ++{ ++ int result = dwarf_cfi_addrframe (cfi, pc - stuff->bias, &stuff->frame); ++ if (result != 0) ++ { ++ error (0, 0, "dwarf_addrframe (%s): %s", which, dwfl_errmsg (-1)); ++ return 1; ++ } ++ ++ Dwarf_Addr start = pc; ++ Dwarf_Addr end = pc; ++ bool signalp; ++ int ra_regno = dwarf_frame_info (stuff->frame, &start, &end, &signalp); ++ if (ra_regno >= 0) ++ { ++ start += stuff->bias; ++ end += stuff->bias; ++ } ++ ++ printf ("%s has %#" PRIx64 " => [%#" PRIx64 ", %#" PRIx64 "):\n", ++ which, pc, start, end); ++ ++ if (ra_regno < 0) ++ printf ("\treturn address register unavailable (%s)\n", ++ dwarf_errmsg (0)); ++ else ++ printf ("\treturn address in reg%u%s\n", ++ ra_regno, signalp ? " (signal frame)" : ""); ++ ++ Dwarf_Op *cfa_ops; ++ size_t cfa_nops; ++ result = dwarf_frame_cfa (stuff->frame, &cfa_ops, &cfa_nops); ++ ++ printf ("\tCFA "); ++ print_detail (result, cfa_ops, cfa_nops, stuff->bias); ++ ++ (void) dwfl_module_register_names (dwfl_addrmodule (dwfl, pc), ++ &print_register, stuff); ++ ++ return 0; ++} ++ ++static int ++handle_address (GElf_Addr pc, Dwfl *dwfl) ++{ ++ Dwfl_Module *mod = dwfl_addrmodule (dwfl, pc); ++ ++ struct stuff stuff; ++ return (handle_cfi (dwfl, ".eh_frame", ++ dwfl_module_eh_cfi (mod, &stuff.bias), pc, &stuff) ++ & handle_cfi (dwfl, ".debug_frame", ++ dwfl_module_dwarf_cfi (mod, &stuff.bias), pc, &stuff)); ++} ++ ++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) ++ result |= 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]) ++ result |= handle_address (addr, dwfl); ++ else ++ result = 1; ++ } ++ while (++remaining < argc); ++ } ++ ++ dwfl_end (dwfl); ++ ++ return result; ++} +diff --git a/tests/asm-tst9.c b/tests/asm-tst9.c +index 1797e48..ad25275 100644 +--- a/tests/asm-tst9.c ++++ b/tests/asm-tst9.c +@@ -1,4 +1,4 @@ +-/* Copyright (C) 2002, 2005 Red Hat, Inc. ++/* Copyright (C) 2002-2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + Written by Ulrich Drepper , 2002. + +@@ -211,19 +211,19 @@ main (void) + + for (cnt = 1; cnt < 3; ++cnt) + { +- Elf_Scn *scn; ++ Elf_Scn *escn; + GElf_Shdr shdr_mem; + GElf_Shdr *shdr; + +- scn = elf_getscn (elf, cnt); +- if (scn == NULL) ++ escn = elf_getscn (elf, cnt); ++ if (escn == NULL) + { + printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1)); + result = 1; + continue; + } + +- shdr = gelf_getshdr (scn, &shdr_mem); ++ shdr = gelf_getshdr (escn, &shdr_mem); + if (shdr == NULL) + { + printf ("cannot get section header for section %Zd: %s\n", +@@ -303,7 +303,7 @@ main (void) + + if (cnt == 1) + { +- Elf_Data *data = elf_getdata (scn, NULL); ++ Elf_Data *data = elf_getdata (escn, NULL); + + if (data == NULL) + { +diff --git a/tests/dwarf-getmacros.c b/tests/dwarf-getmacros.c +new file mode 100644 +index 0000000..5c38097 +--- /dev/null ++++ b/tests/dwarf-getmacros.c +@@ -0,0 +1,64 @@ ++/* Test program for dwfl_module_return_value_location. ++ Copyright (C) 2009 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 ++ . */ ++ ++#include ++#include ELFUTILS_HEADER(dw) ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int ++main (int argc __attribute__ ((unused)), char *argv[]) ++{ ++ const char *name = argv[1]; ++ ptrdiff_t cuoff = strtol (argv[2], NULL, 0); ++ ++ int fd = open (name, O_RDONLY); ++ Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); ++ ++ Dwarf_Die cudie_mem, *cudie = dwarf_offdie (dbg, cuoff, &cudie_mem); ++ int mac (Dwarf_Macro *macro, void *data __attribute__ ((unused))) ++ { ++ unsigned int opcode; ++ dwarf_macro_opcode (macro, &opcode); ++ if (opcode == DW_MACINFO_define) ++ { ++ const char *value; ++ dwarf_macro_param2 (macro, NULL, &value); ++ puts (value); ++ } ++ return DWARF_CB_ABORT; ++ } ++ ++ ptrdiff_t off = 0; ++ while ((off = dwarf_getmacros (cudie, mac, NULL, off)) > 0) ++ ; ++ ++ return 0; ++} +diff --git a/tests/dwfl-bug-getmodules.c b/tests/dwfl-bug-getmodules.c +new file mode 100644 +index 0000000..f7042c0 +--- /dev/null ++++ b/tests/dwfl-bug-getmodules.c +@@ -0,0 +1,74 @@ ++/* 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 ++ . */ ++ ++#include ++#include ELFUTILS_HEADER(dwfl) ++ ++#include ++ ++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/early-offscn.c b/tests/early-offscn.c +new file mode 100644 +index 0000000..8778d50 +--- /dev/null ++++ b/tests/early-offscn.c +@@ -0,0 +1,60 @@ ++/* 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 ++ . */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++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/run-addrname-test.sh b/tests/run-addrname-test.sh +index ce47fe1..d525523 100755 +--- a/tests/run-addrname-test.sh ++++ b/tests/run-addrname-test.sh +@@ -1,5 +1,5 @@ + #! /bin/sh +-# Copyright (C) 2007 Red Hat, Inc. ++# 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 +@@ -25,7 +25,7 @@ + + . $srcdir/test-subr.sh + +-testfiles testfile34 testfile38 testfile41 ++testfiles testfile34 testfile38 testfile41 testfile49 + + testrun_compare ../src/addr2line -f -e testfile34 \ + 0x08048074 0x08048075 0x08048076 \ +@@ -62,4 +62,161 @@ small_global_first_at_large_global+0x1 + ??:0 + EOF + ++testfiles testfile12 testfile14 ++tempfiles testmaps ++ ++cat > testmaps <. ++ ++. $srcdir/test-subr.sh ++ ++testfiles testfile51 ++ ++testrun_compare ./dwarf-getmacros testfile51 0xb <<\EOF ++__STDC__ 1 ++__STDC_HOSTED__ 1 ++__GNUC__ 4 ++__GNUC_MINOR__ 3 ++__GNUC_PATCHLEVEL__ 2 ++__GNUC_RH_RELEASE__ 7 ++__SIZE_TYPE__ long unsigned int ++__PTRDIFF_TYPE__ long int ++__WCHAR_TYPE__ int ++__WINT_TYPE__ unsigned int ++__INTMAX_TYPE__ long int ++__UINTMAX_TYPE__ long unsigned int ++__GXX_ABI_VERSION 1002 ++__SCHAR_MAX__ 127 ++__SHRT_MAX__ 32767 ++__INT_MAX__ 2147483647 ++__LONG_MAX__ 9223372036854775807L ++__LONG_LONG_MAX__ 9223372036854775807LL ++__WCHAR_MAX__ 2147483647 ++__CHAR_BIT__ 8 ++__INTMAX_MAX__ 9223372036854775807L ++__FLT_EVAL_METHOD__ 0 ++__DEC_EVAL_METHOD__ 2 ++__FLT_RADIX__ 2 ++__FLT_MANT_DIG__ 24 ++__FLT_DIG__ 6 ++__FLT_MIN_EXP__ (-125) ++__FLT_MIN_10_EXP__ (-37) ++__FLT_MAX_EXP__ 128 ++__FLT_MAX_10_EXP__ 38 ++__FLT_MAX__ 3.40282347e+38F ++__FLT_MIN__ 1.17549435e-38F ++__FLT_EPSILON__ 1.19209290e-7F ++__FLT_DENORM_MIN__ 1.40129846e-45F ++__FLT_HAS_DENORM__ 1 ++__FLT_HAS_INFINITY__ 1 ++__FLT_HAS_QUIET_NAN__ 1 ++__DBL_MANT_DIG__ 53 ++__DBL_DIG__ 15 ++__DBL_MIN_EXP__ (-1021) ++__DBL_MIN_10_EXP__ (-307) ++__DBL_MAX_EXP__ 1024 ++__DBL_MAX_10_EXP__ 308 ++__DBL_MAX__ 1.7976931348623157e+308 ++__DBL_MIN__ 2.2250738585072014e-308 ++__DBL_EPSILON__ 2.2204460492503131e-16 ++__DBL_DENORM_MIN__ 4.9406564584124654e-324 ++__DBL_HAS_DENORM__ 1 ++__DBL_HAS_INFINITY__ 1 ++__DBL_HAS_QUIET_NAN__ 1 ++__LDBL_MANT_DIG__ 64 ++__LDBL_DIG__ 18 ++__LDBL_MIN_EXP__ (-16381) ++__LDBL_MIN_10_EXP__ (-4931) ++__LDBL_MAX_EXP__ 16384 ++__LDBL_MAX_10_EXP__ 4932 ++__DECIMAL_DIG__ 21 ++__LDBL_MAX__ 1.18973149535723176502e+4932L ++__LDBL_MIN__ 3.36210314311209350626e-4932L ++__LDBL_EPSILON__ 1.08420217248550443401e-19L ++__LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L ++__LDBL_HAS_DENORM__ 1 ++__LDBL_HAS_INFINITY__ 1 ++__LDBL_HAS_QUIET_NAN__ 1 ++__DEC32_MANT_DIG__ 7 ++__DEC32_MIN_EXP__ (-95) ++__DEC32_MAX_EXP__ 96 ++__DEC32_MIN__ 1E-95DF ++__DEC32_MAX__ 9.999999E96DF ++__DEC32_EPSILON__ 1E-6DF ++__DEC32_DEN__ 0.000001E-95DF ++__DEC64_MANT_DIG__ 16 ++__DEC64_MIN_EXP__ (-383) ++__DEC64_MAX_EXP__ 384 ++__DEC64_MIN__ 1E-383DD ++__DEC64_MAX__ 9.999999999999999E384DD ++__DEC64_EPSILON__ 1E-15DD ++__DEC64_DEN__ 0.000000000000001E-383DD ++__DEC128_MANT_DIG__ 34 ++__DEC128_MIN_EXP__ (-6143) ++__DEC128_MAX_EXP__ 6144 ++__DEC128_MIN__ 1E-6143DL ++__DEC128_MAX__ 9.999999999999999999999999999999999E6144DL ++__DEC128_EPSILON__ 1E-33DL ++__DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL ++__REGISTER_PREFIX__ ++__USER_LABEL_PREFIX__ ++__VERSION__ "4.3.2 20081105 (Red Hat 4.3.2-7)" ++__GNUC_GNU_INLINE__ 1 ++_LP64 1 ++__LP64__ 1 ++__NO_INLINE__ 1 ++__FINITE_MATH_ONLY__ 0 ++__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 ++__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 ++__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 ++__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 ++__SIZEOF_INT__ 4 ++__SIZEOF_LONG__ 8 ++__SIZEOF_LONG_LONG__ 8 ++__SIZEOF_SHORT__ 2 ++__SIZEOF_FLOAT__ 4 ++__SIZEOF_DOUBLE__ 8 ++__SIZEOF_LONG_DOUBLE__ 16 ++__SIZEOF_SIZE_T__ 8 ++__SIZEOF_WCHAR_T__ 4 ++__SIZEOF_WINT_T__ 4 ++__SIZEOF_PTRDIFF_T__ 8 ++__SIZEOF_POINTER__ 8 ++__amd64 1 ++__amd64__ 1 ++__x86_64 1 ++__x86_64__ 1 ++__k8 1 ++__k8__ 1 ++__MMX__ 1 ++__SSE__ 1 ++__SSE2__ 1 ++__SSE_MATH__ 1 ++__SSE2_MATH__ 1 ++__gnu_linux__ 1 ++__linux 1 ++__linux__ 1 ++linux 1 ++__unix 1 ++__unix__ 1 ++unix 1 ++__ELF__ 1 ++__DECIMAL_BID_FORMAT__ 1 ++macro1 ble ++EOF ++ ++testrun_compare ./dwarf-getmacros testfile51 0x84 <<\EOF ++__STDC__ 1 ++__STDC_HOSTED__ 1 ++__GNUC__ 4 ++__GNUC_MINOR__ 3 ++__GNUC_PATCHLEVEL__ 2 ++__GNUC_RH_RELEASE__ 7 ++__SIZE_TYPE__ long unsigned int ++__PTRDIFF_TYPE__ long int ++__WCHAR_TYPE__ int ++__WINT_TYPE__ unsigned int ++__INTMAX_TYPE__ long int ++__UINTMAX_TYPE__ long unsigned int ++__GXX_ABI_VERSION 1002 ++__SCHAR_MAX__ 127 ++__SHRT_MAX__ 32767 ++__INT_MAX__ 2147483647 ++__LONG_MAX__ 9223372036854775807L ++__LONG_LONG_MAX__ 9223372036854775807LL ++__WCHAR_MAX__ 2147483647 ++__CHAR_BIT__ 8 ++__INTMAX_MAX__ 9223372036854775807L ++__FLT_EVAL_METHOD__ 0 ++__DEC_EVAL_METHOD__ 2 ++__FLT_RADIX__ 2 ++__FLT_MANT_DIG__ 24 ++__FLT_DIG__ 6 ++__FLT_MIN_EXP__ (-125) ++__FLT_MIN_10_EXP__ (-37) ++__FLT_MAX_EXP__ 128 ++__FLT_MAX_10_EXP__ 38 ++__FLT_MAX__ 3.40282347e+38F ++__FLT_MIN__ 1.17549435e-38F ++__FLT_EPSILON__ 1.19209290e-7F ++__FLT_DENORM_MIN__ 1.40129846e-45F ++__FLT_HAS_DENORM__ 1 ++__FLT_HAS_INFINITY__ 1 ++__FLT_HAS_QUIET_NAN__ 1 ++__DBL_MANT_DIG__ 53 ++__DBL_DIG__ 15 ++__DBL_MIN_EXP__ (-1021) ++__DBL_MIN_10_EXP__ (-307) ++__DBL_MAX_EXP__ 1024 ++__DBL_MAX_10_EXP__ 308 ++__DBL_MAX__ 1.7976931348623157e+308 ++__DBL_MIN__ 2.2250738585072014e-308 ++__DBL_EPSILON__ 2.2204460492503131e-16 ++__DBL_DENORM_MIN__ 4.9406564584124654e-324 ++__DBL_HAS_DENORM__ 1 ++__DBL_HAS_INFINITY__ 1 ++__DBL_HAS_QUIET_NAN__ 1 ++__LDBL_MANT_DIG__ 64 ++__LDBL_DIG__ 18 ++__LDBL_MIN_EXP__ (-16381) ++__LDBL_MIN_10_EXP__ (-4931) ++__LDBL_MAX_EXP__ 16384 ++__LDBL_MAX_10_EXP__ 4932 ++__DECIMAL_DIG__ 21 ++__LDBL_MAX__ 1.18973149535723176502e+4932L ++__LDBL_MIN__ 3.36210314311209350626e-4932L ++__LDBL_EPSILON__ 1.08420217248550443401e-19L ++__LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L ++__LDBL_HAS_DENORM__ 1 ++__LDBL_HAS_INFINITY__ 1 ++__LDBL_HAS_QUIET_NAN__ 1 ++__DEC32_MANT_DIG__ 7 ++__DEC32_MIN_EXP__ (-95) ++__DEC32_MAX_EXP__ 96 ++__DEC32_MIN__ 1E-95DF ++__DEC32_MAX__ 9.999999E96DF ++__DEC32_EPSILON__ 1E-6DF ++__DEC32_DEN__ 0.000001E-95DF ++__DEC64_MANT_DIG__ 16 ++__DEC64_MIN_EXP__ (-383) ++__DEC64_MAX_EXP__ 384 ++__DEC64_MIN__ 1E-383DD ++__DEC64_MAX__ 9.999999999999999E384DD ++__DEC64_EPSILON__ 1E-15DD ++__DEC64_DEN__ 0.000000000000001E-383DD ++__DEC128_MANT_DIG__ 34 ++__DEC128_MIN_EXP__ (-6143) ++__DEC128_MAX_EXP__ 6144 ++__DEC128_MIN__ 1E-6143DL ++__DEC128_MAX__ 9.999999999999999999999999999999999E6144DL ++__DEC128_EPSILON__ 1E-33DL ++__DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL ++__REGISTER_PREFIX__ ++__USER_LABEL_PREFIX__ ++__VERSION__ "4.3.2 20081105 (Red Hat 4.3.2-7)" ++__GNUC_GNU_INLINE__ 1 ++_LP64 1 ++__LP64__ 1 ++__NO_INLINE__ 1 ++__FINITE_MATH_ONLY__ 0 ++__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 ++__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 ++__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 ++__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 ++__SIZEOF_INT__ 4 ++__SIZEOF_LONG__ 8 ++__SIZEOF_LONG_LONG__ 8 ++__SIZEOF_SHORT__ 2 ++__SIZEOF_FLOAT__ 4 ++__SIZEOF_DOUBLE__ 8 ++__SIZEOF_LONG_DOUBLE__ 16 ++__SIZEOF_SIZE_T__ 8 ++__SIZEOF_WCHAR_T__ 4 ++__SIZEOF_WINT_T__ 4 ++__SIZEOF_PTRDIFF_T__ 8 ++__SIZEOF_POINTER__ 8 ++__amd64 1 ++__amd64__ 1 ++__x86_64 1 ++__x86_64__ 1 ++__k8 1 ++__k8__ 1 ++__MMX__ 1 ++__SSE__ 1 ++__SSE2__ 1 ++__SSE_MATH__ 1 ++__SSE2_MATH__ 1 ++__gnu_linux__ 1 ++__linux 1 ++__linux__ 1 ++linux 1 ++__unix 1 ++__unix__ 1 ++unix 1 ++__ELF__ 1 ++__DECIMAL_BID_FORMAT__ 1 ++macro2 ble ++EOF ++ ++exit 0 +diff --git a/tests/run-dwfl-addr-sect.sh b/tests/run-dwfl-addr-sect.sh +index 69280f5..f33a6e4 100755 +--- a/tests/run-dwfl-addr-sect.sh ++++ b/tests/run-dwfl-addr-sect.sh +@@ -1,5 +1,5 @@ + #! /bin/sh +-# Copyright (C) 2007 Red Hat, Inc. ++# Copyright (C) 2007-2009 Red Hat, Inc. + # This file is part of Red Hat elfutils. + # + # Red Hat elfutils is free software; you can redistribute it and/or modify +@@ -25,13 +25,16 @@ + + . $srcdir/test-subr.sh + +-testfiles testfile43 ++testfiles testfile43 testfile50 + +-export LC_ALL=C + 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 + ++testrun_compare ./dwfl-addr-sect -e testfile50 0x1 <<\EOF ++address 0x1 => module "" section 1 + 0x1 ++EOF ++ + exit 0 +diff --git a/tests/run-early-offscn.sh b/tests/run-early-offscn.sh +new file mode 100755 +index 0000000..70be219 +--- /dev/null ++++ b/tests/run-early-offscn.sh +@@ -0,0 +1,32 @@ ++#! /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 ++# . ++ ++. $srcdir/test-subr.sh ++ ++testfiles testfile ++ ++testrun ./early-offscn testfile 0x500 ++ ++exit 0 +diff --git a/tests/run-strings-test.sh b/tests/run-strings-test.sh +index cfd9d23..a5dac63 100755 +--- a/tests/run-strings-test.sh ++++ b/tests/run-strings-test.sh +@@ -1,5 +1,5 @@ + #! /bin/sh +-# Copyright (C) 2005, 2006 Red Hat, Inc. ++# Copyright (C) 2005, 2006, 2008 Red Hat, Inc. + # This file is part of Red Hat elfutils. + # Written by Ulrich Drepper , 2005. + # +@@ -29,9 +29,6 @@ + files="testfile `seq 2 9 | while read n; do echo testfile$n; done`" + testfiles $files + +-LC_ALL=C +-export LC_ALL +- + testrun_compare ../src/strings -tx -f $files <<\EOF + testfile: f4 /lib/ld-linux.so.2 + testfile: 1c9 __gmon_start__ +diff --git a/tests/run-strip-test.sh b/tests/run-strip-test.sh +index 480101e..e056f89 100755 +--- a/tests/run-strip-test.sh ++++ b/tests/run-strip-test.sh +@@ -1,5 +1,5 @@ + #! /bin/sh +-# Copyright (C) 1999, 2000, 2002, 2003, 2005, 2007 Red Hat, Inc. ++# Copyright (C) 1999, 2000, 2002, 2003, 2005, 2007, 2008 Red Hat, Inc. + # This file is part of Red Hat elfutils. + # Written by Ulrich Drepper , 1999. + # +@@ -30,7 +30,8 @@ original=${original:-testfile11} + stripped=${stripped:-testfile7} + debugout=${debugfile:+-f testfile.debug.temp -F $debugfile} + +-testfiles $original $stripped $debugfile ++testfiles $original ++test x$stripped = xtestfile.temp || testfiles $stripped $debugfile + + tempfiles testfile.temp testfile.debug.temp testfile.unstrip + +@@ -56,4 +57,8 @@ testrun ../src/unstrip -o testfile.unstrip testfile.temp testfile.debug.temp + 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-test8.sh b/tests/run-strip-test8.sh +new file mode 100755 +index 0000000..fb9fa08 +--- /dev/null ++++ b/tests/run-strip-test8.sh +@@ -0,0 +1,5 @@ ++original=testfile47 ++stripped=testfile48 ++debugfile=testfile48.debug ++ ++. $srcdir/run-strip-test.sh +diff --git a/tests/test-subr.sh b/tests/test-subr.sh +index 7fda05a..cb34b93 100644 +--- a/tests/test-subr.sh ++++ b/tests/test-subr.sh +@@ -1,5 +1,5 @@ + #! /bin/sh +-# Copyright (C) 2005, 2007 Red Hat, Inc. ++# 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 +@@ -30,6 +30,9 @@ + + set -e + ++#LC_ALL=C ++#export LC_ALL ++ + remove_files= + trap 'rm -f $remove_files' 0 + +diff --git a/tests/testfile16.bz2 b/tests/testfile16.bz2 +index 909e225..4d7160c 100644 +Binary files a/tests/testfile16.bz2 and b/tests/testfile16.bz2 differ +diff --git a/tests/testfile16.debug.bz2 b/tests/testfile16.debug.bz2 +index 48d651f..f02a972 100644 +Binary files a/tests/testfile16.debug.bz2 and b/tests/testfile16.debug.bz2 differ +diff --git a/tests/testfile44.S.bz2 b/tests/testfile44.S.bz2 +index cbd0da3..4e87434 100644 +Binary files a/tests/testfile44.S.bz2 and b/tests/testfile44.S.bz2 differ +diff --git a/tests/testfile44.expect.bz2 b/tests/testfile44.expect.bz2 +index 2347aea..b3937b9 100644 +Binary files a/tests/testfile44.expect.bz2 and b/tests/testfile44.expect.bz2 differ +diff --git a/tests/testfile45.S.bz2 b/tests/testfile45.S.bz2 +index 91b4795..00e819e 100644 +Binary files a/tests/testfile45.S.bz2 and b/tests/testfile45.S.bz2 differ +diff --git a/tests/testfile45.expect.bz2 b/tests/testfile45.expect.bz2 +index 06b4d9b..b8b33e9 100644 +Binary files a/tests/testfile45.expect.bz2 and b/tests/testfile45.expect.bz2 differ +diff --git a/tests/testfile47.bz2 b/tests/testfile47.bz2 +new file mode 100644 +index 0000000..334bd6c +Binary files /dev/null and b/tests/testfile47.bz2 differ +diff --git a/tests/testfile48.bz2 b/tests/testfile48.bz2 +new file mode 100644 +index 0000000..da0d9da +Binary files /dev/null and b/tests/testfile48.bz2 differ +diff --git a/tests/testfile48.debug.bz2 b/tests/testfile48.debug.bz2 +new file mode 100644 +index 0000000..7b84c4c +Binary files /dev/null and b/tests/testfile48.debug.bz2 differ +diff --git a/tests/testfile49.bz2 b/tests/testfile49.bz2 +new file mode 100644 +index 0000000..8741a6b +Binary files /dev/null and b/tests/testfile49.bz2 differ +diff --git a/tests/testfile50.bz2 b/tests/testfile50.bz2 +new file mode 100644 +index 0000000..fce4332 +Binary files /dev/null and b/tests/testfile50.bz2 differ +diff --git a/tests/testfile51.bz2 b/tests/testfile51.bz2 +new file mode 100755 +index 0000000..5ff45c6 +Binary files /dev/null and b/tests/testfile51.bz2 differ diff --git a/frysk-0.4-elfutils-ldadd-lzma.patch b/frysk-0.4-elfutils-ldadd-lzma.patch new file mode 100644 index 0000000..f4f2d65 --- /dev/null +++ b/frysk-0.4-elfutils-ldadd-lzma.patch @@ -0,0 +1,54 @@ +diff -up frysk-0.4/frysk-core/Makefile.am.elfutils-ldadd-lzma frysk-0.4/frysk-core/Makefile.am +--- frysk-0.4/frysk-core/Makefile.am.elfutils-ldadd-lzma 2010-09-28 09:32:10.867191001 -0400 ++++ frysk-0.4/frysk-core/Makefile.am 2010-09-28 09:32:23.734191001 -0400 +@@ -70,6 +70,7 @@ GEN_GCJ_LDADD_LIST += -lstdc++ + GEN_GCJ_LDADD_LIST += -laudit + GEN_GCJ_LDADD_LIST += -lbz2 + GEN_GCJ_LDADD_LIST += -lz ++GEN_GCJ_LDADD_LIST += -llzma + + # For TestExec.java + pkglib_PROGRAMS += frysk/pkglibdir/funit-exec-alias +diff -up frysk-0.4/frysk-gtk/Makefile.am.elfutils-ldadd-lzma frysk-0.4/frysk-gtk/Makefile.am +--- frysk-0.4/frysk-gtk/Makefile.am.elfutils-ldadd-lzma 2010-09-28 09:32:37.941191002 -0400 ++++ frysk-0.4/frysk-gtk/Makefile.am 2010-09-28 09:32:50.346191002 -0400 +@@ -66,6 +66,7 @@ GEN_GCJ_LDADD_LIST += -lstdc++ + GEN_GCJ_LDADD_LIST += -laudit + GEN_GCJ_LDADD_LIST += -lbz2 + GEN_GCJ_LDADD_LIST += -lz ++GEN_GCJ_LDADD_LIST += -llzma + + # Hack, need to compile this entire sub-tree with JNI. + AM_GCJFLAGS += -fjni +diff -up frysk-0.4/frysk-gui/Makefile.am.elfutils-ldadd-lzma frysk-0.4/frysk-gui/Makefile.am +--- frysk-0.4/frysk-gui/Makefile.am.elfutils-ldadd-lzma 2010-09-28 09:33:03.212191001 -0400 ++++ frysk-0.4/frysk-gui/Makefile.am 2010-09-28 09:33:14.068191002 -0400 +@@ -79,6 +79,7 @@ GEN_GCJ_LDADD_LIST += $(FRYSK_GUI_LIBS) + GEN_GCJ_LDADD_LIST += -laudit + GEN_GCJ_LDADD_LIST += -lbz2 + GEN_GCJ_LDADD_LIST += -lz ++GEN_GCJ_LDADD_LIST += -llzma + + # Skip the JUnit tests (exit with status 77) when there is no display; bug #3012. + #TESTS_ENVIRONMENT = ( test $$tst != TestRunner || test -n "$$DISPLAY" || exit 77 ) && +diff -up frysk-0.4/frysk-imports/tests/Makefile.am.elfutils-ldadd-lzma frysk-0.4/frysk-imports/tests/Makefile.am +--- frysk-0.4/frysk-imports/tests/Makefile.am.elfutils-ldadd-lzma 2010-09-28 09:31:44.243191000 -0400 ++++ frysk-0.4/frysk-imports/tests/Makefile.am 2010-09-28 09:31:44.277191000 -0400 +@@ -492,5 +492,5 @@ frysk4796_dwfltest_LDADD = -ldl $(top_bu + $(top_builddir)/elfutils/libdw/libdw.a \ + $(top_builddir)/elfutils/libebl/libebl.a \ + $(top_builddir)/elfutils/libelf/libelf.a \ +--lz -lbz2 ++-lz -lbz2 -llzma + systests_PASS_PROGRAM += frysk4796/dwfltest +diff -up frysk-0.4/frysk-sys/Makefile.am.elfutils-ldadd-lzma frysk-0.4/frysk-sys/Makefile.am +--- frysk-0.4/frysk-sys/Makefile.am.elfutils-ldadd-lzma 2010-09-28 09:31:44.254191000 -0400 ++++ frysk-0.4/frysk-sys/Makefile.am 2010-09-28 09:31:44.281191000 -0400 +@@ -67,6 +67,7 @@ endif + GEN_GCJ_LDADD_LIST += -lstdc++ -laudit + GEN_GCJ_LDADD_LIST += -lbz2 + GEN_GCJ_LDADD_LIST += -lz ++GEN_GCJ_LDADD_LIST += -llzma + + # Force a few dependencies + lib/unwind/cni/Unwind%.cxx: lib/unwind/Unwind%.java lib/unwind/cni/UnwindH.hxx diff --git a/frysk-0.4-elfutils-ldadd.patch b/frysk-0.4-elfutils-ldadd.patch new file mode 100644 index 0000000..5799c86 --- /dev/null +++ b/frysk-0.4-elfutils-ldadd.patch @@ -0,0 +1,59 @@ +diff -up frysk-0.4/frysk-core/Makefile.am.elfutilsin frysk-0.4/frysk-core/Makefile.am +--- frysk-0.4/frysk-core/Makefile.am.elfutilsin 2010-03-23 21:33:19.000000000 -0400 ++++ frysk-0.4/frysk-core/Makefile.am 2010-03-23 21:33:20.000000000 -0400 +@@ -68,6 +68,8 @@ GEN_GCJ_LDADD_LIST += -lstdc++ + # Stub bfd_getb32 and bfd_getl32 for PPC64. Unconditionally + # link -lbfd_get just for simplification. + GEN_GCJ_LDADD_LIST += -laudit ++GEN_GCJ_LDADD_LIST += -lbz2 ++GEN_GCJ_LDADD_LIST += -lz + + # For TestExec.java + pkglib_PROGRAMS += frysk/pkglibdir/funit-exec-alias +diff -up frysk-0.4/frysk-gtk/Makefile.am.elfutilsin frysk-0.4/frysk-gtk/Makefile.am +--- frysk-0.4/frysk-gtk/Makefile.am.elfutilsin 2010-03-23 21:44:42.000000000 -0400 ++++ frysk-0.4/frysk-gtk/Makefile.am 2010-03-23 21:45:02.000000000 -0400 +@@ -64,6 +64,8 @@ GEN_GCJ_LDADD_LIST += \ + GEN_GCJ_LDADD_LIST += -lstdc++ + # For auditing + GEN_GCJ_LDADD_LIST += -laudit ++GEN_GCJ_LDADD_LIST += -lbz2 ++GEN_GCJ_LDADD_LIST += -lz + + # Hack, need to compile this entire sub-tree with JNI. + AM_GCJFLAGS += -fjni +diff -up frysk-0.4/frysk-gui/Makefile.am.elfutilsin frysk-0.4/frysk-gui/Makefile.am +--- frysk-0.4/frysk-gui/Makefile.am.elfutilsin 2008-06-09 14:03:07.000000000 -0400 ++++ frysk-0.4/frysk-gui/Makefile.am 2010-03-23 21:33:20.000000000 -0400 +@@ -77,6 +77,8 @@ GEN_GCJ_LDADD_LIST += -L../frysk-gtk/Egg + GEN_GCJ_LDADD_LIST += -L../frysk-gtk/tlwidgets + GEN_GCJ_LDADD_LIST += $(FRYSK_GUI_LIBS) + GEN_GCJ_LDADD_LIST += -laudit ++GEN_GCJ_LDADD_LIST += -lbz2 ++GEN_GCJ_LDADD_LIST += -lz + + # Skip the JUnit tests (exit with status 77) when there is no display; bug #3012. + #TESTS_ENVIRONMENT = ( test $$tst != TestRunner || test -n "$$DISPLAY" || exit 77 ) && +diff -up frysk-0.4/frysk-imports/tests/Makefile.am.elfutilsin frysk-0.4/frysk-imports/tests/Makefile.am +--- frysk-0.4/frysk-imports/tests/Makefile.am.elfutilsin 2008-06-09 14:03:07.000000000 -0400 ++++ frysk-0.4/frysk-imports/tests/Makefile.am 2010-03-23 21:33:20.000000000 -0400 +@@ -491,5 +491,6 @@ frysk4796_dwfltest_CFLAGS = -I$(top_srcd + frysk4796_dwfltest_LDADD = -ldl $(top_builddir)/elfutils/libasm/libasm.a \ + $(top_builddir)/elfutils/libdw/libdw.a \ + $(top_builddir)/elfutils/libebl/libebl.a \ +-$(top_builddir)/elfutils/libelf/libelf.a ++$(top_builddir)/elfutils/libelf/libelf.a \ ++-lz -lbz2 + systests_PASS_PROGRAM += frysk4796/dwfltest +diff -up frysk-0.4/frysk-sys/Makefile.am.elfutilsin frysk-0.4/frysk-sys/Makefile.am +--- frysk-0.4/frysk-sys/Makefile.am.elfutilsin 2008-06-09 14:03:07.000000000 -0400 ++++ frysk-0.4/frysk-sys/Makefile.am 2010-03-23 21:33:20.000000000 -0400 +@@ -65,6 +65,8 @@ GEN_GCJ_LDADD_LIST += ../frysk-imports/l + ../frysk-imports/libunwind-ppc64/src/.libs/libunwind-ppc64.a + endif + GEN_GCJ_LDADD_LIST += -lstdc++ -laudit ++GEN_GCJ_LDADD_LIST += -lbz2 ++GEN_GCJ_LDADD_LIST += -lz + + # Force a few dependencies + lib/unwind/cni/Unwind%.cxx: lib/unwind/Unwind%.java lib/unwind/cni/UnwindH.hxx diff --git a/frysk-0.4-elfutils-louser.patch b/frysk-0.4-elfutils-louser.patch new file mode 100644 index 0000000..02a538a --- /dev/null +++ b/frysk-0.4-elfutils-louser.patch @@ -0,0 +1,12 @@ +diff -up frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum.elfutilsin frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum +--- frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum.elfutilsin 2008-06-09 14:03:07.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum 2010-03-23 21:33:20.000000000 -0400 +@@ -43,6 +43,8 @@ + + CC=${CC:-gcc} + $CC -dD -E $(dirname $0)/../../../frysk-imports/elfutils/libdw/dwarf.h | awk ' ++ /lo_user/ { next } ++ /hi_user/ { next } + /DW_OP_.* = / { + p = $1 + v = gensub(",","","",$3) diff --git a/frysk-0.4-elfutils-maphack.patch b/frysk-0.4-elfutils-maphack.patch new file mode 100644 index 0000000..9efc27a --- /dev/null +++ b/frysk-0.4-elfutils-maphack.patch @@ -0,0 +1,11 @@ +diff -up frysk-0.4/frysk-common/Makefile.rules.elfutils-maphack frysk-0.4/frysk-common/Makefile.rules +--- frysk-0.4/frysk-common/Makefile.rules.elfutils-maphack 2010-03-25 16:11:21.000000000 -0400 ++++ frysk-0.4/frysk-common/Makefile.rules 2010-03-25 16:12:05.000000000 -0400 +@@ -477,6 +477,7 @@ lib$(GEN_DIRNAME)-jni.so: $(JNI_ARCHIVE_ + lib$(GEN_DIRNAME)-jni.so: lib$(GEN_DIRNAME)-jni.a + soname=`basename $@` ; \ + $(CC) -shared -o $@.tmp \ ++ -Wl,--version-script,$(top_srcdir)/../frysk-imports/elfutils/libdw/libdw.map \ + -Wl,--whole-archive \ + -Wl,$< \ + $(JNI_ARCHIVE_LIST:%=-Wl,%) \ diff --git a/frysk-0.4-elfutils-offt.patch b/frysk-0.4-elfutils-offt.patch new file mode 100644 index 0000000..2b39be0 --- /dev/null +++ b/frysk-0.4-elfutils-offt.patch @@ -0,0 +1,18 @@ +2008-03-13 Tim Moore + + * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Cast offset and + size computation to uint64_t. + +diff --git b/libelf/elf_getdata_rawchunk.c a/libelf/elf_getdata_rawchunk.c +index 1b1b003..bea0f3f 100644 +--- b/libelf/elf_getdata_rawchunk.c ++++ a/libelf/elf_getdata_rawchunk.c +@@ -79,7 +79,7 @@ elf_getdata_rawchunk (elf, offset, size, type) + } + + if (unlikely (size > elf->maximum_size +- || (off64_t) (elf->maximum_size - size) < offset)) ++ || (uint64_t)(elf->maximum_size - size) < (uint64_t)offset)) + { + /* Invalid request. */ + __libelf_seterrno (ELF_E_INVALID_OP); diff --git a/frysk-0.4-elfutils-rpmout.patch b/frysk-0.4-elfutils-rpmout.patch new file mode 100644 index 0000000..5d571fb --- /dev/null +++ b/frysk-0.4-elfutils-rpmout.patch @@ -0,0 +1,1753 @@ +Only in ../base/frysk/frysk-imports/elfutils: aclocal.m4 +Only in ../base/frysk/frysk-imports/elfutils: autom4te.cache +Only in ../base/frysk/frysk-imports/elfutils/backends: Makefile.in +Only in ../base/frysk/frysk-imports/elfutils/config: config.guess +Only in ../base/frysk/frysk-imports/elfutils/config: config.sub +Only in ./config: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/config: depcomp +Only in ../base/frysk/frysk-imports/elfutils/config: install-sh +Only in ../base/frysk/frysk-imports/elfutils/config: Makefile.in +Only in ../base/frysk/frysk-imports/elfutils/config: missing +Only in ../base/frysk/frysk-imports/elfutils/config: ylwrap +Only in ../base/frysk/frysk-imports/elfutils: config.h.in +Only in ../base/frysk/frysk-imports/elfutils: configure +Only in .: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils: debugfiles.list +Only in ../base/frysk/frysk-imports/elfutils: debuglinks.list +Only in ../base/frysk/frysk-imports/elfutils: debugsources.list +Only in .: doc +Only in ../base/frysk/frysk-imports/elfutils: elfutils.spec +Only in .: .git +Only in ../base/frysk/frysk-imports/elfutils: INSTALL +Only in ./lib: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/lib: Makefile.in +Only in ./lib: xstrdup.c +Only in ./libasm: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/libasm: Makefile.in +Only in ./libcpu: .cvsignore +Only in ./libcpu/defs: i386.doc +Only in ../base/frysk/frysk-imports/elfutils/libcpu: i386_lex.c +Only in ../base/frysk/frysk-imports/elfutils/libcpu: i386_parse.c +Only in ../base/frysk/frysk-imports/elfutils/libcpu: i386_parse.h +Only in ../base/frysk/frysk-imports/elfutils/libcpu: Makefile.in +Only in ./libdw: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/libdw: Makefile.in +Only in .: libdwarf +Only in ./libdwfl: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/libdwfl: Makefile.in +Only in ./libebl: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/libebl: Makefile.in +Only in ./libelf: .cvsignore +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/elf32_getphdr.c ./libelf/elf32_getphdr.c +--- ../base/frysk/frysk-imports/elfutils/libelf/elf32_getphdr.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/elf32_getphdr.c 2010-03-25 14:41:45.000000000 -0400 +@@ -116,16 +116,6 @@ + + if (elf->map_address != NULL) + { +- /* First see whether the information in the ELF header is +- valid and it does not ask for too much. */ +- if (unlikely (ehdr->e_phoff >= elf->maximum_size) +- || unlikely (ehdr->e_phoff + size > elf->maximum_size)) +- { +- /* Something is wrong. */ +- __libelf_seterrno (ELF_E_INVALID_PHDR); +- goto out; +- } +- + /* All the data is already mapped. Use it. */ + void *file_phdr = ((char *) elf->map_address + + elf->start_offset + ehdr->e_phoff); +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/elf32_getshdr.c ./libelf/elf32_getshdr.c +--- ../base/frysk/frysk-imports/elfutils/libelf/elf32_getshdr.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/elf32_getshdr.c 2010-03-25 14:41:45.000000000 -0400 +@@ -101,8 +101,7 @@ + goto out; + + size_t shnum; +- if (INTUSE (elf_getshnum) (elf, &shnum) != 0 +- || shnum > SIZE_MAX / sizeof (ElfW2(LIBELFBITS,Shdr))) ++ if (INTUSE (elf_getshnum) (elf, &shnum) != 0) + goto out; + size_t size = shnum * sizeof (ElfW2(LIBELFBITS,Shdr)); + +@@ -119,16 +118,6 @@ + + if (elf->map_address != NULL) + { +- /* First see whether the information in the ELF header is +- valid and it does not ask for too much. */ +- if (unlikely (ehdr->e_shoff >= elf->maximum_size) +- || unlikely (ehdr->e_shoff + size > elf->maximum_size)) +- { +- /* Something is wrong. */ +- __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); +- goto free_and_out; +- } +- + ElfW2(LIBELFBITS,Shdr) *notcvt; + + /* All the data is already mapped. If we could use it +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/elf32_newphdr.c ./libelf/elf32_newphdr.c +--- ../base/frysk/frysk-imports/elfutils/libelf/elf32_newphdr.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/elf32_newphdr.c 2010-03-25 14:41:45.000000000 -0400 +@@ -124,12 +124,6 @@ + else if (elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phnum != count + || elf->state.ELFW(elf,LIBELFBITS).phdr == NULL) + { +- if (unlikely (count > SIZE_MAX / sizeof (ElfW2(LIBELFBITS,Phdr)))) +- { +- result = NULL; +- goto out; +- } +- + /* Allocate a new program header with the appropriate number of + elements. */ + result = (ElfW2(LIBELFBITS,Phdr) *) +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/elf32_updatefile.c ./libelf/elf32_updatefile.c +--- ../base/frysk/frysk-imports/elfutils/libelf/elf32_updatefile.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/elf32_updatefile.c 2010-03-25 14:41:45.000000000 -0400 +@@ -212,9 +212,6 @@ + /* Write all the sections. Well, only those which are modified. */ + if (shnum > 0) + { +- if (unlikely (shnum > SIZE_MAX / sizeof (Elf_Scn *))) +- return 1; +- + 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 +@@ -585,10 +582,6 @@ + /* Write all the sections. Well, only those which are modified. */ + if (shnum > 0) + { +- if (unlikely (shnum > SIZE_MAX / (sizeof (Elf_Scn *) +- + sizeof (ElfW2(LIBELFBITS,Shdr))))) +- return 1; +- + 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]; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/elf_begin.c ./libelf/elf_begin.c +--- ../base/frysk/frysk-imports/elfutils/libelf/elf_begin.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/elf_begin.c 2010-03-25 14:41:45.000000000 -0400 +@@ -155,8 +155,7 @@ + + if (unlikely (result == 0) && ehdr.e32->e_shoff != 0) + { +- if (unlikely (ehdr.e32->e_shoff >= maxsize) +- || unlikely (ehdr.e32->e_shoff + sizeof (Elf32_Shdr) > maxsize)) ++ if (ehdr.e32->e_shoff + sizeof (Elf32_Shdr) > maxsize) + /* Cannot read the first section header. */ + return 0; + +@@ -204,8 +203,7 @@ + + if (unlikely (result == 0) && ehdr.e64->e_shoff != 0) + { +- if (unlikely (ehdr.e64->e_shoff >= maxsize) +- || unlikely (ehdr.e64->e_shoff + sizeof (Elf64_Shdr) > maxsize)) ++ if (ehdr.e64->e_shoff + sizeof (Elf64_Shdr) > maxsize) + /* Cannot read the first section header. */ + return 0; + +@@ -277,15 +275,6 @@ + /* Could not determine the number of sections. */ + return NULL; + +- /* Check for too many sections. */ +- if (e_ident[EI_CLASS] == ELFCLASS32) +- { +- if (scncnt > SIZE_MAX / (sizeof (Elf_Scn) + sizeof (Elf32_Shdr))) +- return NULL; +- } +- else if (scncnt > SIZE_MAX / (sizeof (Elf_Scn) + sizeof (Elf64_Shdr))) +- 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)); +@@ -319,31 +308,13 @@ + { + /* We can use the mmapped memory. */ + elf->state.elf32.ehdr = ehdr; +- +- if (unlikely (ehdr->e_shoff >= maxsize) +- || unlikely (ehdr->e_shoff +- + scncnt * sizeof (Elf32_Shdr) > maxsize)) +- { +- free_and_out: +- free (elf); +- __libelf_seterrno (ELF_E_INVALID_FILE); +- return NULL; +- } + 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. */ +- if (unlikely (ehdr->e_phoff >= maxsize) +- || unlikely (ehdr->e_phoff +- + ehdr->e_phnum +- * sizeof (Elf32_Phdr) > maxsize)) +- goto free_and_out; + elf->state.elf32.phdr + = (Elf32_Phdr *) ((char *) ehdr + ehdr->e_phoff); +- } + + for (size_t cnt = 0; cnt < scncnt; ++cnt) + { +@@ -425,26 +396,13 @@ + { + /* We can use the mmapped memory. */ + elf->state.elf64.ehdr = ehdr; +- +- if (unlikely (ehdr->e_shoff >= maxsize) +- || unlikely (ehdr->e_shoff +- + scncnt * sizeof (Elf32_Shdr) > maxsize)) +- goto free_and_out; + 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. */ +- if (unlikely (ehdr->e_phoff >= maxsize) +- || unlikely (ehdr->e_phoff +- + ehdr->e_phnum +- * sizeof (Elf32_Phdr) > maxsize)) +- goto free_and_out; + elf->state.elf64.phdr + = (Elf64_Phdr *) ((char *) ehdr + ehdr->e_phoff); +- } + + for (size_t cnt = 0; cnt < scncnt; ++cnt) + { +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/elf_getarsym.c ./libelf/elf_getarsym.c +--- ../base/frysk/frysk-imports/elfutils/libelf/elf_getarsym.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/elf_getarsym.c 2010-03-17 16:06:09.000000000 -0400 +@@ -179,9 +179,6 @@ + size_t index_size = atol (tmpbuf); + + if (SARMAG + sizeof (struct ar_hdr) + index_size > elf->maximum_size +-#if SIZE_MAX <= 4294967295U +- || n >= SIZE_MAX / sizeof (Elf_Arsym) +-#endif + || n * sizeof (uint32_t) > index_size) + { + /* This index table cannot be right since it does not fit into +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/elf_getshstrndx.c ./libelf/elf_getshstrndx.c +--- ../base/frysk/frysk-imports/elfutils/libelf/elf_getshstrndx.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/elf_getshstrndx.c 2010-03-25 14:41:45.000000000 -0400 +@@ -125,25 +125,10 @@ + if (elf->map_address != NULL + && elf->state.elf32.ehdr->e_ident[EI_DATA] == MY_ELFDATA + && (ALLOW_UNALIGNED +- || (((size_t) ((char *) elf->map_address +- + elf->start_offset + offset)) ++ || (((size_t) ((char *) elf->map_address + offset)) + & (__alignof__ (Elf32_Shdr) - 1)) == 0)) +- { +- /* First see whether the information in the ELF header is +- valid and it does not ask for too much. */ +- if (unlikely (offset + sizeof (Elf32_Shdr) +- > elf->maximum_size)) +- { +- /* Something is wrong. */ +- __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); +- result = -1; +- goto out; +- } +- + /* We can directly access the memory. */ +- num = ((Elf32_Shdr *) (elf->map_address + elf->start_offset +- + offset))->sh_link; +- } ++ num = ((Elf32_Shdr *) (elf->map_address + offset))->sh_link; + else + { + /* We avoid reading in all the section headers. Just read +@@ -178,25 +163,10 @@ + if (elf->map_address != NULL + && elf->state.elf64.ehdr->e_ident[EI_DATA] == MY_ELFDATA + && (ALLOW_UNALIGNED +- || (((size_t) ((char *) elf->map_address +- + elf->start_offset + offset)) ++ || (((size_t) ((char *) elf->map_address + offset)) + & (__alignof__ (Elf64_Shdr) - 1)) == 0)) +- { +- /* First see whether the information in the ELF header is +- valid and it does not ask for too much. */ +- if (unlikely (offset + sizeof (Elf64_Shdr) +- > elf->maximum_size)) +- { +- /* Something is wrong. */ +- __libelf_seterrno (ELF_E_INVALID_SECTION_HEADER); +- result = -1; +- goto out; +- } +- + /* We can directly access the memory. */ +- num = ((Elf64_Shdr *) (elf->map_address +- + elf->start_offset + offset))->sh_link; +- } ++ num = ((Elf64_Shdr *) (elf->map_address + offset))->sh_link; + else + { + /* We avoid reading in all the section headers. Just read +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/elf_newscn.c ./libelf/elf_newscn.c +--- ../base/frysk/frysk-imports/elfutils/libelf/elf_newscn.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/elf_newscn.c 2010-03-17 16:06:09.000000000 -0400 +@@ -104,18 +104,10 @@ + else + { + /* We must allocate a new element. */ +- Elf_ScnList *newp = NULL; ++ Elf_ScnList *newp; + + assert (elf->state.elf.scnincr > 0); + +- if ( +-#if SIZE_MAX <= 4294967295U +- likely (elf->state.elf.scnincr +- < SIZE_MAX / 2 / sizeof (Elf_Scn) - sizeof (Elf_ScnList)) +-#else +- 1 +-#endif +- ) + newp = (Elf_ScnList *) calloc (sizeof (Elf_ScnList) + + ((elf->state.elf.scnincr *= 2) + * sizeof (Elf_Scn)), 1); +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getdyn.c ./libelf/gelf_getdyn.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getdyn.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getdyn.c 2010-03-17 16:06:09.000000000 -0400 +@@ -93,8 +93,7 @@ + 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 (INVALID_NDX (ndx, Elf32_Dyn) +- || unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -115,8 +114,7 @@ + + /* The data is already in the correct form. Just make sure the + index is OK. */ +- if (INVALID_NDX (ndx, GElf_Dyn) +- || unlikely ((ndx + 1) * sizeof (GElf_Dyn) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (GElf_Dyn) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getlib.c ./libelf/gelf_getlib.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getlib.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getlib.c 2010-03-17 16:06:09.000000000 -0400 +@@ -86,8 +86,7 @@ + /* The data is already in the correct form. Just make sure the + index is OK. */ + GElf_Lib *result = NULL; +- if (INVALID_NDX (ndx, GElf_Lib) +- || unlikely ((ndx + 1) * sizeof (GElf_Lib) > data->d_size)) ++ if (unlikely ((ndx + 1) * sizeof (GElf_Lib) > data->d_size)) + __libelf_seterrno (ELF_E_INVALID_INDEX); + else + { +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getmove.c ./libelf/gelf_getmove.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getmove.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getmove.c 2010-03-17 16:06:09.000000000 -0400 +@@ -83,8 +83,7 @@ + + /* The data is already in the correct form. Just make sure the + index is OK. */ +- if (INVALID_NDX (ndx, GElf_Move) +- || unlikely ((ndx + 1) * sizeof (GElf_Move) > data->d_size)) ++ if (unlikely ((ndx + 1) * sizeof (GElf_Move) > data->d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getrela.c ./libelf/gelf_getrela.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getrela.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getrela.c 2010-03-17 16:06:09.000000000 -0400 +@@ -71,6 +71,12 @@ + 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); +@@ -87,8 +93,7 @@ + if (scn->elf->class == ELFCLASS32) + { + /* We have to convert the data. */ +- if (INVALID_NDX (ndx, Elf32_Rela) +- || unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + result = NULL; +@@ -109,8 +114,7 @@ + { + /* Simply copy the data after we made sure we are actually getting + correct data. */ +- if (INVALID_NDX (ndx, Elf64_Rela) +- || unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + result = NULL; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getrel.c ./libelf/gelf_getrel.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getrel.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getrel.c 2010-03-17 16:06:09.000000000 -0400 +@@ -71,6 +71,12 @@ + 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); +@@ -87,8 +93,7 @@ + if (scn->elf->class == ELFCLASS32) + { + /* We have to convert the data. */ +- if (INVALID_NDX (ndx, Elf32_Rel) +- || unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + result = NULL; +@@ -108,8 +113,7 @@ + { + /* Simply copy the data after we made sure we are actually getting + correct data. */ +- if (INVALID_NDX (ndx, Elf64_Rel) +- || unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + result = NULL; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getsym.c ./libelf/gelf_getsym.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getsym.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getsym.c 2010-03-17 16:06:09.000000000 -0400 +@@ -90,8 +90,7 @@ + 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 (INVALID_NDX (ndx, Elf32_Sym) +- || unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data->d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data->d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -120,8 +119,7 @@ + + /* The data is already in the correct form. Just make sure the + index is OK. */ +- if (INVALID_NDX (ndx, GElf_Sym) +- || unlikely ((ndx + 1) * sizeof (GElf_Sym) > data->d_size)) ++ if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > data->d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getsyminfo.c ./libelf/gelf_getsyminfo.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getsyminfo.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getsyminfo.c 2010-03-17 16:06:09.000000000 -0400 +@@ -84,8 +84,7 @@ + + /* The data is already in the correct form. Just make sure the + index is OK. */ +- if (INVALID_NDX (ndx, GElf_Syminfo) +- || unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data->d_size)) ++ if (unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data->d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getsymshndx.c ./libelf/gelf_getsymshndx.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getsymshndx.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getsymshndx.c 2010-03-17 16:06:09.000000000 -0400 +@@ -90,9 +90,7 @@ + section index table. */ + if (likely (shndxdata_scn != NULL)) + { +- if (INVALID_NDX (ndx, Elf32_Word) +- || unlikely ((ndx + 1) * sizeof (Elf32_Word) +- > shndxdata_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Word) > shndxdata_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -112,8 +110,7 @@ + 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 (INVALID_NDX (ndx, Elf32_Sym) +- || unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata->d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata->d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -142,8 +139,7 @@ + + /* The data is already in the correct form. Just make sure the + index is OK. */ +- if (INVALID_NDX (ndx, GElf_Sym) +- || unlikely ((ndx + 1) * sizeof (GElf_Sym) > symdata->d_size)) ++ if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > symdata->d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_getversym.c ./libelf/gelf_getversym.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_getversym.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_getversym.c 2010-03-17 16:06:09.000000000 -0400 +@@ -92,8 +92,7 @@ + + /* The data is already in the correct form. Just make sure the + index is OK. */ +- if (INVALID_NDX (ndx, GElf_Versym) +- || unlikely ((ndx + 1) * sizeof (GElf_Versym) > data->d_size)) ++ if (unlikely ((ndx + 1) * sizeof (GElf_Versym) > data->d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + result = NULL; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_dyn.c ./libelf/gelf_update_dyn.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_dyn.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_dyn.c 2010-03-17 16:06:09.000000000 -0400 +@@ -71,6 +71,12 @@ + 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. */ +@@ -96,8 +102,7 @@ + } + + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf32_Dyn) +- || unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Dyn) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -111,8 +116,7 @@ + else + { + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf64_Dyn) +- || unlikely ((ndx + 1) * sizeof (Elf64_Dyn) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf64_Dyn) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_lib.c ./libelf/gelf_update_lib.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_lib.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_lib.c 2010-03-17 16:06:09.000000000 -0400 +@@ -68,6 +68,12 @@ + 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)) + { +@@ -81,8 +87,7 @@ + + /* Check whether we have to resize the data buffer. */ + int result = 0; +- if (INVALID_NDX (ndx, Elf64_Lib) +- || unlikely ((ndx + 1) * sizeof (Elf64_Lib) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf64_Lib) > data_scn->d.d_size)) + __libelf_seterrno (ELF_E_INVALID_INDEX); + else + { +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_move.c ./libelf/gelf_update_move.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_move.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_move.c 2010-03-17 16:06:09.000000000 -0400 +@@ -75,7 +75,7 @@ + assert (sizeof (GElf_Move) == sizeof (Elf64_Move)); + + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, GElf_Move) ++ if (unlikely (ndx < 0) + || unlikely ((ndx + 1) * sizeof (GElf_Move) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_rela.c ./libelf/gelf_update_rela.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_rela.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_rela.c 2010-03-17 16:06:09.000000000 -0400 +@@ -68,6 +68,12 @@ + 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. */ +@@ -95,8 +101,7 @@ + } + + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf32_Rela) +- || unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -112,8 +117,7 @@ + else + { + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf64_Rela) +- || unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_rel.c ./libelf/gelf_update_rel.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_rel.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_rel.c 2010-03-17 16:06:09.000000000 -0400 +@@ -68,6 +68,12 @@ + 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. */ +@@ -93,8 +99,7 @@ + } + + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf32_Rel) +- || unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Rel) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -109,8 +114,7 @@ + else + { + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf64_Rel) +- || unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf64_Rel) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_sym.c ./libelf/gelf_update_sym.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_sym.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_sym.c 2010-03-17 16:06:09.000000000 -0400 +@@ -72,6 +72,12 @@ + 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. */ +@@ -96,8 +102,7 @@ + } + + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf32_Sym) +- || unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -120,8 +125,7 @@ + else + { + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf64_Sym) +- || unlikely ((ndx + 1) * sizeof (Elf64_Sym) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf64_Sym) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_syminfo.c ./libelf/gelf_update_syminfo.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_syminfo.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_syminfo.c 2010-03-17 16:06:09.000000000 -0400 +@@ -72,6 +72,12 @@ + 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. */ +@@ -87,8 +93,7 @@ + rwlock_wrlock (scn->elf->lock); + + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, GElf_Syminfo) +- || unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (GElf_Syminfo) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_symshndx.c ./libelf/gelf_update_symshndx.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_symshndx.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_symshndx.c 2010-03-17 16:06:09.000000000 -0400 +@@ -77,6 +77,12 @@ + 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. */ +@@ -122,8 +128,7 @@ + } + + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf32_Sym) +- || unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > symdata_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +@@ -146,8 +151,7 @@ + else + { + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, Elf64_Sym) +- || unlikely ((ndx + 1) * sizeof (Elf64_Sym) > symdata_scn->d.d_size)) ++ if (unlikely ((ndx + 1) * sizeof (Elf64_Sym) > symdata_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); + goto out; +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_versym.c ./libelf/gelf_update_versym.c +--- ../base/frysk/frysk-imports/elfutils/libelf/gelf_update_versym.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/gelf_update_versym.c 2010-03-17 16:06:09.000000000 -0400 +@@ -75,7 +75,7 @@ + assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym)); + + /* Check whether we have to resize the data buffer. */ +- if (INVALID_NDX (ndx, GElf_Versym) ++ if (unlikely (ndx < 0) + || unlikely ((ndx + 1) * sizeof (GElf_Versym) > data_scn->d.d_size)) + { + __libelf_seterrno (ELF_E_INVALID_INDEX); +diff -r -u ../base/frysk/frysk-imports/elfutils/libelf/libelfP.h ./libelf/libelfP.h +--- ../base/frysk/frysk-imports/elfutils/libelf/libelfP.h 2008-04-17 09:23:47.000000000 -0400 ++++ ./libelf/libelfP.h 2010-03-25 14:41:45.000000000 -0400 +@@ -596,13 +596,4 @@ + /* Align offset to 4 bytes as needed for note name and descriptor data. */ + #define NOTE_ALIGN(n) (((n) + 3) & -4U) + +-/* Convenience macro. Assumes int NDX and TYPE with size at least +- 2 bytes. */ +-#if SIZE_MAX > 4294967295U +-# define INVALID_NDX(ndx, type) unlikely (ndx < 0) +-#else +-# define INVALID_NDX(ndx, type) \ +- unlikely ((unsigned int) (ndx) >= SIZE_MAX / sizeof (type)) +-#endif +- + #endif /* libelfP.h */ +Only in ../base/frysk/frysk-imports/elfutils/libelf: Makefile.in +Only in ./m4: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/m4: Makefile.in +Only in ../base/frysk/frysk-imports/elfutils: Makefile.in +Only in .: .mtn-ignore +Only in ./po: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/po: elfutils.pot +Only in ../base/frysk/frysk-imports/elfutils/po: stamp-po +Only in ./src: .cvsignore +diff -r -u ../base/frysk/frysk-imports/elfutils/src/elflint.c ./src/elflint.c +--- ../base/frysk/frysk-imports/elfutils/src/elflint.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./src/elflint.c 2010-03-25 14:41:45.000000000 -0400 +@@ -131,9 +131,6 @@ + /* Array to count references in section groups. */ + static int *scnref; + +-/* Number of sections. */ +-static unsigned int shnum; +- + + int + main (int argc, char *argv[]) +@@ -323,19 +320,10 @@ + { + GElf_Shdr shdr_mem; + GElf_Shdr *shdr; +- const char *ret; +- +- if ((unsigned int) idx > shnum) +- return ""; + + shdr = gelf_getshdr (elf_getscn (ebl->elf, idx), &shdr_mem); +- if (shdr == NULL) +- return ""; + +- ret = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); +- if (ret == NULL) +- return ""; +- return ret; ++ return elf_strptr (ebl->elf, shstrndx, shdr->sh_name); + } + + +@@ -357,6 +345,10 @@ + (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) + { +@@ -618,8 +610,7 @@ + } + } + +- size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_SYM, 1, EV_CURRENT); +- if (shdr->sh_entsize != sh_entsize) ++ 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)); +@@ -657,7 +648,7 @@ + xndxscnidx, section_name (ebl, xndxscnidx)); + } + +- for (size_t cnt = 1; cnt < shdr->sh_size / sh_entsize; ++cnt) ++ 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) +@@ -675,8 +666,7 @@ + else + { + name = elf_strptr (ebl->elf, shdr->sh_link, sym->st_name); +- assert (name != NULL +- || strshdr->sh_type != SHT_STRTAB); ++ assert (name != NULL); + } + + if (sym->st_shndx == SHN_XINDEX) +@@ -1006,11 +996,9 @@ + { + GElf_Shdr rcshdr_mem; + const GElf_Shdr *rcshdr = gelf_getshdr (scn, &rcshdr_mem); ++ assert (rcshdr != NULL); + +- if (rcshdr == NULL) +- break; +- +- if (rcshdr->sh_type == SHT_DYNAMIC && rcshdr->sh_entsize) ++ if (rcshdr->sh_type == SHT_DYNAMIC) + { + /* Found the dynamic section. Look through it. */ + Elf_Data *d = elf_getdata (scn, NULL); +@@ -1020,9 +1008,7 @@ + { + GElf_Dyn dyn_mem; + GElf_Dyn *dyn = gelf_getdyn (d, cnt, &dyn_mem); +- +- if (dyn == NULL) +- break; ++ assert (dyn != NULL); + + if (dyn->d_tag == DT_RELCOUNT) + { +@@ -1036,9 +1022,7 @@ + /* Does the number specified number of relative + relocations exceed the total number of + relocations? */ +- if (shdr->sh_entsize != 0 +- && dyn->d_un.d_val > (shdr->sh_size +- / shdr->sh_entsize)) ++ 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), +@@ -1198,8 +1182,7 @@ + } + } + +- size_t sh_entsize = gelf_fsize (ebl->elf, reltype, 1, EV_CURRENT); +- if (shdr->sh_entsize != sh_entsize) ++ 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"), +@@ -1422,8 +1405,7 @@ + Elf_Data *symdata = elf_getdata (symscn, NULL); + enum load_state state = state_undecided; + +- size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_RELA, 1, EV_CURRENT); +- for (size_t cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) ++ 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); +@@ -1473,8 +1455,7 @@ + Elf_Data *symdata = elf_getdata (symscn, NULL); + enum load_state state = state_undecided; + +- size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_REL, 1, EV_CURRENT); +- for (size_t cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) ++ 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); +@@ -1577,8 +1558,7 @@ + shdr->sh_link, section_name (ebl, shdr->sh_link), + idx, section_name (ebl, idx)); + +- size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); +- if (shdr->sh_entsize != sh_entsize) ++ 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)); +@@ -1588,7 +1568,7 @@ + idx, section_name (ebl, idx)); + + bool non_null_warned = false; +- for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) ++ for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt) + { + GElf_Dyn dyn_mem; + GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dyn_mem); +@@ -1869,8 +1849,6 @@ + idx, section_name (ebl, idx)); + + if (symshdr != NULL +- && shdr->sh_entsize +- && symshdr->sh_entsize + && (shdr->sh_size / shdr->sh_entsize + < symshdr->sh_size / symshdr->sh_entsize)) + ERROR (gettext ("\ +@@ -1897,12 +1875,6 @@ + } + + 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 (*((Elf32_Word *) data->d_buf) != 0) + ERROR (gettext ("symbol 0 should have zero extended section index\n")); +@@ -1945,7 +1917,7 @@ + + size_t maxidx = nchain; + +- if (symshdr != NULL && symshdr->sh_entsize != 0) ++ if (symshdr != NULL) + { + size_t symsize = symshdr->sh_size / symshdr->sh_entsize; + +@@ -1956,28 +1928,18 @@ + maxidx = symsize; + } + +- Elf32_Word *buf = (Elf32_Word *) data->d_buf; +- Elf32_Word *end = (Elf32_Word *) ((char *) data->d_buf + shdr->sh_size); + size_t cnt; + for (cnt = 2; cnt < 2 + nbucket; ++cnt) +- { +- if (buf + cnt >= end) +- break; +- else if (buf[cnt] >= maxidx) ++ 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 (buf + cnt >= end) +- break; +- else if (buf[cnt] >= maxidx) ++ 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); +- } + } + + +@@ -2007,28 +1969,18 @@ + maxidx = symsize; + } + +- Elf64_Xword *buf = (Elf64_Xword *) data->d_buf; +- Elf64_Xword *end = (Elf64_Xword *) ((char *) data->d_buf + shdr->sh_size); + size_t cnt; + for (cnt = 2; cnt < 2 + nbucket; ++cnt) +- { +- if (buf + cnt >= end) +- break; +- else if (buf[cnt] >= maxidx) ++ 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 (buf + cnt >= end) +- break; +- else if (buf[cnt] >= maxidx) ++ 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); +- } ++ idx, section_name (ebl, idx), (uint64_t) (cnt - 2 - nbucket)); + } + + +@@ -2053,7 +2005,7 @@ + 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"), ++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; +@@ -2725,9 +2677,8 @@ + + /* The number of elements in the version symbol table must be the + same as the number of symbols. */ +- if (shdr->sh_entsize && symshdr->sh_entsize +- && (shdr->sh_size / shdr->sh_entsize +- != symshdr->sh_size / symshdr->sh_entsize)) ++ 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), +Only in ../base/frysk/frysk-imports/elfutils/src: elflint.c.orig +Only in ../base/frysk/frysk-imports/elfutils/src: ldlex.c +Only in ../base/frysk/frysk-imports/elfutils/src: ldscript.c +Only in ../base/frysk/frysk-imports/elfutils/src: ldscript.h +Only in ../base/frysk/frysk-imports/elfutils/src: Makefile.in +diff -r -u ../base/frysk/frysk-imports/elfutils/src/readelf.c ./src/readelf.c +--- ../base/frysk/frysk-imports/elfutils/src/readelf.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./src/readelf.c 2010-03-25 14:41:45.000000000 -0400 +@@ -1111,8 +1111,6 @@ + Elf32_Word *grpref = (Elf32_Word *) data->d_buf; + + GElf_Sym sym_mem; +- GElf_Sym *sym = gelf_getsym (symdata, shdr->sh_info, &sym_mem); +- + printf ((grpref[0] & GRP_COMDAT) + ? ngettext ("\ + \nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n", +@@ -1125,8 +1123,8 @@ + data->d_size / sizeof (Elf32_Word) - 1), + elf_ndxscn (scn), + elf_strptr (ebl->elf, shstrndx, shdr->sh_name), +- (sym == NULL ? NULL +- : elf_strptr (ebl->elf, symshdr->sh_link, sym->st_name)) ++ elf_strptr (ebl->elf, symshdr->sh_link, ++ gelf_getsym (symdata, shdr->sh_info, &sym_mem)->st_name) + ?: gettext (""), + data->d_size / sizeof (Elf32_Word) - 1); + +@@ -1277,8 +1275,7 @@ + handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) + { + int class = gelf_getclass (ebl->elf); +- GElf_Shdr glink_mem; +- GElf_Shdr *glink; ++ GElf_Shdr glink; + Elf_Data *data; + size_t cnt; + size_t shstrndx; +@@ -1293,11 +1290,6 @@ + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +- glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); +- if (glink == NULL) +- error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), +- elf_ndxscn (scn)); +- + printf (ngettext ("\ + \nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", + "\ +@@ -1307,7 +1299,9 @@ + class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, + shdr->sh_offset, + (int) shdr->sh_link, +- elf_strptr (ebl->elf, shstrndx, glink->sh_name)); ++ 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) +@@ -1807,13 +1801,6 @@ + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +- GElf_Shdr glink_mem; +- GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), +- &glink_mem); +- if (glink == NULL) +- error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), +- elf_ndxscn (scn)); +- + /* Now we can compute the number of entries in the section. */ + unsigned int nsyms = data->d_size / (class == ELFCLASS32 + ? sizeof (Elf32_Sym) +@@ -1824,12 +1811,15 @@ + 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, glink->sh_name)); ++ elf_strptr (ebl->elf, shstrndx, ++ gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), ++ &glink)->sh_name)); + + fputs_unlocked (class == ELFCLASS32 + ? gettext ("\ +@@ -2065,13 +2055,7 @@ + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +- GElf_Shdr glink_mem; +- GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), +- &glink_mem); +- if (glink == NULL) +- error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), +- elf_ndxscn (scn)); +- ++ 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", + "\ +@@ -2082,7 +2066,9 @@ + class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, + shdr->sh_offset, + (unsigned int) shdr->sh_link, +- elf_strptr (ebl->elf, shstrndx, glink->sh_name)); ++ 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; ) +@@ -2135,14 +2121,8 @@ + error (EXIT_FAILURE, 0, + gettext ("cannot get section header string table index")); + +- GElf_Shdr glink_mem; +- GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), +- &glink_mem); +- if (glink == NULL) +- error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), +- elf_ndxscn (scn)); +- + 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", + "\ +@@ -2154,7 +2134,9 @@ + class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, + shdr->sh_offset, + (unsigned int) shdr->sh_link, +- elf_strptr (ebl->elf, shstrndx, glink->sh_name)); ++ 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; ) +@@ -2416,14 +2398,8 @@ + filename = NULL; + } + +- GElf_Shdr glink_mem; +- GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), +- &glink_mem); +- if (glink == NULL) +- error (EXIT_FAILURE, 0, gettext ("invalid sh_link value in section %Zu"), +- elf_ndxscn (scn)); +- + /* 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'", + "\ +@@ -2435,7 +2411,9 @@ + class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, + shdr->sh_offset, + (unsigned int) shdr->sh_link, +- elf_strptr (ebl->elf, shstrndx, glink->sh_name)); ++ 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) +@@ -2487,17 +2465,7 @@ + for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt) + ++counts[lengths[cnt]]; + +- GElf_Shdr glink_mem; +- GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, +- shdr->sh_link), +- &glink_mem); +- if (glink == NULL) +- { +- error (0, 0, gettext ("invalid sh_link value in section %Zu"), +- elf_ndxscn (scn)); +- return; +- } +- ++ 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", + "\ +@@ -2510,7 +2478,9 @@ + shdr->sh_addr, + shdr->sh_offset, + (unsigned int) shdr->sh_link, +- elf_strptr (ebl->elf, shstrndx, glink->sh_name)); ++ elf_strptr (ebl->elf, shstrndx, ++ gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), ++ &glink)->sh_name)); + + if (extrastr != NULL) + fputs (extrastr, stdout); +@@ -4069,16 +4039,6 @@ + return; + } + +- GElf_Shdr glink_mem; +- GElf_Shdr *glink; +- glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); +- if (glink == NULL) +- { +- error (0, 0, gettext ("invalid sh_link value in section %Zu"), +- elf_ndxscn (scn)); +- return; +- } +- + printf (ngettext ("\ + \nDWARF section '%s' at offset %#" PRIx64 " contains %zu entry:\n", + "\ +Only in ../base/frysk/frysk-imports/elfutils/src: readelf.c.orig +diff -r -u ../base/frysk/frysk-imports/elfutils/src/strip.c ./src/strip.c +--- ../base/frysk/frysk-imports/elfutils/src/strip.c 2008-04-17 09:23:47.000000000 -0400 ++++ ./src/strip.c 2010-03-25 14:41:45.000000000 -0400 +@@ -400,7 +400,6 @@ + Elf_Scn *newscn; + struct Ebl_Strent *se; + Elf32_Word *newsymidx; +- void *debug_data; + } *shdr_info = NULL; + Elf_Scn *scn; + size_t cnt; +@@ -544,11 +543,6 @@ + goto fail_close; + } + +- if (shstrndx >= shnum) +- goto illformed; +- +-#define elf_assert(test) do { if (!(test)) goto illformed; } while (0) +- + /* 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. +@@ -570,7 +564,7 @@ + { + /* This should always be true (i.e., there should not be any + holes in the numbering). */ +- elf_assert (elf_ndxscn (scn) == cnt); ++ assert (elf_ndxscn (scn) == cnt); + + shdr_info[cnt].scn = scn; + +@@ -583,7 +577,6 @@ + shdr_info[cnt].shdr.sh_name); + if (shdr_info[cnt].name == NULL) + { +- illformed: + error (0, 0, gettext ("illformed file '%s'"), fname); + goto fail_close; + } +@@ -593,8 +586,6 @@ + + /* Remember the shdr.sh_link value. */ + shdr_info[cnt].old_sh_link = shdr_info[cnt].shdr.sh_link; +- if (shdr_info[cnt].old_sh_link >= shnum) +- goto illformed; + + /* Sections in files other than relocatable object files which + are not loaded can be freely moved by us. In relocatable +@@ -607,7 +598,7 @@ + appropriate reference. */ + if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB_SHNDX)) + { +- elf_assert (shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx == 0); ++ 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)) +@@ -624,12 +615,7 @@ + for (inner = 1; + inner < shdr_info[cnt].data->d_size / sizeof (Elf32_Word); + ++inner) +- { +- if (grpref[inner] < shnum) + shdr_info[grpref[inner]].group_idx = cnt; +- else +- goto illformed; +- } + + if (inner == 1 || (inner == 2 && (grpref[0] & GRP_COMDAT) == 0)) + /* If the section group contains only one element and this +@@ -640,7 +626,7 @@ + } + else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym)) + { +- elf_assert (shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0); ++ assert (shdr_info[shdr_info[cnt].shdr.sh_link].version_idx == 0); + shdr_info[shdr_info[cnt].shdr.sh_link].version_idx = cnt; + } + +@@ -648,7 +634,7 @@ + discarded right away. */ + if ((shdr_info[cnt].shdr.sh_flags & SHF_GROUP) != 0) + { +- elf_assert (shdr_info[cnt].group_idx != 0); ++ assert (shdr_info[cnt].group_idx != 0); + + if (shdr_info[shdr_info[cnt].group_idx].idx == 0) + { +@@ -723,15 +709,11 @@ + { + /* 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 ++ if ((shdr_info[cnt].shdr.sh_type == SHT_REL + || shdr_info[cnt].shdr.sh_type == SHT_RELA) +- { +- if (shdr_info[cnt].shdr.sh_info >= shnum) +- goto illformed; +- else if (shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0) ++ && shdr_info[shdr_info[cnt].shdr.sh_info].idx != 0) + shdr_info[cnt].idx = 1; + } +- } + + if (shdr_info[cnt].idx == 1) + { +@@ -756,7 +738,7 @@ + if (shdr_info[cnt].symtab_idx != 0 + && shdr_info[shdr_info[cnt].symtab_idx].data == NULL) + { +- elf_assert (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB); ++ 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, +@@ -796,9 +778,6 @@ + else if (scnidx == SHN_XINDEX) + scnidx = xndx; + +- if (scnidx >= shnum) +- goto illformed; +- + if (shdr_info[scnidx].idx == 0) + { + /* Mark this section as used. */ +@@ -830,16 +809,12 @@ + } + + /* Handle references through sh_info. */ +- if (SH_INFO_LINK_P (&shdr_info[cnt].shdr)) +- { +- if (shdr_info[cnt].shdr.sh_info >= shnum) +- goto illformed; +- else if ( shdr_info[shdr_info[cnt].shdr.sh_info].idx == 0) ++ 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; +@@ -852,37 +827,6 @@ + The ones that are not removed in the stripped file are SHT_NOBITS. */ + if (debug_fname != NULL) + { +- /* libbfd and apps using it don't cope with separate debuginfo objects +- with relocation sections against SHT_NOBITS .symtab/.strtab +- - libbfd isn't able to look up the .symtab/.strtab in the stripped +- object instead. As a workaround, emit .symtab/.strtab in both +- places. */ +- for (cnt = 1; cnt < shnum; ++cnt) +- { +- if (shdr_info[cnt].idx == 0 +- && (shdr_info[cnt].shdr.sh_type == SHT_REL +- || shdr_info[cnt].shdr.sh_type == SHT_RELA) +- && (shdr_info[cnt].shdr.sh_flags & SHF_ALLOC) == 0) +- { +- Elf32_Word symtabidx = shdr_info[cnt].old_sh_link; +- struct shdr_info *si = &shdr_info[symtabidx]; +- si->debug_data = ""; +- shdr_info[si->old_sh_link].debug_data = ""; +- if (si->symtab_idx) +- shdr_info[si->symtab_idx].debug_data = ""; +- +- if (si->shdr.sh_type != SHT_SYMTAB +- || (si->shdr.sh_flags & SHF_ALLOC) +- || shdr_info[si->old_sh_link].shdr.sh_type != SHT_STRTAB +- || (shdr_info[si->old_sh_link].shdr.sh_flags & SHF_ALLOC) +- || (si->symtab_idx +- && (shdr_info[si->symtab_idx].shdr.sh_flags +- & SHF_ALLOC))) +- error (EXIT_FAILURE, 0, +- gettext ("invalid symtab/strtab referenced by nonallocated section")); +- } +- } +- + for (cnt = 1; cnt < shnum; ++cnt) + { + scn = elf_newscn (debugelf); +@@ -892,7 +836,6 @@ + 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); + +@@ -923,13 +866,6 @@ + *debugdata = *shdr_info[cnt].data; + if (discard_section) + debugdata->d_buf = NULL; +- else if (shdr_info[cnt].debug_data != NULL) +- { +- shdr_info[cnt].debug_data = xmalloc (debugdata->d_size); +- memcpy (shdr_info[cnt].debug_data, debugdata->d_buf, +- debugdata->d_size); +- debugdata->d_buf = shdr_info[cnt].debug_data; +- } + } + + /* Finish the ELF header. Fill in the fields not handled by +@@ -978,7 +914,7 @@ + error (EXIT_FAILURE, 0, gettext ("while generating output file: %s"), + elf_errmsg (-1)); + +- elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); ++ 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); +@@ -1015,7 +951,7 @@ + error (EXIT_FAILURE, 0, + gettext ("while create section header section: %s"), + elf_errmsg (-1)); +- elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); ++ 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) +@@ -1071,7 +1007,7 @@ + error (EXIT_FAILURE, 0, + gettext ("while create section header section: %s"), + elf_errmsg (-1)); +- elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == idx); ++ assert (elf_ndxscn (shdr_info[cnt].newscn) == idx); + + /* Finalize the string table and fill in the correct indices in the + section headers. */ +@@ -1121,7 +1057,7 @@ + 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. */ ++ created the data for the section header string table. */ + if (cnt < shnum) + { + if (shdr_info[cnt].data == NULL) +@@ -1161,20 +1097,20 @@ + shndxdata = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn, + NULL); + +- elf_assert ((versiondata->d_size / sizeof (Elf32_Word)) ++ assert ((versiondata->d_size / sizeof (Elf32_Word)) + >= shdr_info[cnt].data->d_size / elsize); + } + + if (shdr_info[cnt].version_idx != 0) + { +- elf_assert (shdr_info[cnt].shdr.sh_type == SHT_DYNSYM); ++ 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); + +- elf_assert ((versiondata->d_size / sizeof (GElf_Versym)) ++ assert ((versiondata->d_size / sizeof (GElf_Versym)) + >= shdr_info[cnt].data->d_size / elsize); + } + +@@ -1229,7 +1165,7 @@ + sec = shdr_info[sym->st_shndx].idx; + else + { +- elf_assert (shndxdata != NULL); ++ assert (shndxdata != NULL); + + sec = shdr_info[xshndx].idx; + } +@@ -1250,7 +1186,7 @@ + nxshndx = sec; + } + +- elf_assert (sec < SHN_LORESERVE || shndxdata != NULL); ++ assert (sec < SHN_LORESERVE || shndxdata != NULL); + + if ((inner != destidx || nshndx != sym->st_shndx + || (shndxdata != NULL && nxshndx != xshndx)) +@@ -1273,7 +1209,7 @@ + else + /* This is a section symbol for a section which has + been removed. */ +- elf_assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION); ++ assert (GELF_ST_TYPE (sym->st_info) == STT_SECTION); + } + + if (destidx != inner) +@@ -1348,13 +1284,6 @@ + if (shdr_info[shdr_info[cnt].old_sh_link].newsymidx == NULL) + continue; + +- /* If the symbol table is not discarded, but additionally +- duplicated in separate debug file and this section +- is discarded, don't adjust anything. */ +- if (shdr_info[cnt].idx == 0 +- && shdr_info[shdr_info[cnt].old_sh_link].debug_data != NULL) +- continue; +- + Elf32_Word *newsymidx + = shdr_info[shdr_info[cnt].old_sh_link].newsymidx; + Elf_Data *d = elf_getdata (shdr_info[cnt].idx == 0 +@@ -1413,13 +1342,6 @@ + if (shdr_info[symtabidx].newsymidx == NULL) + continue; + +- /* If the symbol table is not discarded, but additionally +- duplicated in separate debug file and this section +- is discarded, don't adjust anything. */ +- if (shdr_info[cnt].idx == 0 +- && shdr_info[symtabidx].debug_data != NULL) +- continue; +- + assert (shdr_info[cnt].idx > 0); + + /* The hash section in the new file. */ +@@ -1466,11 +1388,11 @@ + { + GElf_Sym sym_mem; + GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); +- elf_assert (sym != NULL); ++ assert (sym != NULL); + + const char *name = elf_strptr (elf, strshndx, + sym->st_name); +- elf_assert (name != NULL); ++ assert (name != NULL); + size_t hidx = elf_hash (name) % nbucket; + + if (bucket[hidx] == 0) +@@ -1489,7 +1411,7 @@ + else + { + /* Alpha and S390 64-bit use 64-bit SHT_HASH entries. */ +- elf_assert (shdr_info[cnt].shdr.sh_entsize ++ assert (shdr_info[cnt].shdr.sh_entsize + == sizeof (Elf64_Xword)); + + Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf; +@@ -1520,11 +1442,11 @@ + { + GElf_Sym sym_mem; + GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem); +- elf_assert (sym != NULL); ++ assert (sym != NULL); + + const char *name = elf_strptr (elf, strshndx, + sym->st_name); +- elf_assert (name != NULL); ++ assert (name != NULL); + size_t hidx = elf_hash (name) % nbucket; + + if (bucket[hidx] == 0) +@@ -1539,7 +1461,7 @@ + chain[hidx] = inner; + } + } +- } ++ } + } + else if (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym) + { +@@ -1552,13 +1474,6 @@ + if (shdr_info[symtabidx].newsymidx == NULL) + continue; + +- /* If the symbol table is not discarded, but additionally +- duplicated in separate debug file and this section +- is discarded, don't adjust anything. */ +- if (shdr_info[cnt].idx == 0 +- && shdr_info[symtabidx].debug_data != NULL) +- continue; +- + assert (shdr_info[cnt].idx > 0); + + /* The symbol version section in the new file. */ +@@ -1601,27 +1516,20 @@ + else if (shdr_info[cnt].shdr.sh_type == SHT_GROUP) + { + /* Check whether the associated symbol table changed. */ +- if (shdr_info[shdr_info[cnt].old_sh_link].newsymidx == NULL) +- continue; +- +- /* If the symbol table is not discarded, but additionally +- duplicated in separate debug file and this section +- is discarded, don't adjust anything. */ +- if (shdr_info[cnt].idx == 0 +- && shdr_info[shdr_info[cnt].old_sh_link].debug_data != NULL) +- continue; +- +- /* 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); ++ if (shdr_info[shdr_info[cnt].old_sh_link].newsymidx != NULL) ++ { ++ /* 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); + +- size_t stabidx = shdr_info[cnt].old_sh_link; +- shdr->sh_info = shdr_info[stabidx].newsymidx[shdr->sh_info]; ++ size_t stabidx = shdr_info[cnt].old_sh_link; ++ shdr->sh_info = shdr_info[stabidx].newsymidx[shdr->sh_info]; + +- (void) gelf_update_shdr (scn, shdr); ++ (void) gelf_update_shdr (scn, shdr); ++ } + } + } + } +@@ -1751,10 +1659,7 @@ + table indices. */ + if (any_symtab_changes) + for (cnt = 1; cnt <= shdridx; ++cnt) +- { +- free (shdr_info[cnt].newsymidx); +- free (shdr_info[cnt].debug_data); +- } ++ free (shdr_info[cnt].newsymidx); + + /* Free the memory. */ + if ((shnum + 2) * sizeof (struct shdr_info) > MAX_STACK_ALLOC) +Only in ../base/frysk/frysk-imports/elfutils/src: strip.c.orig +Only in ./tests: configure.ac +Only in ./tests: .cvsignore +Only in ../base/frysk/frysk-imports/elfutils/tests: Makefile.in +diff -r -u ../base/frysk/frysk-imports/elfutils/tests/run-strip-test5.sh ./tests/run-strip-test5.sh +--- ../base/frysk/frysk-imports/elfutils/tests/run-strip-test5.sh 2008-04-17 09:23:47.000000000 -0400 ++++ ./tests/run-strip-test5.sh 2010-03-17 16:06:09.000000000 -0400 +@@ -1,5 +1,5 @@ + original=testfile8 +-stripped=testfile16.symtab +-debugfile=testfile16.symtab.debug ++stripped=testfile16 ++debugfile=testfile16.debug + + . $srcdir/run-strip-test.sh +Only in ./tests: show-ciefde.c +Only in ../base/frysk/frysk-imports/elfutils/tests: testfile16.symtab.bz2 +Only in ../base/frysk/frysk-imports/elfutils/tests: testfile16.symtab.debug.bz2 diff --git a/frysk-0.4-fedpkg-lint-licence.patch b/frysk-0.4-fedpkg-lint-licence.patch deleted file mode 100644 index 371e807..0000000 --- a/frysk-0.4-fedpkg-lint-licence.patch +++ /dev/null @@ -1,19323 +0,0 @@ -diff --git a/frysk-common/EXCEPTION b/frysk-common/EXCEPTION -index 1c75271..5d97169 100644 ---- a/frysk-common/EXCEPTION -+++ b/frysk-common/EXCEPTION -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh -index d5d7e74..11a83dc 100755 ---- a/frysk-common/Makefile.gen.sh -+++ b/frysk-common/Makefile.gen.sh -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/Makefile.rules b/frysk-common/Makefile.rules -index 9ba8775..e109084 100644 ---- a/frysk-common/Makefile.rules -+++ b/frysk-common/Makefile.rules -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/TestRunner.java-in b/frysk-common/TestRunner.java-in -index b3f9eeb..4111b37 100755 ---- a/frysk-common/TestRunner.java-in -+++ b/frysk-common/TestRunner.java-in -@@ -14,8 +14,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/antlr-warnings.awk b/frysk-common/antlr-warnings.awk -index 478dd53..6656fb7 100644 ---- a/frysk-common/antlr-warnings.awk -+++ b/frysk-common/antlr-warnings.awk -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/frysk-common.ac b/frysk-common/frysk-common.ac -index c6893e5..8d7f837 100644 ---- a/frysk-common/frysk-common.ac -+++ b/frysk-common/frysk-common.ac -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/frysk.xml-in b/frysk-common/frysk.xml-in -index ab94133..8d1b571 100644 ---- a/frysk-common/frysk.xml-in -+++ b/frysk-common/frysk.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/javadocs.sh b/frysk-common/javadocs.sh -index 868167c..fa9b33f 100644 ---- a/frysk-common/javadocs.sh -+++ b/frysk-common/javadocs.sh -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/m4/ac_find_file.m4 b/frysk-common/m4/ac_find_file.m4 -index 0dda752..022cb5e 100644 ---- a/frysk-common/m4/ac_find_file.m4 -+++ b/frysk-common/m4/ac_find_file.m4 -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/m4/ac_get_lib_line.m4 b/frysk-common/m4/ac_get_lib_line.m4 -index d9c3f3f..46035df 100644 ---- a/frysk-common/m4/ac_get_lib_line.m4 -+++ b/frysk-common/m4/ac_get_lib_line.m4 -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/m4/frysk-use-libunwind.m4 b/frysk-common/m4/frysk-use-libunwind.m4 -index e9b1526..67533aa 100644 ---- a/frysk-common/m4/frysk-use-libunwind.m4 -+++ b/frysk-common/m4/frysk-use-libunwind.m4 -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/m4/frysk_coverage.m4 b/frysk-common/m4/frysk_coverage.m4 -index 2058947..5945cbd 100644 ---- a/frysk-common/m4/frysk_coverage.m4 -+++ b/frysk-common/m4/frysk_coverage.m4 -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/m4/frysk_do_arch32_test.m4 b/frysk-common/m4/frysk_do_arch32_test.m4 -index bb2b257..6f8c2a1 100644 ---- a/frysk-common/m4/frysk_do_arch32_test.m4 -+++ b/frysk-common/m4/frysk_do_arch32_test.m4 -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/m4/frysk_find_jar.m4 b/frysk-common/m4/frysk_find_jar.m4 -index f54b2f7..b86d8d1 100644 ---- a/frysk-common/m4/frysk_find_jar.m4 -+++ b/frysk-common/m4/frysk_find_jar.m4 -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/m4/frysk_pkg_module_variable.m4 b/frysk-common/m4/frysk_pkg_module_variable.m4 -index a94fe5c..2b2e77c 100644 ---- a/frysk-common/m4/frysk_pkg_module_variable.m4 -+++ b/frysk-common/m4/frysk_pkg_module_variable.m4 -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/m4/frysk_werror.m4 b/frysk-common/m4/frysk_werror.m4 -index 7f474b3..93e3a85 100644 ---- a/frysk-common/m4/frysk_werror.m4 -+++ b/frysk-common/m4/frysk_werror.m4 -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/manpages.sh b/frysk-common/manpages.sh -index 11658a7..c5385bb 100755 ---- a/frysk-common/manpages.sh -+++ b/frysk-common/manpages.sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-common/version.ac b/frysk-common/version.ac -index 1ad5c01..0bd0fc0 100644 ---- a/frysk-common/version.ac -+++ b/frysk-common/version.ac -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/Makefile.am b/frysk-core/Makefile.am -index 94deefa..a898651 100644 ---- a/frysk-core/Makefile.am -+++ b/frysk-core/Makefile.am -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/bootstrap.sh b/frysk-core/bootstrap.sh -index ffb62a8..3042913 100755 ---- a/frysk-core/bootstrap.sh -+++ b/frysk-core/bootstrap.sh -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/configure.ac b/frysk-core/configure.ac -index 065bc52..49bab9a 100644 ---- a/frysk-core/configure.ac -+++ b/frysk-core/configure.ac -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestDebugdump.java b/frysk-core/frysk/bindir/TestDebugdump.java -index f0637ea..5160086 100644 ---- a/frysk-core/frysk/bindir/TestDebugdump.java -+++ b/frysk-core/frysk/bindir/TestDebugdump.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFauxv.java b/frysk-core/frysk/bindir/TestFauxv.java -index b03aba3..7924281 100644 ---- a/frysk-core/frysk/bindir/TestFauxv.java -+++ b/frysk-core/frysk/bindir/TestFauxv.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFcatch.java b/frysk-core/frysk/bindir/TestFcatch.java -index 6d6f694..ba2e98b 100644 ---- a/frysk-core/frysk/bindir/TestFcatch.java -+++ b/frysk-core/frysk/bindir/TestFcatch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFcore.java b/frysk-core/frysk/bindir/TestFcore.java -index b54a173..c7317f4 100644 ---- a/frysk-core/frysk/bindir/TestFcore.java -+++ b/frysk-core/frysk/bindir/TestFcore.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFdebuginfo.java b/frysk-core/frysk/bindir/TestFdebuginfo.java -index d6a2d97..c772415 100644 ---- a/frysk-core/frysk/bindir/TestFdebuginfo.java -+++ b/frysk-core/frysk/bindir/TestFdebuginfo.java -@@ -12,8 +12,7 @@ - //General Public License for more details. - - //You should have received a copy of the GNU General Public License --//along with FRYSK; if not, write to the Free Software Foundation, --//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+//along with FRYSK. If not, see . - - //In addition, as a special exception, Red Hat, Inc. gives You the - //additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFerror.java b/frysk-core/frysk/bindir/TestFerror.java -index f77f9e2..71bf82f 100644 ---- a/frysk-core/frysk/bindir/TestFerror.java -+++ b/frysk-core/frysk/bindir/TestFerror.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFexe.java b/frysk-core/frysk/bindir/TestFexe.java -index 5a37447..07286fd 100644 ---- a/frysk-core/frysk/bindir/TestFexe.java -+++ b/frysk-core/frysk/bindir/TestFexe.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFhpd.java b/frysk-core/frysk/bindir/TestFhpd.java -index 1464938..4a7943a 100755 ---- a/frysk-core/frysk/bindir/TestFhpd.java -+++ b/frysk-core/frysk/bindir/TestFhpd.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFmaps.java b/frysk-core/frysk/bindir/TestFmaps.java -index 1717c3f..21ffbf6 100644 ---- a/frysk-core/frysk/bindir/TestFmaps.java -+++ b/frysk-core/frysk/bindir/TestFmaps.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFstack.java b/frysk-core/frysk/bindir/TestFstack.java -index 952f12d..de51369 100644 ---- a/frysk-core/frysk/bindir/TestFstack.java -+++ b/frysk-core/frysk/bindir/TestFstack.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFstep.java b/frysk-core/frysk/bindir/TestFstep.java -index 3503cd7..8ff2b36 100644 ---- a/frysk-core/frysk/bindir/TestFstep.java -+++ b/frysk-core/frysk/bindir/TestFstep.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/TestFtrace.java b/frysk-core/frysk/bindir/TestFtrace.java -index 5c67487..592311e 100644 ---- a/frysk-core/frysk/bindir/TestFtrace.java -+++ b/frysk-core/frysk/bindir/TestFtrace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fauxv.java b/frysk-core/frysk/bindir/fauxv.java -index 8afa404..83736d6 100644 ---- a/frysk-core/frysk/bindir/fauxv.java -+++ b/frysk-core/frysk/bindir/fauxv.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fauxv.xml-in b/frysk-core/frysk/bindir/fauxv.xml-in -index 669e06e..1ce8391 100644 ---- a/frysk-core/frysk/bindir/fauxv.xml-in -+++ b/frysk-core/frysk/bindir/fauxv.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fcatch.java b/frysk-core/frysk/bindir/fcatch.java -index cb7f6c2..5a2a147 100644 ---- a/frysk-core/frysk/bindir/fcatch.java -+++ b/frysk-core/frysk/bindir/fcatch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fcatch.xml-in b/frysk-core/frysk/bindir/fcatch.xml-in -index 52dd1df..f78408f 100644 ---- a/frysk-core/frysk/bindir/fcatch.xml-in -+++ b/frysk-core/frysk/bindir/fcatch.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fcore.java b/frysk-core/frysk/bindir/fcore.java -index dac7776..c12ebd9 100644 ---- a/frysk-core/frysk/bindir/fcore.java -+++ b/frysk-core/frysk/bindir/fcore.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fcore.xml-in b/frysk-core/frysk/bindir/fcore.xml-in -index bcc705f..fb7b7c3 100644 ---- a/frysk-core/frysk/bindir/fcore.xml-in -+++ b/frysk-core/frysk/bindir/fcore.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fdebugdump.xml-in b/frysk-core/frysk/bindir/fdebugdump.xml-in -index f393c9c..14ecfee 100644 ---- a/frysk-core/frysk/bindir/fdebugdump.xml-in -+++ b/frysk-core/frysk/bindir/fdebugdump.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fdebuginfo.java b/frysk-core/frysk/bindir/fdebuginfo.java -index bdc850a..d8c279d 100644 ---- a/frysk-core/frysk/bindir/fdebuginfo.java -+++ b/frysk-core/frysk/bindir/fdebuginfo.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fdebuginfo.xml-in b/frysk-core/frysk/bindir/fdebuginfo.xml-in -index 8f88f0b..ea4dd7b 100644 ---- a/frysk-core/frysk/bindir/fdebuginfo.xml-in -+++ b/frysk-core/frysk/bindir/fdebuginfo.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fdebugrpm.sh b/frysk-core/frysk/bindir/fdebugrpm.sh -index dc7ccfb..e78e3d5 100644 ---- a/frysk-core/frysk/bindir/fdebugrpm.sh -+++ b/frysk-core/frysk/bindir/fdebugrpm.sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fdebugrpm.xml-in b/frysk-core/frysk/bindir/fdebugrpm.xml-in -index 6ae5dfd..b8e50bc 100644 ---- a/frysk-core/frysk/bindir/fdebugrpm.xml-in -+++ b/frysk-core/frysk/bindir/fdebugrpm.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/ferror.java b/frysk-core/frysk/bindir/ferror.java -index 3592edd..f4fa566 100644 ---- a/frysk-core/frysk/bindir/ferror.java -+++ b/frysk-core/frysk/bindir/ferror.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/ferror.xml-in b/frysk-core/frysk/bindir/ferror.xml-in -index b8742b6..30d2523 100644 ---- a/frysk-core/frysk/bindir/ferror.xml-in -+++ b/frysk-core/frysk/bindir/ferror.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fexe.java b/frysk-core/frysk/bindir/fexe.java -index 644133e..b4f8655 100644 ---- a/frysk-core/frysk/bindir/fexe.java -+++ b/frysk-core/frysk/bindir/fexe.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fexe.xml-in b/frysk-core/frysk/bindir/fexe.xml-in -index 2c7a4c7..995e061 100644 ---- a/frysk-core/frysk/bindir/fexe.xml-in -+++ b/frysk-core/frysk/bindir/fexe.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fhpd.java b/frysk-core/frysk/bindir/fhpd.java -index fcf965f..3738a2c 100644 ---- a/frysk-core/frysk/bindir/fhpd.java -+++ b/frysk-core/frysk/bindir/fhpd.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fhpd.xml-in b/frysk-core/frysk/bindir/fhpd.xml-in -index 255e209..859893b 100644 ---- a/frysk-core/frysk/bindir/fhpd.xml-in -+++ b/frysk-core/frysk/bindir/fhpd.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fmaps.java b/frysk-core/frysk/bindir/fmaps.java -index a718c3e..3a283e7 100644 ---- a/frysk-core/frysk/bindir/fmaps.java -+++ b/frysk-core/frysk/bindir/fmaps.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fmaps.xml-in b/frysk-core/frysk/bindir/fmaps.xml-in -index de7a3dd..c2d9a7f 100644 ---- a/frysk-core/frysk/bindir/fmaps.xml-in -+++ b/frysk-core/frysk/bindir/fmaps.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fstack.java b/frysk-core/frysk/bindir/fstack.java -index 6e44a29..a945fca 100644 ---- a/frysk-core/frysk/bindir/fstack.java -+++ b/frysk-core/frysk/bindir/fstack.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fstack.xml-in b/frysk-core/frysk/bindir/fstack.xml-in -index 561593f..b5f2566 100644 ---- a/frysk-core/frysk/bindir/fstack.xml-in -+++ b/frysk-core/frysk/bindir/fstack.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fstep.java b/frysk-core/frysk/bindir/fstep.java -index a32fbca..2c50f55 100644 ---- a/frysk-core/frysk/bindir/fstep.java -+++ b/frysk-core/frysk/bindir/fstep.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/fstep.xml-in b/frysk-core/frysk/bindir/fstep.xml-in -index ba00071..4fe4efe 100644 ---- a/frysk-core/frysk/bindir/fstep.xml-in -+++ b/frysk-core/frysk/bindir/fstep.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/ftrace.java b/frysk-core/frysk/bindir/ftrace.java -index 34baff7..f4349a5 100644 ---- a/frysk-core/frysk/bindir/ftrace.java -+++ b/frysk-core/frysk/bindir/ftrace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/bindir/ftrace.xml-in b/frysk-core/frysk/bindir/ftrace.xml-in -index 22ad3a5..4ac6a3f 100644 ---- a/frysk-core/frysk/bindir/ftrace.xml-in -+++ b/frysk-core/frysk/bindir/ftrace.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/CompilerVersion.java b/frysk-core/frysk/debuginfo/CompilerVersion.java -index 8b174c0..8f18822 100644 ---- a/frysk-core/frysk/debuginfo/CompilerVersion.java -+++ b/frysk-core/frysk/debuginfo/CompilerVersion.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/CompilerVersionFactory.java b/frysk-core/frysk/debuginfo/CompilerVersionFactory.java -index da0317a..e5ffdde 100644 ---- a/frysk-core/frysk/debuginfo/CompilerVersionFactory.java -+++ b/frysk-core/frysk/debuginfo/CompilerVersionFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/DebugInfo.java b/frysk-core/frysk/debuginfo/DebugInfo.java -index f4889fb..2fd6bb6 100644 ---- a/frysk-core/frysk/debuginfo/DebugInfo.java -+++ b/frysk-core/frysk/debuginfo/DebugInfo.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/DebugInfoFrame.java b/frysk-core/frysk/debuginfo/DebugInfoFrame.java -index abc62fc..c25fd80 100644 ---- a/frysk-core/frysk/debuginfo/DebugInfoFrame.java -+++ b/frysk-core/frysk/debuginfo/DebugInfoFrame.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/DebugInfoStackFactory.java b/frysk-core/frysk/debuginfo/DebugInfoStackFactory.java -index 4adec65..8071513 100644 ---- a/frysk-core/frysk/debuginfo/DebugInfoStackFactory.java -+++ b/frysk-core/frysk/debuginfo/DebugInfoStackFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/DwarfRegisterMapFactory.java b/frysk-core/frysk/debuginfo/DwarfRegisterMapFactory.java -index 1c08493..2f74175 100644 ---- a/frysk-core/frysk/debuginfo/DwarfRegisterMapFactory.java -+++ b/frysk-core/frysk/debuginfo/DwarfRegisterMapFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/GNURedHatCompilerVersion.java b/frysk-core/frysk/debuginfo/GNURedHatCompilerVersion.java -index 2853155..880f272 100644 ---- a/frysk-core/frysk/debuginfo/GNURedHatCompilerVersion.java -+++ b/frysk-core/frysk/debuginfo/GNURedHatCompilerVersion.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/LocationExpression.java b/frysk-core/frysk/debuginfo/LocationExpression.java -index 7695f2f..7328136 100644 ---- a/frysk-core/frysk/debuginfo/LocationExpression.java -+++ b/frysk-core/frysk/debuginfo/LocationExpression.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/MemoryPiece.java b/frysk-core/frysk/debuginfo/MemoryPiece.java -index ddbccd9..7cedb7b 100644 ---- a/frysk-core/frysk/debuginfo/MemoryPiece.java -+++ b/frysk-core/frysk/debuginfo/MemoryPiece.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/ObjectDeclarationNotFoundException.java b/frysk-core/frysk/debuginfo/ObjectDeclarationNotFoundException.java -index 0f0b0c2..9952353 100644 ---- a/frysk-core/frysk/debuginfo/ObjectDeclarationNotFoundException.java -+++ b/frysk-core/frysk/debuginfo/ObjectDeclarationNotFoundException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/ObjectDeclarationSearchEngine.java b/frysk-core/frysk/debuginfo/ObjectDeclarationSearchEngine.java -index d85815d..8a4e385 100644 ---- a/frysk-core/frysk/debuginfo/ObjectDeclarationSearchEngine.java -+++ b/frysk-core/frysk/debuginfo/ObjectDeclarationSearchEngine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/Piece.java b/frysk-core/frysk/debuginfo/Piece.java -index 12790be..1de1001 100644 ---- a/frysk-core/frysk/debuginfo/Piece.java -+++ b/frysk-core/frysk/debuginfo/Piece.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/PieceLocation.java b/frysk-core/frysk/debuginfo/PieceLocation.java -index d636a6a..be7815f 100644 ---- a/frysk-core/frysk/debuginfo/PieceLocation.java -+++ b/frysk-core/frysk/debuginfo/PieceLocation.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/PrintDebugInfoStackOptions.java b/frysk-core/frysk/debuginfo/PrintDebugInfoStackOptions.java -index 486eae3..e5670a3 100644 ---- a/frysk-core/frysk/debuginfo/PrintDebugInfoStackOptions.java -+++ b/frysk-core/frysk/debuginfo/PrintDebugInfoStackOptions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/RegisterPiece.java b/frysk-core/frysk/debuginfo/RegisterPiece.java -index fc3c90e..7ff841b 100644 ---- a/frysk-core/frysk/debuginfo/RegisterPiece.java -+++ b/frysk-core/frysk/debuginfo/RegisterPiece.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestAddress.java b/frysk-core/frysk/debuginfo/TestAddress.java -index d0626ea..572b261 100644 ---- a/frysk-core/frysk/debuginfo/TestAddress.java -+++ b/frysk-core/frysk/debuginfo/TestAddress.java -@@ -12,8 +12,7 @@ - //General Public License for more details. - - //You should have received a copy of the GNU General Public License --//along with FRYSK; if not, write to the Free Software Foundation, --//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+//along with FRYSK. If not, see . - - //In addition, as a special exception, Red Hat, Inc. gives You the - //additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java b/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java -index 9f1d953..c803bdc 100644 ---- a/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java -+++ b/frysk-core/frysk/debuginfo/TestDebugInfoStackTrace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestFrameDebugInfo.java b/frysk-core/frysk/debuginfo/TestFrameDebugInfo.java -index 74eead7..1e41e62 100644 ---- a/frysk-core/frysk/debuginfo/TestFrameDebugInfo.java -+++ b/frysk-core/frysk/debuginfo/TestFrameDebugInfo.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestGccClass.java b/frysk-core/frysk/debuginfo/TestGccClass.java -index e3e6ee6..f669706 100644 ---- a/frysk-core/frysk/debuginfo/TestGccClass.java -+++ b/frysk-core/frysk/debuginfo/TestGccClass.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestGccInterface.java b/frysk-core/frysk/debuginfo/TestGccInterface.java -index 35873b6..a2b09c6 100644 ---- a/frysk-core/frysk/debuginfo/TestGccInterface.java -+++ b/frysk-core/frysk/debuginfo/TestGccInterface.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestLocationExpression.java b/frysk-core/frysk/debuginfo/TestLocationExpression.java -index d1e1a75..2a03483 100644 ---- a/frysk-core/frysk/debuginfo/TestLocationExpression.java -+++ b/frysk-core/frysk/debuginfo/TestLocationExpression.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngine.java b/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngine.java -index 8f12815..fdf1f6d 100644 ---- a/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngine.java -+++ b/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngineTopDown.java b/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngineTopDown.java -index b781651..994dbea 100644 ---- a/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngineTopDown.java -+++ b/frysk-core/frysk/debuginfo/TestObjectDeclarationSearchEngineTopDown.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestPieceLocation.java b/frysk-core/frysk/debuginfo/TestPieceLocation.java -index 964d878..9a834f1 100644 ---- a/frysk-core/frysk/debuginfo/TestPieceLocation.java -+++ b/frysk-core/frysk/debuginfo/TestPieceLocation.java -@@ -12,8 +12,7 @@ - //General Public License for more details. - - //You should have received a copy of the GNU General Public License --//along with FRYSK; if not, write to the Free Software Foundation, --//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+//along with FRYSK. If not, see . - - //In addition, as a special exception, Red Hat, Inc. gives You the - //additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TestTypeFactory.java-sh b/frysk-core/frysk/debuginfo/TestTypeFactory.java-sh -index e07b682..11e51ed 100644 ---- a/frysk-core/frysk/debuginfo/TestTypeFactory.java-sh -+++ b/frysk-core/frysk/debuginfo/TestTypeFactory.java-sh -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/TypeFactory.java b/frysk-core/frysk/debuginfo/TypeFactory.java -index c0a4f69..26bcb31 100644 ---- a/frysk-core/frysk/debuginfo/TypeFactory.java -+++ b/frysk-core/frysk/debuginfo/TypeFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/UnavailablePiece.java b/frysk-core/frysk/debuginfo/UnavailablePiece.java -index 506f5ce..9ab12c8 100644 ---- a/frysk-core/frysk/debuginfo/UnavailablePiece.java -+++ b/frysk-core/frysk/debuginfo/UnavailablePiece.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/ValueUnavailableException.java b/frysk-core/frysk/debuginfo/ValueUnavailableException.java -index a0fe8b2..77144dc 100644 ---- a/frysk-core/frysk/debuginfo/ValueUnavailableException.java -+++ b/frysk-core/frysk/debuginfo/ValueUnavailableException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/VariableOptimizedOutException.java b/frysk-core/frysk/debuginfo/VariableOptimizedOutException.java -index e380e69..362e3be 100644 ---- a/frysk-core/frysk/debuginfo/VariableOptimizedOutException.java -+++ b/frysk-core/frysk/debuginfo/VariableOptimizedOutException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/VirtualDebugInfoFrame.java b/frysk-core/frysk/debuginfo/VirtualDebugInfoFrame.java -index 7fb6039..5eb5c1c 100644 ---- a/frysk-core/frysk/debuginfo/VirtualDebugInfoFrame.java -+++ b/frysk-core/frysk/debuginfo/VirtualDebugInfoFrame.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/debuginfo/gen-type-expect-tests.py b/frysk-core/frysk/debuginfo/gen-type-expect-tests.py -index 0daf18a..6163edc 100644 ---- a/frysk-core/frysk/debuginfo/gen-type-expect-tests.py -+++ b/frysk-core/frysk/debuginfo/gen-type-expect-tests.py -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/dwfl/DwflCache.java b/frysk-core/frysk/dwfl/DwflCache.java -index 4825f94..40617f9 100644 ---- a/frysk-core/frysk/dwfl/DwflCache.java -+++ b/frysk-core/frysk/dwfl/DwflCache.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/dwfl/DwflFactory.java b/frysk-core/frysk/dwfl/DwflFactory.java -index eabb0c6..d9e52fa 100644 ---- a/frysk-core/frysk/dwfl/DwflFactory.java -+++ b/frysk-core/frysk/dwfl/DwflFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/dwfl/ElfSectionCache.java b/frysk-core/frysk/dwfl/ElfSectionCache.java -index b4d77f5..79569e6 100644 ---- a/frysk-core/frysk/dwfl/ElfSectionCache.java -+++ b/frysk-core/frysk/dwfl/ElfSectionCache.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/dwfl/ObjectFile.java b/frysk-core/frysk/dwfl/ObjectFile.java -index 914e050..9c19670 100644 ---- a/frysk-core/frysk/dwfl/ObjectFile.java -+++ b/frysk-core/frysk/dwfl/ObjectFile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/dwfl/TestDwfl.java b/frysk-core/frysk/dwfl/TestDwfl.java -index 3d56b11..198a2ac 100644 ---- a/frysk-core/frysk/dwfl/TestDwfl.java -+++ b/frysk-core/frysk/dwfl/TestDwfl.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/dwfl/TestDwflCache.java b/frysk-core/frysk/dwfl/TestDwflCache.java -index d037994..bc18601 100644 ---- a/frysk-core/frysk/dwfl/TestDwflCache.java -+++ b/frysk-core/frysk/dwfl/TestDwflCache.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/dwfl/TestElfSectionCache.java b/frysk-core/frysk/dwfl/TestElfSectionCache.java -index 729b28b..aaa8253 100644 ---- a/frysk-core/frysk/dwfl/TestElfSectionCache.java -+++ b/frysk-core/frysk/dwfl/TestElfSectionCache.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/ActionPointEvent.java b/frysk-core/frysk/event/ActionPointEvent.java -index 6b99e48..406cc11 100644 ---- a/frysk-core/frysk/event/ActionPointEvent.java -+++ b/frysk-core/frysk/event/ActionPointEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/Event.java b/frysk-core/frysk/event/Event.java -index 39a25f4..9876a1a 100644 ---- a/frysk-core/frysk/event/Event.java -+++ b/frysk-core/frysk/event/Event.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/EventLoop.java b/frysk-core/frysk/event/EventLoop.java -index e70573a..abcf494 100644 ---- a/frysk-core/frysk/event/EventLoop.java -+++ b/frysk-core/frysk/event/EventLoop.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/EventLoopTestBed.java b/frysk-core/frysk/event/EventLoopTestBed.java -index a745e38..4ab1a1c 100644 ---- a/frysk-core/frysk/event/EventLoopTestBed.java -+++ b/frysk-core/frysk/event/EventLoopTestBed.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/PollEvent.java b/frysk-core/frysk/event/PollEvent.java -index d842473..66324f8 100644 ---- a/frysk-core/frysk/event/PollEvent.java -+++ b/frysk-core/frysk/event/PollEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/PollEventLoop.java b/frysk-core/frysk/event/PollEventLoop.java -index 31a09be..a5f0009 100644 ---- a/frysk-core/frysk/event/PollEventLoop.java -+++ b/frysk-core/frysk/event/PollEventLoop.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/ProcEvent.java b/frysk-core/frysk/event/ProcEvent.java -index bf7aac2..b894a10 100644 ---- a/frysk-core/frysk/event/ProcEvent.java -+++ b/frysk-core/frysk/event/ProcEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/Request.java b/frysk-core/frysk/event/Request.java -index 3374eac..92301db 100644 ---- a/frysk-core/frysk/event/Request.java -+++ b/frysk-core/frysk/event/Request.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/RequestStopEvent.java b/frysk-core/frysk/event/RequestStopEvent.java -index 0fbaa5e..b5fd035 100644 ---- a/frysk-core/frysk/event/RequestStopEvent.java -+++ b/frysk-core/frysk/event/RequestStopEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/SignalEvent.java b/frysk-core/frysk/event/SignalEvent.java -index f8cc4c3..935c816 100644 ---- a/frysk-core/frysk/event/SignalEvent.java -+++ b/frysk-core/frysk/event/SignalEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/TestPollEventLoop.java b/frysk-core/frysk/event/TestPollEventLoop.java -index a4c0567..fd5c1bb 100644 ---- a/frysk-core/frysk/event/TestPollEventLoop.java -+++ b/frysk-core/frysk/event/TestPollEventLoop.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/TestSigChild.java b/frysk-core/frysk/event/TestSigChild.java -index 117048a..b77013e 100644 ---- a/frysk-core/frysk/event/TestSigChild.java -+++ b/frysk-core/frysk/event/TestSigChild.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/TestWaitEventLoop.java b/frysk-core/frysk/event/TestWaitEventLoop.java -index 5472cec..01ce3c7 100644 ---- a/frysk-core/frysk/event/TestWaitEventLoop.java -+++ b/frysk-core/frysk/event/TestWaitEventLoop.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/TimerEvent.java b/frysk-core/frysk/event/TimerEvent.java -index 29c59f1..0e609be 100644 ---- a/frysk-core/frysk/event/TimerEvent.java -+++ b/frysk-core/frysk/event/TimerEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/event/WaitEventLoop.java b/frysk-core/frysk/event/WaitEventLoop.java -index 0bd8cf4..008cae9 100644 ---- a/frysk-core/frysk/event/WaitEventLoop.java -+++ b/frysk-core/frysk/event/WaitEventLoop.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/CExpr.g b/frysk-core/frysk/expr/CExpr.g -index 2654a89..f4f1b33 100644 ---- a/frysk-core/frysk/expr/CExpr.g -+++ b/frysk-core/frysk/expr/CExpr.g -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -@@ -54,8 +53,7 @@ header - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/CExprEvaluator.g b/frysk-core/frysk/expr/CExprEvaluator.g -index 1aafee4..962f461 100644 ---- a/frysk-core/frysk/expr/CExprEvaluator.g -+++ b/frysk-core/frysk/expr/CExprEvaluator.g -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -@@ -54,8 +53,7 @@ header - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/CTypeEvaluator.g b/frysk-core/frysk/expr/CTypeEvaluator.g -index 010f22d..0f9a51f 100644 ---- a/frysk-core/frysk/expr/CTypeEvaluator.g -+++ b/frysk-core/frysk/expr/CTypeEvaluator.g -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -@@ -54,8 +53,7 @@ header - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/CompletionException.java b/frysk-core/frysk/expr/CompletionException.java -index c239f2b..1d79249 100644 ---- a/frysk-core/frysk/expr/CompletionException.java -+++ b/frysk-core/frysk/expr/CompletionException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/DetailedAST.java b/frysk-core/frysk/expr/DetailedAST.java -index bfe069a..f645039 100644 ---- a/frysk-core/frysk/expr/DetailedAST.java -+++ b/frysk-core/frysk/expr/DetailedAST.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/ExprSearchEngine.java b/frysk-core/frysk/expr/ExprSearchEngine.java -index 3bb85a6..a7c2ab9 100644 ---- a/frysk-core/frysk/expr/ExprSearchEngine.java -+++ b/frysk-core/frysk/expr/ExprSearchEngine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/ExprSymTab.java b/frysk-core/frysk/expr/ExprSymTab.java -index cd97770..012c962 100644 ---- a/frysk-core/frysk/expr/ExprSymTab.java -+++ b/frysk-core/frysk/expr/ExprSymTab.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/Expression.java b/frysk-core/frysk/expr/Expression.java -index 843498b..ecc7e58 100644 ---- a/frysk-core/frysk/expr/Expression.java -+++ b/frysk-core/frysk/expr/Expression.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/ExpressionFactory.java b/frysk-core/frysk/expr/ExpressionFactory.java -index d2d325d..dcf9640 100644 ---- a/frysk-core/frysk/expr/ExpressionFactory.java -+++ b/frysk-core/frysk/expr/ExpressionFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/FQIdentParser.java b/frysk-core/frysk/expr/FQIdentParser.java -index 2aa9ce2..6c4191e 100644 ---- a/frysk-core/frysk/expr/FQIdentParser.java -+++ b/frysk-core/frysk/expr/FQIdentParser.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/FQIdentPattern.java b/frysk-core/frysk/expr/FQIdentPattern.java -index 03e0605..fecb61b 100644 ---- a/frysk-core/frysk/expr/FQIdentPattern.java -+++ b/frysk-core/frysk/expr/FQIdentPattern.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/FQIdentPatternAll.java b/frysk-core/frysk/expr/FQIdentPatternAll.java -index 4e2ad9e..92af9cf 100644 ---- a/frysk-core/frysk/expr/FQIdentPatternAll.java -+++ b/frysk-core/frysk/expr/FQIdentPatternAll.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/FQIdentPatternExact.java b/frysk-core/frysk/expr/FQIdentPatternExact.java -index 8cdc75f..cefe38e 100644 ---- a/frysk-core/frysk/expr/FQIdentPatternExact.java -+++ b/frysk-core/frysk/expr/FQIdentPatternExact.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/FQIdentPatternGlob.java b/frysk-core/frysk/expr/FQIdentPatternGlob.java -index 918f11e..2717c28 100644 ---- a/frysk-core/frysk/expr/FQIdentPatternGlob.java -+++ b/frysk-core/frysk/expr/FQIdentPatternGlob.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/FQIdentToken.java b/frysk-core/frysk/expr/FQIdentToken.java -index 81a56ec..79c2b9c 100644 ---- a/frysk-core/frysk/expr/FQIdentToken.java -+++ b/frysk-core/frysk/expr/FQIdentToken.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/FQIdentifier.java b/frysk-core/frysk/expr/FQIdentifier.java -index e73fbbe..8a58dd4 100644 ---- a/frysk-core/frysk/expr/FQIdentifier.java -+++ b/frysk-core/frysk/expr/FQIdentifier.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/IncompleteIdentifierException.java b/frysk-core/frysk/expr/IncompleteIdentifierException.java -index 30afa28..5078c0e 100644 ---- a/frysk-core/frysk/expr/IncompleteIdentifierException.java -+++ b/frysk-core/frysk/expr/IncompleteIdentifierException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/IncompleteMemberException.java b/frysk-core/frysk/expr/IncompleteMemberException.java -index e7e585e..b5eceaa 100644 ---- a/frysk-core/frysk/expr/IncompleteMemberException.java -+++ b/frysk-core/frysk/expr/IncompleteMemberException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/IncompleteScopeException.java b/frysk-core/frysk/expr/IncompleteScopeException.java -index 8ee069b..c4087a6 100644 ---- a/frysk-core/frysk/expr/IncompleteScopeException.java -+++ b/frysk-core/frysk/expr/IncompleteScopeException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/IncompleteTokenException.java b/frysk-core/frysk/expr/IncompleteTokenException.java -index f5c8675..5169348 100644 ---- a/frysk-core/frysk/expr/IncompleteTokenException.java -+++ b/frysk-core/frysk/expr/IncompleteTokenException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/ScratchSymTab.java b/frysk-core/frysk/expr/ScratchSymTab.java -index 2f447aa..1294522 100644 ---- a/frysk-core/frysk/expr/ScratchSymTab.java -+++ b/frysk-core/frysk/expr/ScratchSymTab.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/SyntaxException.java b/frysk-core/frysk/expr/SyntaxException.java -index 1161c40..e71a1d5 100644 ---- a/frysk-core/frysk/expr/SyntaxException.java -+++ b/frysk-core/frysk/expr/SyntaxException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/TestArithmetics.java b/frysk-core/frysk/expr/TestArithmetics.java -index 7cd9b2a..04f7989 100644 ---- a/frysk-core/frysk/expr/TestArithmetics.java -+++ b/frysk-core/frysk/expr/TestArithmetics.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/TestCompletion.java b/frysk-core/frysk/expr/TestCompletion.java -index 7586ea3..63a13da 100644 ---- a/frysk-core/frysk/expr/TestCompletion.java -+++ b/frysk-core/frysk/expr/TestCompletion.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/expr/TestbedSymTab.java b/frysk-core/frysk/expr/TestbedSymTab.java -index 2447706..b89051d 100644 ---- a/frysk-core/frysk/expr/TestbedSymTab.java -+++ b/frysk-core/frysk/expr/TestbedSymTab.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/AddrRule.java b/frysk-core/frysk/ftrace/AddrRule.java -index 5718800..c8f318e 100644 ---- a/frysk-core/frysk/ftrace/AddrRule.java -+++ b/frysk-core/frysk/ftrace/AddrRule.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/Arch.java b/frysk-core/frysk/ftrace/Arch.java -index 6b27d57..ec0be83 100644 ---- a/frysk-core/frysk/ftrace/Arch.java -+++ b/frysk-core/frysk/ftrace/Arch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/ArchFactory.java b/frysk-core/frysk/ftrace/ArchFactory.java -index d87354b..3a672e4 100644 ---- a/frysk-core/frysk/ftrace/ArchFactory.java -+++ b/frysk-core/frysk/ftrace/ArchFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/Ftrace.java b/frysk-core/frysk/ftrace/Ftrace.java -index b19c39e..9ae2b6c 100644 ---- a/frysk-core/frysk/ftrace/Ftrace.java -+++ b/frysk-core/frysk/ftrace/Ftrace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/FtraceController.java b/frysk-core/frysk/ftrace/FtraceController.java -index 1eb9ff9..b226550 100644 ---- a/frysk-core/frysk/ftrace/FtraceController.java -+++ b/frysk-core/frysk/ftrace/FtraceController.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/IA32Arch.java b/frysk-core/frysk/ftrace/IA32Arch.java -index 6a0ffb5..21e4aa0 100644 ---- a/frysk-core/frysk/ftrace/IA32Arch.java -+++ b/frysk-core/frysk/ftrace/IA32Arch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/MappingGuard.java b/frysk-core/frysk/ftrace/MappingGuard.java -index 98e165d..1cef4c7 100644 ---- a/frysk-core/frysk/ftrace/MappingGuard.java -+++ b/frysk-core/frysk/ftrace/MappingGuard.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/MappingObserver.java b/frysk-core/frysk/ftrace/MappingObserver.java -index 8d1aae0..7715f8a 100644 ---- a/frysk-core/frysk/ftrace/MappingObserver.java -+++ b/frysk-core/frysk/ftrace/MappingObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/MemoryMapping.java b/frysk-core/frysk/ftrace/MemoryMapping.java -index 2c19268..d1c1a8c 100644 ---- a/frysk-core/frysk/ftrace/MemoryMapping.java -+++ b/frysk-core/frysk/ftrace/MemoryMapping.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/Reporter.java b/frysk-core/frysk/ftrace/Reporter.java -index 876fc77..dcf0513 100644 ---- a/frysk-core/frysk/ftrace/Reporter.java -+++ b/frysk-core/frysk/ftrace/Reporter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/Rule.java b/frysk-core/frysk/ftrace/Rule.java -index 69144a1..cc5ea60 100644 ---- a/frysk-core/frysk/ftrace/Rule.java -+++ b/frysk-core/frysk/ftrace/Rule.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/RuleOptions.java b/frysk-core/frysk/ftrace/RuleOptions.java -index 3254fe9..c4860cf 100644 ---- a/frysk-core/frysk/ftrace/RuleOptions.java -+++ b/frysk-core/frysk/ftrace/RuleOptions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/SymbolRule.java b/frysk-core/frysk/ftrace/SymbolRule.java -index 6b1e18c..d0bea1c 100644 ---- a/frysk-core/frysk/ftrace/SymbolRule.java -+++ b/frysk-core/frysk/ftrace/SymbolRule.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/TaskTracer.java b/frysk-core/frysk/ftrace/TaskTracer.java -index 1aff7b6..9a654ec 100644 ---- a/frysk-core/frysk/ftrace/TaskTracer.java -+++ b/frysk-core/frysk/ftrace/TaskTracer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/TestMappingGuard.java b/frysk-core/frysk/ftrace/TestMappingGuard.java -index 3125642..876b642 100644 ---- a/frysk-core/frysk/ftrace/TestMappingGuard.java -+++ b/frysk-core/frysk/ftrace/TestMappingGuard.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/ftrace/X8664Arch.java b/frysk-core/frysk/ftrace/X8664Arch.java -index 32cd1d8..05f267c 100644 ---- a/frysk-core/frysk/ftrace/X8664Arch.java -+++ b/frysk-core/frysk/ftrace/X8664Arch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ActionPointCommands.java b/frysk-core/frysk/hpd/ActionPointCommands.java -index 3c6c681..6c76701 100644 ---- a/frysk-core/frysk/hpd/ActionPointCommands.java -+++ b/frysk-core/frysk/hpd/ActionPointCommands.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/AliasCommands.java b/frysk-core/frysk/hpd/AliasCommands.java -index 6c9037a..d223c7d 100644 ---- a/frysk-core/frysk/hpd/AliasCommands.java -+++ b/frysk-core/frysk/hpd/AliasCommands.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/AllPTSet.java b/frysk-core/frysk/hpd/AllPTSet.java -index 5e70b0e..5af8356 100644 ---- a/frysk-core/frysk/hpd/AllPTSet.java -+++ b/frysk-core/frysk/hpd/AllPTSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/AttachCommand.java b/frysk-core/frysk/hpd/AttachCommand.java -index f96c887..25a5201 100644 ---- a/frysk-core/frysk/hpd/AttachCommand.java -+++ b/frysk-core/frysk/hpd/AttachCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/AuxvCommand.java b/frysk-core/frysk/hpd/AuxvCommand.java -index 4c6d323..897b414 100644 ---- a/frysk-core/frysk/hpd/AuxvCommand.java -+++ b/frysk-core/frysk/hpd/AuxvCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/BreakpointCommand.java b/frysk-core/frysk/hpd/BreakpointCommand.java -index 082c1d2..3dbaead 100644 ---- a/frysk-core/frysk/hpd/BreakpointCommand.java -+++ b/frysk-core/frysk/hpd/BreakpointCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/CLI.java b/frysk-core/frysk/hpd/CLI.java -index eb1533c..3723e47 100644 ---- a/frysk-core/frysk/hpd/CLI.java -+++ b/frysk-core/frysk/hpd/CLI.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/Command.java b/frysk-core/frysk/hpd/Command.java -index 3060b9a..fb3ea14 100644 ---- a/frysk-core/frysk/hpd/Command.java -+++ b/frysk-core/frysk/hpd/Command.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/CommandOption.java b/frysk-core/frysk/hpd/CommandOption.java -index bddfe7e..a3aac80 100644 ---- a/frysk-core/frysk/hpd/CommandOption.java -+++ b/frysk-core/frysk/hpd/CommandOption.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/CompletionFactory.java b/frysk-core/frysk/hpd/CompletionFactory.java -index 3f2de2a..3796a5d 100644 ---- a/frysk-core/frysk/hpd/CompletionFactory.java -+++ b/frysk-core/frysk/hpd/CompletionFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/CoreCommand.java b/frysk-core/frysk/hpd/CoreCommand.java -index eda33ff..5145459 100644 ---- a/frysk-core/frysk/hpd/CoreCommand.java -+++ b/frysk-core/frysk/hpd/CoreCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/DbgVariableCommands.java b/frysk-core/frysk/hpd/DbgVariableCommands.java -index 443c21e..1ee8a57 100644 ---- a/frysk-core/frysk/hpd/DbgVariableCommands.java -+++ b/frysk-core/frysk/hpd/DbgVariableCommands.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/DbgVariables.java b/frysk-core/frysk/hpd/DbgVariables.java -index 950d356..4b3dda9 100644 ---- a/frysk-core/frysk/hpd/DbgVariables.java -+++ b/frysk-core/frysk/hpd/DbgVariables.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/DebuginfoCommand.java b/frysk-core/frysk/hpd/DebuginfoCommand.java -index 51c89b6..f08bf44 100644 ---- a/frysk-core/frysk/hpd/DebuginfoCommand.java -+++ b/frysk-core/frysk/hpd/DebuginfoCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/DefsetCommand.java b/frysk-core/frysk/hpd/DefsetCommand.java -index 0c5834f..4f2c6fd 100644 ---- a/frysk-core/frysk/hpd/DefsetCommand.java -+++ b/frysk-core/frysk/hpd/DefsetCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/DetachCommand.java b/frysk-core/frysk/hpd/DetachCommand.java -index e98e5a3..b22c609 100644 ---- a/frysk-core/frysk/hpd/DetachCommand.java -+++ b/frysk-core/frysk/hpd/DetachCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/DisassembleCommand.java b/frysk-core/frysk/hpd/DisassembleCommand.java -index bc64c8f..694d074 100644 ---- a/frysk-core/frysk/hpd/DisassembleCommand.java -+++ b/frysk-core/frysk/hpd/DisassembleCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/DisplayCommand.java b/frysk-core/frysk/hpd/DisplayCommand.java -index 87bc38e..7b87777 100644 ---- a/frysk-core/frysk/hpd/DisplayCommand.java -+++ b/frysk-core/frysk/hpd/DisplayCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/DynamicPTSet.java b/frysk-core/frysk/hpd/DynamicPTSet.java -index c7faaea..766023b 100644 ---- a/frysk-core/frysk/hpd/DynamicPTSet.java -+++ b/frysk-core/frysk/hpd/DynamicPTSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/EvalCommands.java b/frysk-core/frysk/hpd/EvalCommands.java -index e796acc..2407ecf 100644 ---- a/frysk-core/frysk/hpd/EvalCommands.java -+++ b/frysk-core/frysk/hpd/EvalCommands.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ExecPTSet.java b/frysk-core/frysk/hpd/ExecPTSet.java -index fd5bfc0..931ceb8 100644 ---- a/frysk-core/frysk/hpd/ExecPTSet.java -+++ b/frysk-core/frysk/hpd/ExecPTSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/FocusCommand.java b/frysk-core/frysk/hpd/FocusCommand.java -index 12498cb..0ca82e0 100644 ---- a/frysk-core/frysk/hpd/FocusCommand.java -+++ b/frysk-core/frysk/hpd/FocusCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/GenerateCoreCommand.java b/frysk-core/frysk/hpd/GenerateCoreCommand.java -index 8f86723..d27dd4e 100644 ---- a/frysk-core/frysk/hpd/GenerateCoreCommand.java -+++ b/frysk-core/frysk/hpd/GenerateCoreCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/GoCommand.java b/frysk-core/frysk/hpd/GoCommand.java -index 015340d..5e2fbcd 100644 ---- a/frysk-core/frysk/hpd/GoCommand.java -+++ b/frysk-core/frysk/hpd/GoCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/HaltCommand.java b/frysk-core/frysk/hpd/HaltCommand.java -index d2c331a..a04a41f 100644 ---- a/frysk-core/frysk/hpd/HaltCommand.java -+++ b/frysk-core/frysk/hpd/HaltCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/HardList.java b/frysk-core/frysk/hpd/HardList.java -index 76fa4f4..7fce896 100644 ---- a/frysk-core/frysk/hpd/HardList.java -+++ b/frysk-core/frysk/hpd/HardList.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/HpdTestbed.java b/frysk-core/frysk/hpd/HpdTestbed.java -index df06bbc..8b0e917 100644 ---- a/frysk-core/frysk/hpd/HpdTestbed.java -+++ b/frysk-core/frysk/hpd/HpdTestbed.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/InfoArgsCommand.java b/frysk-core/frysk/hpd/InfoArgsCommand.java -index c357ac8..33d99a7 100644 ---- a/frysk-core/frysk/hpd/InfoArgsCommand.java -+++ b/frysk-core/frysk/hpd/InfoArgsCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/InfoCommand.java b/frysk-core/frysk/hpd/InfoCommand.java -index ba6ccdc..2889cc6 100644 ---- a/frysk-core/frysk/hpd/InfoCommand.java -+++ b/frysk-core/frysk/hpd/InfoCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/InfoExeCommand.java b/frysk-core/frysk/hpd/InfoExeCommand.java -index 3500b69..442768f 100644 ---- a/frysk-core/frysk/hpd/InfoExeCommand.java -+++ b/frysk-core/frysk/hpd/InfoExeCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/Input.java b/frysk-core/frysk/hpd/Input.java -index 0c12e75..8b6e890 100644 ---- a/frysk-core/frysk/hpd/Input.java -+++ b/frysk-core/frysk/hpd/Input.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/InvalidCommandException.java b/frysk-core/frysk/hpd/InvalidCommandException.java -index 8bbb585..421036e 100644 ---- a/frysk-core/frysk/hpd/InvalidCommandException.java -+++ b/frysk-core/frysk/hpd/InvalidCommandException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/KillCommand.java b/frysk-core/frysk/hpd/KillCommand.java -index cf7dabc..e9debcd 100644 ---- a/frysk-core/frysk/hpd/KillCommand.java -+++ b/frysk-core/frysk/hpd/KillCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ListCommand.java b/frysk-core/frysk/hpd/ListCommand.java -index b46b283..32cf2f6 100644 ---- a/frysk-core/frysk/hpd/ListCommand.java -+++ b/frysk-core/frysk/hpd/ListCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/LoadCommand.java b/frysk-core/frysk/hpd/LoadCommand.java -index 34c5d75..63535fc 100644 ---- a/frysk-core/frysk/hpd/LoadCommand.java -+++ b/frysk-core/frysk/hpd/LoadCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/Magnitude.java b/frysk-core/frysk/hpd/Magnitude.java -index 065ecf1..893d11c 100644 ---- a/frysk-core/frysk/hpd/Magnitude.java -+++ b/frysk-core/frysk/hpd/Magnitude.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/MapsCommand.java b/frysk-core/frysk/hpd/MapsCommand.java -index 833a6da..6fcfc36 100644 ---- a/frysk-core/frysk/hpd/MapsCommand.java -+++ b/frysk-core/frysk/hpd/MapsCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/Message.java b/frysk-core/frysk/hpd/Message.java -index 933305f..541d74c 100644 ---- a/frysk-core/frysk/hpd/Message.java -+++ b/frysk-core/frysk/hpd/Message.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/MultiLevelCommand.java b/frysk-core/frysk/hpd/MultiLevelCommand.java -index ac51455..34d614f 100644 ---- a/frysk-core/frysk/hpd/MultiLevelCommand.java -+++ b/frysk-core/frysk/hpd/MultiLevelCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/NoOptsCommand.java b/frysk-core/frysk/hpd/NoOptsCommand.java -index b37ce14..3927b9e 100644 ---- a/frysk-core/frysk/hpd/NoOptsCommand.java -+++ b/frysk-core/frysk/hpd/NoOptsCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/PTSet.java b/frysk-core/frysk/hpd/PTSet.java -index 64ca07e..56b154b 100644 ---- a/frysk-core/frysk/hpd/PTSet.java -+++ b/frysk-core/frysk/hpd/PTSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ParameterizedCommand.java b/frysk-core/frysk/hpd/ParameterizedCommand.java -index d13a4ec..530bfef 100644 ---- a/frysk-core/frysk/hpd/ParameterizedCommand.java -+++ b/frysk-core/frysk/hpd/ParameterizedCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ParseTreeNode.java b/frysk-core/frysk/hpd/ParseTreeNode.java -index 46fe1f7..263131f 100644 ---- a/frysk-core/frysk/hpd/ParseTreeNode.java -+++ b/frysk-core/frysk/hpd/ParseTreeNode.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ParsedSet.java b/frysk-core/frysk/hpd/ParsedSet.java -index cf82213..2c2af8e 100644 ---- a/frysk-core/frysk/hpd/ParsedSet.java -+++ b/frysk-core/frysk/hpd/ParsedSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/PeekCommand.java b/frysk-core/frysk/hpd/PeekCommand.java -index 9c9ec52..43f1425 100644 ---- a/frysk-core/frysk/hpd/PeekCommand.java -+++ b/frysk-core/frysk/hpd/PeekCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/Preprocessor.java b/frysk-core/frysk/hpd/Preprocessor.java -index 970efbc..ffa3910 100644 ---- a/frysk-core/frysk/hpd/Preprocessor.java -+++ b/frysk-core/frysk/hpd/Preprocessor.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ProcData.java b/frysk-core/frysk/hpd/ProcData.java -index 177d8ee..b28f9b5 100644 ---- a/frysk-core/frysk/hpd/ProcData.java -+++ b/frysk-core/frysk/hpd/ProcData.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ProcTasks.java b/frysk-core/frysk/hpd/ProcTasks.java -index 51290bd..f1f73ca 100644 ---- a/frysk-core/frysk/hpd/ProcTasks.java -+++ b/frysk-core/frysk/hpd/ProcTasks.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/QuitCommand.java b/frysk-core/frysk/hpd/QuitCommand.java -index eeedb50..1aa743c 100644 ---- a/frysk-core/frysk/hpd/QuitCommand.java -+++ b/frysk-core/frysk/hpd/QuitCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/RegsCommand.java b/frysk-core/frysk/hpd/RegsCommand.java -index d2ef1bb..e201c53 100644 ---- a/frysk-core/frysk/hpd/RegsCommand.java -+++ b/frysk-core/frysk/hpd/RegsCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/RunCommand.java b/frysk-core/frysk/hpd/RunCommand.java -index eeef1ac..7c981c7 100644 ---- a/frysk-core/frysk/hpd/RunCommand.java -+++ b/frysk-core/frysk/hpd/RunCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/SetNotationParser.java b/frysk-core/frysk/hpd/SetNotationParser.java -index a362cb4..52d3571 100644 ---- a/frysk-core/frysk/hpd/SetNotationParser.java -+++ b/frysk-core/frysk/hpd/SetNotationParser.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ShellCommand.java b/frysk-core/frysk/hpd/ShellCommand.java -index b60a710..c16dcdc 100644 ---- a/frysk-core/frysk/hpd/ShellCommand.java -+++ b/frysk-core/frysk/hpd/ShellCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/SigIntHandler.java b/frysk-core/frysk/hpd/SigIntHandler.java -index 235d9f0..b4fb166 100644 ---- a/frysk-core/frysk/hpd/SigIntHandler.java -+++ b/frysk-core/frysk/hpd/SigIntHandler.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/StackCommands.java b/frysk-core/frysk/hpd/StackCommands.java -index 16f183a..ed0fd7c 100644 ---- a/frysk-core/frysk/hpd/StackCommands.java -+++ b/frysk-core/frysk/hpd/StackCommands.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/StartCommand.java b/frysk-core/frysk/hpd/StartCommand.java -index 841dd29..85dc59a 100644 ---- a/frysk-core/frysk/hpd/StartCommand.java -+++ b/frysk-core/frysk/hpd/StartCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/StartRun.java b/frysk-core/frysk/hpd/StartRun.java -index 8a25ad1..a7b0e4b 100644 ---- a/frysk-core/frysk/hpd/StartRun.java -+++ b/frysk-core/frysk/hpd/StartRun.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/StatePTSet.java b/frysk-core/frysk/hpd/StatePTSet.java -index 33d3a87..0480082 100644 ---- a/frysk-core/frysk/hpd/StatePTSet.java -+++ b/frysk-core/frysk/hpd/StatePTSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/StaticPTSet.java b/frysk-core/frysk/hpd/StaticPTSet.java -index 195ce69..7a34c04 100644 ---- a/frysk-core/frysk/hpd/StaticPTSet.java -+++ b/frysk-core/frysk/hpd/StaticPTSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/StepCommand.java b/frysk-core/frysk/hpd/StepCommand.java -index a8cc3c0..7fcd4e2 100644 ---- a/frysk-core/frysk/hpd/StepCommand.java -+++ b/frysk-core/frysk/hpd/StepCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/StepFinishCommand.java b/frysk-core/frysk/hpd/StepFinishCommand.java -index 404e47b..271a0f2 100644 ---- a/frysk-core/frysk/hpd/StepFinishCommand.java -+++ b/frysk-core/frysk/hpd/StepFinishCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/StepNextCommand.java b/frysk-core/frysk/hpd/StepNextCommand.java -index 8b996e8..8469c67 100644 ---- a/frysk-core/frysk/hpd/StepNextCommand.java -+++ b/frysk-core/frysk/hpd/StepNextCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TaskData.java b/frysk-core/frysk/hpd/TaskData.java -index d13f80b..18ba8d5 100644 ---- a/frysk-core/frysk/hpd/TaskData.java -+++ b/frysk-core/frysk/hpd/TaskData.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestActionsCommand.java b/frysk-core/frysk/hpd/TestActionsCommand.java -index b72be4d..0ba96b2 100644 ---- a/frysk-core/frysk/hpd/TestActionsCommand.java -+++ b/frysk-core/frysk/hpd/TestActionsCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestAliasCommands.java b/frysk-core/frysk/hpd/TestAliasCommands.java -index fd22ee2..3bbd915 100644 ---- a/frysk-core/frysk/hpd/TestAliasCommands.java -+++ b/frysk-core/frysk/hpd/TestAliasCommands.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestAuxvCommand.java b/frysk-core/frysk/hpd/TestAuxvCommand.java -index ad8062c..df8f3ce 100644 ---- a/frysk-core/frysk/hpd/TestAuxvCommand.java -+++ b/frysk-core/frysk/hpd/TestAuxvCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestBreakpoints.java b/frysk-core/frysk/hpd/TestBreakpoints.java -index 7a8d12c..6fc7d41 100644 ---- a/frysk-core/frysk/hpd/TestBreakpoints.java -+++ b/frysk-core/frysk/hpd/TestBreakpoints.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestCompletionFactory.java b/frysk-core/frysk/hpd/TestCompletionFactory.java -index 509ae74..16cff89 100644 ---- a/frysk-core/frysk/hpd/TestCompletionFactory.java -+++ b/frysk-core/frysk/hpd/TestCompletionFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestCoreCommand.java b/frysk-core/frysk/hpd/TestCoreCommand.java -index 5179d6d..3ff9190 100644 ---- a/frysk-core/frysk/hpd/TestCoreCommand.java -+++ b/frysk-core/frysk/hpd/TestCoreCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestDisassemblerCommand.java b/frysk-core/frysk/hpd/TestDisassemblerCommand.java -index a2fddf2..b357515 100644 ---- a/frysk-core/frysk/hpd/TestDisassemblerCommand.java -+++ b/frysk-core/frysk/hpd/TestDisassemblerCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestDisplayCommand.java b/frysk-core/frysk/hpd/TestDisplayCommand.java -index 80fbb1f..568d125 100644 ---- a/frysk-core/frysk/hpd/TestDisplayCommand.java -+++ b/frysk-core/frysk/hpd/TestDisplayCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestEvalCommands.java b/frysk-core/frysk/hpd/TestEvalCommands.java -index a8cf17d..b8f477d 100644 ---- a/frysk-core/frysk/hpd/TestEvalCommands.java -+++ b/frysk-core/frysk/hpd/TestEvalCommands.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestFhpdStepping.java b/frysk-core/frysk/hpd/TestFhpdStepping.java -index 5a47dc3..8c0b824 100644 ---- a/frysk-core/frysk/hpd/TestFhpdStepping.java -+++ b/frysk-core/frysk/hpd/TestFhpdStepping.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestFhpdThreads.java b/frysk-core/frysk/hpd/TestFhpdThreads.java -index aefa5e4..f2cdeba 100644 ---- a/frysk-core/frysk/hpd/TestFhpdThreads.java -+++ b/frysk-core/frysk/hpd/TestFhpdThreads.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestGenerateCoreCommand.java b/frysk-core/frysk/hpd/TestGenerateCoreCommand.java -index a48c19d..8c4024b 100644 ---- a/frysk-core/frysk/hpd/TestGenerateCoreCommand.java -+++ b/frysk-core/frysk/hpd/TestGenerateCoreCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestGoCommand.java b/frysk-core/frysk/hpd/TestGoCommand.java -index ec066b6..c3e683b 100644 ---- a/frysk-core/frysk/hpd/TestGoCommand.java -+++ b/frysk-core/frysk/hpd/TestGoCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestHelloWorld.java b/frysk-core/frysk/hpd/TestHelloWorld.java -index 6bf4001..da146aa 100644 ---- a/frysk-core/frysk/hpd/TestHelloWorld.java -+++ b/frysk-core/frysk/hpd/TestHelloWorld.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestHelp.java b/frysk-core/frysk/hpd/TestHelp.java -index 735a077..13417f9 100644 ---- a/frysk-core/frysk/hpd/TestHelp.java -+++ b/frysk-core/frysk/hpd/TestHelp.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestHpdTestHarness.java b/frysk-core/frysk/hpd/TestHpdTestHarness.java -index a68763d..ba71b79 100644 ---- a/frysk-core/frysk/hpd/TestHpdTestHarness.java -+++ b/frysk-core/frysk/hpd/TestHpdTestHarness.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestInfoArgsCommand.java b/frysk-core/frysk/hpd/TestInfoArgsCommand.java -index d0c3a4c..dacb28f 100644 ---- a/frysk-core/frysk/hpd/TestInfoArgsCommand.java -+++ b/frysk-core/frysk/hpd/TestInfoArgsCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestInfoExeCommand.java b/frysk-core/frysk/hpd/TestInfoExeCommand.java -index 47a1aca..5f70599 100644 ---- a/frysk-core/frysk/hpd/TestInfoExeCommand.java -+++ b/frysk-core/frysk/hpd/TestInfoExeCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestInput.java b/frysk-core/frysk/hpd/TestInput.java -index 4288fd1..f92ea66 100644 ---- a/frysk-core/frysk/hpd/TestInput.java -+++ b/frysk-core/frysk/hpd/TestInput.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestKillCommand.java b/frysk-core/frysk/hpd/TestKillCommand.java -index e3711d9..e7deb20 100644 ---- a/frysk-core/frysk/hpd/TestKillCommand.java -+++ b/frysk-core/frysk/hpd/TestKillCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestLib.java b/frysk-core/frysk/hpd/TestLib.java -index 0f8a95d..8ff22bb 100644 ---- a/frysk-core/frysk/hpd/TestLib.java -+++ b/frysk-core/frysk/hpd/TestLib.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestListCommand.java b/frysk-core/frysk/hpd/TestListCommand.java -index bf44966..dac8723 100644 ---- a/frysk-core/frysk/hpd/TestListCommand.java -+++ b/frysk-core/frysk/hpd/TestListCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestLoadCommand.java b/frysk-core/frysk/hpd/TestLoadCommand.java -index 199030d..e3643b5 100644 ---- a/frysk-core/frysk/hpd/TestLoadCommand.java -+++ b/frysk-core/frysk/hpd/TestLoadCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestMapsCommand.java b/frysk-core/frysk/hpd/TestMapsCommand.java -index 3ac9e70..f74deca 100644 ---- a/frysk-core/frysk/hpd/TestMapsCommand.java -+++ b/frysk-core/frysk/hpd/TestMapsCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestParameterizedCommand.java b/frysk-core/frysk/hpd/TestParameterizedCommand.java -index ade8885..d6cbd68 100644 ---- a/frysk-core/frysk/hpd/TestParameterizedCommand.java -+++ b/frysk-core/frysk/hpd/TestParameterizedCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestPeekCommand.java b/frysk-core/frysk/hpd/TestPeekCommand.java -index 2a2dbb1..a42cdc2 100644 ---- a/frysk-core/frysk/hpd/TestPeekCommand.java -+++ b/frysk-core/frysk/hpd/TestPeekCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestPreprocessor.java b/frysk-core/frysk/hpd/TestPreprocessor.java -index 000d643..6ce4228 100644 ---- a/frysk-core/frysk/hpd/TestPreprocessor.java -+++ b/frysk-core/frysk/hpd/TestPreprocessor.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestRegs.java b/frysk-core/frysk/hpd/TestRegs.java -index c571187..2aa1649 100644 ---- a/frysk-core/frysk/hpd/TestRegs.java -+++ b/frysk-core/frysk/hpd/TestRegs.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestRunCommand.java b/frysk-core/frysk/hpd/TestRunCommand.java -index e324e1d..7fd2815 100644 ---- a/frysk-core/frysk/hpd/TestRunCommand.java -+++ b/frysk-core/frysk/hpd/TestRunCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestSetParser.java b/frysk-core/frysk/hpd/TestSetParser.java -index 32fdf76..2e18669 100644 ---- a/frysk-core/frysk/hpd/TestSetParser.java -+++ b/frysk-core/frysk/hpd/TestSetParser.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestShellCommand.java b/frysk-core/frysk/hpd/TestShellCommand.java -index 2bb44e0..1594ae2 100644 ---- a/frysk-core/frysk/hpd/TestShellCommand.java -+++ b/frysk-core/frysk/hpd/TestShellCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestStackCommands.java b/frysk-core/frysk/hpd/TestStackCommands.java -index 1a80b2d..feb454a 100644 ---- a/frysk-core/frysk/hpd/TestStackCommands.java -+++ b/frysk-core/frysk/hpd/TestStackCommands.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestStartCommand.java b/frysk-core/frysk/hpd/TestStartCommand.java -index 43ab03c..da4a308 100644 ---- a/frysk-core/frysk/hpd/TestStartCommand.java -+++ b/frysk-core/frysk/hpd/TestStartCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestSysRoot.java b/frysk-core/frysk/hpd/TestSysRoot.java -index 1f40232..87943a3 100644 ---- a/frysk-core/frysk/hpd/TestSysRoot.java -+++ b/frysk-core/frysk/hpd/TestSysRoot.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestUnloadCommand.java b/frysk-core/frysk/hpd/TestUnloadCommand.java -index 39a76a4..68f6cb9 100644 ---- a/frysk-core/frysk/hpd/TestUnloadCommand.java -+++ b/frysk-core/frysk/hpd/TestUnloadCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TestWatchCommand.java b/frysk-core/frysk/hpd/TestWatchCommand.java -index c52a756..4eee31d 100644 ---- a/frysk-core/frysk/hpd/TestWatchCommand.java -+++ b/frysk-core/frysk/hpd/TestWatchCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/TopLevelCommand.java b/frysk-core/frysk/hpd/TopLevelCommand.java -index 8d1574c..0148e16 100644 ---- a/frysk-core/frysk/hpd/TopLevelCommand.java -+++ b/frysk-core/frysk/hpd/TopLevelCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/UndefsetCommand.java b/frysk-core/frysk/hpd/UndefsetCommand.java -index 70dda8f..a013f14 100644 ---- a/frysk-core/frysk/hpd/UndefsetCommand.java -+++ b/frysk-core/frysk/hpd/UndefsetCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/UnloadCommand.java b/frysk-core/frysk/hpd/UnloadCommand.java -index 1ca36f8..edbcfce 100644 ---- a/frysk-core/frysk/hpd/UnloadCommand.java -+++ b/frysk-core/frysk/hpd/UnloadCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/ViewsetCommand.java b/frysk-core/frysk/hpd/ViewsetCommand.java -index 078ce00..0bd3fbd 100644 ---- a/frysk-core/frysk/hpd/ViewsetCommand.java -+++ b/frysk-core/frysk/hpd/ViewsetCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/WatchCommand.java b/frysk-core/frysk/hpd/WatchCommand.java -index c968f18..e02ebe1 100644 ---- a/frysk-core/frysk/hpd/WatchCommand.java -+++ b/frysk-core/frysk/hpd/WatchCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/WhatCommand.java b/frysk-core/frysk/hpd/WhatCommand.java -index 17cd48b..f7f3103 100644 ---- a/frysk-core/frysk/hpd/WhatCommand.java -+++ b/frysk-core/frysk/hpd/WhatCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/hpd/WhichsetsCommand.java b/frysk-core/frysk/hpd/WhichsetsCommand.java -index d227696..c1a7838 100644 ---- a/frysk-core/frysk/hpd/WhichsetsCommand.java -+++ b/frysk-core/frysk/hpd/WhichsetsCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/ElfMap.java b/frysk-core/frysk/isa/ElfMap.java -index b42ca14..be2abd1 100644 ---- a/frysk-core/frysk/isa/ElfMap.java -+++ b/frysk-core/frysk/isa/ElfMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/ISA.java b/frysk-core/frysk/isa/ISA.java -index fca91a2..1aa0604 100644 ---- a/frysk-core/frysk/isa/ISA.java -+++ b/frysk-core/frysk/isa/ISA.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/ISAMap.java b/frysk-core/frysk/isa/ISAMap.java -index 25fa072..c586e92 100644 ---- a/frysk-core/frysk/isa/ISAMap.java -+++ b/frysk-core/frysk/isa/ISAMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/TestISA.java b/frysk-core/frysk/isa/TestISA.java -index ec2af99..28d42a9 100644 ---- a/frysk-core/frysk/isa/TestISA.java -+++ b/frysk-core/frysk/isa/TestISA.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/BankArrayRegister.java b/frysk-core/frysk/isa/banks/BankArrayRegister.java -index 0085aa6..5a187d5 100644 ---- a/frysk-core/frysk/isa/banks/BankArrayRegister.java -+++ b/frysk-core/frysk/isa/banks/BankArrayRegister.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/BankArrayRegisterMap.java b/frysk-core/frysk/isa/banks/BankArrayRegisterMap.java -index 4bed5f6..4531e29 100644 ---- a/frysk-core/frysk/isa/banks/BankArrayRegisterMap.java -+++ b/frysk-core/frysk/isa/banks/BankArrayRegisterMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/BankRegister.java b/frysk-core/frysk/isa/banks/BankRegister.java -index da077be..20033ae 100644 ---- a/frysk-core/frysk/isa/banks/BankRegister.java -+++ b/frysk-core/frysk/isa/banks/BankRegister.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/BankRegisterMap.java b/frysk-core/frysk/isa/banks/BankRegisterMap.java -index 93c878b..7f6b6c1 100644 ---- a/frysk-core/frysk/isa/banks/BankRegisterMap.java -+++ b/frysk-core/frysk/isa/banks/BankRegisterMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/IndirectBankArrayRegisterMap.java b/frysk-core/frysk/isa/banks/IndirectBankArrayRegisterMap.java -index 7d5d3a4..3236c87 100644 ---- a/frysk-core/frysk/isa/banks/IndirectBankArrayRegisterMap.java -+++ b/frysk-core/frysk/isa/banks/IndirectBankArrayRegisterMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/LinuxIA32RegisterBanks.java b/frysk-core/frysk/isa/banks/LinuxIA32RegisterBanks.java -index 4979189..dfe6917 100644 ---- a/frysk-core/frysk/isa/banks/LinuxIA32RegisterBanks.java -+++ b/frysk-core/frysk/isa/banks/LinuxIA32RegisterBanks.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/LinuxPPCRegisterBanks.java b/frysk-core/frysk/isa/banks/LinuxPPCRegisterBanks.java -index b2fd02b..fe8fbdb 100644 ---- a/frysk-core/frysk/isa/banks/LinuxPPCRegisterBanks.java -+++ b/frysk-core/frysk/isa/banks/LinuxPPCRegisterBanks.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/LinuxX8664RegisterBanks.java b/frysk-core/frysk/isa/banks/LinuxX8664RegisterBanks.java -index bd2256f..eef4024 100644 ---- a/frysk-core/frysk/isa/banks/LinuxX8664RegisterBanks.java -+++ b/frysk-core/frysk/isa/banks/LinuxX8664RegisterBanks.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/PPCBankRegisters.java b/frysk-core/frysk/isa/banks/PPCBankRegisters.java -index 40d72d6..daefcfc 100644 ---- a/frysk-core/frysk/isa/banks/PPCBankRegisters.java -+++ b/frysk-core/frysk/isa/banks/PPCBankRegisters.java -@@ -16,8 +16,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/RegisterBanks.java b/frysk-core/frysk/isa/banks/RegisterBanks.java -index 8558f2b..5088b24 100644 ---- a/frysk-core/frysk/isa/banks/RegisterBanks.java -+++ b/frysk-core/frysk/isa/banks/RegisterBanks.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/RegisterMap.java b/frysk-core/frysk/isa/banks/RegisterMap.java -index 70675b8..f00ddad 100644 ---- a/frysk-core/frysk/isa/banks/RegisterMap.java -+++ b/frysk-core/frysk/isa/banks/RegisterMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/banks/X86BankRegisters.java b/frysk-core/frysk/isa/banks/X86BankRegisters.java -index 803b30f..68f73a2 100644 ---- a/frysk-core/frysk/isa/banks/X86BankRegisters.java -+++ b/frysk-core/frysk/isa/banks/X86BankRegisters.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/corefiles/IA32LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/IA32LinuxElfCorefile.java -index af626a4..265b7ef 100644 ---- a/frysk-core/frysk/isa/corefiles/IA32LinuxElfCorefile.java -+++ b/frysk-core/frysk/isa/corefiles/IA32LinuxElfCorefile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/corefiles/LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/LinuxElfCorefile.java -index 0686c2d..f3d50d8 100644 ---- a/frysk-core/frysk/isa/corefiles/LinuxElfCorefile.java -+++ b/frysk-core/frysk/isa/corefiles/LinuxElfCorefile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/corefiles/LinuxElfCorefileFactory.java b/frysk-core/frysk/isa/corefiles/LinuxElfCorefileFactory.java -index 7ad3c42..b5b130f 100644 ---- a/frysk-core/frysk/isa/corefiles/LinuxElfCorefileFactory.java -+++ b/frysk-core/frysk/isa/corefiles/LinuxElfCorefileFactory.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/corefiles/PPC32LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/PPC32LinuxElfCorefile.java -index 3968dea..3ef31d4 100644 ---- a/frysk-core/frysk/isa/corefiles/PPC32LinuxElfCorefile.java -+++ b/frysk-core/frysk/isa/corefiles/PPC32LinuxElfCorefile.java -@@ -16,8 +16,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/corefiles/PPC64LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/PPC64LinuxElfCorefile.java -index 42b15ca..cced6c5 100644 ---- a/frysk-core/frysk/isa/corefiles/PPC64LinuxElfCorefile.java -+++ b/frysk-core/frysk/isa/corefiles/PPC64LinuxElfCorefile.java -@@ -16,8 +16,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/corefiles/TestLinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/TestLinuxElfCorefile.java -index d4a8de5..0b2de1f 100644 ---- a/frysk-core/frysk/isa/corefiles/TestLinuxElfCorefile.java -+++ b/frysk-core/frysk/isa/corefiles/TestLinuxElfCorefile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/corefiles/X8664LinuxElfCorefile.java b/frysk-core/frysk/isa/corefiles/X8664LinuxElfCorefile.java -index 8679aeb..2a019c7 100644 ---- a/frysk-core/frysk/isa/corefiles/X8664LinuxElfCorefile.java -+++ b/frysk-core/frysk/isa/corefiles/X8664LinuxElfCorefile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/IA32Registers.java b/frysk-core/frysk/isa/registers/IA32Registers.java -index ed5bd91..541292e 100644 ---- a/frysk-core/frysk/isa/registers/IA32Registers.java -+++ b/frysk-core/frysk/isa/registers/IA32Registers.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/PPC32Registers.java b/frysk-core/frysk/isa/registers/PPC32Registers.java -index 1aabb9c..dcc56a8 100644 ---- a/frysk-core/frysk/isa/registers/PPC32Registers.java -+++ b/frysk-core/frysk/isa/registers/PPC32Registers.java -@@ -16,8 +16,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/PPC64Registers.java b/frysk-core/frysk/isa/registers/PPC64Registers.java -index a5505c4..4eba07c 100644 ---- a/frysk-core/frysk/isa/registers/PPC64Registers.java -+++ b/frysk-core/frysk/isa/registers/PPC64Registers.java -@@ -16,8 +16,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/Register.java b/frysk-core/frysk/isa/registers/Register.java -index a3b3c23..d37e828 100644 ---- a/frysk-core/frysk/isa/registers/Register.java -+++ b/frysk-core/frysk/isa/registers/Register.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/RegisterGroup.java b/frysk-core/frysk/isa/registers/RegisterGroup.java -index 1e59ee5..17bce82 100644 ---- a/frysk-core/frysk/isa/registers/RegisterGroup.java -+++ b/frysk-core/frysk/isa/registers/RegisterGroup.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/RegisterMap.java b/frysk-core/frysk/isa/registers/RegisterMap.java -index c655f5b..fd5e1a4 100644 ---- a/frysk-core/frysk/isa/registers/RegisterMap.java -+++ b/frysk-core/frysk/isa/registers/RegisterMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/Registers.java b/frysk-core/frysk/isa/registers/Registers.java -index 9f4daf1..9e56a84 100644 ---- a/frysk-core/frysk/isa/registers/Registers.java -+++ b/frysk-core/frysk/isa/registers/Registers.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/RegistersFactory.java b/frysk-core/frysk/isa/registers/RegistersFactory.java -index e2633b9..7c498c1 100644 ---- a/frysk-core/frysk/isa/registers/RegistersFactory.java -+++ b/frysk-core/frysk/isa/registers/RegistersFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/TestRegisterMap.java b/frysk-core/frysk/isa/registers/TestRegisterMap.java -index fa9b715..0e8c727 100644 ---- a/frysk-core/frysk/isa/registers/TestRegisterMap.java -+++ b/frysk-core/frysk/isa/registers/TestRegisterMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/TestRegisters.java b/frysk-core/frysk/isa/registers/TestRegisters.java -index 82c3b99..16393c5 100644 ---- a/frysk-core/frysk/isa/registers/TestRegisters.java -+++ b/frysk-core/frysk/isa/registers/TestRegisters.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/X8664Registers.java b/frysk-core/frysk/isa/registers/X8664Registers.java -index 8b4efb2..f1327a3 100644 ---- a/frysk-core/frysk/isa/registers/X8664Registers.java -+++ b/frysk-core/frysk/isa/registers/X8664Registers.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/registers/X87Registers.java b/frysk-core/frysk/isa/registers/X87Registers.java -index 943b135..c2bf3d4 100644 ---- a/frysk-core/frysk/isa/registers/X87Registers.java -+++ b/frysk-core/frysk/isa/registers/X87Registers.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/signals/Signal.java b/frysk-core/frysk/isa/signals/Signal.java -index 0892ae3..c5a3e30 100644 ---- a/frysk-core/frysk/isa/signals/Signal.java -+++ b/frysk-core/frysk/isa/signals/Signal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/signals/SignalTable.java b/frysk-core/frysk/isa/signals/SignalTable.java -index 035535d..0a93c2f 100644 ---- a/frysk-core/frysk/isa/signals/SignalTable.java -+++ b/frysk-core/frysk/isa/signals/SignalTable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/signals/SignalTableFactory.java b/frysk-core/frysk/isa/signals/SignalTableFactory.java -index c4e4fc1..9a5f3ed 100644 ---- a/frysk-core/frysk/isa/signals/SignalTableFactory.java -+++ b/frysk-core/frysk/isa/signals/SignalTableFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/signals/StandardSignal.java b/frysk-core/frysk/isa/signals/StandardSignal.java -index ecd1fc9..4b832cc 100644 ---- a/frysk-core/frysk/isa/signals/StandardSignal.java -+++ b/frysk-core/frysk/isa/signals/StandardSignal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/signals/TestSignalTable.java b/frysk-core/frysk/isa/signals/TestSignalTable.java -index 307d99e..cced8f4 100644 ---- a/frysk-core/frysk/isa/signals/TestSignalTable.java -+++ b/frysk-core/frysk/isa/signals/TestSignalTable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/syscalls/LinuxIA32SyscallTable.java b/frysk-core/frysk/isa/syscalls/LinuxIA32SyscallTable.java -index 779aa03..e1749e1 100644 ---- a/frysk-core/frysk/isa/syscalls/LinuxIA32SyscallTable.java -+++ b/frysk-core/frysk/isa/syscalls/LinuxIA32SyscallTable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/syscalls/LinuxPPC32SyscallTable.java b/frysk-core/frysk/isa/syscalls/LinuxPPC32SyscallTable.java -index 04ff138..34154fa 100644 ---- a/frysk-core/frysk/isa/syscalls/LinuxPPC32SyscallTable.java -+++ b/frysk-core/frysk/isa/syscalls/LinuxPPC32SyscallTable.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/syscalls/LinuxPPC64SyscallTable.java b/frysk-core/frysk/isa/syscalls/LinuxPPC64SyscallTable.java -index d6bfcc4..ef7493a 100644 ---- a/frysk-core/frysk/isa/syscalls/LinuxPPC64SyscallTable.java -+++ b/frysk-core/frysk/isa/syscalls/LinuxPPC64SyscallTable.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/syscalls/LinuxX8664SyscallTable.java b/frysk-core/frysk/isa/syscalls/LinuxX8664SyscallTable.java -index 12d79fe..5830829 100644 ---- a/frysk-core/frysk/isa/syscalls/LinuxX8664SyscallTable.java -+++ b/frysk-core/frysk/isa/syscalls/LinuxX8664SyscallTable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/syscalls/Syscall.java b/frysk-core/frysk/isa/syscalls/Syscall.java -index 22da117..fee56e7 100644 ---- a/frysk-core/frysk/isa/syscalls/Syscall.java -+++ b/frysk-core/frysk/isa/syscalls/Syscall.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/syscalls/SyscallTable.java b/frysk-core/frysk/isa/syscalls/SyscallTable.java -index 52b3d13..9e1527a 100644 ---- a/frysk-core/frysk/isa/syscalls/SyscallTable.java -+++ b/frysk-core/frysk/isa/syscalls/SyscallTable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/syscalls/SyscallTableFactory.java b/frysk-core/frysk/isa/syscalls/SyscallTableFactory.java -index 6ff2c5d..360052a 100644 ---- a/frysk-core/frysk/isa/syscalls/SyscallTableFactory.java -+++ b/frysk-core/frysk/isa/syscalls/SyscallTableFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/syscalls/TestSyscallsWithAudit.java b/frysk-core/frysk/isa/syscalls/TestSyscallsWithAudit.java -index 8d612eb..87c21c4 100644 ---- a/frysk-core/frysk/isa/syscalls/TestSyscallsWithAudit.java -+++ b/frysk-core/frysk/isa/syscalls/TestSyscallsWithAudit.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/watchpoints/IA32WatchpointFunctions.java b/frysk-core/frysk/isa/watchpoints/IA32WatchpointFunctions.java -index e9d43ab..323ec8e 100644 ---- a/frysk-core/frysk/isa/watchpoints/IA32WatchpointFunctions.java -+++ b/frysk-core/frysk/isa/watchpoints/IA32WatchpointFunctions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/watchpoints/TestWatchpoint.java b/frysk-core/frysk/isa/watchpoints/TestWatchpoint.java -index d59d933..14067de 100644 ---- a/frysk-core/frysk/isa/watchpoints/TestWatchpoint.java -+++ b/frysk-core/frysk/isa/watchpoints/TestWatchpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/watchpoints/Watchpoint.java b/frysk-core/frysk/isa/watchpoints/Watchpoint.java -index ef88924..251d1aa 100644 ---- a/frysk-core/frysk/isa/watchpoints/Watchpoint.java -+++ b/frysk-core/frysk/isa/watchpoints/Watchpoint.java -@@ -15,8 +15,7 @@ package frysk.isa.watchpoints; - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/watchpoints/WatchpointFunctionFactory.java b/frysk-core/frysk/isa/watchpoints/WatchpointFunctionFactory.java -index fe8b81b..b32358f 100644 ---- a/frysk-core/frysk/isa/watchpoints/WatchpointFunctionFactory.java -+++ b/frysk-core/frysk/isa/watchpoints/WatchpointFunctionFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/watchpoints/WatchpointFunctions.java b/frysk-core/frysk/isa/watchpoints/WatchpointFunctions.java -index 973678f..bd70e1c 100644 ---- a/frysk-core/frysk/isa/watchpoints/WatchpointFunctions.java -+++ b/frysk-core/frysk/isa/watchpoints/WatchpointFunctions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/isa/watchpoints/X8664WatchpointFunctions.java b/frysk-core/frysk/isa/watchpoints/X8664WatchpointFunctions.java -index 45e667a..25ad61c 100644 ---- a/frysk-core/frysk/isa/watchpoints/X8664WatchpointFunctions.java -+++ b/frysk-core/frysk/isa/watchpoints/X8664WatchpointFunctions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkgdatadir/test-exe-x86.c.source b/frysk-core/frysk/pkgdatadir/test-exe-x86.c.source -index 4257e59..cad8bcf 100644 ---- a/frysk-core/frysk/pkgdatadir/test-exe-x86.c.source -+++ b/frysk-core/frysk/pkgdatadir/test-exe-x86.c.source -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkgdatadir/test_looper.xml b/frysk-core/frysk/pkgdatadir/test_looper.xml -index 914c645..b9e9e79 100644 ---- a/frysk-core/frysk/pkgdatadir/test_looper.xml -+++ b/frysk-core/frysk/pkgdatadir/test_looper.xml -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/FunitSimpleInterface.java b/frysk-core/frysk/pkglibdir/FunitSimpleInterface.java -index 6fb5207..6dc1df1 100644 ---- a/frysk-core/frysk/pkglibdir/FunitSimpleInterface.java -+++ b/frysk-core/frysk/pkglibdir/FunitSimpleInterface.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/FunitSimpleInterfaceMain.java b/frysk-core/frysk/pkglibdir/FunitSimpleInterfaceMain.java -index d395eff..d62151a 100644 ---- a/frysk-core/frysk/pkglibdir/FunitSimpleInterfaceMain.java -+++ b/frysk-core/frysk/pkglibdir/FunitSimpleInterfaceMain.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-2threads.c b/frysk-core/frysk/pkglibdir/funit-2threads.c -index 83a4db5..970c90c 100644 ---- a/frysk-core/frysk/pkglibdir/funit-2threads.c -+++ b/frysk-core/frysk/pkglibdir/funit-2threads.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-3forks.c b/frysk-core/frysk/pkglibdir/funit-3forks.c -index 29619ae..4e86d33 100644 ---- a/frysk-core/frysk/pkglibdir/funit-3forks.c -+++ b/frysk-core/frysk/pkglibdir/funit-3forks.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-addresses.c b/frysk-core/frysk/pkglibdir/funit-addresses.c -index 569d65a..8fb0803 100644 ---- a/frysk-core/frysk/pkglibdir/funit-addresses.c -+++ b/frysk-core/frysk/pkglibdir/funit-addresses.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-alarm.c b/frysk-core/frysk/pkglibdir/funit-alarm.c -index 26fb534..8b845a2 100644 ---- a/frysk-core/frysk/pkglibdir/funit-alarm.c -+++ b/frysk-core/frysk/pkglibdir/funit-alarm.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-asm.S b/frysk-core/frysk/pkglibdir/funit-asm.S -index 458f740..c4b9b53 100644 ---- a/frysk-core/frysk/pkglibdir/funit-asm.S -+++ b/frysk-core/frysk/pkglibdir/funit-asm.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-breakpoints.c b/frysk-core/frysk/pkglibdir/funit-breakpoints.c -index 1d13118..3779424 100644 ---- a/frysk-core/frysk/pkglibdir/funit-breakpoints.c -+++ b/frysk-core/frysk/pkglibdir/funit-breakpoints.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-bubblesort.c b/frysk-core/frysk/pkglibdir/funit-bubblesort.c -index 7e54592..7b2c43b 100644 ---- a/frysk-core/frysk/pkglibdir/funit-bubblesort.c -+++ b/frysk-core/frysk/pkglibdir/funit-bubblesort.c -@@ -12,8 +12,7 @@ - /* 12 */ // General Public License for more details. - /* 13 */ // - /* 14 */ // You should have received a copy of the GNU General Public License --/* 15 */ // along with FRYSK; if not, write to the Free Software Foundation, --/* 16 */ // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+/* 15 */ // along with FRYSK. If not, see . - /* 17 */ // - /* 18 */ // In addition, as a special exception, Red Hat, Inc. gives You the - /* 19 */ // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-calls.c b/frysk-core/frysk/pkglibdir/funit-calls.c -index d74ee50..437d77f 100644 ---- a/frysk-core/frysk/pkglibdir/funit-calls.c -+++ b/frysk-core/frysk/pkglibdir/funit-calls.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-child.c b/frysk-core/frysk/pkglibdir/funit-child.c -index 533b047..29fcdd8 100644 ---- a/frysk-core/frysk/pkglibdir/funit-child.c -+++ b/frysk-core/frysk/pkglibdir/funit-child.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-class-static.cxx b/frysk-core/frysk/pkglibdir/funit-class-static.cxx -index ed15231..4e262b0 100644 ---- a/frysk-core/frysk/pkglibdir/funit-class-static.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-class-static.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-complex-class.cxx b/frysk-core/frysk/pkglibdir/funit-complex-class.cxx -index 6843cf5..7ce0b0c 100644 ---- a/frysk-core/frysk/pkglibdir/funit-complex-class.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-complex-class.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-complex-struct.cxx b/frysk-core/frysk/pkglibdir/funit-complex-struct.cxx -index 32b7744..3ec9501 100644 ---- a/frysk-core/frysk/pkglibdir/funit-complex-struct.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-complex-struct.cxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-cpp-scopes-class-static.cxx b/frysk-core/frysk/pkglibdir/funit-cpp-scopes-class-static.cxx -index 14f5012..26642b6 100644 ---- a/frysk-core/frysk/pkglibdir/funit-cpp-scopes-class-static.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-cpp-scopes-class-static.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-cpp-scopes-class.cxx b/frysk-core/frysk/pkglibdir/funit-cpp-scopes-class.cxx -index ccc73eb..9bc3517 100644 ---- a/frysk-core/frysk/pkglibdir/funit-cpp-scopes-class.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-cpp-scopes-class.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-cpp-scopes-namespace.cxx b/frysk-core/frysk/pkglibdir/funit-cpp-scopes-namespace.cxx -index 031062a..eacc441 100644 ---- a/frysk-core/frysk/pkglibdir/funit-cpp-scopes-namespace.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-cpp-scopes-namespace.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-ctypes.c b/frysk-core/frysk/pkglibdir/funit-ctypes.c -index 9337ab6..8e2480f 100644 ---- a/frysk-core/frysk/pkglibdir/funit-ctypes.c -+++ b/frysk-core/frysk/pkglibdir/funit-ctypes.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-elf-symbols.S b/frysk-core/frysk/pkglibdir/funit-elf-symbols.S -index 169671d..5766a38 100644 ---- a/frysk-core/frysk/pkglibdir/funit-elf-symbols.S -+++ b/frysk-core/frysk/pkglibdir/funit-elf-symbols.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-exec.c b/frysk-core/frysk/pkglibdir/funit-exec.c -index c763c61..8d8eb00 100644 ---- a/frysk-core/frysk/pkglibdir/funit-exec.c -+++ b/frysk-core/frysk/pkglibdir/funit-exec.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-exec.xml-in b/frysk-core/frysk/pkglibdir/funit-exec.xml-in -index f12c83f..e58f1d6 100644 ---- a/frysk-core/frysk/pkglibdir/funit-exec.xml-in -+++ b/frysk-core/frysk/pkglibdir/funit-exec.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-exit.c b/frysk-core/frysk/pkglibdir/funit-exit.c -index d771f14..3f1dd6e 100644 ---- a/frysk-core/frysk/pkglibdir/funit-exit.c -+++ b/frysk-core/frysk/pkglibdir/funit-exit.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-exit.xml-in b/frysk-core/frysk/pkglibdir/funit-exit.xml-in -index defe3da..34cee80 100644 ---- a/frysk-core/frysk/pkglibdir/funit-exit.xml-in -+++ b/frysk-core/frysk/pkglibdir/funit-exit.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-fib-clone.c b/frysk-core/frysk/pkglibdir/funit-fib-clone.c -index 9a1a8f6..66452ed 100644 ---- a/frysk-core/frysk/pkglibdir/funit-fib-clone.c -+++ b/frysk-core/frysk/pkglibdir/funit-fib-clone.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-fib-exec.c b/frysk-core/frysk/pkglibdir/funit-fib-exec.c -index bfbb9df..d55ff58 100644 ---- a/frysk-core/frysk/pkglibdir/funit-fib-exec.c -+++ b/frysk-core/frysk/pkglibdir/funit-fib-exec.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-fib-fork.c b/frysk-core/frysk/pkglibdir/funit-fib-fork.c -index d64138e..0d16f52 100644 ---- a/frysk-core/frysk/pkglibdir/funit-fib-fork.c -+++ b/frysk-core/frysk/pkglibdir/funit-fib-fork.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-frameless.S b/frysk-core/frysk/pkglibdir/funit-frameless.S -index a856cc3..81e1340 100644 ---- a/frysk-core/frysk/pkglibdir/funit-frameless.S -+++ b/frysk-core/frysk/pkglibdir/funit-frameless.S -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-hello.c b/frysk-core/frysk/pkglibdir/funit-hello.c -index c2c0e5d..3e6b9b1 100644 ---- a/frysk-core/frysk/pkglibdir/funit-hello.c -+++ b/frysk-core/frysk/pkglibdir/funit-hello.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-hups.c b/frysk-core/frysk/pkglibdir/funit-hups.c -index 36c0d2c..1dfa61d 100644 ---- a/frysk-core/frysk/pkglibdir/funit-hups.c -+++ b/frysk-core/frysk/pkglibdir/funit-hups.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-iftester.S b/frysk-core/frysk/pkglibdir/funit-iftester.S -index bf10e87..2958b76 100644 ---- a/frysk-core/frysk/pkglibdir/funit-iftester.S -+++ b/frysk-core/frysk/pkglibdir/funit-iftester.S -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-inherited-struct.cxx b/frysk-core/frysk/pkglibdir/funit-inherited-struct.cxx -index 56295dd..32daeda 100644 ---- a/frysk-core/frysk/pkglibdir/funit-inherited-struct.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-inherited-struct.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-instructions.S b/frysk-core/frysk/pkglibdir/funit-instructions.S -index e38a339..7298975 100644 ---- a/frysk-core/frysk/pkglibdir/funit-instructions.S -+++ b/frysk-core/frysk/pkglibdir/funit-instructions.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-legacy.c b/frysk-core/frysk/pkglibdir/funit-legacy.c -index 533b047..29fcdd8 100644 ---- a/frysk-core/frysk/pkglibdir/funit-legacy.c -+++ b/frysk-core/frysk/pkglibdir/funit-legacy.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-libcall.c b/frysk-core/frysk/pkglibdir/funit-libcall.c -index 578b0a2..07bde08 100644 ---- a/frysk-core/frysk/pkglibdir/funit-libcall.c -+++ b/frysk-core/frysk/pkglibdir/funit-libcall.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-libfunccall.c b/frysk-core/frysk/pkglibdir/funit-libfunccall.c -index 2055f27..06c9890 100644 ---- a/frysk-core/frysk/pkglibdir/funit-libfunccall.c -+++ b/frysk-core/frysk/pkglibdir/funit-libfunccall.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-location.S b/frysk-core/frysk/pkglibdir/funit-location.S -index 316c059..203defd 100644 ---- a/frysk-core/frysk/pkglibdir/funit-location.S -+++ b/frysk-core/frysk/pkglibdir/funit-location.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-loop-signal.c b/frysk-core/frysk/pkglibdir/funit-loop-signal.c -index c3eacfa..f607c53 100644 ---- a/frysk-core/frysk/pkglibdir/funit-loop-signal.c -+++ b/frysk-core/frysk/pkglibdir/funit-loop-signal.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-parameters.c b/frysk-core/frysk/pkglibdir/funit-parameters.c -index 9c3350b..42c93bb 100644 ---- a/frysk-core/frysk/pkglibdir/funit-parameters.c -+++ b/frysk-core/frysk/pkglibdir/funit-parameters.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-print-argc.c b/frysk-core/frysk/pkglibdir/funit-print-argc.c -index 47a5081..ca82222 100644 ---- a/frysk-core/frysk/pkglibdir/funit-print-argc.c -+++ b/frysk-core/frysk/pkglibdir/funit-print-argc.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-print-argv.c b/frysk-core/frysk/pkglibdir/funit-print-argv.c -index c8eb711..a74bbdd 100644 ---- a/frysk-core/frysk/pkglibdir/funit-print-argv.c -+++ b/frysk-core/frysk/pkglibdir/funit-print-argv.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-print-auxv.c b/frysk-core/frysk/pkglibdir/funit-print-auxv.c -index 324166a..1a1d3d6 100644 ---- a/frysk-core/frysk/pkglibdir/funit-print-auxv.c -+++ b/frysk-core/frysk/pkglibdir/funit-print-auxv.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-print-envp.c b/frysk-core/frysk/pkglibdir/funit-print-envp.c -index 707e690..64c649d 100644 ---- a/frysk-core/frysk/pkglibdir/funit-print-envp.c -+++ b/frysk-core/frysk/pkglibdir/funit-print-envp.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-quicksort.c b/frysk-core/frysk/pkglibdir/funit-quicksort.c -index cba93a9..e9c1a08 100644 ---- a/frysk-core/frysk/pkglibdir/funit-quicksort.c -+++ b/frysk-core/frysk/pkglibdir/funit-quicksort.c -@@ -12,8 +12,7 @@ - /* 12 */ // General Public License for more details. - /* 13 */ // - /* 14 */ // You should have received a copy of the GNU General Public License --/* 15 */ // along with FRYSK; if not, write to the Free Software Foundation, --/* 16 */ // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+/* 15 */ // along with FRYSK. If not, see . - /* 17 */ // - /* 18 */ // In addition, as a special exception, Red Hat, Inc. gives You the - /* 19 */ // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-raise.S b/frysk-core/frysk/pkglibdir/funit-raise.S -index 2241aae..c8ee4a1 100644 ---- a/frysk-core/frysk/pkglibdir/funit-raise.S -+++ b/frysk-core/frysk/pkglibdir/funit-raise.S -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-regs.S b/frysk-core/frysk/pkglibdir/funit-regs.S -index 6a9284a..4ff7228 100644 ---- a/frysk-core/frysk/pkglibdir/funit-regs.S -+++ b/frysk-core/frysk/pkglibdir/funit-regs.S -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-asmstepper.S b/frysk-core/frysk/pkglibdir/funit-rt-asmstepper.S -index acb7567..2fd0173 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-asmstepper.S -+++ b/frysk-core/frysk/pkglibdir/funit-rt-asmstepper.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-goto.c b/frysk-core/frysk/pkglibdir/funit-rt-goto.c -index 51cbe32..928096b 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-goto.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-goto.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-looper.c b/frysk-core/frysk/pkglibdir/funit-rt-looper.c -index 4bda4b1..b7ecee2 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-looper.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-looper.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-siglongjmp.c b/frysk-core/frysk/pkglibdir/funit-rt-siglongjmp.c -index 80c9122..3ad4368 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-siglongjmp.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-siglongjmp.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-sigraise.c b/frysk-core/frysk/pkglibdir/funit-rt-sigraise.c -index 0a01625..4270edf 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-sigraise.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-sigraise.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-stepper.c b/frysk-core/frysk/pkglibdir/funit-rt-stepper.c -index 99c6a76..39ffff0 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-stepper.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-stepper.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-steptester.c b/frysk-core/frysk/pkglibdir/funit-rt-steptester.c -index 59c9d47..ccb67d8 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-steptester.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-steptester.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-threader.c b/frysk-core/frysk/pkglibdir/funit-rt-threader.c -index 657525c..73d0aa4 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-threader.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-threader.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-threadstepper.c b/frysk-core/frysk/pkglibdir/funit-rt-threadstepper.c -index 13751bb..b69736c 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-threadstepper.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-threadstepper.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-varchange.c b/frysk-core/frysk/pkglibdir/funit-rt-varchange.c -index 6835208..11fb21e 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-varchange.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-varchange.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-varlongjmp.c b/frysk-core/frysk/pkglibdir/funit-rt-varlongjmp.c -index 70f0869..b13dfa3 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-varlongjmp.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-varlongjmp.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-varsegv.c b/frysk-core/frysk/pkglibdir/funit-rt-varsegv.c -index 35a448a..999bd4c 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-varsegv.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-varsegv.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-simple-class.cxx b/frysk-core/frysk/pkglibdir/funit-simple-class.cxx -index a50844a..2ca860a 100644 ---- a/frysk-core/frysk/pkglibdir/funit-simple-class.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-simple-class.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-simple-struct.cxx b/frysk-core/frysk/pkglibdir/funit-simple-struct.cxx -index 98a7e0e..a866789 100644 ---- a/frysk-core/frysk/pkglibdir/funit-simple-struct.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-simple-struct.cxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-slave.c b/frysk-core/frysk/pkglibdir/funit-slave.c -index f10e4d6..8a94f7c 100644 ---- a/frysk-core/frysk/pkglibdir/funit-slave.c -+++ b/frysk-core/frysk/pkglibdir/funit-slave.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-slave.xml-in b/frysk-core/frysk/pkglibdir/funit-slave.xml-in -index 6c49bdb..9a634a5 100644 ---- a/frysk-core/frysk/pkglibdir/funit-slave.xml-in -+++ b/frysk-core/frysk/pkglibdir/funit-slave.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-stack-inlined.c b/frysk-core/frysk/pkglibdir/funit-stack-inlined.c -index ba9fbac..bda85bf 100644 ---- a/frysk-core/frysk/pkglibdir/funit-stack-inlined.c -+++ b/frysk-core/frysk/pkglibdir/funit-stack-inlined.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-stack-outlined.c b/frysk-core/frysk/pkglibdir/funit-stack-outlined.c -index 70e9da4..695ab46 100644 ---- a/frysk-core/frysk/pkglibdir/funit-stack-outlined.c -+++ b/frysk-core/frysk/pkglibdir/funit-stack-outlined.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-stackframe.S b/frysk-core/frysk/pkglibdir/funit-stackframe.S -index ecc7519..600ee75 100644 ---- a/frysk-core/frysk/pkglibdir/funit-stackframe.S -+++ b/frysk-core/frysk/pkglibdir/funit-stackframe.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-stepping-asm.S b/frysk-core/frysk/pkglibdir/funit-stepping-asm.S -index f145566..9c32d10 100644 ---- a/frysk-core/frysk/pkglibdir/funit-stepping-asm.S -+++ b/frysk-core/frysk/pkglibdir/funit-stepping-asm.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-symbols.S b/frysk-core/frysk/pkglibdir/funit-symbols.S -index cbb0063..c127ce6 100644 ---- a/frysk-core/frysk/pkglibdir/funit-symbols.S -+++ b/frysk-core/frysk/pkglibdir/funit-symbols.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-syscall-exec.c b/frysk-core/frysk/pkglibdir/funit-syscall-exec.c -index 7bbe14d..9a6130f 100644 ---- a/frysk-core/frysk/pkglibdir/funit-syscall-exec.c -+++ b/frysk-core/frysk/pkglibdir/funit-syscall-exec.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-syscall-running.c b/frysk-core/frysk/pkglibdir/funit-syscall-running.c -index 14c1aa7..2a0a999 100644 ---- a/frysk-core/frysk/pkglibdir/funit-syscall-running.c -+++ b/frysk-core/frysk/pkglibdir/funit-syscall-running.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-syscall-signal.c b/frysk-core/frysk/pkglibdir/funit-syscall-signal.c -index 7213005..befda02 100644 ---- a/frysk-core/frysk/pkglibdir/funit-syscall-signal.c -+++ b/frysk-core/frysk/pkglibdir/funit-syscall-signal.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-syscall-threadexec.c b/frysk-core/frysk/pkglibdir/funit-syscall-threadexec.c -index e607696..446d8f4 100644 ---- a/frysk-core/frysk/pkglibdir/funit-syscall-threadexec.c -+++ b/frysk-core/frysk/pkglibdir/funit-syscall-threadexec.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-syscallint.c b/frysk-core/frysk/pkglibdir/funit-syscallint.c -index ba26d80..3399753 100644 ---- a/frysk-core/frysk/pkglibdir/funit-syscallint.c -+++ b/frysk-core/frysk/pkglibdir/funit-syscallint.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-syscallloop.c b/frysk-core/frysk/pkglibdir/funit-syscallloop.c -index 293c514..2a505d4 100644 ---- a/frysk-core/frysk/pkglibdir/funit-syscallloop.c -+++ b/frysk-core/frysk/pkglibdir/funit-syscallloop.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-syscalls.c b/frysk-core/frysk/pkglibdir/funit-syscalls.c -index 3cc7461..f53f877 100644 ---- a/frysk-core/frysk/pkglibdir/funit-syscalls.c -+++ b/frysk-core/frysk/pkglibdir/funit-syscalls.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-threads-looper.c b/frysk-core/frysk/pkglibdir/funit-threads-looper.c -index 1e436d5..bc2931a 100644 ---- a/frysk-core/frysk/pkglibdir/funit-threads-looper.c -+++ b/frysk-core/frysk/pkglibdir/funit-threads-looper.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-threads.c b/frysk-core/frysk/pkglibdir/funit-threads.c -index 5877396..4b99db8 100644 ---- a/frysk-core/frysk/pkglibdir/funit-threads.c -+++ b/frysk-core/frysk/pkglibdir/funit-threads.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-threads.xml-in b/frysk-core/frysk/pkglibdir/funit-threads.xml-in -index e0ce994..323ca15 100644 ---- a/frysk-core/frysk/pkglibdir/funit-threads.xml-in -+++ b/frysk-core/frysk/pkglibdir/funit-threads.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-type-class.cxx b/frysk-core/frysk/pkglibdir/funit-type-class.cxx -index 9898aa4..81aef6f 100644 ---- a/frysk-core/frysk/pkglibdir/funit-type-class.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-type-class.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-vfork.c b/frysk-core/frysk/pkglibdir/funit-vfork.c -index d40b923..357367f 100644 ---- a/frysk-core/frysk/pkglibdir/funit-vfork.c -+++ b/frysk-core/frysk/pkglibdir/funit-vfork.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/funit-watchpoint.S b/frysk-core/frysk/pkglibdir/funit-watchpoint.S -index 8872a4f..4892799 100644 ---- a/frysk-core/frysk/pkglibdir/funit-watchpoint.S -+++ b/frysk-core/frysk/pkglibdir/funit-watchpoint.S -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/gen-type-funit-tests.py b/frysk-core/frysk/pkglibdir/gen-type-funit-tests.py -index e299ca4..e7e1b7a 100644 ---- a/frysk-core/frysk/pkglibdir/gen-type-funit-tests.py -+++ b/frysk-core/frysk/pkglibdir/gen-type-funit-tests.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -@@ -88,8 +87,7 @@ class c: - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/pkglibdir/hpd-c.c b/frysk-core/frysk/pkglibdir/hpd-c.c -index 91d194c..6c3711c 100644 ---- a/frysk-core/frysk/pkglibdir/hpd-c.c -+++ b/frysk-core/frysk/pkglibdir/hpd-c.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Action.java b/frysk-core/frysk/proc/Action.java -index c9267e6..ef4b6fa 100644 ---- a/frysk-core/frysk/proc/Action.java -+++ b/frysk-core/frysk/proc/Action.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Auxv.java b/frysk-core/frysk/proc/Auxv.java -index 585b8ed..2ff8591 100644 ---- a/frysk-core/frysk/proc/Auxv.java -+++ b/frysk-core/frysk/proc/Auxv.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Environ.java b/frysk-core/frysk/proc/Environ.java -index dd8dd0d..08fbe59 100644 ---- a/frysk-core/frysk/proc/Environ.java -+++ b/frysk-core/frysk/proc/Environ.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/FindProc.java b/frysk-core/frysk/proc/FindProc.java -index cb9d748..d00da71 100644 ---- a/frysk-core/frysk/proc/FindProc.java -+++ b/frysk-core/frysk/proc/FindProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Host.java b/frysk-core/frysk/proc/Host.java -index ad05c6f..f953c00 100644 ---- a/frysk-core/frysk/proc/Host.java -+++ b/frysk-core/frysk/proc/Host.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/HostEvent.java b/frysk-core/frysk/proc/HostEvent.java -index e6ccf47..f04942b 100644 ---- a/frysk-core/frysk/proc/HostEvent.java -+++ b/frysk-core/frysk/proc/HostEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/HostRefreshBuilder.java b/frysk-core/frysk/proc/HostRefreshBuilder.java -index 5d91e21..2d7626f 100644 ---- a/frysk-core/frysk/proc/HostRefreshBuilder.java -+++ b/frysk-core/frysk/proc/HostRefreshBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Manager.java b/frysk-core/frysk/proc/Manager.java -index b8d8075..05dc625 100644 ---- a/frysk-core/frysk/proc/Manager.java -+++ b/frysk-core/frysk/proc/Manager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/MemoryMap.java b/frysk-core/frysk/proc/MemoryMap.java -index 5a033b7..6a1d004 100644 ---- a/frysk-core/frysk/proc/MemoryMap.java -+++ b/frysk-core/frysk/proc/MemoryMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Observable.java b/frysk-core/frysk/proc/Observable.java -index 248378c..7589274 100644 ---- a/frysk-core/frysk/proc/Observable.java -+++ b/frysk-core/frysk/proc/Observable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Observation.java b/frysk-core/frysk/proc/Observation.java -index 4ce1a12..23afd89 100644 ---- a/frysk-core/frysk/proc/Observation.java -+++ b/frysk-core/frysk/proc/Observation.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Observer.java b/frysk-core/frysk/proc/Observer.java -index cb0a649..e510b4d 100644 ---- a/frysk-core/frysk/proc/Observer.java -+++ b/frysk-core/frysk/proc/Observer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Proc.java b/frysk-core/frysk/proc/Proc.java -index cbeb823..5cce877 100644 ---- a/frysk-core/frysk/proc/Proc.java -+++ b/frysk-core/frysk/proc/Proc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/ProcBlockAction.java b/frysk-core/frysk/proc/ProcBlockAction.java -index 66f3055..1f62fad 100644 ---- a/frysk-core/frysk/proc/ProcBlockAction.java -+++ b/frysk-core/frysk/proc/ProcBlockAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/ProcBlockObserver.java b/frysk-core/frysk/proc/ProcBlockObserver.java -index e78496b..8333ac7 100644 ---- a/frysk-core/frysk/proc/ProcBlockObserver.java -+++ b/frysk-core/frysk/proc/ProcBlockObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/ProcEvent.java b/frysk-core/frysk/proc/ProcEvent.java -index 215d20a..e11077b 100644 ---- a/frysk-core/frysk/proc/ProcEvent.java -+++ b/frysk-core/frysk/proc/ProcEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/ProcEventObservable.java b/frysk-core/frysk/proc/ProcEventObservable.java -index 661e9e8..0c5bb5f 100644 ---- a/frysk-core/frysk/proc/ProcEventObservable.java -+++ b/frysk-core/frysk/proc/ProcEventObservable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/ProcTasksAction.java b/frysk-core/frysk/proc/ProcTasksAction.java -index 86321a9..1c59e7c 100644 ---- a/frysk-core/frysk/proc/ProcTasksAction.java -+++ b/frysk-core/frysk/proc/ProcTasksAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/ProcTasksObserver.java b/frysk-core/frysk/proc/ProcTasksObserver.java -index d8d921a..77c29d0 100644 ---- a/frysk-core/frysk/proc/ProcTasksObserver.java -+++ b/frysk-core/frysk/proc/ProcTasksObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/StressAttachDetachManyTasks.java b/frysk-core/frysk/proc/StressAttachDetachManyTasks.java -index 07cce2a..434072f 100644 ---- a/frysk-core/frysk/proc/StressAttachDetachManyTasks.java -+++ b/frysk-core/frysk/proc/StressAttachDetachManyTasks.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/StressAttachDetachRapidlyCloningMainTask.java b/frysk-core/frysk/proc/StressAttachDetachRapidlyCloningMainTask.java -index 0235e85..e91ba5e 100644 ---- a/frysk-core/frysk/proc/StressAttachDetachRapidlyCloningMainTask.java -+++ b/frysk-core/frysk/proc/StressAttachDetachRapidlyCloningMainTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/StressAttachDetachRapidlyForkingMainTask.java b/frysk-core/frysk/proc/StressAttachDetachRapidlyForkingMainTask.java -index dd0d22b..897c404 100644 ---- a/frysk-core/frysk/proc/StressAttachDetachRapidlyForkingMainTask.java -+++ b/frysk-core/frysk/proc/StressAttachDetachRapidlyForkingMainTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/StressAttachDetachSignaledTask.java b/frysk-core/frysk/proc/StressAttachDetachSignaledTask.java -index ecea5a9..4316a3d 100644 ---- a/frysk-core/frysk/proc/StressAttachDetachSignaledTask.java -+++ b/frysk-core/frysk/proc/StressAttachDetachSignaledTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/StressTestAbandon.java b/frysk-core/frysk/proc/StressTestAbandon.java -index ec5ba01..dca3a12 100644 ---- a/frysk-core/frysk/proc/StressTestAbandon.java -+++ b/frysk-core/frysk/proc/StressTestAbandon.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/Task.java b/frysk-core/frysk/proc/Task.java -index 0858a8e..1c45711 100644 ---- a/frysk-core/frysk/proc/Task.java -+++ b/frysk-core/frysk/proc/Task.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TaskAttachedObserverXXX.java b/frysk-core/frysk/proc/TaskAttachedObserverXXX.java -index df24b1a..48d790e 100644 ---- a/frysk-core/frysk/proc/TaskAttachedObserverXXX.java -+++ b/frysk-core/frysk/proc/TaskAttachedObserverXXX.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TaskEvent.java b/frysk-core/frysk/proc/TaskEvent.java -index df2c3d6..0c8b86c 100644 ---- a/frysk-core/frysk/proc/TaskEvent.java -+++ b/frysk-core/frysk/proc/TaskEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TaskId.java b/frysk-core/frysk/proc/TaskId.java -index ac33b30..0b1e742 100644 ---- a/frysk-core/frysk/proc/TaskId.java -+++ b/frysk-core/frysk/proc/TaskId.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TaskObserver.java b/frysk-core/frysk/proc/TaskObserver.java -index ecc005e..8f73302 100644 ---- a/frysk-core/frysk/proc/TaskObserver.java -+++ b/frysk-core/frysk/proc/TaskObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestAbandon.java b/frysk-core/frysk/proc/TestAbandon.java -index 5252525..578855c 100644 ---- a/frysk-core/frysk/proc/TestAbandon.java -+++ b/frysk-core/frysk/proc/TestAbandon.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestBreakpoints.java b/frysk-core/frysk/proc/TestBreakpoints.java -index 3e6e2ff..4390902 100644 ---- a/frysk-core/frysk/proc/TestBreakpoints.java -+++ b/frysk-core/frysk/proc/TestBreakpoints.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestComparable.java b/frysk-core/frysk/proc/TestComparable.java -index 2ddc6e5..5c35064 100644 ---- a/frysk-core/frysk/proc/TestComparable.java -+++ b/frysk-core/frysk/proc/TestComparable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestEnviron.java b/frysk-core/frysk/proc/TestEnviron.java -index 38b026c..0dc3078 100644 ---- a/frysk-core/frysk/proc/TestEnviron.java -+++ b/frysk-core/frysk/proc/TestEnviron.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestExec.java b/frysk-core/frysk/proc/TestExec.java -index 6c3037b..0f59fcd 100644 ---- a/frysk-core/frysk/proc/TestExec.java -+++ b/frysk-core/frysk/proc/TestExec.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestFindProc.java b/frysk-core/frysk/proc/TestFindProc.java -index d9326b5..3596a52 100644 ---- a/frysk-core/frysk/proc/TestFindProc.java -+++ b/frysk-core/frysk/proc/TestFindProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestHostGet.java b/frysk-core/frysk/proc/TestHostGet.java -index 46b9cfe..0f7aac2 100644 ---- a/frysk-core/frysk/proc/TestHostGet.java -+++ b/frysk-core/frysk/proc/TestHostGet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestInstructions.java b/frysk-core/frysk/proc/TestInstructions.java -index a9eb2a4..0ff3a81 100644 ---- a/frysk-core/frysk/proc/TestInstructions.java -+++ b/frysk-core/frysk/proc/TestInstructions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestMapGet.java b/frysk-core/frysk/proc/TestMapGet.java -index 9706fb0..2d68ff1 100644 ---- a/frysk-core/frysk/proc/TestMapGet.java -+++ b/frysk-core/frysk/proc/TestMapGet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestProcForceDetach.java b/frysk-core/frysk/proc/TestProcForceDetach.java -index dadd744..8027a09 100644 ---- a/frysk-core/frysk/proc/TestProcForceDetach.java -+++ b/frysk-core/frysk/proc/TestProcForceDetach.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestProcGet.java b/frysk-core/frysk/proc/TestProcGet.java -index 34b777a..2c58ef2 100644 ---- a/frysk-core/frysk/proc/TestProcGet.java -+++ b/frysk-core/frysk/proc/TestProcGet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestProcTasksObserver.java b/frysk-core/frysk/proc/TestProcTasksObserver.java -index 738a657..2e5092c 100644 ---- a/frysk-core/frysk/proc/TestProcTasksObserver.java -+++ b/frysk-core/frysk/proc/TestProcTasksObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestRun.java b/frysk-core/frysk/proc/TestRun.java -index 9907049..c966d13 100644 ---- a/frysk-core/frysk/proc/TestRun.java -+++ b/frysk-core/frysk/proc/TestRun.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestSyscallRunning.java b/frysk-core/frysk/proc/TestSyscallRunning.java -index 266f455..60c32ca 100644 ---- a/frysk-core/frysk/proc/TestSyscallRunning.java -+++ b/frysk-core/frysk/proc/TestSyscallRunning.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestSyscallSignal.java b/frysk-core/frysk/proc/TestSyscallSignal.java -index dca055a..4b032b7 100644 ---- a/frysk-core/frysk/proc/TestSyscallSignal.java -+++ b/frysk-core/frysk/proc/TestSyscallSignal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskClonedObserver.java b/frysk-core/frysk/proc/TestTaskClonedObserver.java -index 11f0fbd..74e7dff 100644 ---- a/frysk-core/frysk/proc/TestTaskClonedObserver.java -+++ b/frysk-core/frysk/proc/TestTaskClonedObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskForkedObserver.java b/frysk-core/frysk/proc/TestTaskForkedObserver.java -index ada14bd..2cd0b4f 100644 ---- a/frysk-core/frysk/proc/TestTaskForkedObserver.java -+++ b/frysk-core/frysk/proc/TestTaskForkedObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskObserver.java b/frysk-core/frysk/proc/TestTaskObserver.java -index 509b11f..eb7f11e 100644 ---- a/frysk-core/frysk/proc/TestTaskObserver.java -+++ b/frysk-core/frysk/proc/TestTaskObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskObserverDetach.java b/frysk-core/frysk/proc/TestTaskObserverDetach.java -index 5cc4792..aa50b27 100644 ---- a/frysk-core/frysk/proc/TestTaskObserverDetach.java -+++ b/frysk-core/frysk/proc/TestTaskObserverDetach.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskObserverInstruction.java b/frysk-core/frysk/proc/TestTaskObserverInstruction.java -index bef491a..b112443 100644 ---- a/frysk-core/frysk/proc/TestTaskObserverInstruction.java -+++ b/frysk-core/frysk/proc/TestTaskObserverInstruction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskObserverInstructionAndCode.java b/frysk-core/frysk/proc/TestTaskObserverInstructionAndCode.java -index 69b4297..b9aa451 100644 ---- a/frysk-core/frysk/proc/TestTaskObserverInstructionAndCode.java -+++ b/frysk-core/frysk/proc/TestTaskObserverInstructionAndCode.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskObserverInstructionSigReturn.java b/frysk-core/frysk/proc/TestTaskObserverInstructionSigReturn.java -index d69ca6a..e4c33b4 100644 ---- a/frysk-core/frysk/proc/TestTaskObserverInstructionSigReturn.java -+++ b/frysk-core/frysk/proc/TestTaskObserverInstructionSigReturn.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskObserverWatchpoint.java b/frysk-core/frysk/proc/TestTaskObserverWatchpoint.java -index 30a58da..64b34b9 100644 ---- a/frysk-core/frysk/proc/TestTaskObserverWatchpoint.java -+++ b/frysk-core/frysk/proc/TestTaskObserverWatchpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskSyscallObserver.java b/frysk-core/frysk/proc/TestTaskSyscallObserver.java -index 2968ee1..4410a68 100644 ---- a/frysk-core/frysk/proc/TestTaskSyscallObserver.java -+++ b/frysk-core/frysk/proc/TestTaskSyscallObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/TestTaskTerminateObserver.java b/frysk-core/frysk/proc/TestTaskTerminateObserver.java -index ffb1a61..5249950 100644 ---- a/frysk-core/frysk/proc/TestTaskTerminateObserver.java -+++ b/frysk-core/frysk/proc/TestTaskTerminateObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/CorefileByteBuffer.java b/frysk-core/frysk/proc/dead/CorefileByteBuffer.java -index 86274e6..d520f81 100644 ---- a/frysk-core/frysk/proc/dead/CorefileByteBuffer.java -+++ b/frysk-core/frysk/proc/dead/CorefileByteBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/CorefileRegisterBanksFactory.java b/frysk-core/frysk/proc/dead/CorefileRegisterBanksFactory.java -index 1b0f7ff..abe9e95 100644 ---- a/frysk-core/frysk/proc/dead/CorefileRegisterBanksFactory.java -+++ b/frysk-core/frysk/proc/dead/CorefileRegisterBanksFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/CorefileStatus.java b/frysk-core/frysk/proc/dead/CorefileStatus.java -index b99e1fc..86935a6 100644 ---- a/frysk-core/frysk/proc/dead/CorefileStatus.java -+++ b/frysk-core/frysk/proc/dead/CorefileStatus.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/DeadHost.java b/frysk-core/frysk/proc/dead/DeadHost.java -index 9d2075b..0c9d51c 100644 ---- a/frysk-core/frysk/proc/dead/DeadHost.java -+++ b/frysk-core/frysk/proc/dead/DeadHost.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/DeadProc.java b/frysk-core/frysk/proc/dead/DeadProc.java -index a96c5fc..6af60a7 100644 ---- a/frysk-core/frysk/proc/dead/DeadProc.java -+++ b/frysk-core/frysk/proc/dead/DeadProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/DeadTask.java b/frysk-core/frysk/proc/dead/DeadTask.java -index a9e1e98..d07f7e3 100644 ---- a/frysk-core/frysk/proc/dead/DeadTask.java -+++ b/frysk-core/frysk/proc/dead/DeadTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/ExeByteBuffer.java b/frysk-core/frysk/proc/dead/ExeByteBuffer.java -index 59f6d09..75ab453 100644 ---- a/frysk-core/frysk/proc/dead/ExeByteBuffer.java -+++ b/frysk-core/frysk/proc/dead/ExeByteBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/InterpreterFactory.java b/frysk-core/frysk/proc/dead/InterpreterFactory.java -index a325a0e..a4af1dc 100644 ---- a/frysk-core/frysk/proc/dead/InterpreterFactory.java -+++ b/frysk-core/frysk/proc/dead/InterpreterFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinkmapBuilder.java b/frysk-core/frysk/proc/dead/LinkmapBuilder.java -index 011d93c..b04e054c 100644 ---- a/frysk-core/frysk/proc/dead/LinkmapBuilder.java -+++ b/frysk-core/frysk/proc/dead/LinkmapBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxCoreFactory.java b/frysk-core/frysk/proc/dead/LinuxCoreFactory.java -index 7453127..ffa8803 100644 ---- a/frysk-core/frysk/proc/dead/LinuxCoreFactory.java -+++ b/frysk-core/frysk/proc/dead/LinuxCoreFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxCoreHost.java b/frysk-core/frysk/proc/dead/LinuxCoreHost.java -index 43749cb..7fcee8a 100644 ---- a/frysk-core/frysk/proc/dead/LinuxCoreHost.java -+++ b/frysk-core/frysk/proc/dead/LinuxCoreHost.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxCoreInfo.java b/frysk-core/frysk/proc/dead/LinuxCoreInfo.java -index 08248af..ca4e37c 100644 ---- a/frysk-core/frysk/proc/dead/LinuxCoreInfo.java -+++ b/frysk-core/frysk/proc/dead/LinuxCoreInfo.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxCoreProc.java b/frysk-core/frysk/proc/dead/LinuxCoreProc.java -index 7a46b8d..5a8bd7c 100644 ---- a/frysk-core/frysk/proc/dead/LinuxCoreProc.java -+++ b/frysk-core/frysk/proc/dead/LinuxCoreProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxCoreTask.java b/frysk-core/frysk/proc/dead/LinuxCoreTask.java -index c537e1f..6342885 100644 ---- a/frysk-core/frysk/proc/dead/LinuxCoreTask.java -+++ b/frysk-core/frysk/proc/dead/LinuxCoreTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxExeFactory.java b/frysk-core/frysk/proc/dead/LinuxExeFactory.java -index be6248f..cc5b268 100644 ---- a/frysk-core/frysk/proc/dead/LinuxExeFactory.java -+++ b/frysk-core/frysk/proc/dead/LinuxExeFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxExeHost.java b/frysk-core/frysk/proc/dead/LinuxExeHost.java -index 59f13e3..cae2bde 100644 ---- a/frysk-core/frysk/proc/dead/LinuxExeHost.java -+++ b/frysk-core/frysk/proc/dead/LinuxExeHost.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxExeProc.java b/frysk-core/frysk/proc/dead/LinuxExeProc.java -index a7342e1..1f62f66 100644 ---- a/frysk-core/frysk/proc/dead/LinuxExeProc.java -+++ b/frysk-core/frysk/proc/dead/LinuxExeProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/LinuxExeTask.java b/frysk-core/frysk/proc/dead/LinuxExeTask.java -index a762769..b6150ee 100644 ---- a/frysk-core/frysk/proc/dead/LinuxExeTask.java -+++ b/frysk-core/frysk/proc/dead/LinuxExeTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/MapAddressHeader.java b/frysk-core/frysk/proc/dead/MapAddressHeader.java -index 381c8e0..9a0e7f2 100644 ---- a/frysk-core/frysk/proc/dead/MapAddressHeader.java -+++ b/frysk-core/frysk/proc/dead/MapAddressHeader.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/TestCoreRegs.java b/frysk-core/frysk/proc/dead/TestCoreRegs.java -index 35aefa4..3fb3436 100644 ---- a/frysk-core/frysk/proc/dead/TestCoreRegs.java -+++ b/frysk-core/frysk/proc/dead/TestCoreRegs.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/TestCorefileByteBuffer.java b/frysk-core/frysk/proc/dead/TestCorefileByteBuffer.java -index 47cbc97..30d2fb7 100644 ---- a/frysk-core/frysk/proc/dead/TestCorefileByteBuffer.java -+++ b/frysk-core/frysk/proc/dead/TestCorefileByteBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/TestInterpreter.java b/frysk-core/frysk/proc/dead/TestInterpreter.java -index bea01a5..c869c1e 100644 ---- a/frysk-core/frysk/proc/dead/TestInterpreter.java -+++ b/frysk-core/frysk/proc/dead/TestInterpreter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/TestLinuxCore.java b/frysk-core/frysk/proc/dead/TestLinuxCore.java -index 9bd63d4..877085f 100644 ---- a/frysk-core/frysk/proc/dead/TestLinuxCore.java -+++ b/frysk-core/frysk/proc/dead/TestLinuxCore.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dead/TestLinuxExe.java b/frysk-core/frysk/proc/dead/TestLinuxExe.java -index 8c467df..fcebb1b 100644 ---- a/frysk-core/frysk/proc/dead/TestLinuxExe.java -+++ b/frysk-core/frysk/proc/dead/TestLinuxExe.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dummy/DummyHost.java b/frysk-core/frysk/proc/dummy/DummyHost.java -index 5afb229..896495a 100644 ---- a/frysk-core/frysk/proc/dummy/DummyHost.java -+++ b/frysk-core/frysk/proc/dummy/DummyHost.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dummy/DummyProc.java b/frysk-core/frysk/proc/dummy/DummyProc.java -index 0c6b76c..318b3cb 100644 ---- a/frysk-core/frysk/proc/dummy/DummyProc.java -+++ b/frysk-core/frysk/proc/dummy/DummyProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/dummy/DummyTask.java b/frysk-core/frysk/proc/dummy/DummyTask.java -index cbf939a..e89485f 100644 ---- a/frysk-core/frysk/proc/dummy/DummyTask.java -+++ b/frysk-core/frysk/proc/dummy/DummyTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/BlockSpaceByteBuffer.java b/frysk-core/frysk/proc/live/BlockSpaceByteBuffer.java -index 84b2c8a..0b9859d 100644 ---- a/frysk-core/frysk/proc/live/BlockSpaceByteBuffer.java -+++ b/frysk-core/frysk/proc/live/BlockSpaceByteBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/Breakpoint.java b/frysk-core/frysk/proc/live/Breakpoint.java -index 54ea21f..2383b4a 100644 ---- a/frysk-core/frysk/proc/live/Breakpoint.java -+++ b/frysk-core/frysk/proc/live/Breakpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/BreakpointAddresses.java b/frysk-core/frysk/proc/live/BreakpointAddresses.java -index 4564d40..1c4239c 100644 ---- a/frysk-core/frysk/proc/live/BreakpointAddresses.java -+++ b/frysk-core/frysk/proc/live/BreakpointAddresses.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/ByteSpaceByteBuffer.java b/frysk-core/frysk/proc/live/ByteSpaceByteBuffer.java -index 7cd405e..0876f30 100644 ---- a/frysk-core/frysk/proc/live/ByteSpaceByteBuffer.java -+++ b/frysk-core/frysk/proc/live/ByteSpaceByteBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/IA32InstructionParser.java b/frysk-core/frysk/proc/live/IA32InstructionParser.java -index 8285b12..c256d73 100644 ---- a/frysk-core/frysk/proc/live/IA32InstructionParser.java -+++ b/frysk-core/frysk/proc/live/IA32InstructionParser.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/Instruction.java b/frysk-core/frysk/proc/live/Instruction.java -index 6a62978..141c15c 100644 ---- a/frysk-core/frysk/proc/live/Instruction.java -+++ b/frysk-core/frysk/proc/live/Instruction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/Isa.java b/frysk-core/frysk/proc/live/Isa.java -index 41bb1c0..a4b58e3 100644 ---- a/frysk-core/frysk/proc/live/Isa.java -+++ b/frysk-core/frysk/proc/live/Isa.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/IsaFactory.java b/frysk-core/frysk/proc/live/IsaFactory.java -index f929777..e248b8b 100644 ---- a/frysk-core/frysk/proc/live/IsaFactory.java -+++ b/frysk-core/frysk/proc/live/IsaFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/IsaPowerPC.java b/frysk-core/frysk/proc/live/IsaPowerPC.java -index a69ca46..74306fb 100644 ---- a/frysk-core/frysk/proc/live/IsaPowerPC.java -+++ b/frysk-core/frysk/proc/live/IsaPowerPC.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxIA32.java b/frysk-core/frysk/proc/live/LinuxIA32.java -index fe11aa5..f68943b 100644 ---- a/frysk-core/frysk/proc/live/LinuxIA32.java -+++ b/frysk-core/frysk/proc/live/LinuxIA32.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxPPC32.java b/frysk-core/frysk/proc/live/LinuxPPC32.java -index 60c0400..fdefef2 100644 ---- a/frysk-core/frysk/proc/live/LinuxPPC32.java -+++ b/frysk-core/frysk/proc/live/LinuxPPC32.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxPPC64.java b/frysk-core/frysk/proc/live/LinuxPPC64.java -index d26cc43..9f8d269 100644 ---- a/frysk-core/frysk/proc/live/LinuxPPC64.java -+++ b/frysk-core/frysk/proc/live/LinuxPPC64.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxPtraceHost.java b/frysk-core/frysk/proc/live/LinuxPtraceHost.java -index 1c10aab..ffccf7b 100644 ---- a/frysk-core/frysk/proc/live/LinuxPtraceHost.java -+++ b/frysk-core/frysk/proc/live/LinuxPtraceHost.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxPtraceProc.java b/frysk-core/frysk/proc/live/LinuxPtraceProc.java -index 209969b..3714b90 100644 ---- a/frysk-core/frysk/proc/live/LinuxPtraceProc.java -+++ b/frysk-core/frysk/proc/live/LinuxPtraceProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxPtraceProcState.java b/frysk-core/frysk/proc/live/LinuxPtraceProcState.java -index 665c529..adbfc16 100644 ---- a/frysk-core/frysk/proc/live/LinuxPtraceProcState.java -+++ b/frysk-core/frysk/proc/live/LinuxPtraceProcState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxPtraceTask.java b/frysk-core/frysk/proc/live/LinuxPtraceTask.java -index 8dc5c78..1d8347f 100644 ---- a/frysk-core/frysk/proc/live/LinuxPtraceTask.java -+++ b/frysk-core/frysk/proc/live/LinuxPtraceTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java b/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java -index 8a017fa..10f8d1a 100644 ---- a/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java -+++ b/frysk-core/frysk/proc/live/LinuxPtraceTaskState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxWaitBuilder.java b/frysk-core/frysk/proc/live/LinuxWaitBuilder.java -index 0943eb9..71fb0b8 100644 ---- a/frysk-core/frysk/proc/live/LinuxWaitBuilder.java -+++ b/frysk-core/frysk/proc/live/LinuxWaitBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LinuxX8664.java b/frysk-core/frysk/proc/live/LinuxX8664.java -index 8ee4876..48dedce 100644 ---- a/frysk-core/frysk/proc/live/LinuxX8664.java -+++ b/frysk-core/frysk/proc/live/LinuxX8664.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LiveHost.java b/frysk-core/frysk/proc/live/LiveHost.java -index f57dfbe..f8ee77e 100644 ---- a/frysk-core/frysk/proc/live/LiveHost.java -+++ b/frysk-core/frysk/proc/live/LiveHost.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LiveProc.java b/frysk-core/frysk/proc/live/LiveProc.java -index 9d46f0e..115a919 100644 ---- a/frysk-core/frysk/proc/live/LiveProc.java -+++ b/frysk-core/frysk/proc/live/LiveProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LiveTask.java b/frysk-core/frysk/proc/live/LiveTask.java -index 7c4d90f..bb152c7 100644 ---- a/frysk-core/frysk/proc/live/LiveTask.java -+++ b/frysk-core/frysk/proc/live/LiveTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java b/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java -index 3227a5f..428f515 100644 ---- a/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java -+++ b/frysk-core/frysk/proc/live/LogicalMemoryBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java b/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java -index dea7c53..2e1bb28 100644 ---- a/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java -+++ b/frysk-core/frysk/proc/live/PtraceRegisterBanksFactory.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/State.java b/frysk-core/frysk/proc/live/State.java -index 95d2052..bdb187a 100644 ---- a/frysk-core/frysk/proc/live/State.java -+++ b/frysk-core/frysk/proc/live/State.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TaskObservable.java b/frysk-core/frysk/proc/live/TaskObservable.java -index ee32e75..f8dc6dd 100644 ---- a/frysk-core/frysk/proc/live/TaskObservable.java -+++ b/frysk-core/frysk/proc/live/TaskObservable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TaskObservation.java b/frysk-core/frysk/proc/live/TaskObservation.java -index da9b9d8..4f9f926 100644 ---- a/frysk-core/frysk/proc/live/TaskObservation.java -+++ b/frysk-core/frysk/proc/live/TaskObservation.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TestByteBuffer.java b/frysk-core/frysk/proc/live/TestByteBuffer.java -index f318b90..4e12ebd 100644 ---- a/frysk-core/frysk/proc/live/TestByteBuffer.java -+++ b/frysk-core/frysk/proc/live/TestByteBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TestProcStopped.java b/frysk-core/frysk/proc/live/TestProcStopped.java -index 8ff19d6..fd52167 100644 ---- a/frysk-core/frysk/proc/live/TestProcStopped.java -+++ b/frysk-core/frysk/proc/live/TestProcStopped.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TestRefresh.java b/frysk-core/frysk/proc/live/TestRefresh.java -index 2b14f1a..eafbb4f 100644 ---- a/frysk-core/frysk/proc/live/TestRefresh.java -+++ b/frysk-core/frysk/proc/live/TestRefresh.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TestRegs.java b/frysk-core/frysk/proc/live/TestRegs.java -index de7a7fe..3c33496 100644 ---- a/frysk-core/frysk/proc/live/TestRegs.java -+++ b/frysk-core/frysk/proc/live/TestRegs.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TestRuntimeIsa.java b/frysk-core/frysk/proc/live/TestRuntimeIsa.java -index 968c901..468e9b1 100644 ---- a/frysk-core/frysk/proc/live/TestRuntimeIsa.java -+++ b/frysk-core/frysk/proc/live/TestRuntimeIsa.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TestTaskObserverBlocked.java b/frysk-core/frysk/proc/live/TestTaskObserverBlocked.java -index 254b4a6..0f1f549 100644 ---- a/frysk-core/frysk/proc/live/TestTaskObserverBlocked.java -+++ b/frysk-core/frysk/proc/live/TestTaskObserverBlocked.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/TestTaskObserverCode.java b/frysk-core/frysk/proc/live/TestTaskObserverCode.java -index 064d73d..5d1571a 100644 ---- a/frysk-core/frysk/proc/live/TestTaskObserverCode.java -+++ b/frysk-core/frysk/proc/live/TestTaskObserverCode.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/Watchpoint.java b/frysk-core/frysk/proc/live/Watchpoint.java -index 86d1e00..caeffc8 100644 ---- a/frysk-core/frysk/proc/live/Watchpoint.java -+++ b/frysk-core/frysk/proc/live/Watchpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/WatchpointAddresses.java b/frysk-core/frysk/proc/live/WatchpointAddresses.java -index 2b1bee4..a28f163 100644 ---- a/frysk-core/frysk/proc/live/WatchpointAddresses.java -+++ b/frysk-core/frysk/proc/live/WatchpointAddresses.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/proc/live/X8664InstructionParser.java b/frysk-core/frysk/proc/live/X8664InstructionParser.java -index 73fbaeb..6b96d0e 100644 ---- a/frysk-core/frysk/proc/live/X8664InstructionParser.java -+++ b/frysk-core/frysk/proc/live/X8664InstructionParser.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/Breakpoint.java b/frysk-core/frysk/rt/Breakpoint.java -index 13c205f..9b7af73 100644 ---- a/frysk-core/frysk/rt/Breakpoint.java -+++ b/frysk-core/frysk/rt/Breakpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/BreakpointManager.java b/frysk-core/frysk/rt/BreakpointManager.java -index 3a70760..c465c99 100644 ---- a/frysk-core/frysk/rt/BreakpointManager.java -+++ b/frysk-core/frysk/rt/BreakpointManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/BreakpointObserver.java b/frysk-core/frysk/rt/BreakpointObserver.java -index 6c6c942..5ebc5de 100644 ---- a/frysk-core/frysk/rt/BreakpointObserver.java -+++ b/frysk-core/frysk/rt/BreakpointObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/CountManager.java b/frysk-core/frysk/rt/CountManager.java -index f6b93e4..bec13c4 100644 ---- a/frysk-core/frysk/rt/CountManager.java -+++ b/frysk-core/frysk/rt/CountManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/DisplayManager.java b/frysk-core/frysk/rt/DisplayManager.java -index 48beefb..67074e6 100644 ---- a/frysk-core/frysk/rt/DisplayManager.java -+++ b/frysk-core/frysk/rt/DisplayManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/DisplayValue.java b/frysk-core/frysk/rt/DisplayValue.java -index 49acd32..f460701 100644 ---- a/frysk-core/frysk/rt/DisplayValue.java -+++ b/frysk-core/frysk/rt/DisplayValue.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/DisplayValueObserver.java b/frysk-core/frysk/rt/DisplayValueObserver.java -index 6571fad..68a7f4d 100644 ---- a/frysk-core/frysk/rt/DisplayValueObserver.java -+++ b/frysk-core/frysk/rt/DisplayValueObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/FunctionBreakpoint.java b/frysk-core/frysk/rt/FunctionBreakpoint.java -index b7141a5..1e1874a 100644 ---- a/frysk-core/frysk/rt/FunctionBreakpoint.java -+++ b/frysk-core/frysk/rt/FunctionBreakpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/LineBreakpoint.java b/frysk-core/frysk/rt/LineBreakpoint.java -index d9ec7ea..89c5c17 100644 ---- a/frysk-core/frysk/rt/LineBreakpoint.java -+++ b/frysk-core/frysk/rt/LineBreakpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/PLTBreakpoint.java b/frysk-core/frysk/rt/PLTBreakpoint.java -index 9a86874..7ed9e55 100644 ---- a/frysk-core/frysk/rt/PLTBreakpoint.java -+++ b/frysk-core/frysk/rt/PLTBreakpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/ProcTaskIDManager.java b/frysk-core/frysk/rt/ProcTaskIDManager.java -index 6e28f24..da0a5af 100644 ---- a/frysk-core/frysk/rt/ProcTaskIDManager.java -+++ b/frysk-core/frysk/rt/ProcTaskIDManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/SourceBreakpoint.java b/frysk-core/frysk/rt/SourceBreakpoint.java -index 2b3a397..eec1693 100644 ---- a/frysk-core/frysk/rt/SourceBreakpoint.java -+++ b/frysk-core/frysk/rt/SourceBreakpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/SourceBreakpointObserver.java b/frysk-core/frysk/rt/SourceBreakpointObserver.java -index 6692acb..44922fd 100644 ---- a/frysk-core/frysk/rt/SourceBreakpointObserver.java -+++ b/frysk-core/frysk/rt/SourceBreakpointObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/SymbolBreakpoint.java b/frysk-core/frysk/rt/SymbolBreakpoint.java -index a8a63b3..f079b24 100644 ---- a/frysk-core/frysk/rt/SymbolBreakpoint.java -+++ b/frysk-core/frysk/rt/SymbolBreakpoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/TestDisplayValue.java b/frysk-core/frysk/rt/TestDisplayValue.java -index 0db1014..a728492 100644 ---- a/frysk-core/frysk/rt/TestDisplayValue.java -+++ b/frysk-core/frysk/rt/TestDisplayValue.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/TestUpdatingDisplayValue.java b/frysk-core/frysk/rt/TestUpdatingDisplayValue.java -index 61382fe..fe8adf0 100644 ---- a/frysk-core/frysk/rt/TestUpdatingDisplayValue.java -+++ b/frysk-core/frysk/rt/TestUpdatingDisplayValue.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/UpdatingDisplayValue.java b/frysk-core/frysk/rt/UpdatingDisplayValue.java -index c4ca406..f7dd754 100644 ---- a/frysk-core/frysk/rt/UpdatingDisplayValue.java -+++ b/frysk-core/frysk/rt/UpdatingDisplayValue.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/rt/WatchObserverInstaller.java b/frysk-core/frysk/rt/WatchObserverInstaller.java -index 1d376b3..b51b201 100644 ---- a/frysk-core/frysk/rt/WatchObserverInstaller.java -+++ b/frysk-core/frysk/rt/WatchObserverInstaller.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/Composite.java b/frysk-core/frysk/scopes/Composite.java -index 31f250a..6eaaf72 100644 ---- a/frysk-core/frysk/scopes/Composite.java -+++ b/frysk-core/frysk/scopes/Composite.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/ConcreteInlinedFunction.java b/frysk-core/frysk/scopes/ConcreteInlinedFunction.java -index 9467846..299efc9 100644 ---- a/frysk-core/frysk/scopes/ConcreteInlinedFunction.java -+++ b/frysk-core/frysk/scopes/ConcreteInlinedFunction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/Enumeration.java b/frysk-core/frysk/scopes/Enumeration.java -index 5d174e7..6fc36ad 100644 ---- a/frysk-core/frysk/scopes/Enumeration.java -+++ b/frysk-core/frysk/scopes/Enumeration.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/Enumerator.java b/frysk-core/frysk/scopes/Enumerator.java -index ea17b46..508f44b 100644 ---- a/frysk-core/frysk/scopes/Enumerator.java -+++ b/frysk-core/frysk/scopes/Enumerator.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/Function.java b/frysk-core/frysk/scopes/Function.java -index cc4c426..cb36989 100644 ---- a/frysk-core/frysk/scopes/Function.java -+++ b/frysk-core/frysk/scopes/Function.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/InlinedFunction.java b/frysk-core/frysk/scopes/InlinedFunction.java -index 2e8cb2e..207395c 100644 ---- a/frysk-core/frysk/scopes/InlinedFunction.java -+++ b/frysk-core/frysk/scopes/InlinedFunction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/LexicalBlock.java b/frysk-core/frysk/scopes/LexicalBlock.java -index b5e5a49..060c57c 100644 ---- a/frysk-core/frysk/scopes/LexicalBlock.java -+++ b/frysk-core/frysk/scopes/LexicalBlock.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/NamedScope.java b/frysk-core/frysk/scopes/NamedScope.java -index 915ab59..04c4611 100644 ---- a/frysk-core/frysk/scopes/NamedScope.java -+++ b/frysk-core/frysk/scopes/NamedScope.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/OutOfLineFunction.java b/frysk-core/frysk/scopes/OutOfLineFunction.java -index 4b71275..77bdef1 100644 ---- a/frysk-core/frysk/scopes/OutOfLineFunction.java -+++ b/frysk-core/frysk/scopes/OutOfLineFunction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/Scope.java b/frysk-core/frysk/scopes/Scope.java -index 088ce72..cb97903 100644 ---- a/frysk-core/frysk/scopes/Scope.java -+++ b/frysk-core/frysk/scopes/Scope.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/ScopeFactory.java b/frysk-core/frysk/scopes/ScopeFactory.java -index 9b87af7..633e689 100644 ---- a/frysk-core/frysk/scopes/ScopeFactory.java -+++ b/frysk-core/frysk/scopes/ScopeFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/SourceLocation.java b/frysk-core/frysk/scopes/SourceLocation.java -index 74ef428..d763852 100644 ---- a/frysk-core/frysk/scopes/SourceLocation.java -+++ b/frysk-core/frysk/scopes/SourceLocation.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/SourceLocationFactory.java b/frysk-core/frysk/scopes/SourceLocationFactory.java -index 17e7f3a..73f5cd3 100644 ---- a/frysk-core/frysk/scopes/SourceLocationFactory.java -+++ b/frysk-core/frysk/scopes/SourceLocationFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/TestDie.java b/frysk-core/frysk/scopes/TestDie.java -index 44bf505..dfce0dd 100644 ---- a/frysk-core/frysk/scopes/TestDie.java -+++ b/frysk-core/frysk/scopes/TestDie.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/TestScopeFactory.java b/frysk-core/frysk/scopes/TestScopeFactory.java -index 065e2ab..20878e0 100644 ---- a/frysk-core/frysk/scopes/TestScopeFactory.java -+++ b/frysk-core/frysk/scopes/TestScopeFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/TestScopes.java b/frysk-core/frysk/scopes/TestScopes.java -index 0d13d1e..6772c19 100644 ---- a/frysk-core/frysk/scopes/TestScopes.java -+++ b/frysk-core/frysk/scopes/TestScopes.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/scopes/Variable.java b/frysk-core/frysk/scopes/Variable.java -index 6aa55ef..cc12c0f 100644 ---- a/frysk-core/frysk/scopes/Variable.java -+++ b/frysk-core/frysk/scopes/Variable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/solib/DynamicSegment.java b/frysk-core/frysk/solib/DynamicSegment.java -index d9a98c5..89fd88c 100644 ---- a/frysk-core/frysk/solib/DynamicSegment.java -+++ b/frysk-core/frysk/solib/DynamicSegment.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/solib/LinkMap.java b/frysk-core/frysk/solib/LinkMap.java -index 1d6fdd0..e6d867d 100644 ---- a/frysk-core/frysk/solib/LinkMap.java -+++ b/frysk-core/frysk/solib/LinkMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/solib/LinkMapFactory.java b/frysk-core/frysk/solib/LinkMapFactory.java -index 7b72ed5..6c87a65 100644 ---- a/frysk-core/frysk/solib/LinkMapFactory.java -+++ b/frysk-core/frysk/solib/LinkMapFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/solib/MemoryMapFactory.java b/frysk-core/frysk/solib/MemoryMapFactory.java -index 87b694b..289a490 100644 ---- a/frysk-core/frysk/solib/MemoryMapFactory.java -+++ b/frysk-core/frysk/solib/MemoryMapFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/solib/SOLibMapBuilder.java b/frysk-core/frysk/solib/SOLibMapBuilder.java -index ddf8a90..2389f05 100644 ---- a/frysk-core/frysk/solib/SOLibMapBuilder.java -+++ b/frysk-core/frysk/solib/SOLibMapBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/Frame.java b/frysk-core/frysk/stack/Frame.java -index 6ba3dc1..13de822 100644 ---- a/frysk-core/frysk/stack/Frame.java -+++ b/frysk-core/frysk/stack/Frame.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/FrameDecorator.java b/frysk-core/frysk/stack/FrameDecorator.java -index 38c6f09..5ffcb89 100644 ---- a/frysk-core/frysk/stack/FrameDecorator.java -+++ b/frysk-core/frysk/stack/FrameDecorator.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/FrameIdentifier.java b/frysk-core/frysk/stack/FrameIdentifier.java -index f85473d..65e1607 100644 ---- a/frysk-core/frysk/stack/FrameIdentifier.java -+++ b/frysk-core/frysk/stack/FrameIdentifier.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/FrameLevel.java b/frysk-core/frysk/stack/FrameLevel.java -index e8400f8..0383fcc 100644 ---- a/frysk-core/frysk/stack/FrameLevel.java -+++ b/frysk-core/frysk/stack/FrameLevel.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/LibunwindAddressSpace.java b/frysk-core/frysk/stack/LibunwindAddressSpace.java -index a85a6bb..3f935d8 100644 ---- a/frysk-core/frysk/stack/LibunwindAddressSpace.java -+++ b/frysk-core/frysk/stack/LibunwindAddressSpace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/LibunwindFrame.java b/frysk-core/frysk/stack/LibunwindFrame.java -index 08ee6d3..2fe0cad 100644 ---- a/frysk-core/frysk/stack/LibunwindFrame.java -+++ b/frysk-core/frysk/stack/LibunwindFrame.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/LibunwindRegisterMapFactory.java b/frysk-core/frysk/stack/LibunwindRegisterMapFactory.java -index b20c864..b06a79e 100644 ---- a/frysk-core/frysk/stack/LibunwindRegisterMapFactory.java -+++ b/frysk-core/frysk/stack/LibunwindRegisterMapFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/PrintStackOptions.java b/frysk-core/frysk/stack/PrintStackOptions.java -index 2e3f161..10837c7 100644 ---- a/frysk-core/frysk/stack/PrintStackOptions.java -+++ b/frysk-core/frysk/stack/PrintStackOptions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/StackFactory.java b/frysk-core/frysk/stack/StackFactory.java -index c1e05e5..153e0ca 100644 ---- a/frysk-core/frysk/stack/StackFactory.java -+++ b/frysk-core/frysk/stack/StackFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/TestFrame.java b/frysk-core/frysk/stack/TestFrame.java -index 9f33b7e..98f5499 100644 ---- a/frysk-core/frysk/stack/TestFrame.java -+++ b/frysk-core/frysk/stack/TestFrame.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/TestFrameIdentifier.java b/frysk-core/frysk/stack/TestFrameIdentifier.java -index d8512be..e496770 100644 ---- a/frysk-core/frysk/stack/TestFrameIdentifier.java -+++ b/frysk-core/frysk/stack/TestFrameIdentifier.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/TestFrameLevel.java b/frysk-core/frysk/stack/TestFrameLevel.java -index 54dc85b..0d2ecc9 100644 ---- a/frysk-core/frysk/stack/TestFrameLevel.java -+++ b/frysk-core/frysk/stack/TestFrameLevel.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/TestFrameSymbol.java b/frysk-core/frysk/stack/TestFrameSymbol.java -index c5a8bde..be4d934 100644 ---- a/frysk-core/frysk/stack/TestFrameSymbol.java -+++ b/frysk-core/frysk/stack/TestFrameSymbol.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/TestLibFunctionStepFrame.java b/frysk-core/frysk/stack/TestLibFunctionStepFrame.java -index 1a13bbb..4a9ae52 100644 ---- a/frysk-core/frysk/stack/TestLibFunctionStepFrame.java -+++ b/frysk-core/frysk/stack/TestLibFunctionStepFrame.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/TestRegs.java b/frysk-core/frysk/stack/TestRegs.java -index efe1d0a..205593b 100644 ---- a/frysk-core/frysk/stack/TestRegs.java -+++ b/frysk-core/frysk/stack/TestRegs.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stack/TestSignalStepFrame.java b/frysk-core/frysk/stack/TestSignalStepFrame.java -index 43aa4e6..4ce8c18 100644 ---- a/frysk-core/frysk/stack/TestSignalStepFrame.java -+++ b/frysk-core/frysk/stack/TestSignalStepFrame.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/InstructionStepState.java b/frysk-core/frysk/stepping/InstructionStepState.java -index 6e20c2f..079155c 100644 ---- a/frysk-core/frysk/stepping/InstructionStepState.java -+++ b/frysk-core/frysk/stepping/InstructionStepState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/InstructionStepThroughState.java b/frysk-core/frysk/stepping/InstructionStepThroughState.java -index 9722127..99a3a4e 100644 ---- a/frysk-core/frysk/stepping/InstructionStepThroughState.java -+++ b/frysk-core/frysk/stepping/InstructionStepThroughState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/LineStepState.java b/frysk-core/frysk/stepping/LineStepState.java -index f95a996..f1acb9c 100644 ---- a/frysk-core/frysk/stepping/LineStepState.java -+++ b/frysk-core/frysk/stepping/LineStepState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/NextInstructionStepState.java b/frysk-core/frysk/stepping/NextInstructionStepState.java -index b26e55d..4cfddc8 100644 ---- a/frysk-core/frysk/stepping/NextInstructionStepState.java -+++ b/frysk-core/frysk/stepping/NextInstructionStepState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/NextInstructionStepTestState.java b/frysk-core/frysk/stepping/NextInstructionStepTestState.java -index 7c0e8c8..d4771f3 100644 ---- a/frysk-core/frysk/stepping/NextInstructionStepTestState.java -+++ b/frysk-core/frysk/stepping/NextInstructionStepTestState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/RunningState.java b/frysk-core/frysk/stepping/RunningState.java -index a1bf8ae..834a04e 100644 ---- a/frysk-core/frysk/stepping/RunningState.java -+++ b/frysk-core/frysk/stepping/RunningState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/State.java b/frysk-core/frysk/stepping/State.java -index 40a0810..76a06b8 100644 ---- a/frysk-core/frysk/stepping/State.java -+++ b/frysk-core/frysk/stepping/State.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/StepAdvanceState.java b/frysk-core/frysk/stepping/StepAdvanceState.java -index b724ab2..f1ebecc 100644 ---- a/frysk-core/frysk/stepping/StepAdvanceState.java -+++ b/frysk-core/frysk/stepping/StepAdvanceState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/StepOutState.java b/frysk-core/frysk/stepping/StepOutState.java -index 5c5a44b..d51232c 100644 ---- a/frysk-core/frysk/stepping/StepOutState.java -+++ b/frysk-core/frysk/stepping/StepOutState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/StepOverState.java b/frysk-core/frysk/stepping/StepOverState.java -index 7b2d0c2..258a4c6 100644 ---- a/frysk-core/frysk/stepping/StepOverState.java -+++ b/frysk-core/frysk/stepping/StepOverState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/StepOverTestState.java b/frysk-core/frysk/stepping/StepOverTestState.java -index 5e7b38e..4cda162 100644 ---- a/frysk-core/frysk/stepping/StepOverTestState.java -+++ b/frysk-core/frysk/stepping/StepOverTestState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/StepTerminatedState.java b/frysk-core/frysk/stepping/StepTerminatedState.java -index 4f87217..2388786 100644 ---- a/frysk-core/frysk/stepping/StepTerminatedState.java -+++ b/frysk-core/frysk/stepping/StepTerminatedState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/SteppingEngine.java b/frysk-core/frysk/stepping/SteppingEngine.java -index 7dab132..7fb9b7d 100644 ---- a/frysk-core/frysk/stepping/SteppingEngine.java -+++ b/frysk-core/frysk/stepping/SteppingEngine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/StoppedState.java b/frysk-core/frysk/stepping/StoppedState.java -index 8d4df58..68d7a8a 100644 ---- a/frysk-core/frysk/stepping/StoppedState.java -+++ b/frysk-core/frysk/stepping/StoppedState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/TaskStepEngine.java b/frysk-core/frysk/stepping/TaskStepEngine.java -index be1cf4b..dd8ecc3 100644 ---- a/frysk-core/frysk/stepping/TaskStepEngine.java -+++ b/frysk-core/frysk/stepping/TaskStepEngine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/TestFirstInstruction.java b/frysk-core/frysk/stepping/TestFirstInstruction.java -index e3a269b..0f7ee67 100644 ---- a/frysk-core/frysk/stepping/TestFirstInstruction.java -+++ b/frysk-core/frysk/stepping/TestFirstInstruction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/TestStepping.java b/frysk-core/frysk/stepping/TestStepping.java -index 188a27f..8effd82 100644 ---- a/frysk-core/frysk/stepping/TestStepping.java -+++ b/frysk-core/frysk/stepping/TestStepping.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/stepping/TestSteppingEngine.java b/frysk-core/frysk/stepping/TestSteppingEngine.java -index bbe5ad1..1b9e5e3 100644 ---- a/frysk-core/frysk/stepping/TestSteppingEngine.java -+++ b/frysk-core/frysk/stepping/TestSteppingEngine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/symtab/DwflSymbol.java b/frysk-core/frysk/symtab/DwflSymbol.java -index e5931a4..1990192 100644 ---- a/frysk-core/frysk/symtab/DwflSymbol.java -+++ b/frysk-core/frysk/symtab/DwflSymbol.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/symtab/ModuleMatcher.java b/frysk-core/frysk/symtab/ModuleMatcher.java -index ff91028..e250109 100644 ---- a/frysk-core/frysk/symtab/ModuleMatcher.java -+++ b/frysk-core/frysk/symtab/ModuleMatcher.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/symtab/PLTEntry.java b/frysk-core/frysk/symtab/PLTEntry.java -index df31742..ab614e0 100644 ---- a/frysk-core/frysk/symtab/PLTEntry.java -+++ b/frysk-core/frysk/symtab/PLTEntry.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/symtab/Symbol.java b/frysk-core/frysk/symtab/Symbol.java -index 246b711..5d0d333 100644 ---- a/frysk-core/frysk/symtab/Symbol.java -+++ b/frysk-core/frysk/symtab/Symbol.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/symtab/SymbolFactory.java b/frysk-core/frysk/symtab/SymbolFactory.java -index 16d5f66..d19ca28 100644 ---- a/frysk-core/frysk/symtab/SymbolFactory.java -+++ b/frysk-core/frysk/symtab/SymbolFactory.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/symtab/SymbolObjectDeclaration.java b/frysk-core/frysk/symtab/SymbolObjectDeclaration.java -index 3ad1f7c..1a58132 100644 ---- a/frysk-core/frysk/symtab/SymbolObjectDeclaration.java -+++ b/frysk-core/frysk/symtab/SymbolObjectDeclaration.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/symtab/TestSymbol.java b/frysk-core/frysk/symtab/TestSymbol.java -index a0228b3..2156d8f 100644 ---- a/frysk-core/frysk/symtab/TestSymbol.java -+++ b/frysk-core/frysk/symtab/TestSymbol.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/symtab/UnknownSymbol.java b/frysk-core/frysk/symtab/UnknownSymbol.java -index eb8b5b6..d839aae 100644 ---- a/frysk-core/frysk/symtab/UnknownSymbol.java -+++ b/frysk-core/frysk/symtab/UnknownSymbol.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/sysroot/SysRoot.java b/frysk-core/frysk/sysroot/SysRoot.java -index 38c355a..5c92324 100644 ---- a/frysk-core/frysk/sysroot/SysRoot.java -+++ b/frysk-core/frysk/sysroot/SysRoot.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/sysroot/SysRootCache.java b/frysk-core/frysk/sysroot/SysRootCache.java -index 1057198..8048dbb 100644 ---- a/frysk-core/frysk/sysroot/SysRootCache.java -+++ b/frysk-core/frysk/sysroot/SysRootCache.java -@@ -11,8 +11,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/sysroot/SysRootFile.java b/frysk-core/frysk/sysroot/SysRootFile.java -index 9f43a9d..9654ad6 100644 ---- a/frysk-core/frysk/sysroot/SysRootFile.java -+++ b/frysk-core/frysk/sysroot/SysRootFile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/sysroot/TestSysRoot.java b/frysk-core/frysk/sysroot/TestSysRoot.java -index 208f4a9..4784add 100644 ---- a/frysk-core/frysk/sysroot/TestSysRoot.java -+++ b/frysk-core/frysk/sysroot/TestSysRoot.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/CoredumpAction.java b/frysk-core/frysk/testbed/CoredumpAction.java -index 90f5820..d77fdbb 100644 ---- a/frysk-core/frysk/testbed/CoredumpAction.java -+++ b/frysk-core/frysk/testbed/CoredumpAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/CorefileFactory.java b/frysk-core/frysk/testbed/CorefileFactory.java -index 571869d..1fcfbb3 100644 ---- a/frysk-core/frysk/testbed/CorefileFactory.java -+++ b/frysk-core/frysk/testbed/CorefileFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/DaemonBlockedAtEntry.java b/frysk-core/frysk/testbed/DaemonBlockedAtEntry.java -index 679f7c4..b17a574 100644 ---- a/frysk-core/frysk/testbed/DaemonBlockedAtEntry.java -+++ b/frysk-core/frysk/testbed/DaemonBlockedAtEntry.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/DaemonBlockedAtSignal.java b/frysk-core/frysk/testbed/DaemonBlockedAtSignal.java -index e53b217..346cc6d 100644 ---- a/frysk-core/frysk/testbed/DaemonBlockedAtSignal.java -+++ b/frysk-core/frysk/testbed/DaemonBlockedAtSignal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/ExecCommand.java b/frysk-core/frysk/testbed/ExecCommand.java -index a108fdf..7b067ef 100644 ---- a/frysk-core/frysk/testbed/ExecCommand.java -+++ b/frysk-core/frysk/testbed/ExecCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/ExecOffspring.java b/frysk-core/frysk/testbed/ExecOffspring.java -index 4f24664..26aa4e6 100644 ---- a/frysk-core/frysk/testbed/ExecOffspring.java -+++ b/frysk-core/frysk/testbed/ExecOffspring.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/Fibonacci.java b/frysk-core/frysk/testbed/Fibonacci.java -index 333977c..1492431 100644 ---- a/frysk-core/frysk/testbed/Fibonacci.java -+++ b/frysk-core/frysk/testbed/Fibonacci.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/FryskAsm.java b/frysk-core/frysk/testbed/FryskAsm.java -index c08c65d..8ea64a8 100644 ---- a/frysk-core/frysk/testbed/FryskAsm.java -+++ b/frysk-core/frysk/testbed/FryskAsm.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/FunitThreadsOffspring.java b/frysk-core/frysk/testbed/FunitThreadsOffspring.java -index 90e1e8c..be7a24a 100644 ---- a/frysk-core/frysk/testbed/FunitThreadsOffspring.java -+++ b/frysk-core/frysk/testbed/FunitThreadsOffspring.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/IsaTestbed.java b/frysk-core/frysk/testbed/IsaTestbed.java -index daa6b53..1c84b46 100644 ---- a/frysk-core/frysk/testbed/IsaTestbed.java -+++ b/frysk-core/frysk/testbed/IsaTestbed.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/LegacyOffspring.java b/frysk-core/frysk/testbed/LegacyOffspring.java -index e021fcb..5bef284 100644 ---- a/frysk-core/frysk/testbed/LegacyOffspring.java -+++ b/frysk-core/frysk/testbed/LegacyOffspring.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/Offspring.java b/frysk-core/frysk/testbed/Offspring.java -index e4c3d0b..3ca72a9 100644 ---- a/frysk-core/frysk/testbed/Offspring.java -+++ b/frysk-core/frysk/testbed/Offspring.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/OffspringType.java b/frysk-core/frysk/testbed/OffspringType.java -index 23739f5..1b22e35 100644 ---- a/frysk-core/frysk/testbed/OffspringType.java -+++ b/frysk-core/frysk/testbed/OffspringType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/PidCounter.java b/frysk-core/frysk/testbed/PidCounter.java -index 717642e..f5169da 100644 ---- a/frysk-core/frysk/testbed/PidCounter.java -+++ b/frysk-core/frysk/testbed/PidCounter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/RegsCase.java b/frysk-core/frysk/testbed/RegsCase.java -index 2a76ea9..685993c 100644 ---- a/frysk-core/frysk/testbed/RegsCase.java -+++ b/frysk-core/frysk/testbed/RegsCase.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/SignalWaiter.java b/frysk-core/frysk/testbed/SignalWaiter.java -index 98c789d..7a1b95e 100644 ---- a/frysk-core/frysk/testbed/SignalWaiter.java -+++ b/frysk-core/frysk/testbed/SignalWaiter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/SlaveOffspring.java b/frysk-core/frysk/testbed/SlaveOffspring.java -index 7c07fd6..c1833f4 100644 ---- a/frysk-core/frysk/testbed/SlaveOffspring.java -+++ b/frysk-core/frysk/testbed/SlaveOffspring.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/StatState.java b/frysk-core/frysk/testbed/StatState.java -index adc5b22..afdc744 100644 ---- a/frysk-core/frysk/testbed/StatState.java -+++ b/frysk-core/frysk/testbed/StatState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/StopEventLoopWhenProcTerminated.java b/frysk-core/frysk/testbed/StopEventLoopWhenProcTerminated.java -index 5b8737d..cfdc7b0 100644 ---- a/frysk-core/frysk/testbed/StopEventLoopWhenProcTerminated.java -+++ b/frysk-core/frysk/testbed/StopEventLoopWhenProcTerminated.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/SynchronizedOffspring.java b/frysk-core/frysk/testbed/SynchronizedOffspring.java -index 655f23a..86e9a24 100644 ---- a/frysk-core/frysk/testbed/SynchronizedOffspring.java -+++ b/frysk-core/frysk/testbed/SynchronizedOffspring.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TaskObserverBase.java b/frysk-core/frysk/testbed/TaskObserverBase.java -index bd4b7ad..1373f84 100644 ---- a/frysk-core/frysk/testbed/TaskObserverBase.java -+++ b/frysk-core/frysk/testbed/TaskObserverBase.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TaskSet.java b/frysk-core/frysk/testbed/TaskSet.java -index 1255253..b835e36 100644 ---- a/frysk-core/frysk/testbed/TaskSet.java -+++ b/frysk-core/frysk/testbed/TaskSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestCorefileFactory.java b/frysk-core/frysk/testbed/TestCorefileFactory.java -index 6fa0f1c..a17adcc 100644 ---- a/frysk-core/frysk/testbed/TestCorefileFactory.java -+++ b/frysk-core/frysk/testbed/TestCorefileFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestDaemonBlockedAtSignal.java b/frysk-core/frysk/testbed/TestDaemonBlockedAtSignal.java -index 4f6aa84..250c05e 100644 ---- a/frysk-core/frysk/testbed/TestDaemonBlockedAtSignal.java -+++ b/frysk-core/frysk/testbed/TestDaemonBlockedAtSignal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestFryskAsm.java b/frysk-core/frysk/testbed/TestFryskAsm.java -index 77f328b..d43d564 100644 ---- a/frysk-core/frysk/testbed/TestFryskAsm.java -+++ b/frysk-core/frysk/testbed/TestFryskAsm.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestIsa.java b/frysk-core/frysk/testbed/TestIsa.java -index f5d9610..a5658e7 100644 ---- a/frysk-core/frysk/testbed/TestIsa.java -+++ b/frysk-core/frysk/testbed/TestIsa.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestLib.java b/frysk-core/frysk/testbed/TestLib.java -index 7acf902..d6b8dc9 100644 ---- a/frysk-core/frysk/testbed/TestLib.java -+++ b/frysk-core/frysk/testbed/TestLib.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestRegs.java b/frysk-core/frysk/testbed/TestRegs.java -index ae1308c..62e382a 100644 ---- a/frysk-core/frysk/testbed/TestRegs.java -+++ b/frysk-core/frysk/testbed/TestRegs.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestSignalWaiter.java b/frysk-core/frysk/testbed/TestSignalWaiter.java -index cdf8d3b..af8b095 100644 ---- a/frysk-core/frysk/testbed/TestSignalWaiter.java -+++ b/frysk-core/frysk/testbed/TestSignalWaiter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestStatState.java b/frysk-core/frysk/testbed/TestStatState.java -index 679e672..c2fa046 100644 ---- a/frysk-core/frysk/testbed/TestStatState.java -+++ b/frysk-core/frysk/testbed/TestStatState.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestStopEventLoopWhenProcTerminates.java b/frysk-core/frysk/testbed/TestStopEventLoopWhenProcTerminates.java -index 0530370..d28d1cc 100644 ---- a/frysk-core/frysk/testbed/TestStopEventLoopWhenProcTerminates.java -+++ b/frysk-core/frysk/testbed/TestStopEventLoopWhenProcTerminates.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/testbed/TestfileTokenScanner.java b/frysk-core/frysk/testbed/TestfileTokenScanner.java -index 9b52297..de07c80 100644 ---- a/frysk-core/frysk/testbed/TestfileTokenScanner.java -+++ b/frysk-core/frysk/testbed/TestfileTokenScanner.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/ArchFormatter.java b/frysk-core/frysk/util/ArchFormatter.java -index 0abb340..0280b65 100644 ---- a/frysk-core/frysk/util/ArchFormatter.java -+++ b/frysk-core/frysk/util/ArchFormatter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/AuxvStringBuilder.java b/frysk-core/frysk/util/AuxvStringBuilder.java -index 69d0ceb..cf1488b 100644 ---- a/frysk-core/frysk/util/AuxvStringBuilder.java -+++ b/frysk-core/frysk/util/AuxvStringBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/CommandlineParser.java b/frysk-core/frysk/util/CommandlineParser.java -index e0c6a32..7bec2e8 100644 ---- a/frysk-core/frysk/util/CommandlineParser.java -+++ b/frysk-core/frysk/util/CommandlineParser.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/CoreExePair.java b/frysk-core/frysk/util/CoreExePair.java -index 38de989..86be84c 100644 ---- a/frysk-core/frysk/util/CoreExePair.java -+++ b/frysk-core/frysk/util/CoreExePair.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/CountDownLatch.java b/frysk-core/frysk/util/CountDownLatch.java -index f9d548f..cb859e6 100644 ---- a/frysk-core/frysk/util/CountDownLatch.java -+++ b/frysk-core/frysk/util/CountDownLatch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/DebuginfoPaths.java b/frysk-core/frysk/util/DebuginfoPaths.java -index d38bc93..9bbeaab 100644 ---- a/frysk-core/frysk/util/DebuginfoPaths.java -+++ b/frysk-core/frysk/util/DebuginfoPaths.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/FCatch.java b/frysk-core/frysk/util/FCatch.java -index 3157ed9..1e4caf2 100644 ---- a/frysk-core/frysk/util/FCatch.java -+++ b/frysk-core/frysk/util/FCatch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/FlowControlWriter.java b/frysk-core/frysk/util/FlowControlWriter.java -index 0ab8dfb..fc1199b 100644 ---- a/frysk-core/frysk/util/FlowControlWriter.java -+++ b/frysk-core/frysk/util/FlowControlWriter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/Glob.java b/frysk-core/frysk/util/Glob.java -index 0bb0632..3785344 100644 ---- a/frysk-core/frysk/util/Glob.java -+++ b/frysk-core/frysk/util/Glob.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/ObservingTerminal.java b/frysk-core/frysk/util/ObservingTerminal.java -index 162be63..9cd7025 100644 ---- a/frysk-core/frysk/util/ObservingTerminal.java -+++ b/frysk-core/frysk/util/ObservingTerminal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/ProcFollowUtil.java b/frysk-core/frysk/util/ProcFollowUtil.java -index b3df90c..39e374e 100644 ---- a/frysk-core/frysk/util/ProcFollowUtil.java -+++ b/frysk-core/frysk/util/ProcFollowUtil.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/ProcRunUtil.java b/frysk-core/frysk/util/ProcRunUtil.java -index 4d30907..84f20c5 100644 ---- a/frysk-core/frysk/util/ProcRunUtil.java -+++ b/frysk-core/frysk/util/ProcRunUtil.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/PtyTerminal.java b/frysk-core/frysk/util/PtyTerminal.java -index 23bb95a..517dd50 100644 ---- a/frysk-core/frysk/util/PtyTerminal.java -+++ b/frysk-core/frysk/util/PtyTerminal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/StackPrintUtil.java b/frysk-core/frysk/util/StackPrintUtil.java -index ab7fc01..dd3b943 100644 ---- a/frysk-core/frysk/util/StackPrintUtil.java -+++ b/frysk-core/frysk/util/StackPrintUtil.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/StacktraceAction.java b/frysk-core/frysk/util/StacktraceAction.java -index 9b83662..ef1a474 100644 ---- a/frysk-core/frysk/util/StacktraceAction.java -+++ b/frysk-core/frysk/util/StacktraceAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/StressTestStackTraceAction.java b/frysk-core/frysk/util/StressTestStackTraceAction.java -index 75ccf5f..4ecb0b2 100644 ---- a/frysk-core/frysk/util/StressTestStackTraceAction.java -+++ b/frysk-core/frysk/util/StressTestStackTraceAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/TaskStopUtil.java b/frysk-core/frysk/util/TaskStopUtil.java -index 16dbefc..a194a90 100644 ---- a/frysk-core/frysk/util/TaskStopUtil.java -+++ b/frysk-core/frysk/util/TaskStopUtil.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/TestCommandlineParser.java b/frysk-core/frysk/util/TestCommandlineParser.java -index 10c9de1..d034685 100644 ---- a/frysk-core/frysk/util/TestCommandlineParser.java -+++ b/frysk-core/frysk/util/TestCommandlineParser.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/TestCountDownLatch.java b/frysk-core/frysk/util/TestCountDownLatch.java -index 3535d02..f8a6afb 100644 ---- a/frysk-core/frysk/util/TestCountDownLatch.java -+++ b/frysk-core/frysk/util/TestCountDownLatch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/TestGlob.java b/frysk-core/frysk/util/TestGlob.java -index 8efa4b8..3c3bdc9 100644 ---- a/frysk-core/frysk/util/TestGlob.java -+++ b/frysk-core/frysk/util/TestGlob.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/TestStackTraceAction.java b/frysk-core/frysk/util/TestStackTraceAction.java -index 3fd33cf..e2f77c5 100644 ---- a/frysk-core/frysk/util/TestStackTraceAction.java -+++ b/frysk-core/frysk/util/TestStackTraceAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/Util.java b/frysk-core/frysk/util/Util.java -index 562da9c..2177d4e 100644 ---- a/frysk-core/frysk/util/Util.java -+++ b/frysk-core/frysk/util/Util.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/WordWrapWriter.java b/frysk-core/frysk/util/WordWrapWriter.java -index e8da436..5789a2a 100644 ---- a/frysk-core/frysk/util/WordWrapWriter.java -+++ b/frysk-core/frysk/util/WordWrapWriter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/stack-options.xml b/frysk-core/frysk/util/stack-options.xml -index 5555d01..ad14f51 100644 ---- a/frysk-core/frysk/util/stack-options.xml -+++ b/frysk-core/frysk/util/stack-options.xml -@@ -14,8 +14,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/util/standard-options.xml b/frysk-core/frysk/util/standard-options.xml -index 915a3b5..66764ad 100644 ---- a/frysk-core/frysk/util/standard-options.xml -+++ b/frysk-core/frysk/util/standard-options.xml -@@ -14,8 +14,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/AddressUnit.java b/frysk-core/frysk/value/AddressUnit.java -index 094b589..c714a3b 100644 ---- a/frysk-core/frysk/value/AddressUnit.java -+++ b/frysk-core/frysk/value/AddressUnit.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ArithmeticType.java b/frysk-core/frysk/value/ArithmeticType.java -index 2ab8722..8f60d2a 100644 ---- a/frysk-core/frysk/value/ArithmeticType.java -+++ b/frysk-core/frysk/value/ArithmeticType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ArithmeticUnit.java b/frysk-core/frysk/value/ArithmeticUnit.java -index b3ec914..0a094fb 100644 ---- a/frysk-core/frysk/value/ArithmeticUnit.java -+++ b/frysk-core/frysk/value/ArithmeticUnit.java -@@ -12,8 +12,7 @@ - //General Public License for more details. - - //You should have received a copy of the GNU General Public License --//along with FRYSK; if not, write to the Free Software Foundation, --//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+//along with FRYSK. If not, see . - - //In addition, as a special exception, Red Hat, Inc. gives You the - //additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ArrayType.java b/frysk-core/frysk/value/ArrayType.java -index 6865556..4fe9b60 100644 ---- a/frysk-core/frysk/value/ArrayType.java -+++ b/frysk-core/frysk/value/ArrayType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/BigFloatingPoint.java b/frysk-core/frysk/value/BigFloatingPoint.java -index b7bc169..0f8610d 100644 ---- a/frysk-core/frysk/value/BigFloatingPoint.java -+++ b/frysk-core/frysk/value/BigFloatingPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/BooleanType.java b/frysk-core/frysk/value/BooleanType.java -index 4db5245..053079e 100644 ---- a/frysk-core/frysk/value/BooleanType.java -+++ b/frysk-core/frysk/value/BooleanType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/BreakPointLocation.java b/frysk-core/frysk/value/BreakPointLocation.java -index 9ce3b21..db213d3 100644 ---- a/frysk-core/frysk/value/BreakPointLocation.java -+++ b/frysk-core/frysk/value/BreakPointLocation.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ByteBufferLocation.java b/frysk-core/frysk/value/ByteBufferLocation.java -index 915cad9..0492dca 100644 ---- a/frysk-core/frysk/value/ByteBufferLocation.java -+++ b/frysk-core/frysk/value/ByteBufferLocation.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/CharType.java b/frysk-core/frysk/value/CharType.java -index 852ccef..8e96079 100644 ---- a/frysk-core/frysk/value/CharType.java -+++ b/frysk-core/frysk/value/CharType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ClassType.java b/frysk-core/frysk/value/ClassType.java -index 69c009f..9142362 100644 ---- a/frysk-core/frysk/value/ClassType.java -+++ b/frysk-core/frysk/value/ClassType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/CompositeType.java b/frysk-core/frysk/value/CompositeType.java -index 846bd16..bd9832c 100644 ---- a/frysk-core/frysk/value/CompositeType.java -+++ b/frysk-core/frysk/value/CompositeType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ConstType.java b/frysk-core/frysk/value/ConstType.java -index d08638f..a108632 100644 ---- a/frysk-core/frysk/value/ConstType.java -+++ b/frysk-core/frysk/value/ConstType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/Constant.java b/frysk-core/frysk/value/Constant.java -index 0a1a823..31d519c 100644 ---- a/frysk-core/frysk/value/Constant.java -+++ b/frysk-core/frysk/value/Constant.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/EnumType.java b/frysk-core/frysk/value/EnumType.java -index 0763c33..5564d0b 100644 ---- a/frysk-core/frysk/value/EnumType.java -+++ b/frysk-core/frysk/value/EnumType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/FloatingPoint854Format.java b/frysk-core/frysk/value/FloatingPoint854Format.java -index eb3c108..1c6ea7a 100644 ---- a/frysk-core/frysk/value/FloatingPoint854Format.java -+++ b/frysk-core/frysk/value/FloatingPoint854Format.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/FloatingPointFormat.java b/frysk-core/frysk/value/FloatingPointFormat.java -index 28fe0b0..eb051f1 100644 ---- a/frysk-core/frysk/value/FloatingPointFormat.java -+++ b/frysk-core/frysk/value/FloatingPointFormat.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/FloatingPointType.java b/frysk-core/frysk/value/FloatingPointType.java -index 0f2f120..9bb4443 100644 ---- a/frysk-core/frysk/value/FloatingPointType.java -+++ b/frysk-core/frysk/value/FloatingPointType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/FloatingPointUnit.java b/frysk-core/frysk/value/FloatingPointUnit.java -index 3d6f999..b2ca674 100644 ---- a/frysk-core/frysk/value/FloatingPointUnit.java -+++ b/frysk-core/frysk/value/FloatingPointUnit.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/Format.java b/frysk-core/frysk/value/Format.java -index 1023fd8..a172057 100644 ---- a/frysk-core/frysk/value/Format.java -+++ b/frysk-core/frysk/value/Format.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/FunctionType.java b/frysk-core/frysk/value/FunctionType.java -index 380c173..6f2bb6a 100644 ---- a/frysk-core/frysk/value/FunctionType.java -+++ b/frysk-core/frysk/value/FunctionType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/GccStructOrClassType.java b/frysk-core/frysk/value/GccStructOrClassType.java -index 4940b2b..4b84d24 100644 ---- a/frysk-core/frysk/value/GccStructOrClassType.java -+++ b/frysk-core/frysk/value/GccStructOrClassType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/IntegerType.java b/frysk-core/frysk/value/IntegerType.java -index 8724be3..7f0b605 100644 ---- a/frysk-core/frysk/value/IntegerType.java -+++ b/frysk-core/frysk/value/IntegerType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/IntegerTypeDecorator.java b/frysk-core/frysk/value/IntegerTypeDecorator.java -index 8d1f73c..13d2082 100644 ---- a/frysk-core/frysk/value/IntegerTypeDecorator.java -+++ b/frysk-core/frysk/value/IntegerTypeDecorator.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/IntegerUnit.java b/frysk-core/frysk/value/IntegerUnit.java -index 66bea73..5103d47 100644 ---- a/frysk-core/frysk/value/IntegerUnit.java -+++ b/frysk-core/frysk/value/IntegerUnit.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/InterfaceType.java b/frysk-core/frysk/value/InterfaceType.java -index 3c575a0..6a0121e 100644 ---- a/frysk-core/frysk/value/InterfaceType.java -+++ b/frysk-core/frysk/value/InterfaceType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/InvalidOperatorException.java b/frysk-core/frysk/value/InvalidOperatorException.java -index 4b704ba..1a8ea9d 100644 ---- a/frysk-core/frysk/value/InvalidOperatorException.java -+++ b/frysk-core/frysk/value/InvalidOperatorException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/Location.java b/frysk-core/frysk/value/Location.java -index 27b52a0..7a9dfec 100644 ---- a/frysk-core/frysk/value/Location.java -+++ b/frysk-core/frysk/value/Location.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ObjectDeclaration.java b/frysk-core/frysk/value/ObjectDeclaration.java -index 7906f8d..1f8efde 100644 ---- a/frysk-core/frysk/value/ObjectDeclaration.java -+++ b/frysk-core/frysk/value/ObjectDeclaration.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/OperationNotDefinedException.java b/frysk-core/frysk/value/OperationNotDefinedException.java -index edacb99..0ae1faa 100644 ---- a/frysk-core/frysk/value/OperationNotDefinedException.java -+++ b/frysk-core/frysk/value/OperationNotDefinedException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/PackedType.java b/frysk-core/frysk/value/PackedType.java -index a7d2100..fe14f34 100644 ---- a/frysk-core/frysk/value/PackedType.java -+++ b/frysk-core/frysk/value/PackedType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/Packing.java b/frysk-core/frysk/value/Packing.java -index f916d0d..30ef63a 100644 ---- a/frysk-core/frysk/value/Packing.java -+++ b/frysk-core/frysk/value/Packing.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/PointerType.java b/frysk-core/frysk/value/PointerType.java -index bbf507a..9c3236e 100644 ---- a/frysk-core/frysk/value/PointerType.java -+++ b/frysk-core/frysk/value/PointerType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ReferenceType.java b/frysk-core/frysk/value/ReferenceType.java -index 01f9cc0..90d0713 100644 ---- a/frysk-core/frysk/value/ReferenceType.java -+++ b/frysk-core/frysk/value/ReferenceType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/RestrictType.java b/frysk-core/frysk/value/RestrictType.java -index 6750fc0..02e1618 100644 ---- a/frysk-core/frysk/value/RestrictType.java -+++ b/frysk-core/frysk/value/RestrictType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/ScratchLocation.java b/frysk-core/frysk/value/ScratchLocation.java -index e332946..932115a 100644 ---- a/frysk-core/frysk/value/ScratchLocation.java -+++ b/frysk-core/frysk/value/ScratchLocation.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/SharedType.java b/frysk-core/frysk/value/SharedType.java -index accdad5..9bf6c5c 100644 ---- a/frysk-core/frysk/value/SharedType.java -+++ b/frysk-core/frysk/value/SharedType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/SignedType.java b/frysk-core/frysk/value/SignedType.java -index 8500485..246ef2d 100644 ---- a/frysk-core/frysk/value/SignedType.java -+++ b/frysk-core/frysk/value/SignedType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/StandardTypes.java b/frysk-core/frysk/value/StandardTypes.java -index 0ce6a52..9318548 100644 ---- a/frysk-core/frysk/value/StandardTypes.java -+++ b/frysk-core/frysk/value/StandardTypes.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/StructType.java b/frysk-core/frysk/value/StructType.java -index 393514d..904492f 100644 ---- a/frysk-core/frysk/value/StructType.java -+++ b/frysk-core/frysk/value/StructType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestArray.java b/frysk-core/frysk/value/TestArray.java -index a715b72..f9ee26a 100644 ---- a/frysk-core/frysk/value/TestArray.java -+++ b/frysk-core/frysk/value/TestArray.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestComposite.java b/frysk-core/frysk/value/TestComposite.java -index 59dc86e..848ac20 100644 ---- a/frysk-core/frysk/value/TestComposite.java -+++ b/frysk-core/frysk/value/TestComposite.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestDecoratorTypes.java b/frysk-core/frysk/value/TestDecoratorTypes.java -index 8751039..1e239cd 100644 ---- a/frysk-core/frysk/value/TestDecoratorTypes.java -+++ b/frysk-core/frysk/value/TestDecoratorTypes.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestEnum.java b/frysk-core/frysk/value/TestEnum.java -index f3353f9..b409ac5 100644 ---- a/frysk-core/frysk/value/TestEnum.java -+++ b/frysk-core/frysk/value/TestEnum.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestFloatingPoint.java b/frysk-core/frysk/value/TestFloatingPoint.java -index 5bee28c..8c2b734 100644 ---- a/frysk-core/frysk/value/TestFloatingPoint.java -+++ b/frysk-core/frysk/value/TestFloatingPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestFloatingPoint854Format.java b/frysk-core/frysk/value/TestFloatingPoint854Format.java -index 508bb7b..c80e8d1 100644 ---- a/frysk-core/frysk/value/TestFloatingPoint854Format.java -+++ b/frysk-core/frysk/value/TestFloatingPoint854Format.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestFormat.java b/frysk-core/frysk/value/TestFormat.java -index 07d434a..8f153d6 100644 ---- a/frysk-core/frysk/value/TestFormat.java -+++ b/frysk-core/frysk/value/TestFormat.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestIntegerType.java b/frysk-core/frysk/value/TestIntegerType.java -index 6db4210..4a9c33b 100644 ---- a/frysk-core/frysk/value/TestIntegerType.java -+++ b/frysk-core/frysk/value/TestIntegerType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestLocation.java b/frysk-core/frysk/value/TestLocation.java -index 9a192df..03f476f 100644 ---- a/frysk-core/frysk/value/TestLocation.java -+++ b/frysk-core/frysk/value/TestLocation.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestPacking.java b/frysk-core/frysk/value/TestPacking.java -index aa09e95..bfa0be5 100644 ---- a/frysk-core/frysk/value/TestPacking.java -+++ b/frysk-core/frysk/value/TestPacking.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestPointer.java b/frysk-core/frysk/value/TestPointer.java -index df93465..37abe09 100644 ---- a/frysk-core/frysk/value/TestPointer.java -+++ b/frysk-core/frysk/value/TestPointer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TestValue.java b/frysk-core/frysk/value/TestValue.java -index 7ee22b2..7de63aa 100644 ---- a/frysk-core/frysk/value/TestValue.java -+++ b/frysk-core/frysk/value/TestValue.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/Type.java b/frysk-core/frysk/value/Type.java -index 5ff9812..fe00863 100644 ---- a/frysk-core/frysk/value/Type.java -+++ b/frysk-core/frysk/value/Type.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TypeDecorator.java b/frysk-core/frysk/value/TypeDecorator.java -index 176ee2a..85e647a 100644 ---- a/frysk-core/frysk/value/TypeDecorator.java -+++ b/frysk-core/frysk/value/TypeDecorator.java -@@ -12,8 +12,7 @@ - //General Public License for more details. - - //You should have received a copy of the GNU General Public License --//along with FRYSK; if not, write to the Free Software Foundation, --//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+//along with FRYSK. If not, see . - - //In addition, as a special exception, Red Hat, Inc. gives You the - //additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/TypeDef.java b/frysk-core/frysk/value/TypeDef.java -index 65d3cf7..fd0323d 100644 ---- a/frysk-core/frysk/value/TypeDef.java -+++ b/frysk-core/frysk/value/TypeDef.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/UnionType.java b/frysk-core/frysk/value/UnionType.java -index de9413c..edf2ea9 100644 ---- a/frysk-core/frysk/value/UnionType.java -+++ b/frysk-core/frysk/value/UnionType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/UnknownType.java b/frysk-core/frysk/value/UnknownType.java -index 9d1122a..32da573 100644 ---- a/frysk-core/frysk/value/UnknownType.java -+++ b/frysk-core/frysk/value/UnknownType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/UnsignedType.java b/frysk-core/frysk/value/UnsignedType.java -index 74e19ab..ce4e954 100644 ---- a/frysk-core/frysk/value/UnsignedType.java -+++ b/frysk-core/frysk/value/UnsignedType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/Value.java b/frysk-core/frysk/value/Value.java -index e7f4db8..9ee6b7c 100644 ---- a/frysk-core/frysk/value/Value.java -+++ b/frysk-core/frysk/value/Value.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/VoidType.java b/frysk-core/frysk/value/VoidType.java -index b73073c..b05f89b 100644 ---- a/frysk-core/frysk/value/VoidType.java -+++ b/frysk-core/frysk/value/VoidType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/frysk/value/VolatileType.java b/frysk-core/frysk/value/VolatileType.java -index 356f23c..2716226 100644 ---- a/frysk-core/frysk/value/VolatileType.java -+++ b/frysk-core/frysk/value/VolatileType.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/prog/kill/detach.c b/frysk-core/prog/kill/detach.c -index 2eb7afd..78f7591 100644 ---- a/frysk-core/prog/kill/detach.c -+++ b/frysk-core/prog/kill/detach.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/prog/kill/loop.c b/frysk-core/prog/kill/loop.c -index af4f6e0..17b7c5b 100644 ---- a/frysk-core/prog/kill/loop.c -+++ b/frysk-core/prog/kill/loop.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/prog/kill/suspend.c b/frysk-core/prog/kill/suspend.c -index 5a2e668..3f498f2 100644 ---- a/frysk-core/prog/kill/suspend.c -+++ b/frysk-core/prog/kill/suspend.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/prog/perf/clone.c b/frysk-core/prog/perf/clone.c -index 7a726c4..7d371ed 100644 ---- a/frysk-core/prog/perf/clone.c -+++ b/frysk-core/prog/perf/clone.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/prog/perf/clone.sh b/frysk-core/prog/perf/clone.sh -index da9af97..8a19040 100755 ---- a/frysk-core/prog/perf/clone.sh -+++ b/frysk-core/prog/perf/clone.sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/prog/perf/fork.c b/frysk-core/prog/perf/fork.c -index f5a4960..0136006 100644 ---- a/frysk-core/prog/perf/fork.c -+++ b/frysk-core/prog/perf/fork.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/prog/step/infThreadLoop.c b/frysk-core/prog/step/infThreadLoop.c -index 983b9c5..3864db9 100644 ---- a/frysk-core/prog/step/infThreadLoop.c -+++ b/frysk-core/prog/step/infThreadLoop.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-core/prog/terminated/infloop.c b/frysk-core/prog/terminated/infloop.c -index 0a25c7d..b8ffc20 100644 ---- a/frysk-core/prog/terminated/infloop.c -+++ b/frysk-core/prog/terminated/infloop.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/Makefile.am b/frysk-gtk/Makefile.am -index b7ade5f..ea8b0aa 100644 ---- a/frysk-gtk/Makefile.am -+++ b/frysk-gtk/Makefile.am -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/bootstrap.sh b/frysk-gtk/bootstrap.sh -index 18da4d6..dc12a72 100755 ---- a/frysk-gtk/bootstrap.sh -+++ b/frysk-gtk/bootstrap.sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/configure.ac b/frysk-gtk/configure.ac -index 43f38eb..aaa123f 100644 ---- a/frysk-gtk/configure.ac -+++ b/frysk-gtk/configure.ac -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/org/gnu/gtk/frysk/EggTrayIcon.java b/frysk-gtk/org/gnu/gtk/frysk/EggTrayIcon.java -index 0573d2a..925f508 100644 ---- a/frysk-gtk/org/gnu/gtk/frysk/EggTrayIcon.java -+++ b/frysk-gtk/org/gnu/gtk/frysk/EggTrayIcon.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/tests/Makefile.am b/frysk-gtk/tests/Makefile.am -index 713ebc1..f01b901 100644 ---- a/frysk-gtk/tests/Makefile.am -+++ b/frysk-gtk/tests/Makefile.am -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/tests/frysk2333/TestGlibTimerGC.java b/frysk-gtk/tests/frysk2333/TestGlibTimerGC.java -index 0e9c1d3..0931f42 100644 ---- a/frysk-gtk/tests/frysk2333/TestGlibTimerGC.java -+++ b/frysk-gtk/tests/frysk2333/TestGlibTimerGC.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/tests/frysk3116/RegionAndGCFailure.java b/frysk-gtk/tests/frysk3116/RegionAndGCFailure.java -index 010f9eb..9eaabd8 100644 ---- a/frysk-gtk/tests/frysk3116/RegionAndGCFailure.java -+++ b/frysk-gtk/tests/frysk3116/RegionAndGCFailure.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/tlwidgets/Makefile.am b/frysk-gtk/tlwidgets/Makefile.am -index 4f27182..dc96720 100644 ---- a/frysk-gtk/tlwidgets/Makefile.am -+++ b/frysk-gtk/tlwidgets/Makefile.am -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gtk/tlwidgets/src/widgets/ftkcustomdrawingarea.c b/frysk-gtk/tlwidgets/src/widgets/ftkcustomdrawingarea.c -index cdf11fb..6277d64 100644 ---- a/frysk-gtk/tlwidgets/src/widgets/ftkcustomdrawingarea.c -+++ b/frysk-gtk/tlwidgets/src/widgets/ftkcustomdrawingarea.c -@@ -11,7 +11,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License along -- with Red Hat CustomDrawingArea; if not, write to the Free Software Foundation, -+ with Red Hat CustomDrawingArea. If not, see . - Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. */ - - #define _GNU_SOURCE -diff --git a/frysk-gtk/tlwidgets/src/widgets/ftkcustomdrawingarea.h b/frysk-gtk/tlwidgets/src/widgets/ftkcustomdrawingarea.h -index 20dd174..47520cc 100644 ---- a/frysk-gtk/tlwidgets/src/widgets/ftkcustomdrawingarea.h -+++ b/frysk-gtk/tlwidgets/src/widgets/ftkcustomdrawingarea.h -@@ -11,7 +11,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License along -- with Red Hat Customdrawingarea; if not, write to the Free Software Foundation, -+ with Red Hat Customdrawingarea. If not, see . - Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. */ - - #ifndef __FTK_CUSTOMDRAWINGAREA_H__ -diff --git a/frysk-gtk/tlwidgets/src/widgets/ftkeventviewer.c b/frysk-gtk/tlwidgets/src/widgets/ftkeventviewer.c -index 1b6348a..3ce8040 100644 ---- a/frysk-gtk/tlwidgets/src/widgets/ftkeventviewer.c -+++ b/frysk-gtk/tlwidgets/src/widgets/ftkeventviewer.c -@@ -11,7 +11,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License along -- with Red Hat EventViewer; if not, write to the Free Software Foundation, -+ with Red Hat EventViewer. If not, see . - Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. */ - - #define _GNU_SOURCE -diff --git a/frysk-gtk/tlwidgets/src/widgets/ftkeventviewer.h b/frysk-gtk/tlwidgets/src/widgets/ftkeventviewer.h -index 827baa6..9500075 100644 ---- a/frysk-gtk/tlwidgets/src/widgets/ftkeventviewer.h -+++ b/frysk-gtk/tlwidgets/src/widgets/ftkeventviewer.h -@@ -11,7 +11,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License along -- with Red Hat EventViewer; if not, write to the Free Software Foundation, -+ with Red Hat EventViewer. If not, see . - Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. */ - - #ifndef __FTK_EVENTVIEWER_H__ -diff --git a/frysk-gui/Makefile.am b/frysk-gui/Makefile.am -index 7594786..92bdb4c 100644 ---- a/frysk-gui/Makefile.am -+++ b/frysk-gui/Makefile.am -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/bootstrap.sh b/frysk-gui/bootstrap.sh -index 81a8ef7..cbffd00 100755 ---- a/frysk-gui/bootstrap.sh -+++ b/frysk-gui/bootstrap.sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/configure.ac b/frysk-gui/configure.ac -index ba48e36..9a274c6 100644 ---- a/frysk-gui/configure.ac -+++ b/frysk-gui/configure.ac -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/EventLogger.java b/frysk-gui/frysk/EventLogger.java -index dbf8f15..54b8f46 100644 ---- a/frysk-gui/frysk/EventLogger.java -+++ b/frysk-gui/frysk/EventLogger.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/bindir/frysk.java b/frysk-gui/frysk/bindir/frysk.java -index 8e8e806..e89c0eb 100644 ---- a/frysk-gui/frysk/bindir/frysk.java -+++ b/frysk-gui/frysk/bindir/frysk.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/bindir/frysk.xml-in b/frysk-gui/frysk/bindir/frysk.xml-in -index 9e298a0..9523c3a 100644 ---- a/frysk-gui/frysk/bindir/frysk.xml-in -+++ b/frysk-gui/frysk/bindir/frysk.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/DebugHistory.java b/frysk-gui/frysk/gui/DebugHistory.java -index 5f75a58..ccc7b96 100644 ---- a/frysk-gui/frysk/gui/DebugHistory.java -+++ b/frysk-gui/frysk/gui/DebugHistory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/FryskGui.java-in b/frysk-gui/frysk/gui/FryskGui.java-in -index 61ccea8..be5640d 100644 ---- a/frysk-gui/frysk/gui/FryskGui.java-in -+++ b/frysk-gui/frysk/gui/FryskGui.java-in -@@ -14,8 +14,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/FryskHelpManager.java b/frysk-gui/frysk/gui/FryskHelpManager.java -index 9fc4a29..4136280 100644 ---- a/frysk-gui/frysk/gui/FryskHelpManager.java -+++ b/frysk-gui/frysk/gui/FryskHelpManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/Gui.java b/frysk-gui/frysk/gui/Gui.java -index 2b0c4dc..611f87f 100644 ---- a/frysk-gui/frysk/gui/Gui.java -+++ b/frysk-gui/frysk/gui/Gui.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/SessionManagerDialog.java b/frysk-gui/frysk/gui/SessionManagerDialog.java -index cc2bb95..b7ec035 100644 ---- a/frysk-gui/frysk/gui/SessionManagerDialog.java -+++ b/frysk-gui/frysk/gui/SessionManagerDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/TestGlade.java b/frysk-gui/frysk/gui/TestGlade.java -index 1efa289..d21298f 100644 ---- a/frysk-gui/frysk/gui/TestGlade.java -+++ b/frysk-gui/frysk/gui/TestGlade.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/common/FryskIconSet.java b/frysk-gui/frysk/gui/common/FryskIconSet.java -index 7a81419..fc52c3e 100644 ---- a/frysk-gui/frysk/gui/common/FryskIconSet.java -+++ b/frysk-gui/frysk/gui/common/FryskIconSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/common/IconManager.java b/frysk-gui/frysk/gui/common/IconManager.java -index e5702ec..75ad5dc 100644 ---- a/frysk-gui/frysk/gui/common/IconManager.java -+++ b/frysk-gui/frysk/gui/common/IconManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/common/Messages.java b/frysk-gui/frysk/gui/common/Messages.java -index 9e9017f..f46b510 100644 ---- a/frysk-gui/frysk/gui/common/Messages.java -+++ b/frysk-gui/frysk/gui/common/Messages.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/common/UBigInteger.java b/frysk-gui/frysk/gui/common/UBigInteger.java -index 160cb6e..28f1d03 100644 ---- a/frysk-gui/frysk/gui/common/UBigInteger.java -+++ b/frysk-gui/frysk/gui/common/UBigInteger.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/common/Util.java b/frysk-gui/frysk/gui/common/Util.java -index 95f66aa..5f8c97c 100644 ---- a/frysk-gui/frysk/gui/common/Util.java -+++ b/frysk-gui/frysk/gui/common/Util.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/console/ConsoleWindow.java b/frysk-gui/frysk/gui/console/ConsoleWindow.java -index 5708849..9e6492d 100644 ---- a/frysk-gui/frysk/gui/console/ConsoleWindow.java -+++ b/frysk-gui/frysk/gui/console/ConsoleWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/dialogs/Dialog.java b/frysk-gui/frysk/gui/dialogs/Dialog.java -index f0b93f3..171f721 100644 ---- a/frysk-gui/frysk/gui/dialogs/Dialog.java -+++ b/frysk-gui/frysk/gui/dialogs/Dialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/dialogs/DialogManager.java b/frysk-gui/frysk/gui/dialogs/DialogManager.java -index e2d6515..dc8a321 100644 ---- a/frysk-gui/frysk/gui/dialogs/DialogManager.java -+++ b/frysk-gui/frysk/gui/dialogs/DialogManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/dialogs/ErrorDialog.java b/frysk-gui/frysk/gui/dialogs/ErrorDialog.java -index ab27da9..7fb5313 100644 ---- a/frysk-gui/frysk/gui/dialogs/ErrorDialog.java -+++ b/frysk-gui/frysk/gui/dialogs/ErrorDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/dialogs/FryskDialog.java b/frysk-gui/frysk/gui/dialogs/FryskDialog.java -index a4803f7..bc12d37 100644 ---- a/frysk-gui/frysk/gui/dialogs/FryskDialog.java -+++ b/frysk-gui/frysk/gui/dialogs/FryskDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/dialogs/NoDebugInfoDialog.java b/frysk-gui/frysk/gui/dialogs/NoDebugInfoDialog.java -index b7e6050..be12884 100644 ---- a/frysk-gui/frysk/gui/dialogs/NoDebugInfoDialog.java -+++ b/frysk-gui/frysk/gui/dialogs/NoDebugInfoDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/dialogs/QueryDialog.java b/frysk-gui/frysk/gui/dialogs/QueryDialog.java -index 7091709..10309bc 100644 ---- a/frysk-gui/frysk/gui/dialogs/QueryDialog.java -+++ b/frysk-gui/frysk/gui/dialogs/QueryDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/dialogs/WarnDialog.java b/frysk-gui/frysk/gui/dialogs/WarnDialog.java -index 4d16e77..da6121b 100644 ---- a/frysk-gui/frysk/gui/dialogs/WarnDialog.java -+++ b/frysk-gui/frysk/gui/dialogs/WarnDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/disassembler/DisassemblyFormatDialog.java b/frysk-gui/frysk/gui/disassembler/DisassemblyFormatDialog.java -index 33f9b2a..c036028 100644 ---- a/frysk-gui/frysk/gui/disassembler/DisassemblyFormatDialog.java -+++ b/frysk-gui/frysk/gui/disassembler/DisassemblyFormatDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/disassembler/DisassemblyWindow.java b/frysk-gui/frysk/gui/disassembler/DisassemblyWindow.java -index 0f13e94..f36b554 100644 ---- a/frysk-gui/frysk/gui/disassembler/DisassemblyWindow.java -+++ b/frysk-gui/frysk/gui/disassembler/DisassemblyWindow.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/disassembler/DisassemblyWindowFactory.java b/frysk-gui/frysk/gui/disassembler/DisassemblyWindowFactory.java -index c6ad64c..a049062 100644 ---- a/frysk-gui/frysk/gui/disassembler/DisassemblyWindowFactory.java -+++ b/frysk-gui/frysk/gui/disassembler/DisassemblyWindowFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/druid/CreateFryskSessionDruid.java b/frysk-gui/frysk/gui/druid/CreateFryskSessionDruid.java -index a30b6eb..81834fa 100644 ---- a/frysk-gui/frysk/gui/druid/CreateFryskSessionDruid.java -+++ b/frysk-gui/frysk/gui/druid/CreateFryskSessionDruid.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/memory/MemoryFormatDialog.java b/frysk-gui/frysk/gui/memory/MemoryFormatDialog.java -index 8be22b2..0ac8932 100644 ---- a/frysk-gui/frysk/gui/memory/MemoryFormatDialog.java -+++ b/frysk-gui/frysk/gui/memory/MemoryFormatDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/memory/MemoryWindow.java b/frysk-gui/frysk/gui/memory/MemoryWindow.java -index 4f40806..cff6268 100644 ---- a/frysk-gui/frysk/gui/memory/MemoryWindow.java -+++ b/frysk-gui/frysk/gui/memory/MemoryWindow.java -@@ -13,8 +13,7 @@ - //General Public License for more details. - // - //You should have received a copy of the GNU General Public License --//along with FRYSK; if not, write to the Free Software Foundation, --//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+//along with FRYSK. If not, see . - // - //In addition, as a special exception, Red Hat, Inc. gives You the - //additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/memory/MemoryWindowFactory.java b/frysk-gui/frysk/gui/memory/MemoryWindowFactory.java -index 496dfd2..b8e115a 100644 ---- a/frysk-gui/frysk/gui/memory/MemoryWindowFactory.java -+++ b/frysk-gui/frysk/gui/memory/MemoryWindowFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/AboutWindow.java b/frysk-gui/frysk/gui/monitor/AboutWindow.java -index fd6cef2..9a4752c 100644 ---- a/frysk-gui/frysk/gui/monitor/AboutWindow.java -+++ b/frysk-gui/frysk/gui/monitor/AboutWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ActionPool.java b/frysk-gui/frysk/gui/monitor/ActionPool.java -index a6019b3..76c6746 100644 ---- a/frysk-gui/frysk/gui/monitor/ActionPool.java -+++ b/frysk-gui/frysk/gui/monitor/ActionPool.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ActionRow.java b/frysk-gui/frysk/gui/monitor/ActionRow.java -index 0cae42f..210e6b2 100644 ---- a/frysk-gui/frysk/gui/monitor/ActionRow.java -+++ b/frysk-gui/frysk/gui/monitor/ActionRow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ActionsTable.java b/frysk-gui/frysk/gui/monitor/ActionsTable.java -index 8500f62..fe77411 100644 ---- a/frysk-gui/frysk/gui/monitor/ActionsTable.java -+++ b/frysk-gui/frysk/gui/monitor/ActionsTable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ActionsWidget.java b/frysk-gui/frysk/gui/monitor/ActionsWidget.java -index 420412a..d16ab8e 100644 ---- a/frysk-gui/frysk/gui/monitor/ActionsWidget.java -+++ b/frysk-gui/frysk/gui/monitor/ActionsWidget.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/CheckedListView.java b/frysk-gui/frysk/gui/monitor/CheckedListView.java -index 29ab55c..98a4b9f 100644 ---- a/frysk-gui/frysk/gui/monitor/CheckedListView.java -+++ b/frysk-gui/frysk/gui/monitor/CheckedListView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/Combo.java b/frysk-gui/frysk/gui/monitor/Combo.java -index 3b6b0b0..86f00ae 100644 ---- a/frysk-gui/frysk/gui/monitor/Combo.java -+++ b/frysk-gui/frysk/gui/monitor/Combo.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/CompletingEntry.java b/frysk-gui/frysk/gui/monitor/CompletingEntry.java -index 37cb3f6..40b3774 100644 ---- a/frysk-gui/frysk/gui/monitor/CompletingEntry.java -+++ b/frysk-gui/frysk/gui/monitor/CompletingEntry.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ConsoleWidget.java b/frysk-gui/frysk/gui/monitor/ConsoleWidget.java -index 30ab1a2..6127656 100644 ---- a/frysk-gui/frysk/gui/monitor/ConsoleWidget.java -+++ b/frysk-gui/frysk/gui/monitor/ConsoleWidget.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ConsoleWindow.java b/frysk-gui/frysk/gui/monitor/ConsoleWindow.java -index 3414397..3c30ef0 100644 ---- a/frysk-gui/frysk/gui/monitor/ConsoleWindow.java -+++ b/frysk-gui/frysk/gui/monitor/ConsoleWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/CoreDebugLogViewer.java b/frysk-gui/frysk/gui/monitor/CoreDebugLogViewer.java -index 479ddbc..c4c9db3 100644 ---- a/frysk-gui/frysk/gui/monitor/CoreDebugLogViewer.java -+++ b/frysk-gui/frysk/gui/monitor/CoreDebugLogViewer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/DetailedObserverTreeView.java b/frysk-gui/frysk/gui/monitor/DetailedObserverTreeView.java -index 8ad93db..d6bd0ac 100644 ---- a/frysk-gui/frysk/gui/monitor/DetailedObserverTreeView.java -+++ b/frysk-gui/frysk/gui/monitor/DetailedObserverTreeView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/DynamicWidget.java b/frysk-gui/frysk/gui/monitor/DynamicWidget.java -index 7e58926..dd3e1a4 100644 ---- a/frysk-gui/frysk/gui/monitor/DynamicWidget.java -+++ b/frysk-gui/frysk/gui/monitor/DynamicWidget.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/EditObserverDialog.java b/frysk-gui/frysk/gui/monitor/EditObserverDialog.java -index 40fe9a9..8b27114 100644 ---- a/frysk-gui/frysk/gui/monitor/EditObserverDialog.java -+++ b/frysk-gui/frysk/gui/monitor/EditObserverDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/EventFormatter.java b/frysk-gui/frysk/gui/monitor/EventFormatter.java -index ab13721..317acee 100644 ---- a/frysk-gui/frysk/gui/monitor/EventFormatter.java -+++ b/frysk-gui/frysk/gui/monitor/EventFormatter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/EventLogger.java b/frysk-gui/frysk/gui/monitor/EventLogger.java -index 8ca09cb..9051def 100644 ---- a/frysk-gui/frysk/gui/monitor/EventLogger.java -+++ b/frysk-gui/frysk/gui/monitor/EventLogger.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/FilterRow.java b/frysk-gui/frysk/gui/monitor/FilterRow.java -index 94ac475..ef526b0 100644 ---- a/frysk-gui/frysk/gui/monitor/FilterRow.java -+++ b/frysk-gui/frysk/gui/monitor/FilterRow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/FiltersTable.java b/frysk-gui/frysk/gui/monitor/FiltersTable.java -index 3d434f1..416961f 100644 ---- a/frysk-gui/frysk/gui/monitor/FiltersTable.java -+++ b/frysk-gui/frysk/gui/monitor/FiltersTable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/FryskErrorFileHandler.java b/frysk-gui/frysk/gui/monitor/FryskErrorFileHandler.java -index 856bee6..8053124 100644 ---- a/frysk-gui/frysk/gui/monitor/FryskErrorFileHandler.java -+++ b/frysk-gui/frysk/gui/monitor/FryskErrorFileHandler.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/GuiCoreObjectWrapper.java b/frysk-gui/frysk/gui/monitor/GuiCoreObjectWrapper.java -index 6b7c786..71ba5a7 100644 ---- a/frysk-gui/frysk/gui/monitor/GuiCoreObjectWrapper.java -+++ b/frysk-gui/frysk/gui/monitor/GuiCoreObjectWrapper.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/GuiObject.java b/frysk-gui/frysk/gui/monitor/GuiObject.java -index a6c6f1f..1421817 100644 ---- a/frysk-gui/frysk/gui/monitor/GuiObject.java -+++ b/frysk-gui/frysk/gui/monitor/GuiObject.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/GuiObservable.java b/frysk-gui/frysk/gui/monitor/GuiObservable.java -index 44417ec..0d72e8a 100644 ---- a/frysk-gui/frysk/gui/monitor/GuiObservable.java -+++ b/frysk-gui/frysk/gui/monitor/GuiObservable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/GuiProc.java b/frysk-gui/frysk/gui/monitor/GuiProc.java -index 6c54c2a..e1f61fd 100644 ---- a/frysk-gui/frysk/gui/monitor/GuiProc.java -+++ b/frysk-gui/frysk/gui/monitor/GuiProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/GuiTask.java b/frysk-gui/frysk/gui/monitor/GuiTask.java -index 9d04533..3b463f1 100644 ---- a/frysk-gui/frysk/gui/monitor/GuiTask.java -+++ b/frysk-gui/frysk/gui/monitor/GuiTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/LiaisonItem.java b/frysk-gui/frysk/gui/monitor/LiaisonItem.java -index d8827c5..a5bc643 100644 ---- a/frysk-gui/frysk/gui/monitor/LiaisonItem.java -+++ b/frysk-gui/frysk/gui/monitor/LiaisonItem.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/LiaisonPoint.java b/frysk-gui/frysk/gui/monitor/LiaisonPoint.java -index fd6304c..0a6d410 100644 ---- a/frysk-gui/frysk/gui/monitor/LiaisonPoint.java -+++ b/frysk-gui/frysk/gui/monitor/LiaisonPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ListView.java b/frysk-gui/frysk/gui/monitor/ListView.java -index d53ec8d..11aecc6 100644 ---- a/frysk-gui/frysk/gui/monitor/ListView.java -+++ b/frysk-gui/frysk/gui/monitor/ListView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/LogWidget.java b/frysk-gui/frysk/gui/monitor/LogWidget.java -index b879dac..b6a6869 100644 ---- a/frysk-gui/frysk/gui/monitor/LogWidget.java -+++ b/frysk-gui/frysk/gui/monitor/LogWidget.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/MainWindow.java b/frysk-gui/frysk/gui/monitor/MainWindow.java -index b29521a..95d6d25 100644 ---- a/frysk-gui/frysk/gui/monitor/MainWindow.java -+++ b/frysk-gui/frysk/gui/monitor/MainWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/MainWindowStatusBar.java b/frysk-gui/frysk/gui/monitor/MainWindowStatusBar.java -index 606cb5f..41f3661 100644 ---- a/frysk-gui/frysk/gui/monitor/MainWindowStatusBar.java -+++ b/frysk-gui/frysk/gui/monitor/MainWindowStatusBar.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/MenuBar.java b/frysk-gui/frysk/gui/monitor/MenuBar.java -index 59686be..13c6f2c 100644 ---- a/frysk-gui/frysk/gui/monitor/MenuBar.java -+++ b/frysk-gui/frysk/gui/monitor/MenuBar.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/NotifyingLabel.java b/frysk-gui/frysk/gui/monitor/NotifyingLabel.java -index 76de22b..ce6fdd2 100644 ---- a/frysk-gui/frysk/gui/monitor/NotifyingLabel.java -+++ b/frysk-gui/frysk/gui/monitor/NotifyingLabel.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ObjectFactory.java b/frysk-gui/frysk/gui/monitor/ObjectFactory.java -index 7506f38..c218ae3 100644 ---- a/frysk-gui/frysk/gui/monitor/ObjectFactory.java -+++ b/frysk-gui/frysk/gui/monitor/ObjectFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ObservableLinkedList.java b/frysk-gui/frysk/gui/monitor/ObservableLinkedList.java -index 7afd443..74ddcc9 100644 ---- a/frysk-gui/frysk/gui/monitor/ObservableLinkedList.java -+++ b/frysk-gui/frysk/gui/monitor/ObservableLinkedList.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ObserverItemRow.java b/frysk-gui/frysk/gui/monitor/ObserverItemRow.java -index fa6d570..ea3132d 100644 ---- a/frysk-gui/frysk/gui/monitor/ObserverItemRow.java -+++ b/frysk-gui/frysk/gui/monitor/ObserverItemRow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ObserverItemsTable.java b/frysk-gui/frysk/gui/monitor/ObserverItemsTable.java -index fef9e54..e0b5023 100644 ---- a/frysk-gui/frysk/gui/monitor/ObserverItemsTable.java -+++ b/frysk-gui/frysk/gui/monitor/ObserverItemsTable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ObserversDialog.java b/frysk-gui/frysk/gui/monitor/ObserversDialog.java -index 20c63e6..97e0afa 100644 ---- a/frysk-gui/frysk/gui/monitor/ObserversDialog.java -+++ b/frysk-gui/frysk/gui/monitor/ObserversDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/PIDColumnDialog.java b/frysk-gui/frysk/gui/monitor/PIDColumnDialog.java -index 59a73d2..a65a9b1 100644 ---- a/frysk-gui/frysk/gui/monitor/PIDColumnDialog.java -+++ b/frysk-gui/frysk/gui/monitor/PIDColumnDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/PIDMenu.java b/frysk-gui/frysk/gui/monitor/PIDMenu.java -index 4cec7e6..5044061 100644 ---- a/frysk-gui/frysk/gui/monitor/PIDMenu.java -+++ b/frysk-gui/frysk/gui/monitor/PIDMenu.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/PreferenceWidget.java b/frysk-gui/frysk/gui/monitor/PreferenceWidget.java -index ace5045..6b664e2 100644 ---- a/frysk-gui/frysk/gui/monitor/PreferenceWidget.java -+++ b/frysk-gui/frysk/gui/monitor/PreferenceWidget.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/PreferencesWindow.java b/frysk-gui/frysk/gui/monitor/PreferencesWindow.java -index 95cd774..0491980 100644 ---- a/frysk-gui/frysk/gui/monitor/PreferencesWindow.java -+++ b/frysk-gui/frysk/gui/monitor/PreferencesWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ProcWiseDataModel.java b/frysk-gui/frysk/gui/monitor/ProcWiseDataModel.java -index 383cae2..22d12fe 100644 ---- a/frysk-gui/frysk/gui/monitor/ProcWiseDataModel.java -+++ b/frysk-gui/frysk/gui/monitor/ProcWiseDataModel.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/ProcWiseTreeView.java b/frysk-gui/frysk/gui/monitor/ProcWiseTreeView.java -index 6ddc85c..d77a7ce 100644 ---- a/frysk-gui/frysk/gui/monitor/ProcWiseTreeView.java -+++ b/frysk-gui/frysk/gui/monitor/ProcWiseTreeView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/Saveable.java b/frysk-gui/frysk/gui/monitor/Saveable.java -index 02d664b..eab2c71 100644 ---- a/frysk-gui/frysk/gui/monitor/Saveable.java -+++ b/frysk-gui/frysk/gui/monitor/Saveable.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/SaveableXXX.java b/frysk-gui/frysk/gui/monitor/SaveableXXX.java -index 9481035..b6d176a 100644 ---- a/frysk-gui/frysk/gui/monitor/SaveableXXX.java -+++ b/frysk-gui/frysk/gui/monitor/SaveableXXX.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/SimpleComboBox.java b/frysk-gui/frysk/gui/monitor/SimpleComboBox.java -index d965696..22270eb 100644 ---- a/frysk-gui/frysk/gui/monitor/SimpleComboBox.java -+++ b/frysk-gui/frysk/gui/monitor/SimpleComboBox.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/SplashScreenWindow.java b/frysk-gui/frysk/gui/monitor/SplashScreenWindow.java -index 41893d0..4fefcbe 100644 ---- a/frysk-gui/frysk/gui/monitor/SplashScreenWindow.java -+++ b/frysk-gui/frysk/gui/monitor/SplashScreenWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/SummaryWidget.java b/frysk-gui/frysk/gui/monitor/SummaryWidget.java -index 33d477f..c55d028 100644 ---- a/frysk-gui/frysk/gui/monitor/SummaryWidget.java -+++ b/frysk-gui/frysk/gui/monitor/SummaryWidget.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/TearOffNotebook.java b/frysk-gui/frysk/gui/monitor/TearOffNotebook.java -index 72f78cb..bbabcfe 100644 ---- a/frysk-gui/frysk/gui/monitor/TearOffNotebook.java -+++ b/frysk-gui/frysk/gui/monitor/TearOffNotebook.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/TrayIcon.java b/frysk-gui/frysk/gui/monitor/TrayIcon.java -index 59e68b4..2a13b0d 100644 ---- a/frysk-gui/frysk/gui/monitor/TrayIcon.java -+++ b/frysk-gui/frysk/gui/monitor/TrayIcon.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/UniqueHashMap.java b/frysk-gui/frysk/gui/monitor/UniqueHashMap.java -index 2b1b6c69..8896e9c 100644 ---- a/frysk-gui/frysk/gui/monitor/UniqueHashMap.java -+++ b/frysk-gui/frysk/gui/monitor/UniqueHashMap.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/WindowManager.java b/frysk-gui/frysk/gui/monitor/WindowManager.java -index 404d9af..fac602e 100644 ---- a/frysk-gui/frysk/gui/monitor/WindowManager.java -+++ b/frysk-gui/frysk/gui/monitor/WindowManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/Action.java b/frysk-gui/frysk/gui/monitor/actions/Action.java -index 216ff21..1013abb 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/Action.java -+++ b/frysk-gui/frysk/gui/monitor/actions/Action.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/ActionManager.java b/frysk-gui/frysk/gui/monitor/actions/ActionManager.java -index 0ba516f..e17ece9 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/ActionManager.java -+++ b/frysk-gui/frysk/gui/monitor/actions/ActionManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/ActionPoint.java b/frysk-gui/frysk/gui/monitor/actions/ActionPoint.java -index e4c3e0b..da7253c 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/ActionPoint.java -+++ b/frysk-gui/frysk/gui/monitor/actions/ActionPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/AddTaskObserverAction.java b/frysk-gui/frysk/gui/monitor/actions/AddTaskObserverAction.java -index dbc83b3..8452a76 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/AddTaskObserverAction.java -+++ b/frysk-gui/frysk/gui/monitor/actions/AddTaskObserverAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/CaptureStackTraceAction.java b/frysk-gui/frysk/gui/monitor/actions/CaptureStackTraceAction.java -index 5fa507e..fa99140 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/CaptureStackTraceAction.java -+++ b/frysk-gui/frysk/gui/monitor/actions/CaptureStackTraceAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/GenericAction.java b/frysk-gui/frysk/gui/monitor/actions/GenericAction.java -index fe11ab7..b5b740a 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/GenericAction.java -+++ b/frysk-gui/frysk/gui/monitor/actions/GenericAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/GenericActionPoint.java b/frysk-gui/frysk/gui/monitor/actions/GenericActionPoint.java -index 9709742..247c323 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/GenericActionPoint.java -+++ b/frysk-gui/frysk/gui/monitor/actions/GenericActionPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/LogAction.java b/frysk-gui/frysk/gui/monitor/actions/LogAction.java -index 8d6190b..54b2ee8 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/LogAction.java -+++ b/frysk-gui/frysk/gui/monitor/actions/LogAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/NotifyUserAction.java b/frysk-gui/frysk/gui/monitor/actions/NotifyUserAction.java -index 60a35da..bf9c3f5 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/NotifyUserAction.java -+++ b/frysk-gui/frysk/gui/monitor/actions/NotifyUserAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/PrintProc.java b/frysk-gui/frysk/gui/monitor/actions/PrintProc.java -index 540e7a7..0717f33 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/PrintProc.java -+++ b/frysk-gui/frysk/gui/monitor/actions/PrintProc.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/PrintTask.java b/frysk-gui/frysk/gui/monitor/actions/PrintTask.java -index d20c187..6d2109f 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/PrintTask.java -+++ b/frysk-gui/frysk/gui/monitor/actions/PrintTask.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/PrintTaskBacktrace.java b/frysk-gui/frysk/gui/monitor/actions/PrintTaskBacktrace.java -index 176f908..a473fb5 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/PrintTaskBacktrace.java -+++ b/frysk-gui/frysk/gui/monitor/actions/PrintTaskBacktrace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/ProcAction.java b/frysk-gui/frysk/gui/monitor/actions/ProcAction.java -index cf3292f..6ee1f60 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/ProcAction.java -+++ b/frysk-gui/frysk/gui/monitor/actions/ProcAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/Resume.java b/frysk-gui/frysk/gui/monitor/actions/Resume.java -index 1c1afb8..306fbaf 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/Resume.java -+++ b/frysk-gui/frysk/gui/monitor/actions/Resume.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/RunExternal.java b/frysk-gui/frysk/gui/monitor/actions/RunExternal.java -index f882345..f78efdf 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/RunExternal.java -+++ b/frysk-gui/frysk/gui/monitor/actions/RunExternal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/ShowMemWin.java b/frysk-gui/frysk/gui/monitor/actions/ShowMemWin.java -index 45d6a1c..a416940 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/ShowMemWin.java -+++ b/frysk-gui/frysk/gui/monitor/actions/ShowMemWin.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/ShowRegWin.java b/frysk-gui/frysk/gui/monitor/actions/ShowRegWin.java -index 2f26036..eef29ba 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/ShowRegWin.java -+++ b/frysk-gui/frysk/gui/monitor/actions/ShowRegWin.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/ShowSourceWin.java b/frysk-gui/frysk/gui/monitor/actions/ShowSourceWin.java -index f26d053..fe36dd5 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/ShowSourceWin.java -+++ b/frysk-gui/frysk/gui/monitor/actions/ShowSourceWin.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/Stop.java b/frysk-gui/frysk/gui/monitor/actions/Stop.java -index c421a79..4b7e01e 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/Stop.java -+++ b/frysk-gui/frysk/gui/monitor/actions/Stop.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/TaskAction.java b/frysk-gui/frysk/gui/monitor/actions/TaskAction.java -index 8cd7cc6..e34b4f3 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/TaskAction.java -+++ b/frysk-gui/frysk/gui/monitor/actions/TaskAction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/actions/TaskActionPoint.java b/frysk-gui/frysk/gui/monitor/actions/TaskActionPoint.java -index ada921c..ee2ec49 100644 ---- a/frysk-gui/frysk/gui/monitor/actions/TaskActionPoint.java -+++ b/frysk-gui/frysk/gui/monitor/actions/TaskActionPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugDataModel.java b/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugDataModel.java -index 8a5182e..2d4b863 100644 ---- a/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugDataModel.java -+++ b/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugDataModel.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugHandler.java b/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugHandler.java -index 9ea230a..60393b7 100644 ---- a/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugHandler.java -+++ b/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugHandler.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugLogRecord.java b/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugLogRecord.java -index 8205bf7..be54597 100644 ---- a/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugLogRecord.java -+++ b/frysk-gui/frysk/gui/monitor/datamodels/CoreDebugLogRecord.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/datamodels/DataModel.java b/frysk-gui/frysk/gui/monitor/datamodels/DataModel.java -index f286465..6656468 100644 ---- a/frysk-gui/frysk/gui/monitor/datamodels/DataModel.java -+++ b/frysk-gui/frysk/gui/monitor/datamodels/DataModel.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/datamodels/DataModelManager.java b/frysk-gui/frysk/gui/monitor/datamodels/DataModelManager.java -index 412b667..87db968 100644 ---- a/frysk-gui/frysk/gui/monitor/datamodels/DataModelManager.java -+++ b/frysk-gui/frysk/gui/monitor/datamodels/DataModelManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/Box.java b/frysk-gui/frysk/gui/monitor/eventviewer/Box.java -index 3ff4d61..d98d809 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/Box.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/Box.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/Event.java b/frysk-gui/frysk/gui/monitor/eventviewer/Event.java -index 824364c..f4867b9 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/Event.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/Event.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/EventManager.java b/frysk-gui/frysk/gui/monitor/eventviewer/EventManager.java -index c22eb6c..4c01e97 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/EventManager.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/EventManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/EventViewer2.java b/frysk-gui/frysk/gui/monitor/eventviewer/EventViewer2.java -index 6cd9ad0..d6c9aed 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/EventViewer2.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/EventViewer2.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/EventViewerWidget.java b/frysk-gui/frysk/gui/monitor/eventviewer/EventViewerWidget.java -index 6148732..7d9f2ac 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/EventViewerWidget.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/EventViewerWidget.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/EventViewerWidgetList.java b/frysk-gui/frysk/gui/monitor/eventviewer/EventViewerWidgetList.java -index 647ed01..c959123 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/EventViewerWidgetList.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/EventViewerWidgetList.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/ProcBox.java b/frysk-gui/frysk/gui/monitor/eventviewer/ProcBox.java -index 816eb17..e4c49b2 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/ProcBox.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/ProcBox.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/ProcTimeLine.java b/frysk-gui/frysk/gui/monitor/eventviewer/ProcTimeLine.java -index 5918bbf..17032f7 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/ProcTimeLine.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/ProcTimeLine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/TaskTimeLine.java b/frysk-gui/frysk/gui/monitor/eventviewer/TaskTimeLine.java -index 77b472c..20bc4d1 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/TaskTimeLine.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/TaskTimeLine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/TimeLine.java b/frysk-gui/frysk/gui/monitor/eventviewer/TimeLine.java -index 52079ad..4cece70 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/TimeLine.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/TimeLine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineEndEvent.java b/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineEndEvent.java -index 5cb806b..d210cb3 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineEndEvent.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineEndEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineSelectionManager.java b/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineSelectionManager.java -index 1a0898c..f2dc33e 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineSelectionManager.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineSelectionManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineStartEvent.java b/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineStartEvent.java -index 5327db1..5575829 100644 ---- a/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineStartEvent.java -+++ b/frysk-gui/frysk/gui/monitor/eventviewer/TimeLineStartEvent.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/ComboFactory.java b/frysk-gui/frysk/gui/monitor/filters/ComboFactory.java -index 454463b..a941443 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/ComboFactory.java -+++ b/frysk-gui/frysk/gui/monitor/filters/ComboFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/Filter.java b/frysk-gui/frysk/gui/monitor/filters/Filter.java -index 2047e16..0a18dc8 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/Filter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/Filter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/FilterManager.java b/frysk-gui/frysk/gui/monitor/filters/FilterManager.java -index 21493dc..c9dd274 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/FilterManager.java -+++ b/frysk-gui/frysk/gui/monitor/filters/FilterManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/FilterPoint.java b/frysk-gui/frysk/gui/monitor/filters/FilterPoint.java -index 7e4fc45..a25465e 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/FilterPoint.java -+++ b/frysk-gui/frysk/gui/monitor/filters/FilterPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/IntFilter.java b/frysk-gui/frysk/gui/monitor/filters/IntFilter.java -index ffc4774..0a5278f 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/IntFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/IntFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/IntFilterPoint.java b/frysk-gui/frysk/gui/monitor/filters/IntFilterPoint.java -index cab47c8..4056244 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/IntFilterPoint.java -+++ b/frysk-gui/frysk/gui/monitor/filters/IntFilterPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/ProcCommandLineFilter.java b/frysk-gui/frysk/gui/monitor/filters/ProcCommandLineFilter.java -index 573dc0b..74cb45f 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/ProcCommandLineFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/ProcCommandLineFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/ProcFilter.java b/frysk-gui/frysk/gui/monitor/filters/ProcFilter.java -index 62b025e..2e2c35b 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/ProcFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/ProcFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/ProcFilterPoint.java b/frysk-gui/frysk/gui/monitor/filters/ProcFilterPoint.java -index 65afb70..9f0507c 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/ProcFilterPoint.java -+++ b/frysk-gui/frysk/gui/monitor/filters/ProcFilterPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/ProcNameFilter.java b/frysk-gui/frysk/gui/monitor/filters/ProcNameFilter.java -index 39e79de..2a16f4a 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/ProcNameFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/ProcNameFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/ProcParentNameFilter.java b/frysk-gui/frysk/gui/monitor/filters/ProcParentNameFilter.java -index 23257fa..d86ef5c 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/ProcParentNameFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/ProcParentNameFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/ProcPathFilter.java b/frysk-gui/frysk/gui/monitor/filters/ProcPathFilter.java -index af533da..8ab06cd 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/ProcPathFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/ProcPathFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/TaskFilter.java b/frysk-gui/frysk/gui/monitor/filters/TaskFilter.java -index 0246404..36097bf 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/TaskFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/TaskFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/TaskFilterPoint.java b/frysk-gui/frysk/gui/monitor/filters/TaskFilterPoint.java -index 6f1cb7c..afc1856 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/TaskFilterPoint.java -+++ b/frysk-gui/frysk/gui/monitor/filters/TaskFilterPoint.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/TaskProcCommandLineFilter.java b/frysk-gui/frysk/gui/monitor/filters/TaskProcCommandLineFilter.java -index b456b78..49a4aea 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/TaskProcCommandLineFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/TaskProcCommandLineFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/TaskProcNameFilter.java b/frysk-gui/frysk/gui/monitor/filters/TaskProcNameFilter.java -index b53b760..3b49be8 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/TaskProcNameFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/TaskProcNameFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/TaskProcParentNameFilter.java b/frysk-gui/frysk/gui/monitor/filters/TaskProcParentNameFilter.java -index 6dfa3fb..77d62ce 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/TaskProcParentNameFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/TaskProcParentNameFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/filters/TaskProcPathFilter.java b/frysk-gui/frysk/gui/monitor/filters/TaskProcPathFilter.java -index 4857480..39b4843 100644 ---- a/frysk-gui/frysk/gui/monitor/filters/TaskProcPathFilter.java -+++ b/frysk-gui/frysk/gui/monitor/filters/TaskProcPathFilter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/ExitNotificationObserver.java b/frysk-gui/frysk/gui/monitor/observers/ExitNotificationObserver.java -index 76a65f1..03e4255 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/ExitNotificationObserver.java -+++ b/frysk-gui/frysk/gui/monitor/observers/ExitNotificationObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/ObserverManager.java b/frysk-gui/frysk/gui/monitor/observers/ObserverManager.java -index 459df02..a2315fa 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/ObserverManager.java -+++ b/frysk-gui/frysk/gui/monitor/observers/ObserverManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/ObserverRoot.java b/frysk-gui/frysk/gui/monitor/observers/ObserverRoot.java -index b8a3539..43a86aa 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/ObserverRoot.java -+++ b/frysk-gui/frysk/gui/monitor/observers/ObserverRoot.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/ProgramObserver.java b/frysk-gui/frysk/gui/monitor/observers/ProgramObserver.java -index 29a6f4b..0bffff8 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/ProgramObserver.java -+++ b/frysk-gui/frysk/gui/monitor/observers/ProgramObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/SysCallUtilyInfo.java b/frysk-gui/frysk/gui/monitor/observers/SysCallUtilyInfo.java -index fd6441b..9680fbb 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/SysCallUtilyInfo.java -+++ b/frysk-gui/frysk/gui/monitor/observers/SysCallUtilyInfo.java -@@ -11,8 +11,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/TaskCloneObserver.java b/frysk-gui/frysk/gui/monitor/observers/TaskCloneObserver.java -index 904e0de..c0c3ce5 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/TaskCloneObserver.java -+++ b/frysk-gui/frysk/gui/monitor/observers/TaskCloneObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/TaskExecObserver.java b/frysk-gui/frysk/gui/monitor/observers/TaskExecObserver.java -index 75f171d..e4c2253 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/TaskExecObserver.java -+++ b/frysk-gui/frysk/gui/monitor/observers/TaskExecObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/TaskForkedObserver.java b/frysk-gui/frysk/gui/monitor/observers/TaskForkedObserver.java -index 57cc46d..1a60157 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/TaskForkedObserver.java -+++ b/frysk-gui/frysk/gui/monitor/observers/TaskForkedObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/TaskObserverRoot.java b/frysk-gui/frysk/gui/monitor/observers/TaskObserverRoot.java -index 255a9a4..92c0962 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/TaskObserverRoot.java -+++ b/frysk-gui/frysk/gui/monitor/observers/TaskObserverRoot.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/TaskSignaledObserver.java b/frysk-gui/frysk/gui/monitor/observers/TaskSignaledObserver.java -index f402abd..21b448a 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/TaskSignaledObserver.java -+++ b/frysk-gui/frysk/gui/monitor/observers/TaskSignaledObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/TaskSyscallObserver.java b/frysk-gui/frysk/gui/monitor/observers/TaskSyscallObserver.java -index f36b4a2..d63e8ed 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/TaskSyscallObserver.java -+++ b/frysk-gui/frysk/gui/monitor/observers/TaskSyscallObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/TaskTerminatingObserver.java b/frysk-gui/frysk/gui/monitor/observers/TaskTerminatingObserver.java -index 273a0fc..fc0473c 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/TaskTerminatingObserver.java -+++ b/frysk-gui/frysk/gui/monitor/observers/TaskTerminatingObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/monitor/observers/TestObserverSaveLoad.java b/frysk-gui/frysk/gui/monitor/observers/TestObserverSaveLoad.java -index 17ce014..81c29a3 100644 ---- a/frysk-gui/frysk/gui/monitor/observers/TestObserverSaveLoad.java -+++ b/frysk-gui/frysk/gui/monitor/observers/TestObserverSaveLoad.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/prefs/BooleanPreference.java b/frysk-gui/frysk/gui/prefs/BooleanPreference.java -index 6d8f54a..935afc7 100644 ---- a/frysk-gui/frysk/gui/prefs/BooleanPreference.java -+++ b/frysk-gui/frysk/gui/prefs/BooleanPreference.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/prefs/ColorPreference.java b/frysk-gui/frysk/gui/prefs/ColorPreference.java -index 646ffaa..b1e0ee1 100644 ---- a/frysk-gui/frysk/gui/prefs/ColorPreference.java -+++ b/frysk-gui/frysk/gui/prefs/ColorPreference.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/prefs/FryskPreference.java b/frysk-gui/frysk/gui/prefs/FryskPreference.java -index 4c43412..c6a7cc0 100644 ---- a/frysk-gui/frysk/gui/prefs/FryskPreference.java -+++ b/frysk-gui/frysk/gui/prefs/FryskPreference.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/prefs/IntPreference.java b/frysk-gui/frysk/gui/prefs/IntPreference.java -index 443a77f..efe6f6d 100644 ---- a/frysk-gui/frysk/gui/prefs/IntPreference.java -+++ b/frysk-gui/frysk/gui/prefs/IntPreference.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/prefs/PreferenceEditor.java b/frysk-gui/frysk/gui/prefs/PreferenceEditor.java -index d20f0a3..8915be1 100644 ---- a/frysk-gui/frysk/gui/prefs/PreferenceEditor.java -+++ b/frysk-gui/frysk/gui/prefs/PreferenceEditor.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/prefs/PreferenceGroup.java b/frysk-gui/frysk/gui/prefs/PreferenceGroup.java -index 949191a..f2159a4 100644 ---- a/frysk-gui/frysk/gui/prefs/PreferenceGroup.java -+++ b/frysk-gui/frysk/gui/prefs/PreferenceGroup.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/prefs/PreferenceManager.java b/frysk-gui/frysk/gui/prefs/PreferenceManager.java -index 267b73b..0e6d596 100644 ---- a/frysk-gui/frysk/gui/prefs/PreferenceManager.java -+++ b/frysk-gui/frysk/gui/prefs/PreferenceManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/prefs/PreferenceWindow.java b/frysk-gui/frysk/gui/prefs/PreferenceWindow.java -index 8aee193..b11b0cc 100644 ---- a/frysk-gui/frysk/gui/prefs/PreferenceWindow.java -+++ b/frysk-gui/frysk/gui/prefs/PreferenceWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/register/RegisterFormatDialog.java b/frysk-gui/frysk/gui/register/RegisterFormatDialog.java -index c01a66b..8fc2c34 100644 ---- a/frysk-gui/frysk/gui/register/RegisterFormatDialog.java -+++ b/frysk-gui/frysk/gui/register/RegisterFormatDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/register/RegisterWindow.java b/frysk-gui/frysk/gui/register/RegisterWindow.java -index 8a6553e..7125f9b 100644 ---- a/frysk-gui/frysk/gui/register/RegisterWindow.java -+++ b/frysk-gui/frysk/gui/register/RegisterWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/register/RegisterWindowFactory.java b/frysk-gui/frysk/gui/register/RegisterWindowFactory.java -index 41733c5..9bf02af 100644 ---- a/frysk-gui/frysk/gui/register/RegisterWindowFactory.java -+++ b/frysk-gui/frysk/gui/register/RegisterWindowFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/sessions/DebugProcess.java b/frysk-gui/frysk/gui/sessions/DebugProcess.java -index 1aef302..9f893ac 100644 ---- a/frysk-gui/frysk/gui/sessions/DebugProcess.java -+++ b/frysk-gui/frysk/gui/sessions/DebugProcess.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/sessions/Session.java b/frysk-gui/frysk/gui/sessions/Session.java -index eb93aa3..997507c 100644 ---- a/frysk-gui/frysk/gui/sessions/Session.java -+++ b/frysk-gui/frysk/gui/sessions/Session.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/sessions/SessionManager.java b/frysk-gui/frysk/gui/sessions/SessionManager.java -index 80df1e6..422da22 100644 ---- a/frysk-gui/frysk/gui/sessions/SessionManager.java -+++ b/frysk-gui/frysk/gui/sessions/SessionManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/sessions/WatchDescription.java b/frysk-gui/frysk/gui/sessions/WatchDescription.java -index 7e34504..cf8c6e6 100644 ---- a/frysk-gui/frysk/gui/sessions/WatchDescription.java -+++ b/frysk-gui/frysk/gui/sessions/WatchDescription.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/sessions/WatchList.java b/frysk-gui/frysk/gui/sessions/WatchList.java -index 6edb17b..adc583c 100644 ---- a/frysk-gui/frysk/gui/sessions/WatchList.java -+++ b/frysk-gui/frysk/gui/sessions/WatchList.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/sessions/WatchListListener.java b/frysk-gui/frysk/gui/sessions/WatchListListener.java -index 8634569..c931957 100644 ---- a/frysk-gui/frysk/gui/sessions/WatchListListener.java -+++ b/frysk-gui/frysk/gui/sessions/WatchListListener.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/ColorConverter.java b/frysk-gui/frysk/gui/srcwin/ColorConverter.java -index 67bae99..741787a 100644 ---- a/frysk-gui/frysk/gui/srcwin/ColorConverter.java -+++ b/frysk-gui/frysk/gui/srcwin/ColorConverter.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/CurrentStackView.java b/frysk-gui/frysk/gui/srcwin/CurrentStackView.java -index 737a1a3..ab74847 100644 ---- a/frysk-gui/frysk/gui/srcwin/CurrentStackView.java -+++ b/frysk-gui/frysk/gui/srcwin/CurrentStackView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/InlineBuffer.java b/frysk-gui/frysk/gui/srcwin/InlineBuffer.java -index fe3e338..1774866 100644 ---- a/frysk-gui/frysk/gui/srcwin/InlineBuffer.java -+++ b/frysk-gui/frysk/gui/srcwin/InlineBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/InlineSourceView.java b/frysk-gui/frysk/gui/srcwin/InlineSourceView.java -index 7661a66..b29f55c 100644 ---- a/frysk-gui/frysk/gui/srcwin/InlineSourceView.java -+++ b/frysk-gui/frysk/gui/srcwin/InlineSourceView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/MixedView.java b/frysk-gui/frysk/gui/srcwin/MixedView.java -index 745f7ac..0145490 100644 ---- a/frysk-gui/frysk/gui/srcwin/MixedView.java -+++ b/frysk-gui/frysk/gui/srcwin/MixedView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/SourceBuffer.java b/frysk-gui/frysk/gui/srcwin/SourceBuffer.java -index 5950415..93036cc 100644 ---- a/frysk-gui/frysk/gui/srcwin/SourceBuffer.java -+++ b/frysk-gui/frysk/gui/srcwin/SourceBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/SourceView.java b/frysk-gui/frysk/gui/srcwin/SourceView.java -index 1f55231..5474910 100644 ---- a/frysk-gui/frysk/gui/srcwin/SourceView.java -+++ b/frysk-gui/frysk/gui/srcwin/SourceView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/SourceWindow.java b/frysk-gui/frysk/gui/srcwin/SourceWindow.java -index 06a7a9e..d52f045 100644 ---- a/frysk-gui/frysk/gui/srcwin/SourceWindow.java -+++ b/frysk-gui/frysk/gui/srcwin/SourceWindow.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/SourceWindowFactory.java b/frysk-gui/frysk/gui/srcwin/SourceWindowFactory.java -index 652ee6c..7a00000 100644 ---- a/frysk-gui/frysk/gui/srcwin/SourceWindowFactory.java -+++ b/frysk-gui/frysk/gui/srcwin/SourceWindowFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/StepDialog.java b/frysk-gui/frysk/gui/srcwin/StepDialog.java -index 3f3efd4..fbe3bb0 100644 ---- a/frysk-gui/frysk/gui/srcwin/StepDialog.java -+++ b/frysk-gui/frysk/gui/srcwin/StepDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/ThreadSelectionDialog.java b/frysk-gui/frysk/gui/srcwin/ThreadSelectionDialog.java -index c7d9ba8..d4aac27 100644 ---- a/frysk-gui/frysk/gui/srcwin/ThreadSelectionDialog.java -+++ b/frysk-gui/frysk/gui/srcwin/ThreadSelectionDialog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/VariableWatchView.java b/frysk-gui/frysk/gui/srcwin/VariableWatchView.java -index 0a8a551..336d1fd 100644 ---- a/frysk-gui/frysk/gui/srcwin/VariableWatchView.java -+++ b/frysk-gui/frysk/gui/srcwin/VariableWatchView.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/View.java b/frysk-gui/frysk/gui/srcwin/View.java -index 4fcd56d..51934a1 100644 ---- a/frysk-gui/frysk/gui/srcwin/View.java -+++ b/frysk-gui/frysk/gui/srcwin/View.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/prefs/SourceWinPreferenceGroup.java b/frysk-gui/frysk/gui/srcwin/prefs/SourceWinPreferenceGroup.java -index 147240a..69c6a30 100644 ---- a/frysk-gui/frysk/gui/srcwin/prefs/SourceWinPreferenceGroup.java -+++ b/frysk-gui/frysk/gui/srcwin/prefs/SourceWinPreferenceGroup.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/prefs/SyntaxPreference.java b/frysk-gui/frysk/gui/srcwin/prefs/SyntaxPreference.java -index d628d13..9d928a0 100644 ---- a/frysk-gui/frysk/gui/srcwin/prefs/SyntaxPreference.java -+++ b/frysk-gui/frysk/gui/srcwin/prefs/SyntaxPreference.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/prefs/SyntaxPreferenceGroup.java b/frysk-gui/frysk/gui/srcwin/prefs/SyntaxPreferenceGroup.java -index 782fc40..00ed8b5 100644 ---- a/frysk-gui/frysk/gui/srcwin/prefs/SyntaxPreferenceGroup.java -+++ b/frysk-gui/frysk/gui/srcwin/prefs/SyntaxPreferenceGroup.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/tags/Tag.java b/frysk-gui/frysk/gui/srcwin/tags/Tag.java -index b5b0ccb..916320a 100644 ---- a/frysk-gui/frysk/gui/srcwin/tags/Tag.java -+++ b/frysk-gui/frysk/gui/srcwin/tags/Tag.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/tags/Tagset.java b/frysk-gui/frysk/gui/srcwin/tags/Tagset.java -index 94fd9e5..db51a2b 100644 ---- a/frysk-gui/frysk/gui/srcwin/tags/Tagset.java -+++ b/frysk-gui/frysk/gui/srcwin/tags/Tagset.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/srcwin/tags/TagsetManager.java b/frysk-gui/frysk/gui/srcwin/tags/TagsetManager.java -index 9445bc7..6a10b9b 100644 ---- a/frysk-gui/frysk/gui/srcwin/tags/TagsetManager.java -+++ b/frysk-gui/frysk/gui/srcwin/tags/TagsetManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/terminal/TermWindow.java b/frysk-gui/frysk/gui/terminal/TermWindow.java -index 59ec44f..c6bcad4 100644 ---- a/frysk-gui/frysk/gui/terminal/TermWindow.java -+++ b/frysk-gui/frysk/gui/terminal/TermWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/GuiTestCase.java b/frysk-gui/frysk/gui/test/GuiTestCase.java -index 12b1ff9..b222de0 100644 ---- a/frysk-gui/frysk/gui/test/GuiTestCase.java -+++ b/frysk-gui/frysk/gui/test/GuiTestCase.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/StressTestJGMemory.java b/frysk-gui/frysk/gui/test/StressTestJGMemory.java -index da925c5..d994d87 100644 ---- a/frysk-gui/frysk/gui/test/StressTestJGMemory.java -+++ b/frysk-gui/frysk/gui/test/StressTestJGMemory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/TestActionManager.java b/frysk-gui/frysk/gui/test/TestActionManager.java -index aaad333..4577650 100644 ---- a/frysk-gui/frysk/gui/test/TestActionManager.java -+++ b/frysk-gui/frysk/gui/test/TestActionManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/TestFilterManager.java b/frysk-gui/frysk/gui/test/TestFilterManager.java -index 376dfaf..2e89650 100644 ---- a/frysk-gui/frysk/gui/test/TestFilterManager.java -+++ b/frysk-gui/frysk/gui/test/TestFilterManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/TestIconManager.java b/frysk-gui/frysk/gui/test/TestIconManager.java -index 220d32a..45aa79c 100644 ---- a/frysk-gui/frysk/gui/test/TestIconManager.java -+++ b/frysk-gui/frysk/gui/test/TestIconManager.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/TestJGMemory.java b/frysk-gui/frysk/gui/test/TestJGMemory.java -index 4f2695e..71e72d7 100644 ---- a/frysk-gui/frysk/gui/test/TestJGMemory.java -+++ b/frysk-gui/frysk/gui/test/TestJGMemory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/TestPrototypeCopying.java b/frysk-gui/frysk/gui/test/TestPrototypeCopying.java -index c138408..7a8724c 100644 ---- a/frysk-gui/frysk/gui/test/TestPrototypeCopying.java -+++ b/frysk-gui/frysk/gui/test/TestPrototypeCopying.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/TestSessionSaveLoad.java b/frysk-gui/frysk/gui/test/TestSessionSaveLoad.java -index 2f332b1..2d28ce9 100644 ---- a/frysk-gui/frysk/gui/test/TestSessionSaveLoad.java -+++ b/frysk-gui/frysk/gui/test/TestSessionSaveLoad.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/TestTagsetSaveLoad.java b/frysk-gui/frysk/gui/test/TestTagsetSaveLoad.java -index 6d986bc..43fe996 100644 ---- a/frysk-gui/frysk/gui/test/TestTagsetSaveLoad.java -+++ b/frysk-gui/frysk/gui/test/TestTagsetSaveLoad.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // type filter text - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/TestWindowFactorization.java b/frysk-gui/frysk/gui/test/TestWindowFactorization.java -index 6680e09..0c28e59 100644 ---- a/frysk-gui/frysk/gui/test/TestWindowFactorization.java -+++ b/frysk-gui/frysk/gui/test/TestWindowFactorization.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/AbstractGuiClass.py b/frysk-gui/frysk/gui/test/dogtail_scripts/AbstractGuiClass.py -index ac38549..cf04573 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/AbstractGuiClass.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/AbstractGuiClass.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/DebugExistingProcessDialog.py b/frysk-gui/frysk/gui/test/dogtail_scripts/DebugExistingProcessDialog.py -index 92b8f9b..7ada832 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/DebugExistingProcessDialog.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/DebugExistingProcessDialog.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/DebugProcess.py b/frysk-gui/frysk/gui/test/dogtail_scripts/DebugProcess.py -index 3ef45d6..cd93375 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/DebugProcess.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/DebugProcess.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/DebugSession.py b/frysk-gui/frysk/gui/test/dogtail_scripts/DebugSession.py -index 8b4367b..f3ea79a 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/DebugSession.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/DebugSession.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/FryskHandler.py b/frysk-gui/frysk/gui/test/dogtail_scripts/FryskHandler.py -index 3756e99..426d50e 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/FryskHandler.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/FryskHandler.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/FryskHelpers.py b/frysk-gui/frysk/gui/test/dogtail_scripts/FryskHelpers.py -index 28182a8..58b5c3e 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/FryskHelpers.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/FryskHelpers.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/Observer.py b/frysk-gui/frysk/gui/test/dogtail_scripts/Observer.py -index 868415d..af4cfda 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/Observer.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/Observer.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverElement.py b/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverElement.py -index ccc3a48..d0f2d8d 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverElement.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverElement.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverHandler.py b/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverHandler.py -index 962e933..5296954 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverHandler.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverHandler.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverPoints.py b/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverPoints.py -index 3337b36..d55d235 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverPoints.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/ObserverPoints.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/TestClassTemplate.py b/frysk-gui/frysk/gui/test/dogtail_scripts/TestClassTemplate.py -index bf6d417..62cabeb 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/TestClassTemplate.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/TestClassTemplate.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/TestRunObject.py b/frysk-gui/frysk/gui/test/dogtail_scripts/TestRunObject.py -index 3e3a6e0..07283ad 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/TestRunObject.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/TestRunObject.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/credits.py b/frysk-gui/frysk/gui/test/dogtail_scripts/credits.py -index 000ee9f..0365368 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/credits.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/credits.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/druid.py b/frysk-gui/frysk/gui/test/dogtail_scripts/druid.py -index 37374cd..79582f8 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/druid.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/druid.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/eventViewerAccessibilityInfo.py b/frysk-gui/frysk/gui/test/dogtail_scripts/eventViewerAccessibilityInfo.py -index 0c5f446..54b9a00 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/eventViewerAccessibilityInfo.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/eventViewerAccessibilityInfo.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/fryskTestCase.py b/frysk-gui/frysk/gui/test/dogtail_scripts/fryskTestCase.py -index 0e20c71..a52ba16 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/fryskTestCase.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/fryskTestCase.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/frysk_suite.in b/frysk-gui/frysk/gui/test/dogtail_scripts/frysk_suite.in -index 3640612..cff7027 100755 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/frysk_suite.in -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/frysk_suite.in -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/guiWalkTest.py b/frysk-gui/frysk/gui/test/dogtail_scripts/guiWalkTest.py -index 14f9e81..94ffcd5 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/guiWalkTest.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/guiWalkTest.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/license.py b/frysk-gui/frysk/gui/test/dogtail_scripts/license.py -index b35e958..872bb7c 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/license.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/license.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/observerData.py b/frysk-gui/frysk/gui/test/dogtail_scripts/observerData.py -index e906dad..c52f091 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/observerData.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/observerData.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/Test2866.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/Test2866.py -index 9b74f07..2bb1139 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/Test2866.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/Test2866.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/Test2985.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/Test2985.py -index 0d563e3..1ba850e 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/Test2985.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/Test2985.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCreateObservers.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCreateObservers.py -index 64e56a0..56c18b3 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCreateObservers.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCreateObservers.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCreateObserversfromDataModel.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCreateObserversfromDataModel.py -index f7e6321..43d012c 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCreateObserversfromDataModel.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCreateObserversfromDataModel.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCredits.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCredits.py -index 64e1124..55792a2 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCredits.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestCredits.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestDruid.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestDruid.py -index 673a51d..3cf4f65 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestDruid.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestDruid.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestEventViewerButtons.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestEventViewerButtons.py -index 242fc7e..3e1ef70 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestEventViewerButtons.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestEventViewerButtons.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestEventViewerMarkers.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestEventViewerMarkers.py -index a05d5e5..9d59e57 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestEventViewerMarkers.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestEventViewerMarkers.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestLicense.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestLicense.py -index 986340a..767a9b7 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestLicense.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestLicense.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestStressDruid.py b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestStressDruid.py -index 7eeab6f..80c159c 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestStressDruid.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/obsolete/TestStressDruid.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/run_suite.in b/frysk-gui/frysk/gui/test/dogtail_scripts/run_suite.in -index d0ccc9a..7eda52c 100755 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/run_suite.in -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/run_suite.in -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/stressDruid.py b/frysk-gui/frysk/gui/test/dogtail_scripts/stressDruid.py -index b3d064c..6825461 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/stressDruid.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/stressDruid.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/test2866.py b/frysk-gui/frysk/gui/test/dogtail_scripts/test2866.py -index 206638a..4005c57 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/test2866.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/test2866.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/test2985.py b/frysk-gui/frysk/gui/test/dogtail_scripts/test2985.py -index 58d9a9e..4a2e68f 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/test2985.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/test2985.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/test3380.py b/frysk-gui/frysk/gui/test/dogtail_scripts/test3380.py -index 4efc5e3..d0e04b7 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/test3380.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/test3380.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/viewerButtons.py b/frysk-gui/frysk/gui/test/dogtail_scripts/viewerButtons.py -index 0e17ba8..ffeaac7 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/viewerButtons.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/viewerButtons.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/gui/test/dogtail_scripts/viewerMarkers.py b/frysk-gui/frysk/gui/test/dogtail_scripts/viewerMarkers.py -index 49e7e2f..14999de 100644 ---- a/frysk-gui/frysk/gui/test/dogtail_scripts/viewerMarkers.py -+++ b/frysk-gui/frysk/gui/test/dogtail_scripts/viewerMarkers.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/pkglibdir/ftail.py b/frysk-gui/frysk/pkglibdir/ftail.py -index b37ec48..51bb609 100755 ---- a/frysk-gui/frysk/pkglibdir/ftail.py -+++ b/frysk-gui/frysk/pkglibdir/ftail.py -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/pkglibdir/ftail.xml-in b/frysk-gui/frysk/pkglibdir/ftail.xml-in -index 7a4cacc..db71f0c 100644 ---- a/frysk-gui/frysk/pkglibdir/ftail.xml-in -+++ b/frysk-gui/frysk/pkglibdir/ftail.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/pkglibdir/funit.java b/frysk-gui/frysk/pkglibdir/funit.java -index f108ecf..4ccd7d5 100755 ---- a/frysk-gui/frysk/pkglibdir/funit.java -+++ b/frysk-gui/frysk/pkglibdir/funit.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/pkglibdir/funit.xml-in b/frysk-gui/frysk/pkglibdir/funit.xml-in -index 8514a6b..daf4ab7 100644 ---- a/frysk-gui/frysk/pkglibdir/funit.xml-in -+++ b/frysk-gui/frysk/pkglibdir/funit.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-gui/frysk/vtecli/ConsoleWindow.java b/frysk-gui/frysk/vtecli/ConsoleWindow.java -index b2b69a7..adc6834 100644 ---- a/frysk-gui/frysk/vtecli/ConsoleWindow.java -+++ b/frysk-gui/frysk/vtecli/ConsoleWindow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/Makefile.am b/frysk-imports/Makefile.am -index 94c68d0..cb4bc4f 100644 ---- a/frysk-imports/Makefile.am -+++ b/frysk-imports/Makefile.am -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/bootstrap.sh b/frysk-imports/bootstrap.sh -index cb0c0a5..b8d239b 100755 ---- a/frysk-imports/bootstrap.sh -+++ b/frysk-imports/bootstrap.sh -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/configure.ac b/frysk-imports/configure.ac -index 9e9f960..b9a6c32 100644 ---- a/frysk-imports/configure.ac -+++ b/frysk-imports/configure.ac -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/include/fixme-asm.h b/frysk-imports/include/fixme-asm.h -index c4606a9..1ea6ab0 100644 ---- a/frysk-imports/include/fixme-asm.h -+++ b/frysk-imports/include/fixme-asm.h -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/include/frysk-asm.h b/frysk-imports/include/frysk-asm.h -index e2520a1..779e93b 100644 ---- a/frysk-imports/include/frysk-asm.h -+++ b/frysk-imports/include/frysk-asm.h -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/include/funit-util.h b/frysk-imports/include/funit-util.h -index a9ccfeb..b413506 100644 ---- a/frysk-imports/include/funit-util.h -+++ b/frysk-imports/include/funit-util.h -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/include/linux.syscall.h b/frysk-imports/include/linux.syscall.h -index 959d1ea..37fb7e8 100644 ---- a/frysk-imports/include/linux.syscall.h -+++ b/frysk-imports/include/linux.syscall.h -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/include/ptrace_wait.h b/frysk-imports/include/ptrace_wait.h -index ca48031..06ded9f 100644 ---- a/frysk-imports/include/ptrace_wait.h -+++ b/frysk-imports/include/ptrace_wait.h -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/Makefile.am b/frysk-imports/tests/Makefile.am -index 8c96f76..cdd2a90 100644 ---- a/frysk-imports/tests/Makefile.am -+++ b/frysk-imports/tests/Makefile.am -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/cmdline/dump.c b/frysk-imports/tests/cmdline/dump.c -index d8c11ad..4685b62 100644 ---- a/frysk-imports/tests/cmdline/dump.c -+++ b/frysk-imports/tests/cmdline/dump.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/cmdline/print.c b/frysk-imports/tests/cmdline/print.c -index c8eb9f9..fd02925 100644 ---- a/frysk-imports/tests/cmdline/print.c -+++ b/frysk-imports/tests/cmdline/print.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk2130/threadexec.c b/frysk-imports/tests/frysk2130/threadexec.c -index e607696..446d8f4 100644 ---- a/frysk-imports/tests/frysk2130/threadexec.c -+++ b/frysk-imports/tests/frysk2130/threadexec.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk2595/ptrace_after_exec.c b/frysk-imports/tests/frysk2595/ptrace_after_exec.c -index 4ee2d5c..def1bd4 100644 ---- a/frysk-imports/tests/frysk2595/ptrace_after_exec.c -+++ b/frysk-imports/tests/frysk2595/ptrace_after_exec.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk2595/ptrace_after_exec_of_thread.c b/frysk-imports/tests/frysk2595/ptrace_after_exec_of_thread.c -index b88bacc..e7b69d0 100644 ---- a/frysk-imports/tests/frysk2595/ptrace_after_exec_of_thread.c -+++ b/frysk-imports/tests/frysk2595/ptrace_after_exec_of_thread.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk2595/ptrace_after_forked_thread_exits.c b/frysk-imports/tests/frysk2595/ptrace_after_forked_thread_exits.c -index a1fd02f..077b2b6 100644 ---- a/frysk-imports/tests/frysk2595/ptrace_after_forked_thread_exits.c -+++ b/frysk-imports/tests/frysk2595/ptrace_after_forked_thread_exits.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk2595/ptrace_before_forked_thread_exits.c b/frysk-imports/tests/frysk2595/ptrace_before_forked_thread_exits.c -index 1ad0ee1..191f289 100644 ---- a/frysk-imports/tests/frysk2595/ptrace_before_forked_thread_exits.c -+++ b/frysk-imports/tests/frysk2595/ptrace_before_forked_thread_exits.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk2595/ptrace_peek_wrong_thread.c b/frysk-imports/tests/frysk2595/ptrace_peek_wrong_thread.c -index b056deb..ee05eb6 100644 ---- a/frysk-imports/tests/frysk2595/ptrace_peek_wrong_thread.c -+++ b/frysk-imports/tests/frysk2595/ptrace_peek_wrong_thread.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk2760/TestBarrier.cxx b/frysk-imports/tests/frysk2760/TestBarrier.cxx -index 60723f9..51a3927 100644 ---- a/frysk-imports/tests/frysk2760/TestBarrier.cxx -+++ b/frysk-imports/tests/frysk2760/TestBarrier.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk2760/TestBarrier.java b/frysk-imports/tests/frysk2760/TestBarrier.java -index a629c43..8c4fcb0 100644 ---- a/frysk-imports/tests/frysk2760/TestBarrier.java -+++ b/frysk-imports/tests/frysk2760/TestBarrier.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3205/ptrace-detach-bad-signal.c b/frysk-imports/tests/frysk3205/ptrace-detach-bad-signal.c -index 293c6f6..399cee2 100644 ---- a/frysk-imports/tests/frysk3205/ptrace-detach-bad-signal.c -+++ b/frysk-imports/tests/frysk3205/ptrace-detach-bad-signal.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3231/ptrace-detach-looses-signal.c b/frysk-imports/tests/frysk3231/ptrace-detach-looses-signal.c -index b8d14ff..538dbfb 100644 ---- a/frysk-imports/tests/frysk3231/ptrace-detach-looses-signal.c -+++ b/frysk-imports/tests/frysk3231/ptrace-detach-looses-signal.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3381/f3381.c b/frysk-imports/tests/frysk3381/f3381.c -index 9dd4e41..8e44637 100644 ---- a/frysk-imports/tests/frysk3381/f3381.c -+++ b/frysk-imports/tests/frysk3381/f3381.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3381/reparent-r.c b/frysk-imports/tests/frysk3381/reparent-r.c -index de617bc..05062f9 100644 ---- a/frysk-imports/tests/frysk3381/reparent-r.c -+++ b/frysk-imports/tests/frysk3381/reparent-r.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3381/reparent.c b/frysk-imports/tests/frysk3381/reparent.c -index 1361a82..52c4239 100644 ---- a/frysk-imports/tests/frysk3381/reparent.c -+++ b/frysk-imports/tests/frysk3381/reparent.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3486/waitpid-masked-sigchld.c b/frysk-imports/tests/frysk3486/waitpid-masked-sigchld.c -index b8d22b7..55e723e 100644 ---- a/frysk-imports/tests/frysk3486/waitpid-masked-sigchld.c -+++ b/frysk-imports/tests/frysk3486/waitpid-masked-sigchld.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3491/x-state.c b/frysk-imports/tests/frysk3491/x-state.c -index 5c4c3c7..52cc915 100644 ---- a/frysk-imports/tests/frysk3491/x-state.c -+++ b/frysk-imports/tests/frysk3491/x-state.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3525/exit47.c b/frysk-imports/tests/frysk3525/exit47.c -index 2516d68..b394ac5 100644 ---- a/frysk-imports/tests/frysk3525/exit47.c -+++ b/frysk-imports/tests/frysk3525/exit47.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3595/detach-multi-thread.c b/frysk-imports/tests/frysk3595/detach-multi-thread.c -index 05db1ec..909c1c3 100644 ---- a/frysk-imports/tests/frysk3595/detach-multi-thread.c -+++ b/frysk-imports/tests/frysk3595/detach-multi-thread.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3754/daemonreadproc.c b/frysk-imports/tests/frysk3754/daemonreadproc.c -index 114d728..f8cf5a7 100644 ---- a/frysk-imports/tests/frysk3754/daemonreadproc.c -+++ b/frysk-imports/tests/frysk3754/daemonreadproc.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3754/readproc.c b/frysk-imports/tests/frysk3754/readproc.c -index 9766ed9..9bd348a 100644 ---- a/frysk-imports/tests/frysk3754/readproc.c -+++ b/frysk-imports/tests/frysk3754/readproc.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk3997/ptrace_step_sig.c b/frysk-imports/tests/frysk3997/ptrace_step_sig.c -index 6f4dd10..7dd8390 100644 ---- a/frysk-imports/tests/frysk3997/ptrace_step_sig.c -+++ b/frysk-imports/tests/frysk3997/ptrace_step_sig.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk4217/attachstop.c b/frysk-imports/tests/frysk4217/attachstop.c -index 473e50e..0e9fc5a 100644 ---- a/frysk-imports/tests/frysk4217/attachstop.c -+++ b/frysk-imports/tests/frysk4217/attachstop.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk4282/MyProcName.java b/frysk-imports/tests/frysk4282/MyProcName.java -index 374bbf1..36e9e7b 100644 ---- a/frysk-imports/tests/frysk4282/MyProcName.java -+++ b/frysk-imports/tests/frysk4282/MyProcName.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk4282/StackAccessors.java b/frysk-imports/tests/frysk4282/StackAccessors.java -index d943272..cbe16e0 100644 ---- a/frysk-imports/tests/frysk4282/StackAccessors.java -+++ b/frysk-imports/tests/frysk4282/StackAccessors.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk4330/stopkills.c b/frysk-imports/tests/frysk4330/stopkills.c -index a069c4c..3c533c9 100644 ---- a/frysk-imports/tests/frysk4330/stopkills.c -+++ b/frysk-imports/tests/frysk4330/stopkills.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-imports/tests/frysk4704/vdso-permissions.c b/frysk-imports/tests/frysk4704/vdso-permissions.c -index 3054236..79b5134 100644 ---- a/frysk-imports/tests/frysk4704/vdso-permissions.c -+++ b/frysk-imports/tests/frysk4704/vdso-permissions.c -@@ -12,7 +12,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License along -- with Red Hat elfutils; if not, write to the Free Software Foundation, -+ with Red Hat elfutils. If not, see . - Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. - - In addition, as a special exception, Red Hat, Inc. gives You the -diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am -index 6e8e9a2..f69fd01 100644 ---- a/frysk-sys/Makefile.am -+++ b/frysk-sys/Makefile.am -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/bootstrap.sh b/frysk-sys/bootstrap.sh -index 076cb94..91e8a96 100755 ---- a/frysk-sys/bootstrap.sh -+++ b/frysk-sys/bootstrap.sh -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/configure.ac b/frysk-sys/configure.ac -index 675ee80..6a1e0ca 100644 ---- a/frysk-sys/configure.ac -+++ b/frysk-sys/configure.ac -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/InternalException.java b/frysk-sys/frysk/InternalException.java -index fe85caa..74171f9 100644 ---- a/frysk-sys/frysk/InternalException.java -+++ b/frysk-sys/frysk/InternalException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/UserException.java b/frysk-sys/frysk/UserException.java -index 76ba9f7..6c03849 100644 ---- a/frysk-sys/frysk/UserException.java -+++ b/frysk-sys/frysk/UserException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/BuildCompiler.java b/frysk-sys/frysk/config/BuildCompiler.java -index 95202d2..85c4c99 100644 ---- a/frysk-sys/frysk/config/BuildCompiler.java -+++ b/frysk-sys/frysk/config/BuildCompiler.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/Config.java b/frysk-sys/frysk/config/Config.java -index 4aed123..70c4824 100644 ---- a/frysk-sys/frysk/config/Config.java -+++ b/frysk-sys/frysk/config/Config.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/FryskVersion.java b/frysk-sys/frysk/config/FryskVersion.java -index 6bdfe9d..b8ef17a 100644 ---- a/frysk-sys/frysk/config/FryskVersion.java -+++ b/frysk-sys/frysk/config/FryskVersion.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/Host.java b/frysk-sys/frysk/config/Host.java -index bc6d9b7..ba776a1 100644 ---- a/frysk-sys/frysk/config/Host.java -+++ b/frysk-sys/frysk/config/Host.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/Prefix.java b/frysk-sys/frysk/config/Prefix.java -index e66059e..bf618f3 100644 ---- a/frysk-sys/frysk/config/Prefix.java -+++ b/frysk-sys/frysk/config/Prefix.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/PrefixFactory.java b/frysk-sys/frysk/config/PrefixFactory.java -index 54b4f0f..af444c2 100644 ---- a/frysk-sys/frysk/config/PrefixFactory.java -+++ b/frysk-sys/frysk/config/PrefixFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/Runtime.java b/frysk-sys/frysk/config/Runtime.java -index 77fe1ff..f4ddee5 100644 ---- a/frysk-sys/frysk/config/Runtime.java -+++ b/frysk-sys/frysk/config/Runtime.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/TestBuildCompiler.java b/frysk-sys/frysk/config/TestBuildCompiler.java -index 13a3081..9cc0b43 100644 ---- a/frysk-sys/frysk/config/TestBuildCompiler.java -+++ b/frysk-sys/frysk/config/TestBuildCompiler.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/TestPrefix.java b/frysk-sys/frysk/config/TestPrefix.java -index c9f73cb..fc12617 100644 ---- a/frysk-sys/frysk/config/TestPrefix.java -+++ b/frysk-sys/frysk/config/TestPrefix.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/jni/BuildCompiler.cxx b/frysk-sys/frysk/config/jni/BuildCompiler.cxx -index ff741ff..d1ea223 100644 ---- a/frysk-sys/frysk/config/jni/BuildCompiler.cxx -+++ b/frysk-sys/frysk/config/jni/BuildCompiler.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/jni/FryskVersion.cxx-in b/frysk-sys/frysk/config/jni/FryskVersion.cxx-in -index 1f4e101..4c2fa1b 100644 ---- a/frysk-sys/frysk/config/jni/FryskVersion.cxx-in -+++ b/frysk-sys/frysk/config/jni/FryskVersion.cxx-in -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/jni/Host.cxx-in b/frysk-sys/frysk/config/jni/Host.cxx-in -index 2215ca7..e21e853 100644 ---- a/frysk-sys/frysk/config/jni/Host.cxx-in -+++ b/frysk-sys/frysk/config/jni/Host.cxx-in -@@ -14,8 +14,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in b/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in -index 5c8d9e4..66e2211 100644 ---- a/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in -+++ b/frysk-sys/frysk/config/jni/PrefixFactory.cxx-in -@@ -14,8 +14,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/config/jni/Runtime.cxx b/frysk-sys/frysk/config/jni/Runtime.cxx -index d5dd54d..fe2f252 100644 ---- a/frysk-sys/frysk/config/jni/Runtime.cxx -+++ b/frysk-sys/frysk/config/jni/Runtime.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/Child.java b/frysk-sys/frysk/expunit/Child.java -index 69281ef..4b79b79 100644 ---- a/frysk-sys/frysk/expunit/Child.java -+++ b/frysk-sys/frysk/expunit/Child.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/EndOfFileException.java b/frysk-sys/frysk/expunit/EndOfFileException.java -index 48051c5..bab4e58 100644 ---- a/frysk-sys/frysk/expunit/EndOfFileException.java -+++ b/frysk-sys/frysk/expunit/EndOfFileException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/Equals.java b/frysk-sys/frysk/expunit/Equals.java -index d90c49b..5ad5a8d 100644 ---- a/frysk-sys/frysk/expunit/Equals.java -+++ b/frysk-sys/frysk/expunit/Equals.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/Expect.java b/frysk-sys/frysk/expunit/Expect.java -index d2542f6..a7999e0 100644 ---- a/frysk-sys/frysk/expunit/Expect.java -+++ b/frysk-sys/frysk/expunit/Expect.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/Match.java b/frysk-sys/frysk/expunit/Match.java -index 8e24262..1e20348 100644 ---- a/frysk-sys/frysk/expunit/Match.java -+++ b/frysk-sys/frysk/expunit/Match.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/MatchException.java b/frysk-sys/frysk/expunit/MatchException.java -index bc81d20..d3b5385 100644 ---- a/frysk-sys/frysk/expunit/MatchException.java -+++ b/frysk-sys/frysk/expunit/MatchException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/Regex.java b/frysk-sys/frysk/expunit/Regex.java -index 197a05e..84d4f31 100644 ---- a/frysk-sys/frysk/expunit/Regex.java -+++ b/frysk-sys/frysk/expunit/Regex.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/TerminationException.java b/frysk-sys/frysk/expunit/TerminationException.java -index 2f126e0..214c4b9 100644 ---- a/frysk-sys/frysk/expunit/TerminationException.java -+++ b/frysk-sys/frysk/expunit/TerminationException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/TestEquals.java b/frysk-sys/frysk/expunit/TestEquals.java -index 74780b1..67e5891 100644 ---- a/frysk-sys/frysk/expunit/TestEquals.java -+++ b/frysk-sys/frysk/expunit/TestEquals.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/TestExpect.java b/frysk-sys/frysk/expunit/TestExpect.java -index b7b2f83..58005e1 100644 ---- a/frysk-sys/frysk/expunit/TestExpect.java -+++ b/frysk-sys/frysk/expunit/TestExpect.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/TestRegex.java b/frysk-sys/frysk/expunit/TestRegex.java -index ba277bf..99df9e7 100644 ---- a/frysk-sys/frysk/expunit/TestRegex.java -+++ b/frysk-sys/frysk/expunit/TestRegex.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/TimeoutException.java b/frysk-sys/frysk/expunit/TimeoutException.java -index 9d0d3d4..5019c38 100644 ---- a/frysk-sys/frysk/expunit/TimeoutException.java -+++ b/frysk-sys/frysk/expunit/TimeoutException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/expunit/WaitObserver.java b/frysk-sys/frysk/expunit/WaitObserver.java -index 3ea8ce1..837ecf1 100644 ---- a/frysk-sys/frysk/expunit/WaitObserver.java -+++ b/frysk-sys/frysk/expunit/WaitObserver.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/junit/KernelMatch.java b/frysk-sys/frysk/junit/KernelMatch.java -index 7710f10..4b4ccbe 100644 ---- a/frysk-sys/frysk/junit/KernelMatch.java -+++ b/frysk-sys/frysk/junit/KernelMatch.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/junit/KernelVersion.java b/frysk-sys/frysk/junit/KernelVersion.java -index 4e13c65..177eb24 100644 ---- a/frysk-sys/frysk/junit/KernelVersion.java -+++ b/frysk-sys/frysk/junit/KernelVersion.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/junit/Result.java b/frysk-sys/frysk/junit/Result.java -index 84b80c3..dc42d10 100644 ---- a/frysk-sys/frysk/junit/Result.java -+++ b/frysk-sys/frysk/junit/Result.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/junit/Results.java b/frysk-sys/frysk/junit/Results.java -index d66b94e..129b432 100644 ---- a/frysk-sys/frysk/junit/Results.java -+++ b/frysk-sys/frysk/junit/Results.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/junit/Runner.java b/frysk-sys/frysk/junit/Runner.java -index add01be..23e9604 100755 ---- a/frysk-sys/frysk/junit/Runner.java -+++ b/frysk-sys/frysk/junit/Runner.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/junit/TestAsserts.java b/frysk-sys/frysk/junit/TestAsserts.java -index 76b1244..b514505 100644 ---- a/frysk-sys/frysk/junit/TestAsserts.java -+++ b/frysk-sys/frysk/junit/TestAsserts.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/junit/TestCase.java b/frysk-sys/frysk/junit/TestCase.java -index a484dc5..0955f3a 100644 ---- a/frysk-sys/frysk/junit/TestCase.java -+++ b/frysk-sys/frysk/junit/TestCase.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/pkgdatadir/libtest.c.source b/frysk-sys/frysk/pkgdatadir/libtest.c.source -index aa36ea2..02cb990 100644 ---- a/frysk-sys/frysk/pkgdatadir/libtest.c.source -+++ b/frysk-sys/frysk/pkgdatadir/libtest.c.source -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/pkgdatadir/segfault.c.source b/frysk-sys/frysk/pkgdatadir/segfault.c.source -index b2e617b..f316971 100644 ---- a/frysk-sys/frysk/pkgdatadir/segfault.c.source -+++ b/frysk-sys/frysk/pkgdatadir/segfault.c.source -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/pkglibdir/fsystest.xml-in b/frysk-sys/frysk/pkglibdir/fsystest.xml-in -index 1d3a2cc..5cc886f 100644 ---- a/frysk-sys/frysk/pkglibdir/fsystest.xml-in -+++ b/frysk-sys/frysk/pkglibdir/fsystest.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/pkglibdir/funit-procmask.c b/frysk-sys/frysk/pkglibdir/funit-procmask.c -index edb2301..e1d2a5d 100644 ---- a/frysk-sys/frysk/pkglibdir/funit-procmask.c -+++ b/frysk-sys/frysk/pkglibdir/funit-procmask.c -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/pkglibdir/funit-procmask.xml-in b/frysk-sys/frysk/pkglibdir/funit-procmask.xml-in -index cc67326..8c4fcc6 100644 ---- a/frysk-sys/frysk/pkglibdir/funit-procmask.xml-in -+++ b/frysk-sys/frysk/pkglibdir/funit-procmask.xml-in -@@ -16,8 +16,7 @@ - General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with FRYSK; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+ along with FRYSK. If not, see . - - In addition, as a special exception, Red Hat, Inc. gives You the - additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/Callers.java b/frysk-sys/frysk/rsl/Callers.java -index 5c1d84e..692261a 100644 ---- a/frysk-sys/frysk/rsl/Callers.java -+++ b/frysk-sys/frysk/rsl/Callers.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/Log.java b/frysk-sys/frysk/rsl/Log.java -index 27f1245..41f6e75 100644 ---- a/frysk-sys/frysk/rsl/Log.java -+++ b/frysk-sys/frysk/rsl/Log.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/LogFactory.java b/frysk-sys/frysk/rsl/LogFactory.java -index 3832145..8d20eb0 100644 ---- a/frysk-sys/frysk/rsl/LogFactory.java -+++ b/frysk-sys/frysk/rsl/LogFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/LogOption.java b/frysk-sys/frysk/rsl/LogOption.java -index 3f18fe4..01a3cbe 100644 ---- a/frysk-sys/frysk/rsl/LogOption.java -+++ b/frysk-sys/frysk/rsl/LogOption.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/Node.java b/frysk-sys/frysk/rsl/Node.java -index cd3534e..48f4279 100644 ---- a/frysk-sys/frysk/rsl/Node.java -+++ b/frysk-sys/frysk/rsl/Node.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/Printer.java b/frysk-sys/frysk/rsl/Printer.java -index 5ebec05..9996bb1 100644 ---- a/frysk-sys/frysk/rsl/Printer.java -+++ b/frysk-sys/frysk/rsl/Printer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/Setting.java b/frysk-sys/frysk/rsl/Setting.java -index b2ca236..1cab6da 100644 ---- a/frysk-sys/frysk/rsl/Setting.java -+++ b/frysk-sys/frysk/rsl/Setting.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/TestCallers.java b/frysk-sys/frysk/rsl/TestCallers.java -index 51133af..a833be6 100644 ---- a/frysk-sys/frysk/rsl/TestCallers.java -+++ b/frysk-sys/frysk/rsl/TestCallers.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/TestCompletion.java b/frysk-sys/frysk/rsl/TestCompletion.java -index 92bd4d3..2b8558c 100644 ---- a/frysk-sys/frysk/rsl/TestCompletion.java -+++ b/frysk-sys/frysk/rsl/TestCompletion.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/TestLib.java b/frysk-sys/frysk/rsl/TestLib.java -index 1d0b384..fad421f 100644 ---- a/frysk-sys/frysk/rsl/TestLib.java -+++ b/frysk-sys/frysk/rsl/TestLib.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/TestLog.java b/frysk-sys/frysk/rsl/TestLog.java -index 64a8b95..74b236d 100644 ---- a/frysk-sys/frysk/rsl/TestLog.java -+++ b/frysk-sys/frysk/rsl/TestLog.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/TestOptions.java b/frysk-sys/frysk/rsl/TestOptions.java -index e9bf1c8..3a701e6 100644 ---- a/frysk-sys/frysk/rsl/TestOptions.java -+++ b/frysk-sys/frysk/rsl/TestOptions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/rsl/TestSetting.java b/frysk-sys/frysk/rsl/TestSetting.java -index dcc8efe..bc6ed0b 100644 ---- a/frysk-sys/frysk/rsl/TestSetting.java -+++ b/frysk-sys/frysk/rsl/TestSetting.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/AuditLibs.java b/frysk-sys/frysk/sys/AuditLibs.java -index 6679d86..587bf49 100644 ---- a/frysk-sys/frysk/sys/AuditLibs.java -+++ b/frysk-sys/frysk/sys/AuditLibs.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Environ.java b/frysk-sys/frysk/sys/Environ.java -index 6400484..196b0bb 100644 ---- a/frysk-sys/frysk/sys/Environ.java -+++ b/frysk-sys/frysk/sys/Environ.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Errno.java-sh b/frysk-sys/frysk/sys/Errno.java-sh -index c87ae21..2108f8f 100644 ---- a/frysk-sys/frysk/sys/Errno.java-sh -+++ b/frysk-sys/frysk/sys/Errno.java-sh -@@ -14,8 +14,7 @@ cat <. - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Execute.java b/frysk-sys/frysk/sys/Execute.java -index 6d6b3db..1562dab 100644 ---- a/frysk-sys/frysk/sys/Execute.java -+++ b/frysk-sys/frysk/sys/Execute.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/FileDescriptor.java b/frysk-sys/frysk/sys/FileDescriptor.java -index 3cc0ed7..1c2c942 100644 ---- a/frysk-sys/frysk/sys/FileDescriptor.java -+++ b/frysk-sys/frysk/sys/FileDescriptor.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Fork.java b/frysk-sys/frysk/sys/Fork.java -index 46c98cb..9e55640 100644 ---- a/frysk-sys/frysk/sys/Fork.java -+++ b/frysk-sys/frysk/sys/Fork.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/GarbageCollect.java b/frysk-sys/frysk/sys/GarbageCollect.java -index 721ffc2..c08fec3 100644 ---- a/frysk-sys/frysk/sys/GarbageCollect.java -+++ b/frysk-sys/frysk/sys/GarbageCollect.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Itimer.java b/frysk-sys/frysk/sys/Itimer.java -index 6ab41ed..d811b10 100644 ---- a/frysk-sys/frysk/sys/Itimer.java -+++ b/frysk-sys/frysk/sys/Itimer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Pid.java b/frysk-sys/frysk/sys/Pid.java -index 5c92271..bc8c8db 100644 ---- a/frysk-sys/frysk/sys/Pid.java -+++ b/frysk-sys/frysk/sys/Pid.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Pipe.java b/frysk-sys/frysk/sys/Pipe.java -index bd88db4..9b28315 100644 ---- a/frysk-sys/frysk/sys/Pipe.java -+++ b/frysk-sys/frysk/sys/Pipe.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/PipePair.java b/frysk-sys/frysk/sys/PipePair.java -index c150f02..df653d6 100644 ---- a/frysk-sys/frysk/sys/PipePair.java -+++ b/frysk-sys/frysk/sys/PipePair.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ProcessIdentifier.java b/frysk-sys/frysk/sys/ProcessIdentifier.java -index 6e76b8f..52fbab1 100644 ---- a/frysk-sys/frysk/sys/ProcessIdentifier.java -+++ b/frysk-sys/frysk/sys/ProcessIdentifier.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ProcessIdentifierDecorator.java b/frysk-sys/frysk/sys/ProcessIdentifierDecorator.java -index f1d3418..fc05098 100644 ---- a/frysk-sys/frysk/sys/ProcessIdentifierDecorator.java -+++ b/frysk-sys/frysk/sys/ProcessIdentifierDecorator.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ProcessIdentifierFactory.java b/frysk-sys/frysk/sys/ProcessIdentifierFactory.java -index dccb2d4..05e82c0 100644 ---- a/frysk-sys/frysk/sys/ProcessIdentifierFactory.java -+++ b/frysk-sys/frysk/sys/ProcessIdentifierFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/PseudoTerminal.java b/frysk-sys/frysk/sys/PseudoTerminal.java -index 8f3262d..bf0c019 100755 ---- a/frysk-sys/frysk/sys/PseudoTerminal.java -+++ b/frysk-sys/frysk/sys/PseudoTerminal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Redirect.java b/frysk-sys/frysk/sys/Redirect.java -index 9d44921..de98cea 100644 ---- a/frysk-sys/frysk/sys/Redirect.java -+++ b/frysk-sys/frysk/sys/Redirect.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Signal.java-sh b/frysk-sys/frysk/sys/Signal.java-sh -index 3d3c4b4..c38d045 100644 ---- a/frysk-sys/frysk/sys/Signal.java-sh -+++ b/frysk-sys/frysk/sys/Signal.java-sh -@@ -14,8 +14,7 @@ cat <. - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/SignalBuilder.java b/frysk-sys/frysk/sys/SignalBuilder.java -index f30a68a..50711e8 100644 ---- a/frysk-sys/frysk/sys/SignalBuilder.java -+++ b/frysk-sys/frysk/sys/SignalBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/SignalSet.java b/frysk-sys/frysk/sys/SignalSet.java -index 519a921..5f80f98 100644 ---- a/frysk-sys/frysk/sys/SignalSet.java -+++ b/frysk-sys/frysk/sys/SignalSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Size.java b/frysk-sys/frysk/sys/Size.java -index 7b950e0..bec5939 100644 ---- a/frysk-sys/frysk/sys/Size.java -+++ b/frysk-sys/frysk/sys/Size.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/StatelessFile.java b/frysk-sys/frysk/sys/StatelessFile.java -index 3537edd..12ee1c1 100644 ---- a/frysk-sys/frysk/sys/StatelessFile.java -+++ b/frysk-sys/frysk/sys/StatelessFile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestEnviron.java b/frysk-sys/frysk/sys/TestEnviron.java -index 1c32091..13589da 100644 ---- a/frysk-sys/frysk/sys/TestEnviron.java -+++ b/frysk-sys/frysk/sys/TestEnviron.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestFileDescriptor.java b/frysk-sys/frysk/sys/TestFileDescriptor.java -index c08bfbb..2fe1ac9 100644 ---- a/frysk-sys/frysk/sys/TestFileDescriptor.java -+++ b/frysk-sys/frysk/sys/TestFileDescriptor.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestFork.java b/frysk-sys/frysk/sys/TestFork.java -index 82ba7a9..eaf1fe6 100644 ---- a/frysk-sys/frysk/sys/TestFork.java -+++ b/frysk-sys/frysk/sys/TestFork.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestGarbageCollect.java b/frysk-sys/frysk/sys/TestGarbageCollect.java -index d37f597..ffac8af 100644 ---- a/frysk-sys/frysk/sys/TestGarbageCollect.java -+++ b/frysk-sys/frysk/sys/TestGarbageCollect.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestLeakingFileDescriptor.java b/frysk-sys/frysk/sys/TestLeakingFileDescriptor.java -index dbef826..b2cf585 100644 ---- a/frysk-sys/frysk/sys/TestLeakingFileDescriptor.java -+++ b/frysk-sys/frysk/sys/TestLeakingFileDescriptor.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestPipePair.java b/frysk-sys/frysk/sys/TestPipePair.java -index 4b182e6..b8eb983 100644 ---- a/frysk-sys/frysk/sys/TestPipePair.java -+++ b/frysk-sys/frysk/sys/TestPipePair.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestProcessIdentifier.java b/frysk-sys/frysk/sys/TestProcessIdentifier.java -index 44c6daa..0fb4eed 100644 ---- a/frysk-sys/frysk/sys/TestProcessIdentifier.java -+++ b/frysk-sys/frysk/sys/TestProcessIdentifier.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestPseudoTerminal.java b/frysk-sys/frysk/sys/TestPseudoTerminal.java -index 5f3e371..d4af317 100644 ---- a/frysk-sys/frysk/sys/TestPseudoTerminal.java -+++ b/frysk-sys/frysk/sys/TestPseudoTerminal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestSignal.java b/frysk-sys/frysk/sys/TestSignal.java -index 1414566..5ccc3a2 100644 ---- a/frysk-sys/frysk/sys/TestSignal.java -+++ b/frysk-sys/frysk/sys/TestSignal.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestSignalSet.java b/frysk-sys/frysk/sys/TestSignalSet.java -index ba0607b..c1881da 100644 ---- a/frysk-sys/frysk/sys/TestSignalSet.java -+++ b/frysk-sys/frysk/sys/TestSignalSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestStatelessFile.java b/frysk-sys/frysk/sys/TestStatelessFile.java -index 3336081..019ca0d 100644 ---- a/frysk-sys/frysk/sys/TestStatelessFile.java -+++ b/frysk-sys/frysk/sys/TestStatelessFile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/TestWait.java b/frysk-sys/frysk/sys/TestWait.java -index a32a652..1f755b8 100644 ---- a/frysk-sys/frysk/sys/TestWait.java -+++ b/frysk-sys/frysk/sys/TestWait.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Tid.java b/frysk-sys/frysk/sys/Tid.java -index c8a9bce..b76f688 100644 ---- a/frysk-sys/frysk/sys/Tid.java -+++ b/frysk-sys/frysk/sys/Tid.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Uname.java b/frysk-sys/frysk/sys/Uname.java -index d5c8e02..9e607f2 100644 ---- a/frysk-sys/frysk/sys/Uname.java -+++ b/frysk-sys/frysk/sys/Uname.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/UnhandledWaitBuilder.java b/frysk-sys/frysk/sys/UnhandledWaitBuilder.java -index b567d8f..c0c50bb 100644 ---- a/frysk-sys/frysk/sys/UnhandledWaitBuilder.java -+++ b/frysk-sys/frysk/sys/UnhandledWaitBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/Wait.java b/frysk-sys/frysk/sys/Wait.java -index a41038a..e660ba2 100644 ---- a/frysk-sys/frysk/sys/Wait.java -+++ b/frysk-sys/frysk/sys/Wait.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/WaitBuilder.java b/frysk-sys/frysk/sys/WaitBuilder.java -index 5b8ed00..00294df 100644 ---- a/frysk-sys/frysk/sys/WaitBuilder.java -+++ b/frysk-sys/frysk/sys/WaitBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/AuditLibs.cxx b/frysk-sys/frysk/sys/jni/AuditLibs.cxx -index fb0cda7..c349a75 100644 ---- a/frysk-sys/frysk/sys/jni/AuditLibs.cxx -+++ b/frysk-sys/frysk/sys/jni/AuditLibs.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Environ.cxx b/frysk-sys/frysk/sys/jni/Environ.cxx -index 08ac88c..dbbd927 100644 ---- a/frysk-sys/frysk/sys/jni/Environ.cxx -+++ b/frysk-sys/frysk/sys/jni/Environ.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/FileDescriptor.cxx b/frysk-sys/frysk/sys/jni/FileDescriptor.cxx -index b831562..010d349 100644 ---- a/frysk-sys/frysk/sys/jni/FileDescriptor.cxx -+++ b/frysk-sys/frysk/sys/jni/FileDescriptor.cxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Fork.cxx b/frysk-sys/frysk/sys/jni/Fork.cxx -index bb1549b..8478eae 100644 ---- a/frysk-sys/frysk/sys/jni/Fork.cxx -+++ b/frysk-sys/frysk/sys/jni/Fork.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Fork.hxx b/frysk-sys/frysk/sys/jni/Fork.hxx -index 6bf9dd1..93f595d 100644 ---- a/frysk-sys/frysk/sys/jni/Fork.hxx -+++ b/frysk-sys/frysk/sys/jni/Fork.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Itimer.cxx b/frysk-sys/frysk/sys/jni/Itimer.cxx -index 88ba5a2..277b16b 100644 ---- a/frysk-sys/frysk/sys/jni/Itimer.cxx -+++ b/frysk-sys/frysk/sys/jni/Itimer.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Pid.cxx b/frysk-sys/frysk/sys/jni/Pid.cxx -index a5cf5b5..5677aeb 100644 ---- a/frysk-sys/frysk/sys/jni/Pid.cxx -+++ b/frysk-sys/frysk/sys/jni/Pid.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Pipe.cxx b/frysk-sys/frysk/sys/jni/Pipe.cxx -index 4b94701..a7403b5 100644 ---- a/frysk-sys/frysk/sys/jni/Pipe.cxx -+++ b/frysk-sys/frysk/sys/jni/Pipe.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/PipePair.cxx b/frysk-sys/frysk/sys/jni/PipePair.cxx -index d3eb91d..9297eeb 100644 ---- a/frysk-sys/frysk/sys/jni/PipePair.cxx -+++ b/frysk-sys/frysk/sys/jni/PipePair.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/PseudoTerminal.cxx b/frysk-sys/frysk/sys/jni/PseudoTerminal.cxx -index 153a6b9..aa6caa1 100644 ---- a/frysk-sys/frysk/sys/jni/PseudoTerminal.cxx -+++ b/frysk-sys/frysk/sys/jni/PseudoTerminal.cxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Signal.cxx-sh b/frysk-sys/frysk/sys/jni/Signal.cxx-sh -index cd03ccd..b557d8f 100644 ---- a/frysk-sys/frysk/sys/jni/Signal.cxx-sh -+++ b/frysk-sys/frysk/sys/jni/Signal.cxx-sh -@@ -14,8 +14,7 @@ cat <. - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/SignalSet.cxx b/frysk-sys/frysk/sys/jni/SignalSet.cxx -index 217ccf8..77a0b30 100644 ---- a/frysk-sys/frysk/sys/jni/SignalSet.cxx -+++ b/frysk-sys/frysk/sys/jni/SignalSet.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/SignalSet.hxx b/frysk-sys/frysk/sys/jni/SignalSet.hxx -index e34b073..a050a79 100644 ---- a/frysk-sys/frysk/sys/jni/SignalSet.hxx -+++ b/frysk-sys/frysk/sys/jni/SignalSet.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/StatelessFile.cxx b/frysk-sys/frysk/sys/jni/StatelessFile.cxx -index d2dc7b0..7b2826a 100644 ---- a/frysk-sys/frysk/sys/jni/StatelessFile.cxx -+++ b/frysk-sys/frysk/sys/jni/StatelessFile.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Tid.cxx b/frysk-sys/frysk/sys/jni/Tid.cxx -index 29ace37..41036f6 100644 ---- a/frysk-sys/frysk/sys/jni/Tid.cxx -+++ b/frysk-sys/frysk/sys/jni/Tid.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Uname.cxx b/frysk-sys/frysk/sys/jni/Uname.cxx -index e1a4f3f..c69492c 100644 ---- a/frysk-sys/frysk/sys/jni/Uname.cxx -+++ b/frysk-sys/frysk/sys/jni/Uname.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/jni/Wait.cxx b/frysk-sys/frysk/sys/jni/Wait.cxx -index 8d6fb22..1cbcc98 100644 ---- a/frysk-sys/frysk/sys/jni/Wait.cxx -+++ b/frysk-sys/frysk/sys/jni/Wait.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/poll/Poll.java b/frysk-sys/frysk/sys/poll/Poll.java -index bef9c0a..5ce4c51d 100644 ---- a/frysk-sys/frysk/sys/poll/Poll.java -+++ b/frysk-sys/frysk/sys/poll/Poll.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/poll/PollBuilder.java b/frysk-sys/frysk/sys/poll/PollBuilder.java -index d3f6c3d..ce30614 100644 ---- a/frysk-sys/frysk/sys/poll/PollBuilder.java -+++ b/frysk-sys/frysk/sys/poll/PollBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/poll/PollFileDescriptors.java b/frysk-sys/frysk/sys/poll/PollFileDescriptors.java -index 0f1380e..bd93758 100644 ---- a/frysk-sys/frysk/sys/poll/PollFileDescriptors.java -+++ b/frysk-sys/frysk/sys/poll/PollFileDescriptors.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/poll/jni/Poll.cxx b/frysk-sys/frysk/sys/poll/jni/Poll.cxx -index 85950c0..480b9a5 100644 ---- a/frysk-sys/frysk/sys/poll/jni/Poll.cxx -+++ b/frysk-sys/frysk/sys/poll/jni/Poll.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/poll/jni/PollFileDescriptors.cxx b/frysk-sys/frysk/sys/poll/jni/PollFileDescriptors.cxx -index 586d34c..198d1c7 100644 ---- a/frysk-sys/frysk/sys/poll/jni/PollFileDescriptors.cxx -+++ b/frysk-sys/frysk/sys/poll/jni/PollFileDescriptors.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/AuxvBuilder.java b/frysk-sys/frysk/sys/proc/AuxvBuilder.java -index fda5bb0..5d6274e 100644 ---- a/frysk-sys/frysk/sys/proc/AuxvBuilder.java -+++ b/frysk-sys/frysk/sys/proc/AuxvBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/CmdLineBuilder.java b/frysk-sys/frysk/sys/proc/CmdLineBuilder.java -index 9869dbc..316732a 100644 ---- a/frysk-sys/frysk/sys/proc/CmdLineBuilder.java -+++ b/frysk-sys/frysk/sys/proc/CmdLineBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/Exe.java b/frysk-sys/frysk/sys/proc/Exe.java -index 23e33be..827ad30 100644 ---- a/frysk-sys/frysk/sys/proc/Exe.java -+++ b/frysk-sys/frysk/sys/proc/Exe.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/MapsBuilder.java b/frysk-sys/frysk/sys/proc/MapsBuilder.java -index 1880fca..2d7c53d 100644 ---- a/frysk-sys/frysk/sys/proc/MapsBuilder.java -+++ b/frysk-sys/frysk/sys/proc/MapsBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/Mem.java b/frysk-sys/frysk/sys/proc/Mem.java -index bb4302a..68aaa39 100644 ---- a/frysk-sys/frysk/sys/proc/Mem.java -+++ b/frysk-sys/frysk/sys/proc/Mem.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/ProcBuilder.java b/frysk-sys/frysk/sys/proc/ProcBuilder.java -index 0641dff..c215b5d 100644 ---- a/frysk-sys/frysk/sys/proc/ProcBuilder.java -+++ b/frysk-sys/frysk/sys/proc/ProcBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/Stat.java b/frysk-sys/frysk/sys/proc/Stat.java -index d75da6b..0c57203 100644 ---- a/frysk-sys/frysk/sys/proc/Stat.java -+++ b/frysk-sys/frysk/sys/proc/Stat.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/Status.java b/frysk-sys/frysk/sys/proc/Status.java -index 0590f4e..da8e159 100644 ---- a/frysk-sys/frysk/sys/proc/Status.java -+++ b/frysk-sys/frysk/sys/proc/Status.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/TestAuxv.java b/frysk-sys/frysk/sys/proc/TestAuxv.java -index 33c81b9..ba6aadf 100644 ---- a/frysk-sys/frysk/sys/proc/TestAuxv.java -+++ b/frysk-sys/frysk/sys/proc/TestAuxv.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/TestCmdLine.java b/frysk-sys/frysk/sys/proc/TestCmdLine.java -index a7f8a08..06693ee 100644 ---- a/frysk-sys/frysk/sys/proc/TestCmdLine.java -+++ b/frysk-sys/frysk/sys/proc/TestCmdLine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/TestLib.java b/frysk-sys/frysk/sys/proc/TestLib.java -index 78ac909..3b2b9a7 100644 ---- a/frysk-sys/frysk/sys/proc/TestLib.java -+++ b/frysk-sys/frysk/sys/proc/TestLib.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/TestMaps.java b/frysk-sys/frysk/sys/proc/TestMaps.java -index 611a45c..22f4690 100644 ---- a/frysk-sys/frysk/sys/proc/TestMaps.java -+++ b/frysk-sys/frysk/sys/proc/TestMaps.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/TestProcBuilder.java b/frysk-sys/frysk/sys/proc/TestProcBuilder.java -index c01cf38..dc6dd76 100644 ---- a/frysk-sys/frysk/sys/proc/TestProcBuilder.java -+++ b/frysk-sys/frysk/sys/proc/TestProcBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/TestStat.java b/frysk-sys/frysk/sys/proc/TestStat.java -index f57c0e2..1d5ce20 100644 ---- a/frysk-sys/frysk/sys/proc/TestStat.java -+++ b/frysk-sys/frysk/sys/proc/TestStat.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/TestStatus.java b/frysk-sys/frysk/sys/proc/TestStatus.java -index e826c64..9c85ec5 100644 ---- a/frysk-sys/frysk/sys/proc/TestStatus.java -+++ b/frysk-sys/frysk/sys/proc/TestStatus.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/jni/AuxvBuilder.cxx b/frysk-sys/frysk/sys/proc/jni/AuxvBuilder.cxx -index ef013aa..0a1c19f 100644 ---- a/frysk-sys/frysk/sys/proc/jni/AuxvBuilder.cxx -+++ b/frysk-sys/frysk/sys/proc/jni/AuxvBuilder.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx b/frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx -index cb0b1ec..c96dcc1 100644 ---- a/frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx -+++ b/frysk-sys/frysk/sys/proc/jni/CmdLineBuilder.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/jni/Exe.cxx b/frysk-sys/frysk/sys/proc/jni/Exe.cxx -index 162e56a..4d2624f 100644 ---- a/frysk-sys/frysk/sys/proc/jni/Exe.cxx -+++ b/frysk-sys/frysk/sys/proc/jni/Exe.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/jni/MapsBuilder.cxx b/frysk-sys/frysk/sys/proc/jni/MapsBuilder.cxx -index 9309107..cbf5e0d 100644 ---- a/frysk-sys/frysk/sys/proc/jni/MapsBuilder.cxx -+++ b/frysk-sys/frysk/sys/proc/jni/MapsBuilder.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx b/frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx -index 2cc52ae..6ca105d 100644 ---- a/frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx -+++ b/frysk-sys/frysk/sys/proc/jni/ProcBuilder.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/jni/Stat.cxx b/frysk-sys/frysk/sys/proc/jni/Stat.cxx -index 57eb199..1b90874 100644 ---- a/frysk-sys/frysk/sys/proc/jni/Stat.cxx -+++ b/frysk-sys/frysk/sys/proc/jni/Stat.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/proc/jni/Status.cxx b/frysk-sys/frysk/sys/proc/jni/Status.cxx -index 8bcf600..d35f906 100644 ---- a/frysk-sys/frysk/sys/proc/jni/Status.cxx -+++ b/frysk-sys/frysk/sys/proc/jni/Status.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/BlockSpace.java b/frysk-sys/frysk/sys/ptrace/BlockSpace.java -index 916fc1a..fadc8bc 100644 ---- a/frysk-sys/frysk/sys/ptrace/BlockSpace.java -+++ b/frysk-sys/frysk/sys/ptrace/BlockSpace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/ByteSpace.java b/frysk-sys/frysk/sys/ptrace/ByteSpace.java -index e28b906..6d99b9a 100644 ---- a/frysk-sys/frysk/sys/ptrace/ByteSpace.java -+++ b/frysk-sys/frysk/sys/ptrace/ByteSpace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/Ptrace.java b/frysk-sys/frysk/sys/ptrace/Ptrace.java -index aa5b3b8..6b9b287 100644 ---- a/frysk-sys/frysk/sys/ptrace/Ptrace.java -+++ b/frysk-sys/frysk/sys/ptrace/Ptrace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/TestAddressSpace.java b/frysk-sys/frysk/sys/ptrace/TestAddressSpace.java -index 05c9cb9..673de9d 100644 ---- a/frysk-sys/frysk/sys/ptrace/TestAddressSpace.java -+++ b/frysk-sys/frysk/sys/ptrace/TestAddressSpace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/TestPtrace.java b/frysk-sys/frysk/sys/ptrace/TestPtrace.java -index 4cf2ad9..29c6c7d 100644 ---- a/frysk-sys/frysk/sys/ptrace/TestPtrace.java -+++ b/frysk-sys/frysk/sys/ptrace/TestPtrace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/TestRegisterSet.java b/frysk-sys/frysk/sys/ptrace/TestRegisterSet.java -index df351bb..31850da 100644 ---- a/frysk-sys/frysk/sys/ptrace/TestRegisterSet.java -+++ b/frysk-sys/frysk/sys/ptrace/TestRegisterSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/jni/BlockSpace.cxx b/frysk-sys/frysk/sys/ptrace/jni/BlockSpace.cxx -index 00f54e8..d06e181 100644 ---- a/frysk-sys/frysk/sys/ptrace/jni/BlockSpace.cxx -+++ b/frysk-sys/frysk/sys/ptrace/jni/BlockSpace.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/jni/ByteSpace.cxx b/frysk-sys/frysk/sys/ptrace/jni/ByteSpace.cxx -index 0fa5fe3..6ca011f 100644 ---- a/frysk-sys/frysk/sys/ptrace/jni/ByteSpace.cxx -+++ b/frysk-sys/frysk/sys/ptrace/jni/ByteSpace.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx b/frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx -index dce86e5..949d343 100644 ---- a/frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx -+++ b/frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx b/frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx -index 46e2edd..736dfd7 100644 ---- a/frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx -+++ b/frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Action.java b/frysk-sys/frysk/sys/termios/Action.java -index 874e034..d369060 100644 ---- a/frysk-sys/frysk/sys/termios/Action.java -+++ b/frysk-sys/frysk/sys/termios/Action.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Control.java b/frysk-sys/frysk/sys/termios/Control.java -index 663a344..d9c1f6e 100644 ---- a/frysk-sys/frysk/sys/termios/Control.java -+++ b/frysk-sys/frysk/sys/termios/Control.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Flow.java b/frysk-sys/frysk/sys/termios/Flow.java -index 762fada..25e16ee 100644 ---- a/frysk-sys/frysk/sys/termios/Flow.java -+++ b/frysk-sys/frysk/sys/termios/Flow.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Flush.java b/frysk-sys/frysk/sys/termios/Flush.java -index 68a96d7..e03c6c2 100644 ---- a/frysk-sys/frysk/sys/termios/Flush.java -+++ b/frysk-sys/frysk/sys/termios/Flush.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Input.java b/frysk-sys/frysk/sys/termios/Input.java -index e2ada47..a3d0662 100644 ---- a/frysk-sys/frysk/sys/termios/Input.java -+++ b/frysk-sys/frysk/sys/termios/Input.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Local.java b/frysk-sys/frysk/sys/termios/Local.java -index 5193d2f..49dde45 100644 ---- a/frysk-sys/frysk/sys/termios/Local.java -+++ b/frysk-sys/frysk/sys/termios/Local.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Mode.java b/frysk-sys/frysk/sys/termios/Mode.java -index 194de4c..949fed4 100644 ---- a/frysk-sys/frysk/sys/termios/Mode.java -+++ b/frysk-sys/frysk/sys/termios/Mode.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Output.java b/frysk-sys/frysk/sys/termios/Output.java -index b0bb645..c9e2e34 100644 ---- a/frysk-sys/frysk/sys/termios/Output.java -+++ b/frysk-sys/frysk/sys/termios/Output.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Special.java b/frysk-sys/frysk/sys/termios/Special.java -index 9222426..4c91833 100644 ---- a/frysk-sys/frysk/sys/termios/Special.java -+++ b/frysk-sys/frysk/sys/termios/Special.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Speed.java b/frysk-sys/frysk/sys/termios/Speed.java -index a9ab62d..aee5465 100644 ---- a/frysk-sys/frysk/sys/termios/Speed.java -+++ b/frysk-sys/frysk/sys/termios/Speed.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/Termios.java b/frysk-sys/frysk/sys/termios/Termios.java -index af3898f..ba12f2d 100644 ---- a/frysk-sys/frysk/sys/termios/Termios.java -+++ b/frysk-sys/frysk/sys/termios/Termios.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/TestLib.java b/frysk-sys/frysk/sys/termios/TestLib.java -index afd6384..44d9053 100644 ---- a/frysk-sys/frysk/sys/termios/TestLib.java -+++ b/frysk-sys/frysk/sys/termios/TestLib.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/TestMode.java b/frysk-sys/frysk/sys/termios/TestMode.java -index 8167e1a..a5a7d93 100644 ---- a/frysk-sys/frysk/sys/termios/TestMode.java -+++ b/frysk-sys/frysk/sys/termios/TestMode.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/TestSpecial.java b/frysk-sys/frysk/sys/termios/TestSpecial.java -index 9ce6245..d04d10c 100644 ---- a/frysk-sys/frysk/sys/termios/TestSpecial.java -+++ b/frysk-sys/frysk/sys/termios/TestSpecial.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/TestSpeed.java b/frysk-sys/frysk/sys/termios/TestSpeed.java -index 4f298db..abb2d51 100644 ---- a/frysk-sys/frysk/sys/termios/TestSpeed.java -+++ b/frysk-sys/frysk/sys/termios/TestSpeed.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/TestTermios.java b/frysk-sys/frysk/sys/termios/TestTermios.java -index 5e44318..a60b39a 100644 ---- a/frysk-sys/frysk/sys/termios/TestTermios.java -+++ b/frysk-sys/frysk/sys/termios/TestTermios.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Control.cxx b/frysk-sys/frysk/sys/termios/jni/Control.cxx -index d5f303f..6a7c251 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Control.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Control.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Flow.cxx b/frysk-sys/frysk/sys/termios/jni/Flow.cxx -index 0556a9a..afbe154 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Flow.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Flow.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Flush.cxx b/frysk-sys/frysk/sys/termios/jni/Flush.cxx -index d8cefe3..772dc5b 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Flush.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Flush.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Input.cxx b/frysk-sys/frysk/sys/termios/jni/Input.cxx -index 07c97a9..81132c6 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Input.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Input.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Local.cxx b/frysk-sys/frysk/sys/termios/jni/Local.cxx -index 4b996df..7abd8ab 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Local.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Local.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Output.cxx b/frysk-sys/frysk/sys/termios/jni/Output.cxx -index c5cf839..e608b5f 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Output.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Output.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Special.cxx b/frysk-sys/frysk/sys/termios/jni/Special.cxx -index 8d6afc1..721f54e 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Special.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Special.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Speed.cxx b/frysk-sys/frysk/sys/termios/jni/Speed.cxx -index 513cc28..678a64d 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Speed.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Speed.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/sys/termios/jni/Termios.cxx b/frysk-sys/frysk/sys/termios/jni/Termios.cxx -index 6c0f472..f99768f 100644 ---- a/frysk-sys/frysk/sys/termios/jni/Termios.cxx -+++ b/frysk-sys/frysk/sys/termios/jni/Termios.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/ForkFactory.java b/frysk-sys/frysk/testbed/ForkFactory.java -index e42f50c..b33568a 100644 ---- a/frysk-sys/frysk/testbed/ForkFactory.java -+++ b/frysk-sys/frysk/testbed/ForkFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/LocalMemory.java b/frysk-sys/frysk/testbed/LocalMemory.java -index c9ff821..a756d16 100644 ---- a/frysk-sys/frysk/testbed/LocalMemory.java -+++ b/frysk-sys/frysk/testbed/LocalMemory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/TearDownExpect.java b/frysk-sys/frysk/testbed/TearDownExpect.java -index 7bbdcfb..ee7b7bc 100644 ---- a/frysk-sys/frysk/testbed/TearDownExpect.java -+++ b/frysk-sys/frysk/testbed/TearDownExpect.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/TearDownFile.java b/frysk-sys/frysk/testbed/TearDownFile.java -index 2e266c3..46a0f9c 100644 ---- a/frysk-sys/frysk/testbed/TearDownFile.java -+++ b/frysk-sys/frysk/testbed/TearDownFile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/TearDownProcess.java b/frysk-sys/frysk/testbed/TearDownProcess.java -index f13d1d6..c9483fb 100644 ---- a/frysk-sys/frysk/testbed/TearDownProcess.java -+++ b/frysk-sys/frysk/testbed/TearDownProcess.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/TestForkFactory.java b/frysk-sys/frysk/testbed/TestForkFactory.java -index f71407e..920aa63 100644 ---- a/frysk-sys/frysk/testbed/TestForkFactory.java -+++ b/frysk-sys/frysk/testbed/TestForkFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/TestLocalMemory.java b/frysk-sys/frysk/testbed/TestLocalMemory.java -index 4d4447c..911e938 100644 ---- a/frysk-sys/frysk/testbed/TestLocalMemory.java -+++ b/frysk-sys/frysk/testbed/TestLocalMemory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/TestTearDownExpect.java b/frysk-sys/frysk/testbed/TestTearDownExpect.java -index b76ee78..08a7bfb 100644 ---- a/frysk-sys/frysk/testbed/TestTearDownExpect.java -+++ b/frysk-sys/frysk/testbed/TestTearDownExpect.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/TestTearDownFile.java b/frysk-sys/frysk/testbed/TestTearDownFile.java -index eb82dd2..58bfa4a 100644 ---- a/frysk-sys/frysk/testbed/TestTearDownFile.java -+++ b/frysk-sys/frysk/testbed/TestTearDownFile.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/TestTearDownProcess.java b/frysk-sys/frysk/testbed/TestTearDownProcess.java -index f713305..2ab99b7 100644 ---- a/frysk-sys/frysk/testbed/TestTearDownProcess.java -+++ b/frysk-sys/frysk/testbed/TestTearDownProcess.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/jni/ForkFactory.cxx b/frysk-sys/frysk/testbed/jni/ForkFactory.cxx -index 034c596..dd3ba77 100644 ---- a/frysk-sys/frysk/testbed/jni/ForkFactory.cxx -+++ b/frysk-sys/frysk/testbed/jni/ForkFactory.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/frysk/testbed/jni/LocalMemory.cxx b/frysk-sys/frysk/testbed/jni/LocalMemory.cxx -index 9324cf2..4cfd9a8 100644 ---- a/frysk-sys/frysk/testbed/jni/LocalMemory.cxx -+++ b/frysk-sys/frysk/testbed/jni/LocalMemory.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/inua/eio/ArrayByteBuffer.java b/frysk-sys/inua/eio/ArrayByteBuffer.java -index fe4c752..2d07a5a 100644 ---- a/frysk-sys/inua/eio/ArrayByteBuffer.java -+++ b/frysk-sys/inua/eio/ArrayByteBuffer.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/Buffer.java b/frysk-sys/inua/eio/Buffer.java -index 94fc0c0..f013b33 100644 ---- a/frysk-sys/inua/eio/Buffer.java -+++ b/frysk-sys/inua/eio/Buffer.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/BufferOverflowException.java b/frysk-sys/inua/eio/BufferOverflowException.java -index 14943a8..806bf2f 100644 ---- a/frysk-sys/inua/eio/BufferOverflowException.java -+++ b/frysk-sys/inua/eio/BufferOverflowException.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/BufferUnderflowException.java b/frysk-sys/inua/eio/BufferUnderflowException.java -index 2f9f7ed..8969ec2 100644 ---- a/frysk-sys/inua/eio/BufferUnderflowException.java -+++ b/frysk-sys/inua/eio/BufferUnderflowException.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/ByteBuffer.java b/frysk-sys/inua/eio/ByteBuffer.java -index 873e481..e7c5c83 100644 ---- a/frysk-sys/inua/eio/ByteBuffer.java -+++ b/frysk-sys/inua/eio/ByteBuffer.java -@@ -11,8 +11,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/ByteFileBuffer.java b/frysk-sys/inua/eio/ByteFileBuffer.java -index 2a96738..0acfb18 100644 ---- a/frysk-sys/inua/eio/ByteFileBuffer.java -+++ b/frysk-sys/inua/eio/ByteFileBuffer.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/ByteOrder.java b/frysk-sys/inua/eio/ByteOrder.java -index 41081fd..84a33bc 100644 ---- a/frysk-sys/inua/eio/ByteOrder.java -+++ b/frysk-sys/inua/eio/ByteOrder.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/ByteOrdered.java b/frysk-sys/inua/eio/ByteOrdered.java -index 384446b..b841f29 100644 ---- a/frysk-sys/inua/eio/ByteOrdered.java -+++ b/frysk-sys/inua/eio/ByteOrdered.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/Ctring.java b/frysk-sys/inua/eio/Ctring.java -index 86f8b29..8c22da9 100644 ---- a/frysk-sys/inua/eio/Ctring.java -+++ b/frysk-sys/inua/eio/Ctring.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/ReaderByteBuffer.java b/frysk-sys/inua/eio/ReaderByteBuffer.java -index 3163a84..a0b54be 100644 ---- a/frysk-sys/inua/eio/ReaderByteBuffer.java -+++ b/frysk-sys/inua/eio/ReaderByteBuffer.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/TestByteBuffer.java b/frysk-sys/inua/eio/TestByteBuffer.java -index cde2826..e095962 100644 ---- a/frysk-sys/inua/eio/TestByteBuffer.java -+++ b/frysk-sys/inua/eio/TestByteBuffer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/inua/eio/TestGet.java b/frysk-sys/inua/eio/TestGet.java -index f5377ed..9e76d69 100644 ---- a/frysk-sys/inua/eio/TestGet.java -+++ b/frysk-sys/inua/eio/TestGet.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/TestLib.java b/frysk-sys/inua/eio/TestLib.java -index 9f74105..bc338f4 100644 ---- a/frysk-sys/inua/eio/TestLib.java -+++ b/frysk-sys/inua/eio/TestLib.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/TestPut.java b/frysk-sys/inua/eio/TestPut.java -index 0db4b58..8e63832 100644 ---- a/frysk-sys/inua/eio/TestPut.java -+++ b/frysk-sys/inua/eio/TestPut.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/TestWordSize.java b/frysk-sys/inua/eio/TestWordSize.java -index 982d80f..da20bbc 100644 ---- a/frysk-sys/inua/eio/TestWordSize.java -+++ b/frysk-sys/inua/eio/TestWordSize.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/ULong.java b/frysk-sys/inua/eio/ULong.java -index 52a4525..48ff3d0 100644 ---- a/frysk-sys/inua/eio/ULong.java -+++ b/frysk-sys/inua/eio/ULong.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/eio/WordSized.java b/frysk-sys/inua/eio/WordSized.java -index f709643..401830d 100644 ---- a/frysk-sys/inua/eio/WordSized.java -+++ b/frysk-sys/inua/eio/WordSized.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/Mask.java b/frysk-sys/inua/util/Mask.java -index 2790a6d..eb48148 100644 ---- a/frysk-sys/inua/util/Mask.java -+++ b/frysk-sys/inua/util/Mask.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/Misc.java b/frysk-sys/inua/util/Misc.java -index ea278cf..f5602c3 100644 ---- a/frysk-sys/inua/util/Misc.java -+++ b/frysk-sys/inua/util/Misc.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/Pool.java b/frysk-sys/inua/util/Pool.java -index 607af25..a489386 100644 ---- a/frysk-sys/inua/util/Pool.java -+++ b/frysk-sys/inua/util/Pool.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/Print.java b/frysk-sys/inua/util/Print.java -index c4f6617..33e4f50 100644 ---- a/frysk-sys/inua/util/Print.java -+++ b/frysk-sys/inua/util/Print.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/PrintWriter.java b/frysk-sys/inua/util/PrintWriter.java -index 9e65aa5..4b8f3e5 100644 ---- a/frysk-sys/inua/util/PrintWriter.java -+++ b/frysk-sys/inua/util/PrintWriter.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/Scanner.java b/frysk-sys/inua/util/Scanner.java -index a810826..04b2af7 100644 ---- a/frysk-sys/inua/util/Scanner.java -+++ b/frysk-sys/inua/util/Scanner.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/TestPool.java b/frysk-sys/inua/util/TestPool.java -index c82bc92..f623aed 100644 ---- a/frysk-sys/inua/util/TestPool.java -+++ b/frysk-sys/inua/util/TestPool.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/addr2line.java b/frysk-sys/inua/util/addr2line.java -index 9647533..8f5b6aa 100644 ---- a/frysk-sys/inua/util/addr2line.java -+++ b/frysk-sys/inua/util/addr2line.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/inua/util/line2addr.java b/frysk-sys/inua/util/line2addr.java -index 735c3fa..db521d2 100644 ---- a/frysk-sys/inua/util/line2addr.java -+++ b/frysk-sys/inua/util/line2addr.java -@@ -10,8 +10,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with INUA; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with INUA. If not, see . - // - // In addition, as a special exception, Andrew Cagney. gives You the - // additional right to link the code of INUA with code not covered -diff --git a/frysk-sys/jnixx/ClassVisitor.java b/frysk-sys/jnixx/ClassVisitor.java -index e3cdbf6..b2cafaa 100644 ---- a/frysk-sys/jnixx/ClassVisitor.java -+++ b/frysk-sys/jnixx/ClassVisitor.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/ClassWalker.java b/frysk-sys/jnixx/ClassWalker.java -index cf64c8a..45ed0dd 100644 ---- a/frysk-sys/jnixx/ClassWalker.java -+++ b/frysk-sys/jnixx/ClassWalker.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/JniBindings.java b/frysk-sys/jnixx/JniBindings.java -index 49a594e..b7557a6 100644 ---- a/frysk-sys/jnixx/JniBindings.java -+++ b/frysk-sys/jnixx/JniBindings.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/Main.java b/frysk-sys/jnixx/Main.java -index a9940d5..d68bd1a 100644 ---- a/frysk-sys/jnixx/Main.java -+++ b/frysk-sys/jnixx/Main.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/Native.java b/frysk-sys/jnixx/Native.java -index 9cbdd54..79a092c 100644 ---- a/frysk-sys/jnixx/Native.java -+++ b/frysk-sys/jnixx/Native.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/PrintCxxDefinitions.java b/frysk-sys/jnixx/PrintCxxDefinitions.java -index ae5af0e..032f100 100644 ---- a/frysk-sys/jnixx/PrintCxxDefinitions.java -+++ b/frysk-sys/jnixx/PrintCxxDefinitions.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/PrintDeclarations.java b/frysk-sys/jnixx/PrintDeclarations.java -index bd74e92..db0117d 100644 ---- a/frysk-sys/jnixx/PrintDeclarations.java -+++ b/frysk-sys/jnixx/PrintDeclarations.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/PrintHxxDefinitions.java b/frysk-sys/jnixx/PrintHxxDefinitions.java -index 191bef7..3ac6445 100644 ---- a/frysk-sys/jnixx/PrintHxxDefinitions.java -+++ b/frysk-sys/jnixx/PrintHxxDefinitions.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/PrintNamespaces.java b/frysk-sys/jnixx/PrintNamespaces.java -index 7208fcd..e566c5f 100644 ---- a/frysk-sys/jnixx/PrintNamespaces.java -+++ b/frysk-sys/jnixx/PrintNamespaces.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/Printer.java b/frysk-sys/jnixx/Printer.java -index dcd130f..c1d3bf6 100644 ---- a/frysk-sys/jnixx/Printer.java -+++ b/frysk-sys/jnixx/Printer.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/TestJnixx.java b/frysk-sys/jnixx/TestJnixx.java -index b99b02f..1cb7182 100644 ---- a/frysk-sys/jnixx/TestJnixx.java -+++ b/frysk-sys/jnixx/TestJnixx.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/bounds.hxx b/frysk-sys/jnixx/bounds.hxx -index 01aa4b7..e115238 100644 ---- a/frysk-sys/jnixx/bounds.hxx -+++ b/frysk-sys/jnixx/bounds.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/elements.cxx b/frysk-sys/jnixx/elements.cxx -index 4200f2f..ef8f813 100644 ---- a/frysk-sys/jnixx/elements.cxx -+++ b/frysk-sys/jnixx/elements.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/elements.hxx b/frysk-sys/jnixx/elements.hxx -index c61103c..7356b18 100644 ---- a/frysk-sys/jnixx/elements.hxx -+++ b/frysk-sys/jnixx/elements.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/exceptions.cxx b/frysk-sys/jnixx/exceptions.cxx -index 928e0fd..b2039b3 100644 ---- a/frysk-sys/jnixx/exceptions.cxx -+++ b/frysk-sys/jnixx/exceptions.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/exceptions.hxx b/frysk-sys/jnixx/exceptions.hxx -index 36fde6f..0376a80 100644 ---- a/frysk-sys/jnixx/exceptions.hxx -+++ b/frysk-sys/jnixx/exceptions.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/jni/Native.cxx b/frysk-sys/jnixx/jni/Native.cxx -index 646aee4..5d6f2ff 100644 ---- a/frysk-sys/jnixx/jni/Native.cxx -+++ b/frysk-sys/jnixx/jni/Native.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/jnixx.hxx b/frysk-sys/jnixx/jnixx.hxx -index aef95bb..b3e8ccd 100644 ---- a/frysk-sys/jnixx/jnixx.hxx -+++ b/frysk-sys/jnixx/jnixx.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/logging.cxx b/frysk-sys/jnixx/logging.cxx -index 1d6fa00..0588059 100644 ---- a/frysk-sys/jnixx/logging.cxx -+++ b/frysk-sys/jnixx/logging.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/logging.hxx b/frysk-sys/jnixx/logging.hxx -index 0729e17..af35f0c 100644 ---- a/frysk-sys/jnixx/logging.hxx -+++ b/frysk-sys/jnixx/logging.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/print.cxx b/frysk-sys/jnixx/print.cxx -index 7653f97..568d10f 100644 ---- a/frysk-sys/jnixx/print.cxx -+++ b/frysk-sys/jnixx/print.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/print.hxx b/frysk-sys/jnixx/print.hxx -index 2ccb731..7358e25 100644 ---- a/frysk-sys/jnixx/print.hxx -+++ b/frysk-sys/jnixx/print.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/scan.cxx b/frysk-sys/jnixx/scan.cxx -index 29b8700..ef37606 100644 ---- a/frysk-sys/jnixx/scan.cxx -+++ b/frysk-sys/jnixx/scan.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/jnixx/scan.hxx b/frysk-sys/jnixx/scan.hxx -index c2e8db5..83988b3 100644 ---- a/frysk-sys/jnixx/scan.hxx -+++ b/frysk-sys/jnixx/scan.hxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/Disassembler.java b/frysk-sys/lib/dwfl/Disassembler.java -index fc49753..472fa22 100644 ---- a/frysk-sys/lib/dwfl/Disassembler.java -+++ b/frysk-sys/lib/dwfl/Disassembler.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwAccess.shenum b/frysk-sys/lib/dwfl/DwAccess.shenum -index 734a5ce..6badac5 100644 ---- a/frysk-sys/lib/dwfl/DwAccess.shenum -+++ b/frysk-sys/lib/dwfl/DwAccess.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwAt.shenum b/frysk-sys/lib/dwfl/DwAt.shenum -index 87d9124..a9f47b0 100644 ---- a/frysk-sys/lib/dwfl/DwAt.shenum -+++ b/frysk-sys/lib/dwfl/DwAt.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwAte.shenum b/frysk-sys/lib/dwfl/DwAte.shenum -index a22f143..6651580 100644 ---- a/frysk-sys/lib/dwfl/DwAte.shenum -+++ b/frysk-sys/lib/dwfl/DwAte.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwAttributeNotFoundException.java b/frysk-sys/lib/dwfl/DwAttributeNotFoundException.java -index 86d03e5..4d04b1c 100644 ---- a/frysk-sys/lib/dwfl/DwAttributeNotFoundException.java -+++ b/frysk-sys/lib/dwfl/DwAttributeNotFoundException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwDs.shenum b/frysk-sys/lib/dwfl/DwDs.shenum -index 2aad95d..0f350db 100644 ---- a/frysk-sys/lib/dwfl/DwDs.shenum -+++ b/frysk-sys/lib/dwfl/DwDs.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwDsc.shenum b/frysk-sys/lib/dwfl/DwDsc.shenum -index 480ced2..5b02419 100644 ---- a/frysk-sys/lib/dwfl/DwDsc.shenum -+++ b/frysk-sys/lib/dwfl/DwDsc.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwEnd.shenum b/frysk-sys/lib/dwfl/DwEnd.shenum -index cc4dabd..78ef991 100644 ---- a/frysk-sys/lib/dwfl/DwEnd.shenum -+++ b/frysk-sys/lib/dwfl/DwEnd.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwException.java b/frysk-sys/lib/dwfl/DwException.java -index b07e83e..d9fdd71 100644 ---- a/frysk-sys/lib/dwfl/DwException.java -+++ b/frysk-sys/lib/dwfl/DwException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwInl.shenum b/frysk-sys/lib/dwfl/DwInl.shenum -index 76cc958..835fecf 100644 ---- a/frysk-sys/lib/dwfl/DwInl.shenum -+++ b/frysk-sys/lib/dwfl/DwInl.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwOp.shenum b/frysk-sys/lib/dwfl/DwOp.shenum -index 08f58de..542f10f 100644 ---- a/frysk-sys/lib/dwfl/DwOp.shenum -+++ b/frysk-sys/lib/dwfl/DwOp.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwOrd.shenum b/frysk-sys/lib/dwfl/DwOrd.shenum -index 1755cd1..7d43a48 100644 ---- a/frysk-sys/lib/dwfl/DwOrd.shenum -+++ b/frysk-sys/lib/dwfl/DwOrd.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwTag.shenum b/frysk-sys/lib/dwfl/DwTag.shenum -index 21be4df..3f74aa0 100644 ---- a/frysk-sys/lib/dwfl/DwTag.shenum -+++ b/frysk-sys/lib/dwfl/DwTag.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/Dwarf.java b/frysk-sys/lib/dwfl/Dwarf.java -index 2c93a44..6a81d97 100644 ---- a/frysk-sys/lib/dwfl/Dwarf.java -+++ b/frysk-sys/lib/dwfl/Dwarf.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwarfCommand.java b/frysk-sys/lib/dwfl/DwarfCommand.java -index a06ea92..dc0a55b 100644 ---- a/frysk-sys/lib/dwfl/DwarfCommand.java -+++ b/frysk-sys/lib/dwfl/DwarfCommand.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwarfDie.java b/frysk-sys/lib/dwfl/DwarfDie.java -index bc2d24b..c0de7cd 100644 ---- a/frysk-sys/lib/dwfl/DwarfDie.java -+++ b/frysk-sys/lib/dwfl/DwarfDie.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwarfDieFactory.java b/frysk-sys/lib/dwfl/DwarfDieFactory.java -index 5dc4e77..4c01fac 100644 ---- a/frysk-sys/lib/dwfl/DwarfDieFactory.java -+++ b/frysk-sys/lib/dwfl/DwarfDieFactory.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwarfException.java b/frysk-sys/lib/dwfl/DwarfException.java -index 1f804ad..1997501 100644 ---- a/frysk-sys/lib/dwfl/DwarfException.java -+++ b/frysk-sys/lib/dwfl/DwarfException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwarfOp.java b/frysk-sys/lib/dwfl/DwarfOp.java -index 4d1c66c..5d1e743 100644 ---- a/frysk-sys/lib/dwfl/DwarfOp.java -+++ b/frysk-sys/lib/dwfl/DwarfOp.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/Dwfl.java b/frysk-sys/lib/dwfl/Dwfl.java -index eec1b59..6c78e41 100644 ---- a/frysk-sys/lib/dwfl/Dwfl.java -+++ b/frysk-sys/lib/dwfl/Dwfl.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwflDie.java b/frysk-sys/lib/dwfl/DwflDie.java -index e4764ef..7e5f554 100644 ---- a/frysk-sys/lib/dwfl/DwflDie.java -+++ b/frysk-sys/lib/dwfl/DwflDie.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwflLine.java b/frysk-sys/lib/dwfl/DwflLine.java -index 061e475..2536840 100644 ---- a/frysk-sys/lib/dwfl/DwflLine.java -+++ b/frysk-sys/lib/dwfl/DwflLine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwflModule.java b/frysk-sys/lib/dwfl/DwflModule.java -index 859f5e9..02e4faf 100644 ---- a/frysk-sys/lib/dwfl/DwflModule.java -+++ b/frysk-sys/lib/dwfl/DwflModule.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/DwflTestbed.java b/frysk-sys/lib/dwfl/DwflTestbed.java -index 3c931bf..175ad0f 100644 ---- a/frysk-sys/lib/dwfl/DwflTestbed.java -+++ b/frysk-sys/lib/dwfl/DwflTestbed.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/Elf.java b/frysk-sys/lib/dwfl/Elf.java -index 28a0aa1..5ac8cd5 100644 ---- a/frysk-sys/lib/dwfl/Elf.java -+++ b/frysk-sys/lib/dwfl/Elf.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfArchiveHeader.java b/frysk-sys/lib/dwfl/ElfArchiveHeader.java -index 852ed4d..bd9cdd0 100644 ---- a/frysk-sys/lib/dwfl/ElfArchiveHeader.java -+++ b/frysk-sys/lib/dwfl/ElfArchiveHeader.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfArchiveSymbol.java b/frysk-sys/lib/dwfl/ElfArchiveSymbol.java -index c576a09..b417a89 100644 ---- a/frysk-sys/lib/dwfl/ElfArchiveSymbol.java -+++ b/frysk-sys/lib/dwfl/ElfArchiveSymbol.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfCommand.java b/frysk-sys/lib/dwfl/ElfCommand.java -index 5dac6ab..6dec153 100644 ---- a/frysk-sys/lib/dwfl/ElfCommand.java -+++ b/frysk-sys/lib/dwfl/ElfCommand.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfData.java b/frysk-sys/lib/dwfl/ElfData.java -index 8198e4c..b2259d7 100644 ---- a/frysk-sys/lib/dwfl/ElfData.java -+++ b/frysk-sys/lib/dwfl/ElfData.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfDynamic.java b/frysk-sys/lib/dwfl/ElfDynamic.java -index 4883cd6..05eb6b9 100644 ---- a/frysk-sys/lib/dwfl/ElfDynamic.java -+++ b/frysk-sys/lib/dwfl/ElfDynamic.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfEHeader.java b/frysk-sys/lib/dwfl/ElfEHeader.java -index 83acc8f..15d44a8 100644 ---- a/frysk-sys/lib/dwfl/ElfEHeader.java -+++ b/frysk-sys/lib/dwfl/ElfEHeader.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfEMachine.java b/frysk-sys/lib/dwfl/ElfEMachine.java -index 066af8b..34cb3cc 100644 ---- a/frysk-sys/lib/dwfl/ElfEMachine.java -+++ b/frysk-sys/lib/dwfl/ElfEMachine.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfError.java b/frysk-sys/lib/dwfl/ElfError.java -index 06bc322..c2d4b65 100644 ---- a/frysk-sys/lib/dwfl/ElfError.java -+++ b/frysk-sys/lib/dwfl/ElfError.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfException.java b/frysk-sys/lib/dwfl/ElfException.java -index 6454a34..6053a25 100644 ---- a/frysk-sys/lib/dwfl/ElfException.java -+++ b/frysk-sys/lib/dwfl/ElfException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfFileException.java b/frysk-sys/lib/dwfl/ElfFileException.java -index f60cd40..3a6351c 100644 ---- a/frysk-sys/lib/dwfl/ElfFileException.java -+++ b/frysk-sys/lib/dwfl/ElfFileException.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfFlags.java b/frysk-sys/lib/dwfl/ElfFlags.java -index 85a6d8f..bde305f 100644 ---- a/frysk-sys/lib/dwfl/ElfFlags.java -+++ b/frysk-sys/lib/dwfl/ElfFlags.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfKind.java b/frysk-sys/lib/dwfl/ElfKind.java -index 84caafa..2abf2b3 100644 ---- a/frysk-sys/lib/dwfl/ElfKind.java -+++ b/frysk-sys/lib/dwfl/ElfKind.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfNhdr.java b/frysk-sys/lib/dwfl/ElfNhdr.java -index 02bc7b6..9553acf 100644 ---- a/frysk-sys/lib/dwfl/ElfNhdr.java -+++ b/frysk-sys/lib/dwfl/ElfNhdr.java -@@ -12,8 +12,7 @@ - //General Public License for more details. - - //You should have received a copy of the GNU General Public License --//along with FRYSK; if not, write to the Free Software Foundation, --//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+//along with FRYSK. If not, see . - - //In addition, as a special exception, Red Hat, Inc. gives You the - //additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfNhdrType.java b/frysk-sys/lib/dwfl/ElfNhdrType.java -index 45c83cf..f231d23 100644 ---- a/frysk-sys/lib/dwfl/ElfNhdrType.java -+++ b/frysk-sys/lib/dwfl/ElfNhdrType.java -@@ -13,8 +13,7 @@ - //General Public License for more details. - - //You should have received a copy of the GNU General Public License --//along with FRYSK; if not, write to the Free Software Foundation, --//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+//along with FRYSK. If not, see . - - //In addition, as a special exception, Red Hat, Inc. gives You the - //additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfPHeader.java b/frysk-sys/lib/dwfl/ElfPHeader.java -index 86f0d80..9d0e374 100644 ---- a/frysk-sys/lib/dwfl/ElfPHeader.java -+++ b/frysk-sys/lib/dwfl/ElfPHeader.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfPrAuxv.java b/frysk-sys/lib/dwfl/ElfPrAuxv.java -index 37b2d81..dfe6b09 100644 ---- a/frysk-sys/lib/dwfl/ElfPrAuxv.java -+++ b/frysk-sys/lib/dwfl/ElfPrAuxv.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfPrFPRegSet.java b/frysk-sys/lib/dwfl/ElfPrFPRegSet.java -index 94fd9bb..3cdc659 100644 ---- a/frysk-sys/lib/dwfl/ElfPrFPRegSet.java -+++ b/frysk-sys/lib/dwfl/ElfPrFPRegSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfPrXFPRegSet.java b/frysk-sys/lib/dwfl/ElfPrXFPRegSet.java -index 55c93d3..c8d9806 100644 ---- a/frysk-sys/lib/dwfl/ElfPrXFPRegSet.java -+++ b/frysk-sys/lib/dwfl/ElfPrXFPRegSet.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfPrpsinfo.java b/frysk-sys/lib/dwfl/ElfPrpsinfo.java -index ce14b7d..c4ccd49 100644 ---- a/frysk-sys/lib/dwfl/ElfPrpsinfo.java -+++ b/frysk-sys/lib/dwfl/ElfPrpsinfo.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfPrstatus.java b/frysk-sys/lib/dwfl/ElfPrstatus.java -index 819a182..eb9ac43 100644 ---- a/frysk-sys/lib/dwfl/ElfPrstatus.java -+++ b/frysk-sys/lib/dwfl/ElfPrstatus.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfRel.java b/frysk-sys/lib/dwfl/ElfRel.java -index bb1674d..e173cfb 100644 ---- a/frysk-sys/lib/dwfl/ElfRel.java -+++ b/frysk-sys/lib/dwfl/ElfRel.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfSection.java b/frysk-sys/lib/dwfl/ElfSection.java -index 359ee57..183016b 100644 ---- a/frysk-sys/lib/dwfl/ElfSection.java -+++ b/frysk-sys/lib/dwfl/ElfSection.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfSectionHeader.java b/frysk-sys/lib/dwfl/ElfSectionHeader.java -index 320bf14..f312f04 100644 ---- a/frysk-sys/lib/dwfl/ElfSectionHeader.java -+++ b/frysk-sys/lib/dwfl/ElfSectionHeader.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfSectionHeaderTypes.java b/frysk-sys/lib/dwfl/ElfSectionHeaderTypes.java -index 41c0b09..ed1a5c5 100644 ---- a/frysk-sys/lib/dwfl/ElfSectionHeaderTypes.java -+++ b/frysk-sys/lib/dwfl/ElfSectionHeaderTypes.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfSymbol.java b/frysk-sys/lib/dwfl/ElfSymbol.java -index 1e18c0e..b4d57e2 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbol.java -+++ b/frysk-sys/lib/dwfl/ElfSymbol.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfSymbolBinding.java b/frysk-sys/lib/dwfl/ElfSymbolBinding.java -index aa2384a..3c3db51 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbolBinding.java -+++ b/frysk-sys/lib/dwfl/ElfSymbolBinding.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfSymbolType.java b/frysk-sys/lib/dwfl/ElfSymbolType.java -index 99674d4..34b3da5 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbolType.java -+++ b/frysk-sys/lib/dwfl/ElfSymbolType.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfSymbolVersion.java b/frysk-sys/lib/dwfl/ElfSymbolVersion.java -index 7590de9..76585a6 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbolVersion.java -+++ b/frysk-sys/lib/dwfl/ElfSymbolVersion.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfSymbolVisibility.java b/frysk-sys/lib/dwfl/ElfSymbolVisibility.java -index f2e9553..9466600 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbolVisibility.java -+++ b/frysk-sys/lib/dwfl/ElfSymbolVisibility.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ElfType.java b/frysk-sys/lib/dwfl/ElfType.java -index 56e8e9a..05d9f6a 100644 ---- a/frysk-sys/lib/dwfl/ElfType.java -+++ b/frysk-sys/lib/dwfl/ElfType.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/Instruction.java b/frysk-sys/lib/dwfl/Instruction.java -index d6ab20e..c377273 100644 ---- a/frysk-sys/lib/dwfl/Instruction.java -+++ b/frysk-sys/lib/dwfl/Instruction.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/ModuleElfBias.java b/frysk-sys/lib/dwfl/ModuleElfBias.java -index 02cec0a..821c315 100644 ---- a/frysk-sys/lib/dwfl/ModuleElfBias.java -+++ b/frysk-sys/lib/dwfl/ModuleElfBias.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/SymbolBuilder.java b/frysk-sys/lib/dwfl/SymbolBuilder.java -index 8a6d92f..cbadedb 100644 ---- a/frysk-sys/lib/dwfl/SymbolBuilder.java -+++ b/frysk-sys/lib/dwfl/SymbolBuilder.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/TestDwarfDie.java b/frysk-sys/lib/dwfl/TestDwarfDie.java -index 3d18a0c..a090ccf 100644 ---- a/frysk-sys/lib/dwfl/TestDwarfDie.java -+++ b/frysk-sys/lib/dwfl/TestDwarfDie.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/TestDwfl.java b/frysk-sys/lib/dwfl/TestDwfl.java -index 2d2bcc4..fa6dc83 100644 ---- a/frysk-sys/lib/dwfl/TestDwfl.java -+++ b/frysk-sys/lib/dwfl/TestDwfl.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/TestElf.java b/frysk-sys/lib/dwfl/TestElf.java -index 9f35cfa..49d18c4 100644 ---- a/frysk-sys/lib/dwfl/TestElf.java -+++ b/frysk-sys/lib/dwfl/TestElf.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/DwException.cxx b/frysk-sys/lib/dwfl/jni/DwException.cxx -index abd01de..148b6d1 100644 ---- a/frysk-sys/lib/dwfl/jni/DwException.cxx -+++ b/frysk-sys/lib/dwfl/jni/DwException.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/Dwarf.cxx b/frysk-sys/lib/dwfl/jni/Dwarf.cxx -index a3af80f..323abf9 100644 ---- a/frysk-sys/lib/dwfl/jni/Dwarf.cxx -+++ b/frysk-sys/lib/dwfl/jni/Dwarf.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/DwarfDie.cxx b/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -index cbb0cb1..b4071c7 100644 ---- a/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -+++ b/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/Dwfl.cxx b/frysk-sys/lib/dwfl/jni/Dwfl.cxx -index 672d052..00b2c70 100644 ---- a/frysk-sys/lib/dwfl/jni/Dwfl.cxx -+++ b/frysk-sys/lib/dwfl/jni/Dwfl.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/DwflLine.cxx b/frysk-sys/lib/dwfl/jni/DwflLine.cxx -index 32d67ad..5c60411 100644 ---- a/frysk-sys/lib/dwfl/jni/DwflLine.cxx -+++ b/frysk-sys/lib/dwfl/jni/DwflLine.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/DwflModule.cxx b/frysk-sys/lib/dwfl/jni/DwflModule.cxx -index d645edf..877e0b2 100644 ---- a/frysk-sys/lib/dwfl/jni/DwflModule.cxx -+++ b/frysk-sys/lib/dwfl/jni/DwflModule.cxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/Elf.cxx b/frysk-sys/lib/dwfl/jni/Elf.cxx -index cc16245..da9d2a9 100644 ---- a/frysk-sys/lib/dwfl/jni/Elf.cxx -+++ b/frysk-sys/lib/dwfl/jni/Elf.cxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfArchiveSymbol.cxx b/frysk-sys/lib/dwfl/jni/ElfArchiveSymbol.cxx -index 6539667..e1614ca 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfArchiveSymbol.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfArchiveSymbol.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfData.cxx b/frysk-sys/lib/dwfl/jni/ElfData.cxx -index 33552c4..d8cd4fe 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfData.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfData.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfDynamic.cxx b/frysk-sys/lib/dwfl/jni/ElfDynamic.cxx -index 7878ad3..03803a3 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfDynamic.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfDynamic.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfNhdr.cxx b/frysk-sys/lib/dwfl/jni/ElfNhdr.cxx -index c11ba6d..f453d88 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfNhdr.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfNhdr.cxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfPrAuxv.cxx b/frysk-sys/lib/dwfl/jni/ElfPrAuxv.cxx -index 09debcb..e599e5c 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfPrAuxv.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfPrAuxv.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfPrFPRegSet.cxx b/frysk-sys/lib/dwfl/jni/ElfPrFPRegSet.cxx -index 3eaf148..a355cea 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfPrFPRegSet.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfPrFPRegSet.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfPrXFPRegSet.cxx b/frysk-sys/lib/dwfl/jni/ElfPrXFPRegSet.cxx -index e21a481..3debd8d 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfPrXFPRegSet.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfPrXFPRegSet.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfPrpsinfo.cxx b/frysk-sys/lib/dwfl/jni/ElfPrpsinfo.cxx -index 48ede0d..5806d9a 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfPrpsinfo.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfPrpsinfo.cxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfPrstatus.cxx b/frysk-sys/lib/dwfl/jni/ElfPrstatus.cxx -index 704a230..9bd7168 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfPrstatus.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfPrstatus.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfRel.cxx b/frysk-sys/lib/dwfl/jni/ElfRel.cxx -index a72ef3a..2e6f6ec 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfRel.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfRel.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfSection.cxx b/frysk-sys/lib/dwfl/jni/ElfSection.cxx -index 0aa3bd9..5123ac1 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfSection.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfSection.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/dwfl/jni/ElfSymbol.cxx b/frysk-sys/lib/dwfl/jni/ElfSymbol.cxx -index c00ea47..dee571f 100644 ---- a/frysk-sys/lib/dwfl/jni/ElfSymbol.cxx -+++ b/frysk-sys/lib/dwfl/jni/ElfSymbol.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/stdcpp/Demangler.java b/frysk-sys/lib/stdcpp/Demangler.java -index d738cf3..1dd355c 100644 ---- a/frysk-sys/lib/stdcpp/Demangler.java -+++ b/frysk-sys/lib/stdcpp/Demangler.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/stdcpp/TestDemangler.java b/frysk-sys/lib/stdcpp/TestDemangler.java -index 994a029..aa982f3 100644 ---- a/frysk-sys/lib/stdcpp/TestDemangler.java -+++ b/frysk-sys/lib/stdcpp/TestDemangler.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/stdcpp/jni/Demangler.cxx b/frysk-sys/lib/stdcpp/jni/Demangler.cxx -index 43cae48..4b39799 100644 ---- a/frysk-sys/lib/stdcpp/jni/Demangler.cxx -+++ b/frysk-sys/lib/stdcpp/jni/Demangler.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/AddressSpace.java b/frysk-sys/lib/unwind/AddressSpace.java -index 0f69dd2..5f72771 100644 ---- a/frysk-sys/lib/unwind/AddressSpace.java -+++ b/frysk-sys/lib/unwind/AddressSpace.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/Cursor.java b/frysk-sys/lib/unwind/Cursor.java -index da977c1..6f56ff8 100644 ---- a/frysk-sys/lib/unwind/Cursor.java -+++ b/frysk-sys/lib/unwind/Cursor.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/ElfImage.java b/frysk-sys/lib/unwind/ElfImage.java -index 872c45d..d82314f 100644 ---- a/frysk-sys/lib/unwind/ElfImage.java -+++ b/frysk-sys/lib/unwind/ElfImage.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/GenRegEnum.awk b/frysk-sys/lib/unwind/GenRegEnum.awk -index fa6fcb6..377c49b 100644 ---- a/frysk-sys/lib/unwind/GenRegEnum.awk -+++ b/frysk-sys/lib/unwind/GenRegEnum.awk -@@ -15,8 +15,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/ProcInfo.java b/frysk-sys/lib/unwind/ProcInfo.java -index a76f0db..78665a4 100644 ---- a/frysk-sys/lib/unwind/ProcInfo.java -+++ b/frysk-sys/lib/unwind/ProcInfo.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/TestUnwind.java b/frysk-sys/lib/unwind/TestUnwind.java -index 687f2d9..6ba013d 100644 ---- a/frysk-sys/lib/unwind/TestUnwind.java -+++ b/frysk-sys/lib/unwind/TestUnwind.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/Unwind.java b/frysk-sys/lib/unwind/Unwind.java -index 540888c..ff67d78 100644 ---- a/frysk-sys/lib/unwind/Unwind.java -+++ b/frysk-sys/lib/unwind/Unwind.java -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/UnwindPPC32.java-sh b/frysk-sys/lib/unwind/UnwindPPC32.java-sh -index 3d3050e..251d547 100644 ---- a/frysk-sys/lib/unwind/UnwindPPC32.java-sh -+++ b/frysk-sys/lib/unwind/UnwindPPC32.java-sh -@@ -16,8 +16,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/UnwindPPC64.java-sh b/frysk-sys/lib/unwind/UnwindPPC64.java-sh -index ec3e721..dd5d415 100644 ---- a/frysk-sys/lib/unwind/UnwindPPC64.java-sh -+++ b/frysk-sys/lib/unwind/UnwindPPC64.java-sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum b/frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum -index 785bd65..ca41d4f 100644 ---- a/frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum -+++ b/frysk-sys/lib/unwind/UnwindRegistersPPC32.shenum -@@ -16,8 +16,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum b/frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum -index b370bb7..28cbede 100644 ---- a/frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum -+++ b/frysk-sys/lib/unwind/UnwindRegistersPPC64.shenum -@@ -16,8 +16,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/UnwindRegistersX86.shenum b/frysk-sys/lib/unwind/UnwindRegistersX86.shenum -index 3e097b1..f7b8615 100644 ---- a/frysk-sys/lib/unwind/UnwindRegistersX86.shenum -+++ b/frysk-sys/lib/unwind/UnwindRegistersX86.shenum -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/UnwindRegistersX8664.shenum b/frysk-sys/lib/unwind/UnwindRegistersX8664.shenum -index c5d9d44..b5273fc 100644 ---- a/frysk-sys/lib/unwind/UnwindRegistersX8664.shenum -+++ b/frysk-sys/lib/unwind/UnwindRegistersX8664.shenum -@@ -14,8 +14,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/UnwindX86.java-sh b/frysk-sys/lib/unwind/UnwindX86.java-sh -index ec3e721..dd5d415 100644 ---- a/frysk-sys/lib/unwind/UnwindX86.java-sh -+++ b/frysk-sys/lib/unwind/UnwindX86.java-sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/UnwindX8664.java-sh b/frysk-sys/lib/unwind/UnwindX8664.java-sh -index ec3e721..dd5d415 100644 ---- a/frysk-sys/lib/unwind/UnwindX8664.java-sh -+++ b/frysk-sys/lib/unwind/UnwindX8664.java-sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/jni/Unwind.cxx b/frysk-sys/lib/unwind/jni/Unwind.cxx -index 21809d1..1ac97dc 100644 ---- a/frysk-sys/lib/unwind/jni/Unwind.cxx -+++ b/frysk-sys/lib/unwind/jni/Unwind.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/jni/UnwindH.hxx b/frysk-sys/lib/unwind/jni/UnwindH.hxx -index 6c16f39..0ebfadf 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindH.hxx -+++ b/frysk-sys/lib/unwind/jni/UnwindH.hxx -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/jni/UnwindPPC32.cxx b/frysk-sys/lib/unwind/jni/UnwindPPC32.cxx -index aeb48c0..2919d52 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindPPC32.cxx -+++ b/frysk-sys/lib/unwind/jni/UnwindPPC32.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/jni/UnwindPPC64.cxx b/frysk-sys/lib/unwind/jni/UnwindPPC64.cxx -index dcd2e49..a5e2d8b 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindPPC64.cxx -+++ b/frysk-sys/lib/unwind/jni/UnwindPPC64.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/jni/UnwindX86.cxx b/frysk-sys/lib/unwind/jni/UnwindX86.cxx -index 20b49a5..c84684a 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindX86.cxx -+++ b/frysk-sys/lib/unwind/jni/UnwindX86.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-sys/lib/unwind/jni/UnwindX8664.cxx b/frysk-sys/lib/unwind/jni/UnwindX8664.cxx -index b638d4a..e5f8525 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindX8664.cxx -+++ b/frysk-sys/lib/unwind/jni/UnwindX8664.cxx -@@ -12,8 +12,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with FRYSK; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with FRYSK. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of FRYSK with code not covered -diff --git a/frysk-top/.settings/org.eclipse.jdt.ui.prefs b/frysk-top/.settings/org.eclipse.jdt.ui.prefs -index ade979c..f11d429 100644 ---- a/frysk-top/.settings/org.eclipse.jdt.ui.prefs -+++ b/frysk-top/.settings/org.eclipse.jdt.ui.prefs -@@ -1,5 +1,4 @@ - #Thu Jun 21 14:46:19 GMT-04:00 2007 --org.eclipse.jdt.ui.text.custom_code_templates=\n - eclipse.preferences.version=1 - internal.default.compliance=default - formatter_profile=org.eclipse.jdt.ui.default.sun_profile -diff --git a/frysk-top/Makefile.am b/frysk-top/Makefile.am -index 49444fb..3e82230 100644 ---- a/frysk-top/Makefile.am -+++ b/frysk-top/Makefile.am -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-top/autogen.sh b/frysk-top/autogen.sh -index 3b6be8c..da01510 100755 ---- a/frysk-top/autogen.sh -+++ b/frysk-top/autogen.sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-top/bootstrap.sh b/frysk-top/bootstrap.sh -index d63559a..a426ed4 100755 ---- a/frysk-top/bootstrap.sh -+++ b/frysk-top/bootstrap.sh -@@ -13,8 +13,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-top/configure.ac b/frysk-top/configure.ac -index bf122ce..f57136a 100644 ---- a/frysk-top/configure.ac -+++ b/frysk-top/configure.ac -@@ -12,8 +12,7 @@ - # General Public License for more details. - # - # You should have received a copy of the GNU General Public License --# along with FRYSK; if not, write to the Free Software Foundation, --# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+# along with FRYSK. If not, see . - # - # In addition, as a special exception, Red Hat, Inc. gives You the - # additional right to link the code of FRYSK with code not covered -diff --git a/frysk-utrace/utracer/judb/Utrace.java b/frysk-utrace/utracer/judb/Utrace.java -index 7612aad..ec2ed37 100644 ---- a/frysk-utrace/utracer/judb/Utrace.java -+++ b/frysk-utrace/utracer/judb/Utrace.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/swing/Udb.java b/frysk-utrace/utracer/swing/Udb.java -index 5c6a685..c7fd223 100644 ---- a/frysk-utrace/utracer/swing/Udb.java -+++ b/frysk-utrace/utracer/swing/Udb.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/swing/Utrace.java b/frysk-utrace/utracer/swing/Utrace.java -index 3eb0db0..fd8b6a7 100644 ---- a/frysk-utrace/utracer/swing/Utrace.java -+++ b/frysk-utrace/utracer/swing/Utrace.java -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/udb-i386.c b/frysk-utrace/utracer/udb-i386.c -index 4f94421..d9da4c1 100644 ---- a/frysk-utrace/utracer/udb-i386.c -+++ b/frysk-utrace/utracer/udb-i386.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/udb-i386.h b/frysk-utrace/utracer/udb-i386.h -index 7f0087f..817d592 100644 ---- a/frysk-utrace/utracer/udb-i386.h -+++ b/frysk-utrace/utracer/udb-i386.h -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/udb-module.c b/frysk-utrace/utracer/udb-module.c -index 1873f74..53a71da 100644 ---- a/frysk-utrace/utracer/udb-module.c -+++ b/frysk-utrace/utracer/udb-module.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/udb-response.c b/frysk-utrace/utracer/udb-response.c -index 9944b0f..e999263 100644 ---- a/frysk-utrace/utracer/udb-response.c -+++ b/frysk-utrace/utracer/udb-response.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/udb-text-ui.c b/frysk-utrace/utracer/udb-text-ui.c -index 3f24c51..6537109 100644 ---- a/frysk-utrace/utracer/udb-text-ui.c -+++ b/frysk-utrace/utracer/udb-text-ui.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/udb.c b/frysk-utrace/utracer/udb.c -index 999d6e3..56419df 100644 ---- a/frysk-utrace/utracer/udb.c -+++ b/frysk-utrace/utracer/udb.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/udb.h b/frysk-utrace/utracer/udb.h -index 40e7560..43d9339 100644 ---- a/frysk-utrace/utracer/udb.h -+++ b/frysk-utrace/utracer/udb.h -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/utracer/include/utracer-errmsgs.h b/frysk-utrace/utracer/utracer/include/utracer-errmsgs.h -index 0a3113f..5b677a4 100644 ---- a/frysk-utrace/utracer/utracer/include/utracer-errmsgs.h -+++ b/frysk-utrace/utracer/utracer/include/utracer-errmsgs.h -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/utracer/include/utracer.h b/frysk-utrace/utracer/utracer/include/utracer.h -index f73327d..b5ffacd 100644 ---- a/frysk-utrace/utracer/utracer/include/utracer.h -+++ b/frysk-utrace/utracer/utracer/include/utracer.h -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/utracer/module/utracer-base.c b/frysk-utrace/utracer/utracer/module/utracer-base.c -index 31dd6a1..989b768 100644 ---- a/frysk-utrace/utracer/utracer/module/utracer-base.c -+++ b/frysk-utrace/utracer/utracer/module/utracer-base.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/utracer/module/utracer-cf-io.c b/frysk-utrace/utracer/utracer/module/utracer-cf-io.c -index b4aac1c..5fed7d6 100644 ---- a/frysk-utrace/utracer/utracer/module/utracer-cf-io.c -+++ b/frysk-utrace/utracer/utracer/module/utracer-cf-io.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/utracer/module/utracer-if-io.c b/frysk-utrace/utracer/utracer/module/utracer-if-io.c -index 21ac013..23ecae3 100644 ---- a/frysk-utrace/utracer/utracer/module/utracer-if-io.c -+++ b/frysk-utrace/utracer/utracer/module/utracer-if-io.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/utracer/module/utracer-ioctl.c b/frysk-utrace/utracer/utracer/module/utracer-ioctl.c -index defc85a..7431980 100644 ---- a/frysk-utrace/utracer/utracer/module/utracer-ioctl.c -+++ b/frysk-utrace/utracer/utracer/module/utracer-ioctl.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/utracer/module/utracer-private.h b/frysk-utrace/utracer/utracer/module/utracer-private.h -index 6cbb4f6..76d7b77 100644 ---- a/frysk-utrace/utracer/utracer/module/utracer-private.h -+++ b/frysk-utrace/utracer/utracer/module/utracer-private.h -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered -diff --git a/frysk-utrace/utracer/utracer/utracer/utracer.c b/frysk-utrace/utracer/utracer/utracer/utracer.c -index cb08f10..95c82aa 100644 ---- a/frysk-utrace/utracer/utracer/utracer/utracer.c -+++ b/frysk-utrace/utracer/utracer/utracer/utracer.c -@@ -13,8 +13,7 @@ - // General Public License for more details. - // - // You should have received a copy of the GNU General Public License --// along with Utracer; if not, write to the Free Software Foundation, --// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -+// along with Utracer. If not, see . - // - // In addition, as a special exception, Red Hat, Inc. gives You the - // additional right to link the code of Utracer with code not covered diff --git a/frysk-0.4-fedpkg-lint-solib.patch b/frysk-0.4-fedpkg-lint-solib.patch deleted file mode 100644 index 332eb65..0000000 --- a/frysk-0.4-fedpkg-lint-solib.patch +++ /dev/null @@ -1,72 +0,0 @@ -commit 7d3895fb2331f5f9d2304a901c7bce7e32cdf93b -Author: Andrew Cagney -Date: Tue Apr 19 16:49:23 2016 -0400 - - Install the JNI .so in $(pkglibdir) - - So it isn't in the default ld library path. - - Patch: frysk-0.4-fedpkg-lint-solib.patch - -diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh -index 11a83dc..7802cbb 100755 ---- a/frysk-common/Makefile.gen.sh -+++ b/frysk-common/Makefile.gen.sh -@@ -508,7 +508,7 @@ for suffix in .java .java-sh .mkenum .shenum .java-in ; do - ${name}: Makefile - mkdir -p ${d} - echo "#!/bin/sh" >> ${name}.tmp -- echo exec /usr/bin/java -cp \"\$(INSTALLED_CLASSPATH)\" ${name} \"\\\$\$@\" >> ${name}.tmp -+ echo exec /usr/bin/java -Djava.library.path=\"\$(pkglibdir)\" -cp \"\$(INSTALLED_CLASSPATH)\" ${name} \"\\\$\$@\" >> ${name}.tmp - chmod a+x ${name}.tmp - mv ${name}.tmp ${name} - EOF -@@ -808,7 +808,7 @@ if automake_variable_defined lib${GEN_MAKENAME}_jni_a_SOURCES ; then - JNIXX_CLASSES = - noinst_LIBRARIES += lib${GEN_DIRNAME}-jni.a - lib${GEN_MAKENAME}_jni_so_SOURCES = --solib_PROGRAMS += lib${GEN_DIRNAME}-jni.so -+jni_PROGRAMS += lib${GEN_DIRNAME}-jni.so - lib${GEN_DIRNAME}-jni.so: lib${GEN_DIRNAME}-jni.a - jni: lib${GEN_DIRNAME}-jni.so - lib${GEN_MAKENAME}_jni_a_SOURCES += jni.cxx -diff --git a/frysk-common/Makefile.rules b/frysk-common/Makefile.rules -index e109084..ccd1535 100644 ---- a/frysk-common/Makefile.rules -+++ b/frysk-common/Makefile.rules -@@ -438,14 +438,14 @@ lib$(GEN_DIRNAME)-jni.so: lib$(GEN_DIRNAME)-jni.a - mv $@.tmp $@ - - --# Clueless automake: Use a phony DATA entry to convince AUTOMAKE that --# it really should install a .so file into LIBDIR. The obvious --# choice, lib_LIBRARIES, attracts an error because .so isn't a valid --# extension (serious!); mean while LTLIBRARIES insists that the world --# should use LIBTOOL. -- --solibdir = $(libdir) --solib_PROGRAMS = -+# Clueless automake: Use a phony entry to convince AUTOMAKE that it -+# really should install a .so file in $(PKGLIBDIR). The obvious -+# choice, pkglib_LIBRARIES, attracts an error because .so isn't a -+# valid extension (serious!); mean while LTLIBRARIES insists that the -+# world should use LIBTOOL. -+ -+jnidir = $(pkglibdir) -+jni_PROGRAMS = - - # The shared java directory (typically /usr/share/java/; contains - # things like .jar files) but here is architecture specific as frsyk, -diff --git a/frysk-top/bootstrap.sh b/frysk-top/bootstrap.sh -index a426ed4..b02af86 100755 ---- a/frysk-top/bootstrap.sh -+++ b/frysk-top/bootstrap.sh -@@ -44,7 +44,7 @@ cd `dirname $0` - - # Update any bootstraped sub directories. - --for s in */bootstrap.sh -+for s in frysk-{imports,sys,core}/bootstrap.sh - do - d=`dirname $s` - if test -d $d -a x"$d" != x"frysk-top"; then diff --git a/frysk-0.4-gcc-fcommon.patch b/frysk-0.4-gcc-fcommon.patch deleted file mode 100644 index 7591fdf..0000000 --- a/frysk-0.4-gcc-fcommon.patch +++ /dev/null @@ -1,132 +0,0 @@ -diff --git a/frysk-imports/libunwind/src/Makefile.am b/frysk-imports/libunwind/src/Makefile.am -index c187a9a4c..1f551b953 100644 ---- a/frysk-imports/libunwind/src/Makefile.am -+++ b/frysk-imports/libunwind/src/Makefile.am -@@ -110,7 +110,8 @@ libunwind_la_SOURCES_generic = \ - mi/Gget_reg.c mi/Gset_reg.c \ - mi/Gget_fpreg.c mi/Gset_fpreg.c \ - mi/Gget_unwind_table.c \ -- mi/Gset_caching_policy.c -+ mi/Gset_caching_policy.c \ -+ mi/dyn-info-list.c - - if SUPPORT_CXX_EXCEPTIONS - libunwind_la_SOURCES_local_unwind = \ -@@ -131,7 +132,10 @@ endif - libunwind_la_SOURCES_local_nounwind = \ - $(libunwind_la_SOURCES_os_local) \ - mi/backtrace.c \ -- mi/dyn-cancel.c mi/dyn-info-list.c mi/dyn-register.c \ -+ mi/dyn-cancel.c \ -+ mi/dyn-info-list.c \ -+ mi/dyn-info-list-addr.c \ -+ mi/dyn-register.c \ - mi/Ldyn-extract.c mi/Lfind_dynamic_proc_info.c \ - mi/Lget_accessors.c \ - mi/Lget_proc_info_by_ip.c mi/Lget_proc_name.c \ -diff --git a/frysk-imports/libunwind/src/mi/dyn-info-list-addr.c b/frysk-imports/libunwind/src/mi/dyn-info-list-addr.c -new file mode 100644 -index 000000000..2bde9edc8 ---- /dev/null -+++ b/frysk-imports/libunwind/src/mi/dyn-info-list-addr.c -@@ -0,0 +1,32 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2001-2002, 2005 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "libunwind_i.h" -+ -+PROTECTED unw_word_t -+_U_dyn_info_list_addr (void) -+{ -+ return (unw_word_t) (uintptr_t) &_U_dyn_info_list; -+} -diff --git a/frysk-imports/libunwind/src/mi/dyn-info-list.c b/frysk-imports/libunwind/src/mi/dyn-info-list.c -index 1a0790d36..69e4998ea 100644 ---- a/frysk-imports/libunwind/src/mi/dyn-info-list.c -+++ b/frysk-imports/libunwind/src/mi/dyn-info-list.c -@@ -27,8 +27,3 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - --PROTECTED unw_word_t --_U_dyn_info_list_addr (void) --{ -- return (unw_word_t) (uintptr_t) &_U_dyn_info_list; --} -diff --git a/frysk-imports/libunwind/src/x86/Ginit.c b/frysk-imports/libunwind/src/x86/Ginit.c -index b05a08edb..79bd611c0 100644 ---- a/frysk-imports/libunwind/src/x86/Ginit.c -+++ b/frysk-imports/libunwind/src/x86/Ginit.c -@@ -54,8 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg) - - # endif /* UNW_LOCAL_ONLY */ - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- - /* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with -diff --git a/frysk-imports/libunwind/src/x86_64/Ginit.c b/frysk-imports/libunwind/src/x86_64/Ginit.c -index 782757622..36e30af8e 100644 ---- a/frysk-imports/libunwind/src/x86_64/Ginit.c -+++ b/frysk-imports/libunwind/src/x86_64/Ginit.c -@@ -48,8 +48,6 @@ static struct unw_addr_space local_addr_space; - - PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; - --HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -- - /* XXX fix me: there is currently no way to locate the dyn-info list - by a remote unwinder. On ia64, this is done via a special - unwind-table entry. Perhaps something similar can be done with -diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am -index f69fd01b8..c54cb8a92 100644 ---- a/frysk-sys/Makefile.am -+++ b/frysk-sys/Makefile.am -@@ -1,7 +1,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2007, 2008, Red Hat Inc. --# Copyright 2016, Andrew Cagney -+# Copyright 2016, 2020, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -56,9 +56,12 @@ JNI_LIBRARY_LIST += -lstdc++ - JNI_LIBRARY_LIST += -laudit - JNI_LIBRARY_LIST += -ldw - # Bundle in the local libunwind code. --JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/dwarf/.libs/*.o --JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/mi/.libs/G*.o --JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/mi/.libs/{init,mempool,flush_cache}.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-x86_64/src/dwarf/.libs/*.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-x86_64/src/mi/.libs/G*.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/mi/.libs/init.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/mi/.libs/mempool.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/mi/.libs/flush_cache.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-x86_64/src/mi/.libs/dyn-info-list.o - JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/x86/.libs/*.o - JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/x86_64/.libs/*.o - diff --git a/frysk-0.4-gelf-newphdr.patch b/frysk-0.4-gelf-newphdr.patch deleted file mode 100644 index 3830293..0000000 --- a/frysk-0.4-gelf-newphdr.patch +++ /dev/null @@ -1,98 +0,0 @@ -commit cd3f1f8c78b488a30218c8201d4d510e15428965 -Author: Andrew Cagney -Date: Fri Jan 6 16:09:16 2017 -0500 - - Ignore return type of gelf_newphdr() - - At some point it changes from long int to void *. - - Patch: frysk-0.4-gelf-newphdr.patch - -diff --git a/frysk-sys/lib/dwfl/Elf.java b/frysk-sys/lib/dwfl/Elf.java -index 5ac8cd5..0c93dd0 100644 ---- a/frysk-sys/lib/dwfl/Elf.java -+++ b/frysk-sys/lib/dwfl/Elf.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, 2006, 2007, 2008 Red Hat Inc. -+// Copyright 2017 Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -213,8 +214,8 @@ public class Elf { - * @param count - * @return The program header table - */ -- public int createNewPHeader (long count) { -- return elf_newphdr(count); -+ public void createNewPHeader (long count) { -+ elf_newphdr(count); - } - - /** -@@ -426,7 +427,7 @@ public class Elf { - - protected native int elf_updatephdr(int index, ElfPHeader header); - -- protected native int elf_newphdr (long __cnt); -+ protected native void elf_newphdr (long __cnt); - - protected native long elf_offscn (long offset); - -diff --git a/frysk-sys/lib/dwfl/jni/DwarfDie.cxx b/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -index b4071c7..1e6d294 100644 ---- a/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -+++ b/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, 2007, 2008, Red Hat Inc. -+// Copyright (C) 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -405,7 +406,7 @@ lib::dwfl::DwarfDie::get_framebase(jnixx::env env, jlong var_die, - Dwarf_Attribute *fb_attr; - size_t fb_len; - -- if (dwarf_attr_integrate (die, DW_AT_location, &loc_attr) >= 0) { -+ if (dwarf_attr_integrate (die, DW_AT_location, &loc_attr)) { - size_t i = 0; - code = dwarf_getlocation_addr (&loc_attr,pc, &fb_expr, &fb_len, 5); - -@@ -436,7 +437,7 @@ lib::dwfl::DwarfDie::get_data_member_location(jnixx::env env, jlong var_die) { - Dwarf_Op *fb_expr; - size_t fb_len; - -- if (dwarf_attr_integrate (die, DW_AT_data_member_location, &loc_attr) >= 0) { -+ if (dwarf_attr_integrate (die, DW_AT_data_member_location, &loc_attr)) { - dwarf_getlocation (&loc_attr, &fb_expr, &fb_len); - if (fb_len > 0 && fb_expr[0].atom == DW_OP_plus_uconst) - return fb_expr[0].number; -diff --git a/frysk-sys/lib/dwfl/jni/Elf.cxx b/frysk-sys/lib/dwfl/jni/Elf.cxx -index da9d2a9..c22fa58 100644 ---- a/frysk-sys/lib/dwfl/jni/Elf.cxx -+++ b/frysk-sys/lib/dwfl/jni/Elf.cxx -@@ -1,7 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, 2007, 2008, Red Hat Inc. --// Copyright 2016, Andrew Cagney -+// Copyright 2016-2017, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -254,10 +254,9 @@ lib::dwfl::Elf::elf_updatephdr(jnixx::env env, jint index, - return ::gelf_update_phdr (elf, index, &header); - } - -- --jint -+void - lib::dwfl::Elf::elf_newphdr(jnixx::env env, jlong cnt) { -- return (jint) ::gelf_newphdr(ELF_POINTER, (size_t) cnt); -+ ::gelf_newphdr(ELF_POINTER, (size_t) cnt); - } - - jlong diff --git a/frysk-0.4-javac.patch b/frysk-0.4-javac.patch deleted file mode 100644 index d9a7bac..0000000 --- a/frysk-0.4-javac.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/frysk-common/frysk-common.ac b/frysk-common/frysk-common.ac -index 8d7f83780..c9a2be863 100644 ---- a/frysk-common/frysk-common.ac -+++ b/frysk-common/frysk-common.ac -@@ -151,10 +151,10 @@ AC_DEFUN([AC_LANG_COMPILER(Java)], []) - AU_DEFUN([AC_LANG_JAVAC], [AC_LANG(Java)]) - AC_LANG(Java) - --JAVAC='javac -source 1.4' --AS_IF([test x"$enable_werror" = xyes], -- [WERROR_JAVACFLAGS='-Werror -Xlint:all -Xlint:-options -Xlint:-cast'], -- [WERROR_JAVACFLAGS=]) -+JAVAC='javac' -+# AS_IF([test x"$enable_werror" = xyes], -+# [WERROR_JAVACFLAGS='-Werror -Xlint:all -Xlint:-options -Xlint:-cast'], -+# [WERROR_JAVACFLAGS=]) - AC_SUBST([JAVAC]) - AC_SUBST([JAVACFLAGS]) - AC_SUBST([WERROR_JAVACFLAGS]) -diff --git a/frysk-common/javadocs.sh b/frysk-common/javadocs.sh -index fa9b33fd4..01f4f3e1d 100644 ---- a/frysk-common/javadocs.sh -+++ b/frysk-common/javadocs.sh -@@ -93,7 +93,6 @@ for scope in public private ; do - -link ${jg}/libgconf-java-2.12.5/api/ \ - -link ${jg}/libvte-java-0.12.2/api/ \ - -overview ${overview} \ -- -source 1.4 \ - -d javadoc/$scope \ - -use \ - -linksource \ diff --git a/frysk-0.4-jline1-to-jline.patch b/frysk-0.4-jline1-to-jline.patch deleted file mode 100644 index c0bd293..0000000 --- a/frysk-0.4-jline1-to-jline.patch +++ /dev/null @@ -1,259 +0,0 @@ -diff --git a/frysk-core/configure.ac b/frysk-core/configure.ac -index 49bab9acb..69fc220b3 100644 ---- a/frysk-core/configure.ac -+++ b/frysk-core/configure.ac -@@ -47,7 +47,7 @@ m4_include([common/frysk-common.ac]) - AM_INIT_AUTOMAKE([subdir-objects foreign no-installinfo no-exeext no-dist]) - AC_FIND_FILE([antlr.jar], [/usr/share/java], ANTLR_JAR) - AC_FIND_FILE([junit.jar], [/usr/share/java], JUNIT_JAR) --AC_FIND_FILE([jline-1.0.jar], [/usr/lib/java/jline1], JLINE_JAR) -+AC_FIND_FILE([jline.jar], [/usr/share/java/jline2], JLINE_JAR) - - AC_CONFIG_FILES([Makefile]) - AC_OUTPUT -diff --git a/frysk-core/frysk/bindir/fhpd.java b/frysk-core/frysk/bindir/fhpd.java -index 3738a2c0c..5b4d69bb7 100644 ---- a/frysk-core/frysk/bindir/fhpd.java -+++ b/frysk-core/frysk/bindir/fhpd.java -@@ -51,8 +51,8 @@ import java.util.Observable; - import java.util.Observer; - - import frysk.hpd.CLI; --import jline.Completor; --import jline.ConsoleReader; -+import jline.console.completer.Completer; -+import jline.console.ConsoleReader; - import frysk.util.FlowControlWriter; - import frysk.proc.Manager; - import frysk.util.CommandlineParser; -@@ -67,9 +67,9 @@ public class fhpd { - private static int exitStatus; - private static String[] params; - -- final static class FhpdCompletor implements Completor { -+ final static class FhpdCompleter implements Completer { - CLI cli; -- public FhpdCompletor (CLI cli) { -+ public FhpdCompleter (CLI cli) { - this.cli = cli; - } - public int complete (String buffer, int cursor, List candidates) { -@@ -108,19 +108,16 @@ public class fhpd { - terminal.getObservable() - .addObserver(new TerminalObserver(writer)); - cli = new CLI("(fhpd) ", writer); -- reader = new ConsoleReader -- (new FileInputStream(java.io.FileDescriptor.in), -- printWriter, -- null, -- terminal); -+ reader = new ConsoleReader(new FileInputStream(java.io.FileDescriptor.in), -+ System.out, terminal); - } catch (IOException ioe) { - System.out.println("ERROR: Could not create a command line"); - System.out.print(ioe.getMessage()); - System.exit(1); - return; - } -- Completor fhpdCompletor = new FhpdCompletor(cli); -- reader.addCompletor(fhpdCompletor); -+ Completer fhpdCompleter = new FhpdCompleter(cli); -+ reader.addCompleter(fhpdCompleter); - } - public void execute() { - start(); -diff --git a/frysk-core/frysk/hpd/CompletionFactory.java b/frysk-core/frysk/hpd/CompletionFactory.java -index 3796a5d60..8e75051c7 100644 ---- a/frysk-core/frysk/hpd/CompletionFactory.java -+++ b/frysk-core/frysk/hpd/CompletionFactory.java -@@ -42,7 +42,7 @@ import java.util.List; - import java.util.Iterator; - import frysk.debuginfo.DebugInfoFrame; - import frysk.proc.Task; --import jline.FileNameCompletor; -+import jline.console.completer.FileNameCompleter; - import frysk.expr.ExprSearchEngine; - import frysk.expr.ExpressionFactory; - -@@ -99,14 +99,14 @@ class CompletionFactory { - // System.out.println("input.size()=" + input.size()); - if (input.size() == 0) { - int newOffset -- = new FileNameCompletor().complete("", 0, candidates); -+ = new FileNameCompleter().complete("", 0, candidates); - if (newOffset < 0) - return -1; - else - return newOffset + cursor; - } else { - Input.Token incomplete = input.incompleteToken(cursor); -- int newOffset = new FileNameCompletor() -+ int newOffset = new FileNameCompleter() - .complete(incomplete.value, incomplete.end - incomplete.start, - candidates); - return incomplete.absolute(newOffset); -diff --git a/frysk-core/frysk/util/ObservingTerminal.java b/frysk-core/frysk/util/ObservingTerminal.java -index 9cd7025ba..ca14f1a28 100644 ---- a/frysk-core/frysk/util/ObservingTerminal.java -+++ b/frysk-core/frysk/util/ObservingTerminal.java -@@ -39,13 +39,14 @@ - package frysk.util; - - import java.io.*; --import jline.ConsoleReader; -+import jline.console.ConsoleReader; - - import frysk.sys.FileDescriptor; - - - public class ObservingTerminal -- extends PtyTerminal { -+ extends PtyTerminal -+{ - public class Observable extends java.util.Observable { - private final ObservingTerminal terminal; - Observable(ObservingTerminal terminal) { -@@ -82,35 +83,9 @@ public class ObservingTerminal - super(string); - observable = new Observable(this); - } -- -- public void beforeReadLine(ConsoleReader reader, String prompt, -- Character mask) { -- inputEntered = false; -- observable.setChanged(); -- observable.notifyObservers(); -- super.beforeReadLine(reader, prompt, mask); -- } -- -- public int readVirtualKey(InputStream in) -- throws IOException { -- int result = super.readVirtualKey(in); -- inputEntered = true; -- observable.setChanged(); -- observable.notifyObservers(); -- return result; -- } -- -- -- public void afterReadLine(ConsoleReader reader, String prompt, -- Character mask) { -- inputEntered = false; -- observable.setChanged(); -- observable.notifyObservers(); -- super.afterReadLine(reader, prompt, mask); -- } - - public Observable getObservable() { - return observable; - } -- -+ - } -diff --git a/frysk-core/frysk/util/PtyTerminal.java b/frysk-core/frysk/util/PtyTerminal.java -index 517dd50e9..77c10501f 100644 ---- a/frysk-core/frysk/util/PtyTerminal.java -+++ b/frysk-core/frysk/util/PtyTerminal.java -@@ -43,6 +43,7 @@ import java.io.InputStream; - import java.io.IOException; - - import jline.Terminal; -+import jline.TerminalSupport; - import jline.UnixTerminal; - - import frysk.sys.FileDescriptor; -@@ -56,7 +57,8 @@ import frysk.sys.termios.Termios; - * frysk.sys.termios calls. This copies UnixTerminal pretty closely. - */ - public class PtyTerminal -- extends Terminal -+ extends TerminalSupport -+ implements Terminal - { - private final FileDescriptor fd; - -@@ -67,6 +69,7 @@ public class PtyTerminal - - public PtyTerminal(FileDescriptor fd) - { -+ super(true); - this.fd = fd; - - try -@@ -148,64 +151,21 @@ public class PtyTerminal - termios.set(fd); - } - -- public int readVirtualKey (InputStream in) -- throws IOException -- { -- int c = readCharacter (in); -- -- // in Unix terminals, arrow keys are represented by -- // a sequence of 3 characters. E.g., the up arrow -- // key yields 27, 91, 68 -- if (c == UnixTerminal.ARROW_START) -- { -- c = readCharacter (in); -- if (c == UnixTerminal.ARROW_PREFIX) -- { -- c = readCharacter (in); -- if (c == UnixTerminal.ARROW_UP) -- return CTRL_P; -- else if (c == UnixTerminal.ARROW_DOWN) -- return CTRL_N; -- else if (c == UnixTerminal.ARROW_LEFT) -- return CTRL_B; -- else if (c == UnixTerminal.ARROW_RIGHT) -- return CTRL_F; -- } -- } -- return c; -- } -- -- public boolean isSupported () -- { -- return true; -- } -- -- public boolean getEcho () -- { -- return false; -- } -- - public boolean isEchoEnabled() { - final Termios termios = new Termios(fd); - return termios.get(Local.ECHO_INPUT); - } - -- public void disableEcho() { -- final Termios termios = new Termios(fd); -- termios.set(Local.ECHO_INPUT, false); -- termios.set(fd); -- } -- -- public void enableEcho() { -+ public void setEchoEnabled(boolean enabled) { - final Termios termios = new Termios(fd); -- termios.set(Local.ECHO_INPUT, true); -+ termios.set(Local.ECHO_INPUT, enabled); - termios.set(fd); - } - - /** - * Returns the value of "stty size" width param. - */ -- public int getTerminalWidth() -+ public int getWidth() - { - Size size = fd.getSize(); - return size.getRows(); -@@ -214,7 +174,7 @@ public class PtyTerminal - /** - * Returns the value of "stty size" height param. - */ -- public int getTerminalHeight() -+ public int geteight() - { - Size size = fd.getSize(); - return size.getColumns(); diff --git a/frysk-0.4-jni-issameobject.patch b/frysk-0.4-jni-issameobject.patch deleted file mode 100644 index 902224b..0000000 --- a/frysk-0.4-jni-issameobject.patch +++ /dev/null @@ -1,56 +0,0 @@ -commit a729808906f5700da55008f2e3b1282e2156bc96 -Author: Andrew Cagney -Date: Wed Apr 13 14:27:12 2016 -0400 - - Use IsSameObject when implementing == in JNIXX - - Patch: frysk-0.4-jni-issameobject.patch - -diff --git a/frysk-sys/jnixx/JniBindings.java b/frysk-sys/jnixx/JniBindings.java -index 3b517d6..49a594e 100644 ---- a/frysk-sys/jnixx/JniBindings.java -+++ b/frysk-sys/jnixx/JniBindings.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2008, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -222,7 +223,7 @@ class JniBindings { - }, - null, - new Object[] { -- "return this->_object == _object;", -+ "return this->_object == _object || _env_().IsSameObject(this->_object, _object);", - }) - .put(Object.class, Binding.DYNAMIC, - "bool", "operator==", -@@ -231,7 +232,7 @@ class JniBindings { - }, - null, - new Object[] { -- "return this->_object == other._object;", -+ "return this->_object == other._object || _env_().IsSameObject(this->_object, other._object);", - }) - .put(Object.class, Binding.DYNAMIC, - "bool", "operator!=", -@@ -240,7 +241,16 @@ class JniBindings { - }, - null, - new Object[] { -- "return this->_object != _object;", -+ "return !this->operator==(_object);", -+ }) -+ .put(Object.class, Binding.DYNAMIC, -+ "bool", "operator!=", -+ new String[] { -+ "const Object&", "other", -+ }, -+ null, -+ new Object[] { -+ "return !this->operator==(other);", - }) - // DeleteLocalRef - .put(Object.class, Binding.DYNAMIC, diff --git a/frysk-0.4-jni.patch b/frysk-0.4-jni.patch deleted file mode 100644 index 54d7639..0000000 --- a/frysk-0.4-jni.patch +++ /dev/null @@ -1,950 +0,0 @@ -diff -up frysk-0.4/frysk-common/frysk-common.ac.jni frysk-0.4/frysk-common/frysk-common.ac ---- frysk-0.4/frysk-common/frysk-common.ac.jni 2016-04-13 10:57:04.450272141 -0400 -+++ frysk-0.4/frysk-common/frysk-common.ac 2016-04-13 10:57:04.468272119 -0400 -@@ -43,9 +43,6 @@ - - AC_CANONICAL_HOST - -- --AC_ARG_VAR([GCJFLAGS], [GCJ compiler flags]) -- - dnl This test is used by `elfutils' and as we share its interface we need - dnl to have consistent ABI of any structures possibly containing `off_t'. - dnl This test must come as early as possible after the compiler configuration -@@ -76,34 +73,7 @@ if test "x$ac_env_CFLAGS_set" != xset; t - fi - - AM_PROG_AS -- --# XXX: AM_PROG_GCJ doesn't take arguments, hack around it by first --# explictly searching for the GCJ program pushing it into the --# environment where AM_PROG_GCJ will find it. -- --AC_CHECK_PROGS([GCJ], [gcj4 gcj], [gcj]) - AM_PROG_GCJ --if test "x$ac_env_GCJFLAGS_set" != xset; then -- test x"$GCJFLAGS" = "x-g -O2" && GCJFLAGS="-g -O" --fi -- --# Find all the GCJ utilities. Prefer gcc4. -- --AC_CHECK_PROGS([GCJH], [gcjh4 gcjh gjavah]) --# gjavah defaults to jni, while gcjh defaults to cni. --# gcjh doesn't support -cni, only -jni. --GCJHFLAGS="" --test x"${GCJH}" = xgjavah && GCJHFLAGS="-cni" --AC_SUBST([GCJHFLAGS]) --AC_CHECK_PROGS([JAR], [fastjar4 fastjar jar], [fastjar]) --AC_CHECK_PROGS([GCJ_DBTOOL], [gcj-dbtool4 gcj-dbtool], [gcj-dbtool]) --AC_CHECK_PROGS([GIJ], [gij4 gij], [gij]) -- --# GCJ for Java 1.5 does not include jv-scan. If it wasn't found, mark --# it as such. --AC_CHECK_PROGS([JV_SCAN], [jv-scan4 jv-scan], [no]) --AM_CONDITIONAL([HAVE_JV_SCAN], test x"${JV_SCAN}" != xno) -- - - # Check for the ECJ compiler. - -@@ -125,63 +95,15 @@ AC_DEFUN([AC_LANG_COMPILER(Java)], []) - AU_DEFUN([AC_LANG_JAVAC], [AC_LANG(Java)]) - AC_LANG(Java) - -- --# Two possible compilers: either GCJ (wrapper round ECJ); or ECJ. In --# the latter case, need to explicitly run compiler from within the GIJ --# runtime so that ECJ sees the classpath environment, in particular --# things like gnu.gcj.RawDataManaged. Start out assuming GCJ (with --# the -fsource=1.4 flag), if that fails, fall back to ECJ. -- --# See gcj accepts -fsource=1.4, if not only use the warning flags. If --# it is available also use it for the GCJFLAGS. -- --AC_MSG_CHECKING([for working java compiler]) --JAVAC=${JAVAC:-${GCJ} -C -fsource=1.4} --JAVACFLAGS=${JAVACFLAGS:-${GCJFLAGS} -g -classpath \$(SOURCEPATH):\$(CLASSPATH)} --AC_COMPILE_IFELSE([public class conftest{}], -- [JAVAC_IS=gcj -- if test "x$ac_env_GCJFLAGS_set" != xset; then -- GCJFLAGS="$GCJFLAGS -fsource=1.4" -- fi], -- [JAVAC_IS=ecj -- JAVAC='$(GIJ) --classpath $(ECJ_JAR):$(CLASSPATH) org.eclipse.jdt.internal.compiler.batch.Main -1.4' -- JAVACFLAGS='-warn:+semicolon -sourcepath $(SOURCEPATH) -classpath $(CLASSPATH)']) -+JAVAC='$(JAVA) -cp $(ECJ_JAR):$(CLASSPATH) org.eclipse.jdt.internal.compiler.batch.Main -1.4' -+JAVACFLAGS='-warn:+semicolon -sourcepath $(SOURCEPATH) -classpath $(CLASSPATH)' - AC_SUBST([JAVAC]) - AC_SUBST([JAVACFLAGS]) --AC_SUBST([JAVAC_IS]) --AC_MSG_RESULT([${JAVAC_IS} ($JAVAC)]) -- --# Some versions of gcj don't support -Wall. Some versions generate --# good warnings without it. So explictily test for it. -- --AC_MSG_CHECKING([whether GCJ needs -Wall]) --if test "x$ac_env_GCJFLAGS_set" == xset ; then -- GCJ_WALL="not needed" --elif test x"${JAVAC_IS}" = xgcj ; then -- # A newer GCJ (using it for JAVAC) which has a good -- # default set of warnings so do not need -Wall. However, -- # older GCJs barf on stray semicolons so always check for them -- # to help with compatibility. -- GCJ_WALL=-Wextraneous-semicolon -- JAVACFLAGS="$JAVACFLAGS ${GCJ_WALL}" -- GCJFLAGS="$GCJFLAGS ${GCJ_WALL}" --else -- # Older GCJ (not using it for JAVAC) need the full gamit. -- GCJ_WALL="-Wextraneous-semicolon -Wall" -- GCJFLAGS="$GCJFLAGS ${GCJ_WALL}" --fi --AC_MSG_RESULT([${GCJ_WALL}]) -- - --# Always use GIJ as the byte code interpreter. java programs, run --# during the build, need to see the GNU Java environment. That --# environment contains classes such as gnu.gcj.RawData which can be --# found using reflection. -- --JAVA="${JAVA:-$GIJ}" -+JAVA="${JAVA:-java}" - AC_SUBST([JAVA]) - -- -+AC_CHECK_PROGS([JAR], [fastjar4 fastjar jar], [fastjar]) - # Check for the availablity of fig2dev - - AC_PATH_PROG(FIG2DEV, fig2dev) -@@ -247,15 +169,3 @@ AC_SUBST([lib64dir]) - FRYSK_DO_ARCH32_TEST - FRYSK_WERROR - FRYSK_COVERAGE -- --AC_MSG_CHECKING([direct .jar to .o compilation (--enable-jar-compile)]) --AC_ARG_ENABLE([jar-compile], -- [ --enable-jar-compile Enable direct compilation of jars], -- [case "${enableval}" in -- yes) jar_compile=yes ;; -- no) jar_compile=no;; -- *) AC_MSG_ERROR([bad value ${enableval} for --enable-jar-compile]) ;; -- esac], -- [jar_compile=yes]) --AC_MSG_RESULT([$jar_compile]) --AM_CONDITIONAL([JAR_COMPILE], [test x$jar_compile = xyes]) -diff -up frysk-0.4/frysk-common/Makefile.gen.sh.jni frysk-0.4/frysk-common/Makefile.gen.sh ---- frysk-0.4/frysk-common/Makefile.gen.sh.jni 2016-04-13 10:57:04.452272139 -0400 -+++ frysk-0.4/frysk-common/Makefile.gen.sh 2016-04-13 10:57:04.468272119 -0400 -@@ -40,10 +40,7 @@ - - if test $# -eq 0 ; then - cat <&2 --Usage: $0 [ --cni | --jni ] ... <.jar-file>... <_JAR-macro>... -- ----cni: Include CNI directories in build. ----jni: Include JNI directories in build and build with JNI abi. -+Usage: $0 ... <.jar-file>... <_JAR-macro>... - - : - -@@ -66,8 +63,6 @@ EOF - exit 1 - fi - --cni=false --jni=false - dirs= - jars= - JARS= -@@ -75,8 +70,6 @@ GEN_ARGS="$@" - while test $# -gt 0 - do - case "$1" in -- --cni ) cni=true ;; -- --jni ) jni=true ;; - *.jar ) jars="${jars} $1" ;; - *_JAR ) JARS="${JARS} $1" ;; - * ) dirs="${dirs} $1" ;; -@@ -121,13 +114,10 @@ JARS=`echo ${JARS}` - -o -path '[A-Za-z]*\.cxx-in' -print \ - -o -path '[A-Za-z]*\.c-in' -print \ - -o -path '[A-Za-z]*\.cxx' -print \ -- -o -path '*/cni/[A-Za-z]*\.[sS]' -print \ - -o -path '*/jni/[A-Za-z]*\.[sS]' -print \ - -o -type f -name 'test*' -print - ) \ --| if $cni ; then cat ; else grep -v '/cni/' ; fi \ --| if $jni ; then cat ; else grep -v '/jni/' ; fi \ --| sort -f > files.tmp -+| grep -v -e '\/cni\/' | sort -f > files.tmp - - if cmp files.tmp files.list > /dev/null 2>&1 - then -@@ -404,19 +394,11 @@ print_jar_rule () - # print_jar_rule $1 $2 - $1.jar: \$($2_JAR) - cp \$($2_JAR) $1.jar --BUILT_SOURCES += $1.jar -+#BUILT_SOURCES += $1.jar -+# For moment bundle these into frysk's private java directory -+java_DATA += $1.jar - GEN_JARS += $1.jar --noinst_LIBRARIES += libfrysk-$1.a --libfrysk_$1_a_LIBADD = $1.o --$1.o: $1.jar --libfrysk_$1_a_SOURCES = --libfrysk_$1_so_SOURCES = --frysk_$1_db_SOURCES = --CLEANFILES += $1.jar $1.o libfrysk-$1.a libfrysk-$1.so --libfrysk-$1.so: libfrysk-$1.a --noinst_PROGRAMS += frysk-$1.db --solib_PROGRAMS += libfrysk-$1.so --frysk-$1.db: libfrysk-$1.so $1.jar -+CLEANFILES += $1.jar - EOF - } - -@@ -458,32 +440,8 @@ done - - test x"${dirs}" = x && exit 0 - -- --print_header "... the lib${GEN_DIRNAME}.a skeleton" -- --sources=lib${GEN_MAKENAME}_a_SOURCES -- --# Most of the directory's sources will be built into a single archive --# (.a). Start with a skeleton for that archive and then accumulate --# the relevant files. --automake_variable ${sources} = -- - cat <> ${name}.tmp -+ echo exec /usr/bin/java -cp \"\$(javadir)/*\" ${name} \"\\\$\$@\" >> ${name}.tmp -+ chmod a+x ${name}.tmp -+ mv ${name}.tmp ${name} -+EOF - fi - done || exit 1 - done -@@ -566,9 +529,6 @@ for suffix in .java-in .java-sh .mkenum - d=`dirname ${file}` - b=`basename ${file} ${suffix}` - name="${d}/${b}${s}" -- echo "if !JAR_COMPILE" -- echo "${sources} += ${file}" -- echo "endif" - echo "BUILT_SOURCES += ${name}" - echo "SCRIPT_BUILT += ${name}" - case "${suffix}" in -@@ -598,7 +558,7 @@ generate_compile () - fi - # Generate the rules for 32-bit compile - echo_arch32_PROGRAMS ${name} ${name}.${suffix} -- else -+ elif test x"${sources}" != x- ; then - automake_variable ${sources} += ${file} - fi - case "${file}" in -@@ -618,60 +578,6 @@ generate_compile () - esac - } - --# What type of build? --if $cni ; then -- : default --elif $jni ; then -- echo "AM_GCJFLAGS += -fjni" --else -- : default --fi -- --# Grep the *.cxx and *.hxx files forming a list of included files. --# Assume these are all generated from .class files found in the master --# .jar. -- --generate_cni_header () { -- local file=$1 -- local d=$2 -- local b=$3 -- local suffix=$4 -- local _file=`echo $file | tr '[/.]' '[__]'` -- sed -n \ -- -e 's,#include "\(.*\)\.h".*,include - \1,p' \ -- -e 's,#include \([A-Z][A-Z0-9_]*\).*,minclude \1 -,p' \ -- -e 's,#define \([A-Z0-9_]*\) "\(.*\)\.h".*,define \1 \2,p' \ -- < $file > $$.tmp -- while read action m h j; do -- echo "# file=$file action=$action m=$m h=$h" -- if test "$action" = "minclude" ; then -- # Assume file defining macro depends on this file -- automake_variable $m = \$\($_file\) -- elif has_java_source ${h} ; then -- echo "JAVAH_CNI_BUILT += ${h}.h" -- echo "CLEANFILES += ${h}.h" -- echo "CLEANFILES += ${h}\\\$\$*.h" -- j=`echo ${h} | tr '[_]' '[/]'` -- echo "${h}.h: $j.java | ${GEN_DIRNAME}.jar" -- case $action in -- include) -- case "$suffix" in -- cxx) echo "$d/$b.o: ${h}.h" ;; -- hxx) # remember what this file includes -- automake_variable $_file += ${h}.h ;; -- esac -- ;; -- define) -- echo "$d/$b.o: ${h}.h" -- # Assume file using this macro is a dependency. -- echo "$d/$b.o: \$($m)" -- ;; -- esac -- fi -- done < $$.tmp -- rm -f $$.tmp --} -- - # Grep the *.cxx and *.hxx files forming a list of classes that are - # native. - -@@ -785,9 +691,6 @@ BEGIN { FS = "=" } - echo "$d/$c: $d/$b.antlred" - echo "BUILT_SOURCES += $d/$c" - echo "ANTLR_BUILT += $d/$c" -- echo "if !JAR_COMPILE" -- echo "${sources} += $d/$c" -- echo "endif" - done - done - -@@ -884,10 +787,6 @@ while read file dir base suffix ; do - echo "" - - case $file in -- */cni/*.cxx | */cni/*.cxx-in | */cni/*.cxx-sh | */cni/*.hxx) -- generate_cni_header $file $dir $base $suffix -- generate_compile $file $dir $base $suffix ${sources} -- ;; - */jni/*.cxx | */jni/*.cxx-in | */jni/*.cxx-sh | jnixx/*.cxx ) - generate_jnixx_class $file $dir $base $suffix - generate_compile $file $dir $base $suffix \ -@@ -897,8 +796,8 @@ while read file dir base suffix ; do - ;; - *.cxx | *.c | *.S | *.cxx-in | *.c-in | *.S-in \ - | *.cxx-sh | *.c-sh | *.S-sh ) -- # Non-cni/jni source. -- generate_compile $file $dir $base $suffix ${sources} -+ # Non-jni source (presumably with main). -+ generate_compile $file $dir $base $suffix - - ;; - esac - -diff -up frysk-0.4/frysk-common/Makefile.rules.jni frysk-0.4/frysk-common/Makefile.rules ---- frysk-0.4/frysk-common/Makefile.rules.jni 2016-04-13 10:57:04.461272128 -0400 -+++ frysk-0.4/frysk-common/Makefile.rules 2016-04-13 10:57:04.468272119 -0400 -@@ -77,7 +77,6 @@ man_MANS = - LDADD = - ANTLR_BUILT = - SCRIPT_BUILT = --JAVAH_CNI_BUILT = - root_srcdir = $(dir $(top_srcdir)) - abs_root_srcdir = $(dir $(abs_top_srcdir)) - -@@ -140,21 +139,6 @@ ACLOCAL_AMFLAGS = -I common/m4 - - SOURCEPATH = $(subst $(space),:,$(strip $(GEN_SOURCEPATH))) - CLASSPATH = $(subst $(space),:,$(strip $(GEN_CLASSPATH))) --DBPATH = $(subst $(space),:,$(strip \ -- $(patsubst %.jar,%.db,$(filter %.jar,$(GEN_CLASSPATH))) \ -- $(foreach dir,$(patsubst %/$(JAVAROOT),%,$(filter-out %.jar,$(GEN_CLASSPATH))),$(dir)/$(notdir $(dir)).db) \ -- )) -- --# XXX: GCJ: I think there should be a -Wextraneous-throws; I think --# -Wno-deprecated is backward; I think -Wredundant-modifiers is broken --# with gcc4. It appears to complain about abstract methods in a --# non-abstract class when the class actually is abstract. -- --AM_GCJFLAGS = \ -- $(patsubst %,-I%,$(GEN_SOURCEPATH) $(GEN_CLASSPATH)) \ -- -fPIC \ -- $(ZZZ) -- - - AM_CXXFLAGS = \ - -I$(srcdir) \ -@@ -163,6 +147,7 @@ AM_CXXFLAGS = \ - -I/usr/include/elfutils \ - -I$(srcdir)/../frysk-imports/libunwind/include \ - -I$(top_builddir)/../frysk-imports/libunwind/include \ -+ -I/usr/lib/jvm/java/include -I/usr/lib/jvm/java/include/linux \ - -fPIC \ - $(ZZZ) - -@@ -192,7 +177,6 @@ jni: ${GEN_DIRNAME}.jar - .PHONY: built-sources - built-sources: $(BUILT_SOURCES) - $(ANTLR_BUILT): | $(SCRIPT_BUILT) --$(JAVAH_CNI_BUILT): | $(SCRIPT_BUILT) $(ANTLR_BUILT) - - - # Rules for building a .java file from any of a .mkclass file, a -@@ -345,8 +329,6 @@ TestRunner.jar: TestRunner.java - # Make gets confused about which root to build TestRunner.o from - - # .jar or .java, spell it out. - --TestRunner.o: TestRunner.java -- $(GCJCOMPILE) -c $< - TestRunner.java: common/TestRunner.java-in - $(SUBST) - -@@ -404,37 +386,13 @@ Runner: - chmod a+x $@.tmp - mv $@.tmp $@ - --JniRunner: -+TestRunner: - rm -f $@ - echo "#!/bin/sh" >> $@.tmp - echo "exec ./Runner TestRunner \"\$$@\"" >> $@.tmp - chmod a+x $@.tmp - mv $@.tmp $@ - --# Generate one or more .h files, one per named class, and using CNI, --# from the corresponding .java file. Anonymous classes are pruned. -- --# This assumes that the directories .jar file has already been built. -- --.java.h: -- b=`basename $*` ; \ -- d=`dirname $*` ; \ -- classes=`$(JAR) tf $(GEN_DIRNAME).jar | grep \ -- -e $$d/$$b'\.class' \ -- -e $$d/$$b'$$[^0-9]*\.class' \ -- | sed -e 's,.class$$,,'`; \ -- echo $$classes ; \ -- for class in $$classes ; do \ -- outputdir=`dirname $$class`; \ -- outputfile=`basename $$class`.h; \ -- echo "$$class => $$outputdir/$$outputfile"; \ -- rm -f $$outputdir/$$outputfile ; \ -- $(GCJH) -I $(GEN_DIRNAME).jar \ -- -o $$outputdir/$$outputfile \ -- $(GCJHFLAGS) $$class ; \ -- done -- -- - # Shared library rule (for moment assume that .a contains PIC code). - SUFFIXES += .so - .a.so: -@@ -463,6 +421,7 @@ JNI_OBJECT_LIST = - lib$(GEN_DIRNAME)-jni.so: $(JNI_ARCHIVE_LIST) $(JNI_OBJECT_LIST) - lib$(GEN_DIRNAME)-jni.so: lib$(GEN_DIRNAME)-jni.a - soname=`basename $@` ; \ -+ echo soname=$$soname ; \ - $(CC) -shared -o $@.tmp \ - -Wl,--whole-archive \ - -Wl,$< \ -@@ -485,9 +444,11 @@ solibdir = $(libdir) - solib_PROGRAMS = - - # The shared java directory (typically /usr/share/java/; contains --# things like .jar files. -+# things like .jar files) but here is architecture specific as frsyk, -+# it turns out, has some 32vs64 java code - see bug 211824 in -+# fedoraproject.org - --javadir = $(datadir)/java -+javadir = $(pkglibdir)/java - java_DATA = - - # Assembler rule. -@@ -505,57 +466,7 @@ $(srcdir)/Makefile.gen: $(srcdir)/common - autogen: clean - $(SHELL) $(srcdir)/autogen.sh - --# Given a .jar, just convert it into a .o, and a .db -- - SUFFIXES += .jar --.jar.o: -- $(GCJCOMPILE) -c $< -- --# Since automake only adds GCJCOMPILE to Makefile.in when its seen --# .java source, provide our own definition. --GCJCOMPILE ?= $(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS) -- --SUFFIXES += .db --.jar.db: -- $(GCJ_DBTOOL) -n $@.tmp -- $(GCJ_DBTOOL) -a $@.tmp $*.jar lib$*.so -- mv $@.tmp $@ -- --# Given a .java file convert it to a .o file. -- --# XXX: GCJ has a bug where it totally scrambles nested classes with --# identical names. Reject any code with duplicate class names. -- --# XXX: GCJ has a bug where, when given a -Werror fail, it still exits --# with success. Hack around this by, when -Werror was specified, --# saving the message in a log file and then checking that it is empty. -- --.java.o: --if HAVE_JV_SCAN -- dups=`$(JV_SCAN) --list-class $< \ -- | tr '[ ]' '[\n]' \ -- | sed -n -e 's,^.*$$\([A-Z]\),\1,p' \ -- | sort | uniq -d` ; \ -- if test x"$$dups" != x ; then \ -- echo "Duplicate class names tickle a GCJ bug: $$dups" ; \ -- exit 1 ; \ -- fi --endif -- depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \ -- if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $< 2>&1 \ -- | tee $*.log ; then : ; else \ -- rm $*.log ; \ -- exit 1 ; \ -- fi ; \ -- if test -s $*.log \ -- && expr " $(GCJCOMPILE) " : '.* -Werror ' > /dev/null ; then \ -- rm -f "$$depbase.Tpo"; \ -- rm -f $*.log ; \ -- rm -f $@ ; \ -- exit 1 ; \ -- fi ; \ -- mv -f "$$depbase.Tpo" "$$depbase.Po"; \ -- rm -f $*.log - - # Rule for generating ANTLR output that compiles cleanly using the - # current compiler. The problem here is that raw ANTLR output -@@ -609,20 +520,13 @@ SUFFIXES += .antlred .g - echo "Parsing compiler warnings from $$b..." ; \ - rm -f $$t/*.antlr-fixes ; \ - rm -rf $$t/classes ; mkdir -p $$t/classes ; \ -- case "$(JAVAC_IS)" in \ -- gcj) $(JAVAC) $(JAVACFLAGS) \ -- -d $$t/classes \ -- -I $$t \ -- $$t/$$d/$$b.java \ -- 2>&1 || true ;; \ -- ecj) $(JAVAC) \ -+ ( $(JAVAC) \ - -d $$t/classes \ - -warn:+semicolon \ - -sourcepath $$t:$(SOURCEPATH) \ - -classpath $(CLASSPATH) \ - $$t/$$d/$$b.java \ -- 2>&1 || true ;; \ -- esac | ( \ -+ 2>&1 || true ) | ( \ - cd $$t ; \ - $(AWK) -f @abs_srcdir@/common/antlr-warnings.awk \ - ) ; \ -@@ -742,17 +646,10 @@ ${GEN_DIRNAME}.jar: files-java.list $(GE - rm -rf $(JAVAROOT) - mkdir -p $(JAVAROOT) - $(JAVAC) -d $(JAVAROOT) $(JAVACFLAGS) \ -- @$(top_builddir)/files-java.list \ -- 2>&1 | tee $*.log -- if test -s $*.log \ -- && expr " $(GCJCOMPILE) " : '.* -Werror ' > /dev/null ; \ -- then rm $*.log ; false ; \ -- fi -- rm -f $*.log -+ @$(top_builddir)/files-java.list - cd $(JAVAROOT) ; \ -- find * -name '*.class' -print \ -- | sort \ -- | $(JAR) -@ -cf $@ -+ find * -name '*.class' -print | sort > classes.list ; \ -+ $(JAR) cf $@ @classes.list - mv $(JAVAROOT)/$@ $@ - - # Check that everything, well except for a few exceptions, is using -diff -up frysk-0.4/frysk-core/Makefile.am.jni frysk-0.4/frysk-core/Makefile.am ---- frysk-0.4/frysk-core/Makefile.am.jni 2016-04-13 10:57:04.464272124 -0400 -+++ frysk-0.4/frysk-core/Makefile.am 2016-04-13 10:57:04.468272119 -0400 -@@ -46,22 +46,6 @@ GEN_CLASSPATH += ../frysk-imports/jline. - GEN_CLASSPATH += ../frysk-imports/antlr.jar - GEN_CLASSPATH += ../frysk-imports/junit.jar - GEN_CLASSPATH += ../frysk-imports/getopt.jar --GEN_GCJ_LDADD_LIST += ../frysk-sys/libfrysk-sys.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-jline.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-antlr.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a --if USE_LIBUNWIND --GEN_GCJ_LDADD_LIST += ../frysk-imports/libunwind-i386/src/.libs/libunwind-x86.a \ -- ../frysk-imports/libunwind-x86_64/src/.libs/libunwind-x86_64.a \ -- ../frysk-imports/libunwind-ppc32/src/.libs/libunwind-ppc32.a \ -- ../frysk-imports/libunwind-ppc64/src/.libs/libunwind-ppc64.a --endif --GEN_GCJ_LDADD_LIST += -lstdc++ --# Stub bfd_getb32 and bfd_getl32 for PPC64. Unconditionally --# link -lbfd_get just for simplification. --GEN_GCJ_LDADD_LIST += -laudit --GEN_GCJ_LDADD_LIST += -lasm -ldw -lebl -lelf - - # For TestExec.java - noinst_PROGRAMS += frysk/pkglibdir/funit-exec-alias -@@ -251,8 +235,10 @@ install-exec-local: install-sysroot-loca - uninstall-local: uninstall-sysroot-local - .PHONY: install-sysroot-local uninstall-sysroot-local - install-sysroot-local: -+ mkdir -p $(DESTDIR)$(pkglibdir) - cp -r $(TEST_SYSROOT) $(DESTDIR)$(pkglibdir) - if DO_ARCH32_TEST -+ mkdir -p $(DESTDIR)$(pkglib32dir) - cp -r $(TEST32_SYSROOT) $(DESTDIR)$(pkglib32dir) - endif - # we don't want this installed, but noinst_SCRIPTS has no effect -diff -up frysk-0.4/frysk-gtk/Makefile.am.jni frysk-0.4/frysk-gtk/Makefile.am ---- frysk-0.4/frysk-gtk/Makefile.am.jni 2016-04-13 10:57:04.461272128 -0400 -+++ frysk-0.4/frysk-gtk/Makefile.am 2016-04-13 10:57:04.468272119 -0400 -@@ -62,7 +62,6 @@ GEN_GCJ_LDADD_LIST += -laudit - GEN_GCJ_LDADD_LIST += -lasm -ldw -lebl -lelf - - # Hack, need to compile this entire sub-tree with JNI. --AM_GCJFLAGS += -fjni - AM_CFLAGS += $(GTK_CFLAGS) $(FRYSK_GTK_CFLAGS) - - solib_PROGRAMS += EggTrayIcon/libEggTrayIcon.so -diff -up frysk-0.4/frysk-imports/configure.ac.jni frysk-0.4/frysk-imports/configure.ac ---- frysk-0.4/frysk-imports/configure.ac.jni 2016-04-13 10:57:04.464272124 -0400 -+++ frysk-0.4/frysk-imports/configure.ac 2016-04-13 10:57:04.469272118 -0400 -@@ -53,7 +53,6 @@ AC_CONFIG_FILES([ - Makefile - jline/Makefile - getopt/Makefile -- tests/Makefile - junit/Makefile]) - - # Even though "libunwind" is not built, it is still included in the -diff -up frysk-0.4/frysk-imports/junit/Makefile.am.jni frysk-0.4/frysk-imports/junit/Makefile.am ---- frysk-0.4/frysk-imports/junit/Makefile.am.jni 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-imports/junit/Makefile.am 2016-04-13 10:57:04.469272118 -0400 -@@ -43,7 +43,9 @@ noinst_DATA = junit.jar - # Make a jar file. - junit.jar: classdir - cd classdir ; \ -- find * -name '*.class' -print | $(JAR) -@ -cf $@.tmp -+ rm -f classes.list ; \ -+ find * -name '*.class' -print > classes.list ; \ -+ $(JAR) cf $@.tmp @classes.list - mv classdir/$@.tmp $@ - - classdir: -diff -up frysk-0.4/frysk-imports/Makefile.am.jni frysk-0.4/frysk-imports/Makefile.am ---- frysk-0.4/frysk-imports/Makefile.am.jni 2016-04-13 10:57:04.462272126 -0400 -+++ frysk-0.4/frysk-imports/Makefile.am 2016-04-13 10:57:04.469272118 -0400 -@@ -59,7 +59,6 @@ CHECK_SUBDIRS = \ - jline \ - junit \ - getopt \ -- tests \ - $(LIBUNWIND_DIR) - - check-recursive: SUBDIRS = $(CHECK_SUBDIRS) -@@ -79,7 +78,7 @@ install-recursive \ - installcheck-recursive \ - installdirs-recursive \ - uninstall-info-recursive \ --uninstall-recursive: SUBDIRS = tests -+uninstall-recursive: SUBDIRS = - - GEN_CLASSPATH += getopt.jar - GEN_CLASSPATH += junit.jar -diff -up frysk-0.4/frysk-sys/bootstrap.sh.jni frysk-0.4/frysk-sys/bootstrap.sh ---- frysk-0.4/frysk-sys/bootstrap.sh.jni 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/bootstrap.sh 2016-04-13 10:57:04.469272118 -0400 -@@ -45,7 +45,7 @@ FILE_LIST="frysk \ - inua \ - lib" - --./common/Makefile.gen.sh --jni --cni $FILE_LIST -+./common/Makefile.gen.sh $FILE_LIST - - # Generate everything (always run with --add-missing). - -diff -up frysk-0.4/frysk-sys/frysk/sys/proc/jni/Exe.cxx.jni frysk-0.4/frysk-sys/frysk/sys/proc/jni/Exe.cxx ---- frysk-0.4/frysk-sys/frysk/sys/proc/jni/Exe.cxx.jni 2016-04-13 10:57:04.411272189 -0400 -+++ frysk-0.4/frysk-sys/frysk/sys/proc/jni/Exe.cxx 2016-04-13 10:57:04.469272118 -0400 -@@ -87,7 +87,7 @@ frysk::sys::proc::Exe::getName(jnixx::en - } - - if (access(link, F_OK) != 0) { -- errnoException(env, errno, "file %s", link); -+ errnoException(env, errno, "access", "file %s", link); - } - - // Note that some kernels have a "feature" where the link can become -diff -up frysk-0.4/frysk-sys/jnixx/ClassWalker.java.jni frysk-0.4/frysk-sys/jnixx/ClassWalker.java ---- frysk-0.4/frysk-sys/jnixx/ClassWalker.java.jni 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/jnixx/ClassWalker.java 2016-04-13 10:57:04.469272118 -0400 -@@ -73,10 +73,10 @@ abstract class ClassWalker { - void walk(Class klass) { - if (klass == null) - return; -+ walk(klass.getSuperclass()); - if (visited.contains(klass)) - return; - visited.add(klass); -- walk(klass.getSuperclass()); - if (klass.isArray()) { - walk(klass.getComponentType()); - acceptArray(klass); -diff -up frysk-0.4/frysk-sys/jnixx/Main.java.jni frysk-0.4/frysk-sys/jnixx/Main.java ---- frysk-0.4/frysk-sys/jnixx/Main.java.jni 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/jnixx/Main.java 2016-04-13 10:57:04.469272118 -0400 -@@ -163,7 +163,6 @@ class Main { - p.println("JNIEXPORT jint"); - p.println("JNI_OnLoad(JavaVM* javaVM, void* reserved)"); - while (p.dent(0, "{", "}")) { -- p.println("fprintf(stderr, \"vm loaded\\n\");"); - p.println("::jnixx::vm = javaVM;"); - p.println("return JNI_VERSION_1_2;"); - } -diff -up frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java.jni frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java ---- frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java.jni 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java 2016-04-13 10:57:04.469272118 -0400 -@@ -159,10 +159,6 @@ class PrintCxxDefinitions extends ClassW - return; - if (klass.isArray()) - return; -- p.println(); -- p.print("jclass "); -- p.printQualifiedCxxName(klass); -- p.println("::_class;"); - printer.visit(klass); - } - void acceptInterface(Class klass) { -diff -up frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java.jni frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java ---- frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java.jni 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java 2016-04-13 10:57:04.469272118 -0400 -@@ -143,8 +143,9 @@ class PrintDeclarations extends ClassWal - p.printGlobalCxxName(parent); - p.println("() { }"); - } -+ // cached per-instance copy - a local-ref -+ p.println("private: jclass _class = NULL;"); - // Static get-class method - a class knows its own class. -- p.println("private: static jclass _class;"); - p.println("public: static inline jclass _class_(::jnixx::env _env);"); - JniBindings.printDeclarations(p, klass); - } -diff -up frysk-0.4/frysk-sys/jnixx/Printer.java.jni frysk-0.4/frysk-sys/jnixx/Printer.java ---- frysk-0.4/frysk-sys/jnixx/Printer.java.jni 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/jnixx/Printer.java 2016-04-13 10:57:04.469272118 -0400 -@@ -318,6 +318,7 @@ class Printer { - || name.equals("or") - || name.equals("xor") - || name.equals("not") -+ || name.equals("register") - ) { - return name + "$"; - } else { -diff -up frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java.jni frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java ---- frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java.jni 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java 2016-04-13 10:57:04.470272116 -0400 -@@ -72,6 +72,14 @@ class PrintHxxDefinitions extends ClassW - } - p.print(")"); - while (p.dent(0, "{", "}")) { -+ if (isStatic) { -+ p.println("jclass _class = _class_(_env);"); -+ } else { -+ p.print("if (_class == NULL)"); -+ while (p.dent(1, "{", "}")) { -+ p.println("_class = _class_(_env);"); -+ } -+ } - p.print("if ("); - p.printID(field); - p.print(" == NULL)"); -@@ -81,7 +89,7 @@ class PrintHxxDefinitions extends ClassW - if (isStatic) { - p.print("Static"); - } -- p.print("FieldID(_class_(_env), \""); -+ p.print("FieldID(_class, \""); - p.print(field.getName()); - p.print("\", \""); - p.printJniSignature(type); -@@ -130,16 +138,25 @@ class PrintHxxDefinitions extends ClassW - p.print("static jmethodID "); - p.printID(method); - p.println(";"); -+ if (isStatic) { -+ p.println("jclass _class = _class_(_env);"); -+ } - p.print("if ("); - p.printID(method); - p.print(" == NULL)"); - while (p.dent(1, "{", "}")) { -+ if (!isStatic) { -+ p.print("if (_class == NULL)"); -+ while (p.dent(2, "{", "}")) { -+ p.println("_class = _class_(_env);"); -+ } -+ } - p.printID(method); - p.print(" = _env.Get"); - if (isStatic) { - p.print("Static"); - } -- p.print("MethodID(_class_(_env), \""); -+ p.print("MethodID(_class, \""); - p.print(method.getName()); - p.print("\", \""); - p.printJniSignature(method); -@@ -183,6 +200,7 @@ class PrintHxxDefinitions extends ClassW - p.printFormalCxxParameters(constructor, true); - p.print(")"); - while (p.dent(0, "{", "}")) { -+ p.println("jclass _class = _class_(_env);"); - p.print("static jmethodID "); - p.printID(constructor); - p.println(";"); -@@ -191,7 +209,7 @@ class PrintHxxDefinitions extends ClassW - p.print(" == NULL)"); - while (p.dent(1, "{", "}")) { - p.printID(constructor); -- p.print(" = _env.GetMethodID(_class_(_env), \"\", \"("); -+ p.print(" = _env.GetMethodID(_class, \"\", \"("); - p.printJniSignature(constructor.getParameterTypes()); - p.println(")V\");"); - } -@@ -237,12 +255,9 @@ class PrintHxxDefinitions extends ClassW - p.printQualifiedCxxName(klass); - p.print("::_class_(::jnixx::env _env)"); - while (p.dent(0, "{", "}")) { -- while (p.dent(1, "if (_class == NULL) {", "}")) { -- p.print("_class = _env.FindClass(\""); -- p.print(klass.getName()); -- p.println("\");"); -- } -- p.println("return _class;"); -+ p.print("return _env.FindClass(\""); -+ p.print(klass.getName().replace('.', '/')); -+ p.println("\");"); - } - JniBindings.printDefinitions(p, klass); - printer.visit(klass); -diff -up frysk-0.4/frysk-sys/Makefile.am.jni frysk-0.4/frysk-sys/Makefile.am ---- frysk-0.4/frysk-sys/Makefile.am.jni 2016-04-13 10:57:04.467272120 -0400 -+++ frysk-0.4/frysk-sys/Makefile.am 2016-04-13 10:57:26.720244636 -0400 -@@ -47,19 +47,6 @@ GEN_CLASSPATH += ../frysk-imports/jline. - GEN_CLASSPATH += ../frysk-imports/antlr.jar - GEN_CLASSPATH += ../frysk-imports/junit.jar - GEN_CLASSPATH += ../frysk-imports/getopt.jar --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-jline.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-antlr.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a --if USE_LIBUNWIND --GEN_GCJ_LDADD_LIST += ../frysk-imports/libunwind-i386/src/.libs/libunwind-x86.a \ -- ../frysk-imports/libunwind-x86_64/src/.libs/libunwind-x86_64.a \ -- ../frysk-imports/libunwind-ppc32/src/.libs/libunwind-ppc32.a \ -- ../frysk-imports/libunwind-ppc64/src/.libs/libunwind-ppc64.a --endif --GEN_GCJ_LDADD_LIST += -lstdc++ -laudit --GEN_GCJ_LDADD_LIST += -lasm -ldw -lebl -lelf -- - - # Force a few dependencies - lib/unwind/cni/Unwind%.cxx: lib/unwind/Unwind%.java lib/unwind/cni/UnwindH.hxx -@@ -69,6 +56,7 @@ lib/unwind/Unwind%.java: lib/unwind/Unwi - # Depend on these runtimes. - JNI_LIBRARY_LIST += -lstdc++ - JNI_LIBRARY_LIST += -laudit -+JNI_LIBRARY_LIST += -ldw - # Bundle in the local libunwind code. - JNI_OBJECT_LIST += ../frysk-imports/libunwind-i386/src/{,dwarf/,mi/,x86/}.libs/*.o - JNI_OBJECT_LIST += ../frysk-imports/libunwind-x86_64/src/{,dwarf/,mi/,x86_64/}.libs/*.o diff --git a/frysk-0.4-jnixx-dont-emit-nested-classes.patch b/frysk-0.4-jnixx-dont-emit-nested-classes.patch deleted file mode 100644 index f9ca3a3..0000000 --- a/frysk-0.4-jnixx-dont-emit-nested-classes.patch +++ /dev/null @@ -1,353 +0,0 @@ -diff --git a/frysk-sys/frysk/junit/Runner.java b/frysk-sys/frysk/junit/Runner.java -index 23e960430..33091729f 100755 ---- a/frysk-sys/frysk/junit/Runner.java -+++ b/frysk-sys/frysk/junit/Runner.java -@@ -126,7 +126,7 @@ public class Runner extends TestRunner { - testMethod = null; - } - fine.log(this, "testClass", testClass, "testMethod", testMethod); -- -+ - for (Iterator c = testClasses.iterator(); c.hasNext (); ) { - Class testKlass = (Class) c.next (); - if (testMethod == null) { -@@ -141,7 +141,7 @@ public class Runner extends TestRunner { - try { - // Probe the class to see if the method - // exists. -- testKlass.getMethod(testMethod, null); -+ testKlass.getMethod(testMethod, (Class[])null); - TestCase test = (TestCase)testKlass.newInstance(); - test.setName(testMethod); - testSuite.addTest(test); -diff --git a/frysk-sys/jnixx/ClassVisitor.java b/frysk-sys/jnixx/ClassVisitor.java -index b2cafaa19..e5c7af90d 100644 ---- a/frysk-sys/jnixx/ClassVisitor.java -+++ b/frysk-sys/jnixx/ClassVisitor.java -@@ -76,6 +76,9 @@ abstract class ClassVisitor { - Class[] classes = klass.getDeclaredClasses(); - for (int i = 0; i < classes.length; i++) { - Class inner = classes[i]; -+ if (inner.isSynthetic()) { -+ continue; -+ } - acceptClass(inner); - } - } -diff --git a/frysk-sys/jnixx/ClassWalker.java b/frysk-sys/jnixx/ClassWalker.java -index 45ed0dd87..6fb78d392 100644 ---- a/frysk-sys/jnixx/ClassWalker.java -+++ b/frysk-sys/jnixx/ClassWalker.java -@@ -45,39 +45,43 @@ import java.util.Set; - import java.util.HashSet; - - abstract class ClassWalker { -+ - private final Set visited = new HashSet(); -- void walk(Class[] klasses) { -+ private final Set required; -+ -+ ClassWalker(Set required) { -+ this.required = required; -+ } -+ -+ void walk() { -+ Class[] classes = new Class[required.size()]; -+ required.toArray(classes); -+ walk(classes, 0); -+ } -+ -+ void walk(Class[] klasses, int level) { - for (int i = 0; i < klasses.length; i++) { -- walk(klasses[i]); -+ Class klass = klasses[i]; -+ walk(klass, level+1); -+ } -+ } -+ void indent(int level) { -+ for (int i = 0; i < level; i++) { -+ System.err.print(" "); - } - } -- private final ClassVisitor visitor = new ClassVisitor() { -- void acceptInterface(Class klass) { -- walk(klass); -- } -- void acceptConstructor(Constructor constructor) { -- walk(constructor.getParameterTypes()); -- } -- void acceptField(Field field) { -- walk(field.getType()); -- } -- void acceptMethod(Method method) { -- walk(method.getReturnType()); -- walk(method.getParameterTypes()); -- } -- void acceptClass(Class klass) { -- walk(klass); -- } -- }; -- void walk(Class klass) { -+ void walk(Class klass, int level) { - if (klass == null) - return; -- walk(klass.getSuperclass()); -+ /* walk down from parent's parent first */ -+ walk(klass.getSuperclass(), level+1); - if (visited.contains(klass)) - return; -+ indent(level); -+ System.err.println(klass); - visited.add(klass); - if (klass.isArray()) { -- walk(klass.getComponentType()); -+ walk(klass.getComponentType(), level+1); - acceptArray(klass); - } else if (klass.isPrimitive()) { - acceptPrimitive(klass); -@@ -86,6 +90,29 @@ abstract class ClassWalker { - } else { - acceptClass(klass); - } -+ ClassVisitor visitor = new ClassVisitor() { -+ void acceptInterface(Class klassInterface) { -+ walk(klassInterface, level+1); -+ } -+ void acceptConstructor(Constructor constructor) { -+ walk(constructor.getParameterTypes(), level+1); -+ } -+ void acceptField(Field field) { -+ walk(field.getType(), level+1); -+ } -+ void acceptMethod(Method method) { -+ walk(method.getReturnType(), level+1); -+ walk(method.getParameterTypes(), level+1); -+ } -+ void acceptClass(Class nestedKlass) { -+ if (required.contains(klass)) { -+ walk(nestedKlass, level+1); -+ } else { -+ indent(level); -+ System.err.println("dropping " + nestedKlass); -+ } -+ } -+ }; - visitor.visit(klass); - } - /** -diff --git a/frysk-sys/jnixx/Main.java b/frysk-sys/jnixx/Main.java -index d68bd1a67..4942f620d 100644 ---- a/frysk-sys/jnixx/Main.java -+++ b/frysk-sys/jnixx/Main.java -@@ -48,6 +48,7 @@ import java.util.jar.JarFile; - import java.util.jar.JarEntry; - import java.util.Collections; - import java.util.List; -+import java.util.Set; - import java.util.HashSet; - import java.util.Iterator; - import java.io.IOException; -@@ -56,13 +57,13 @@ class Main { - /** - * Collection of classes that need native bindings. - */ -- private static final HashSet nativeClasses = new HashSet(); -+ private static final HashSet nativeClasses = new HashSet(); - - /** - * Collection of classes that should be visible (non-visible - * classes don't get their bindings generated). - */ -- private static final HashSet visibleClasses = new HashSet(); -+ private static final HashSet visibleClasses = new HashSet(); - - /** - * Does this method require native bindings? Methods that are not -@@ -87,10 +88,10 @@ class Main { - return Modifier.isPrivate(member.getModifiers()); - } - -- private static HashSet getJarClasses(String jarFile) -+ private static HashSet getJarClasses(String jarFile) - throws IOException, ClassNotFoundException { - // Generate a list of classes in the jar file. -- HashSet jarClasses = new HashSet(); -+ HashSet jarClasses = new HashSet(); - List entries = Collections.list(new JarFile(jarFile).entries()); - for (Iterator i = entries.iterator(); i.hasNext(); ) { - JarEntry entry = (JarEntry) i.next(); -@@ -107,8 +108,8 @@ class Main { - return jarClasses; - } - -- private static HashSet getNativeClasses(HashSet classes) { -- final HashSet natives = new HashSet(); -+ private static HashSet getNativeClasses(HashSet classes) { -+ final HashSet natives = new HashSet(); - // Iterate over just these identifying which are native. - ClassVisitor findNatives = new ClassVisitor() { - void acceptInterface(Class klass) { -@@ -133,7 +134,7 @@ class Main { - } - - private static void printHxxFile(Printer p, String headerFile, -- Class[] classes) { -+ Set classes) { - p.println("#include \"jnixx/jnixx.hxx\""); - p.println(); - p.println("namespace jnixx {"); -@@ -142,17 +143,17 @@ class Main { - p.println(); - p.println("\f"); - System.err.println("Generating namespaces"); -- new PrintNamespaces(p).walk(classes); -+ new PrintNamespaces(p, classes).walk(); - System.err.println("Generating declarations"); -- new PrintDeclarations(p).walk(classes); -+ new PrintDeclarations(p, classes).walk(); - p.println(); - p.println("\f"); - System.err.println("Generating definitions"); -- new PrintHxxDefinitions(p).walk(classes); -+ new PrintHxxDefinitions(p, classes).walk(); - } - - private static void printCxxFile(Printer p, String headerFile, -- Class[] classes) { -+ Set classes) { - p.print("#include \""); - p.print(headerFile); - p.println("\""); -@@ -168,7 +169,7 @@ class Main { - p.println(); - p.println("\f"); - System.err.println("Generating definitions"); -- new PrintCxxDefinitions(p).walk(classes); -+ new PrintCxxDefinitions(p, classes).walk(); - } - - public static void main(String[] args) -@@ -181,33 +182,35 @@ class Main { - boolean generateHeader = args[0].equals("hxx"); - String headerFile = args[1]; - String jarFile = args[2]; -- HashSet explicitClasses = new HashSet(); -+ HashSet explicitClasses = new HashSet(); - for (int i = 3; i < args.length; i++) { - Class klass = Class.forName(args[i], false, - Main.class.getClassLoader()); - explicitClasses.add(klass); - } - -- HashSet jarClasses = getJarClasses(jarFile); -+ HashSet jarClasses = getJarClasses(jarFile); - visibleClasses.addAll(jarClasses); - visibleClasses.addAll(explicitClasses); - - nativeClasses.addAll(getNativeClasses(jarClasses)); - -- HashSet requiredClasses = new HashSet(); -+ HashSet requiredClasses = new HashSet(); - requiredClasses.addAll(nativeClasses); - requiredClasses.addAll(explicitClasses); -- System.err.print("Required " + requiredClasses.size() + " - "); -- System.err.println(requiredClasses); -- -- Class[] classes = new Class[requiredClasses.size()]; -- requiredClasses.toArray(classes); -+ System.err.println("Required classes " + requiredClasses.size() + ":"); -+ for (Class klass : requiredClasses) { -+ System.err.println(" " + klass); -+ } - - Printer p = new Printer(new PrintWriter(System.out)); -- if (generateHeader) -- printHxxFile(p, headerFile, classes); -- else -- printCxxFile(p, headerFile, classes); -+ if (generateHeader) { -+ System.err.println(".hxx classes:"); -+ printHxxFile(p, headerFile, requiredClasses); -+ } else { -+ System.err.println(".cxx classes:"); -+ printCxxFile(p, headerFile, requiredClasses); -+ } - p.flush(); - } - } -diff --git a/frysk-sys/jnixx/PrintCxxDefinitions.java b/frysk-sys/jnixx/PrintCxxDefinitions.java -index 032f10081..2f3072aa1 100644 ---- a/frysk-sys/jnixx/PrintCxxDefinitions.java -+++ b/frysk-sys/jnixx/PrintCxxDefinitions.java -@@ -42,11 +42,13 @@ import java.lang.reflect.Method; - import java.lang.reflect.Field; - import java.lang.reflect.Constructor; - import java.lang.reflect.Modifier; -+import java.util.Set; - - class PrintCxxDefinitions extends ClassWalker { - - private final Printer p; -- PrintCxxDefinitions(Printer p) { -+ PrintCxxDefinitions(Printer p, Set required) { -+ super(required); - this.p = p; - } - -diff --git a/frysk-sys/jnixx/PrintDeclarations.java b/frysk-sys/jnixx/PrintDeclarations.java -index db0117d09..559fd5283 100644 ---- a/frysk-sys/jnixx/PrintDeclarations.java -+++ b/frysk-sys/jnixx/PrintDeclarations.java -@@ -42,11 +42,13 @@ import java.lang.reflect.Field; - import java.lang.reflect.Method; - import java.lang.reflect.Constructor; - import java.lang.reflect.Modifier; -+import java.util.Set; - - class PrintDeclarations extends ClassWalker { - - private final Printer p; -- PrintDeclarations(Printer p) { -+ PrintDeclarations(Printer p, Set required) { -+ super(required); - this.p = p; - } - -diff --git a/frysk-sys/jnixx/PrintHxxDefinitions.java b/frysk-sys/jnixx/PrintHxxDefinitions.java -index 3ac6445b7..342e37f58 100644 ---- a/frysk-sys/jnixx/PrintHxxDefinitions.java -+++ b/frysk-sys/jnixx/PrintHxxDefinitions.java -@@ -43,11 +43,13 @@ import java.lang.reflect.Field; - import java.lang.reflect.Method; - import java.lang.reflect.Constructor; - import java.lang.reflect.Modifier; -+import java.util.Set; - - class PrintHxxDefinitions extends ClassWalker { - - private final Printer p; -- PrintHxxDefinitions(Printer p) { -+ PrintHxxDefinitions(Printer p, Set required) { -+ super(required); - this.p = p; - } - -diff --git a/frysk-sys/jnixx/PrintNamespaces.java b/frysk-sys/jnixx/PrintNamespaces.java -index e566c5fbd..7b44868bf 100644 ---- a/frysk-sys/jnixx/PrintNamespaces.java -+++ b/frysk-sys/jnixx/PrintNamespaces.java -@@ -38,10 +38,13 @@ - - package jnixx; - -+import java.util.Set; -+ - class PrintNamespaces extends ClassWalker { - - private final Printer p; -- PrintNamespaces(Printer p) { -+ PrintNamespaces(Printer p, Set required) { -+ super(required); - this.p = p; - } - diff --git a/frysk-0.4-jnixx-signed-unsigned.patch b/frysk-0.4-jnixx-signed-unsigned.patch deleted file mode 100644 index 2a365be..0000000 --- a/frysk-0.4-jnixx-signed-unsigned.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- frysk-0.4/frysk-sys/jnixx/Printer.java.dist 2017-02-10 17:14:52.993596017 -0500 -+++ frysk-0.4/frysk-sys/jnixx/Printer.java 2017-02-10 17:15:20.770189841 -0500 -@@ -318,6 +318,8 @@ - || name.equals("xor") - || name.equals("not") - || name.equals("register") -+ || name.equals("signed") -+ || name.equals("unsigned") - ) { - return name + "$"; - } else { diff --git a/frysk-0.4-jnixx-union-as-reserved-word.patch b/frysk-0.4-jnixx-union-as-reserved-word.patch deleted file mode 100644 index 3398b1e..0000000 --- a/frysk-0.4-jnixx-union-as-reserved-word.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/frysk-sys/jnixx/Printer.java b/frysk-sys/jnixx/Printer.java -index 4469027d0..933bd6b05 100644 ---- a/frysk-sys/jnixx/Printer.java -+++ b/frysk-sys/jnixx/Printer.java -@@ -320,6 +320,7 @@ class Printer { - || name.equals("register") - || name.equals("signed") - || name.equals("unsigned") -+ || name.equals("union") - ) { - return name + "$"; - } else { diff --git a/frysk-0.4-libunwind-fstack.patch b/frysk-0.4-libunwind-fstack.patch deleted file mode 100644 index a5475db..0000000 --- a/frysk-0.4-libunwind-fstack.patch +++ /dev/null @@ -1,58129 +0,0 @@ -diff --git a/frysk-imports/Makefile.am b/frysk-imports/Makefile.am -index 3066eeb..94c68d0 100644 ---- a/frysk-imports/Makefile.am -+++ b/frysk-imports/Makefile.am -@@ -49,7 +49,7 @@ if CHECK_LIBUNWIND - else - LIBUNWIND_DIR = - endif # CHECK_LIBUNWIND --LIBUNWIND_ARCH_DIRS = libunwind-i386 libunwind-x86_64 libunwind-ppc32 libunwind-ppc64 -+LIBUNWIND_ARCH_DIRS = libunwind-i386 libunwind-x86_64 - - # List of directories that should both be included in the distro and - # included in a recursive "make check". Only the native architecture -diff --git a/frysk-imports/configure.ac b/frysk-imports/configure.ac -index 4c4f209..9e9f960 100644 ---- a/frysk-imports/configure.ac -+++ b/frysk-imports/configure.ac -@@ -57,6 +57,6 @@ AC_CONFIG_FILES([ - # list of configured subdirectories so that it can be included in - # "make dist" (or the recursive "make distdir"). - --AC_CONFIG_SUBDIRS([libunwind libunwind-i386 libunwind-x86_64 libunwind-ppc32 libunwind-ppc64]) -+AC_CONFIG_SUBDIRS([libunwind libunwind-i386 libunwind-x86_64]) - - AC_OUTPUT -diff --git a/frysk-imports/libunwind/.gitignore b/frysk-imports/libunwind/.gitignore -deleted file mode 100644 -index f0f3aa0..0000000 ---- a/frysk-imports/libunwind/.gitignore -+++ /dev/null -@@ -1,5 +0,0 @@ --autom4te.cache --configure --aclocal.m4 --Makefile.in --config -diff --git a/frysk-imports/libunwind/ChangeLog b/frysk-imports/libunwind/ChangeLog -index 3bf7ff9..dfa24b9 100644 ---- a/frysk-imports/libunwind/ChangeLog -+++ b/frysk-imports/libunwind/ChangeLog -@@ -1,775 +1,3 @@ --2008-05-24 Andrew Cagney -- -- * src/dwarf/Gparser.c (put_unwind_info): Call the eh-frame's -- put_unwind_info method if present. -- --2007-03-19 Mark Wielaard -- -- * src/x86_64/Gstep.c (is_call_instr_at): New function. -- (init_stack_based_ret): New function. -- (unw_step): Try stack based unwind with call instr, before -- fallback to frame pointer. -- --2007-03-12 Mark Wielaard -- -- * src/x86/Gstep.c (is_call_instr_at): New function. -- (init_stack_based_ret): New function. -- (unw_step): Try stack based unwind with call instr, before -- fallback to frame pointer. -- --2007-01-31 Mark Wielaard -- -- Fixup libunwind merge. -- * src/Makefile.am (libunwind_la_SOURCES_x86_64): Add -- x86_64/setcontext.S. -- * src/x86_64/Gresume.c (x86_64_local_resume): Call -- _x86_64_setcontext. -- * src/x86_64/setcontext.S: Added. -- --2007-01-25 Mark Wielaard -- -- Revert: -- 2006-09-20 Alexandre Oliva -- -- * src/os-linux.h (maps_next): Don't error out just because -- path is missing. -- * include/tdep-hppa/libunwind_i.h (tdep_get_elf_image): Add as -- and arg to the parameter list. -- * include/tdep-ia64/libunwind_i.h (tdep_get_elf_image): Ditto. -- * include/tdep-ppc64/libunwind_i.h (tdep_get_elf_image): Ditto. -- * include/tdep-x86/libunwind_i.h (tdep_get_elf_image): Ditto. -- * include/tdep-x86_64/libunwind_i.h (tdep_get_elf_image): Ditto. -- * src/elfxx.h (get_proc_name): Ditto. -- * src/elfxx.c (get_proc_name): Ditto. Adjust. -- * src/hppa/Ginit.c (get_static_proc_name): Adjust. -- * src/ia64/Ginit.c (get_static_proc_name): Ditto. -- * src/ppc64/Ginit.c (get_static_proc_name): Ditto. -- * src/x86/Ginit.c (get_static_proc_name): Ditto. -- * src/x86_64/Ginit.c (get_static_proc_name): Ditto. -- * src/ptrace/_UPT_find_proc_info.c (get_unwind_info): Ditto. -- * src/ptrace/_UPT_get_proc_name.c (_UPT_get_proc_name): Ditto. -- * src/os-hpux.c (tdep_get_elf_image): Ditto. -- * src/os-linux.c (tdep_get_elf_image): Ditto. Read in 1-page -- segments that start with the ELF magic. -- (MAX_VDSO_SIZE): New. -- -- 2007-04-25 Nurdin Premji -- -- * src/elfxx.h (elf_map_image): map image using MAP_32BIT to -- avoid address truncation issues in cross-platform unwinding. -- * src/os-linux.h: (tdep_get_elf_image) Ditto for VDSO section. -- * src/ptrace/_UPT_find_proc_info.c (_UPTi_find_unwind_table): -- Added dummy local address space for cross-platform unwinding. -- --2008-01-18 Mark Wielaard -- -- * include/dwarf.h (dwarf_cie_info): Add as and as_arg members. -- * src/dwarf/Gfde.c (dwarf_extract_proc_info_from_fde): Set dci -- as and as_arg when not local only. -- * src/dwarf/Gparser.c (run_cfi_program): Use dci as and as_arg -- when not local only. -- --2008-01-17 Mark Wielaard -- -- * include/dwarf.h (dwarf_extract_proc_info_from_fde): Pass -- table_start. -- * src/dwarf/Gfde.c (is_cie_id): Removed. -- (parse_cie): Accept debug and eh cie ids. -- (dwarf_extract_proc_info_from_fde): Accept table_start. Calculate -- correct cie_addr. Fix error reporting. -- * src/dwarf/Gfind_proc_info-lsb.c (linear_search): Don't depend -- on local address space. Pass table start for fde parsing. -- (dwarf_search_unwind_table): Handle debug_frame by linear search. -- * src/mi/Gget_unwind_table.c (get_frame_table, get_debug_table): -- new functions. -- (unw_get_unwind_table): Call either get_frame_table or -- get_debug_table depending on format. -- --2007-12-22 Mark Wielaard -- -- * include/libunwind-common.h.in (unw_get_unwind_table): -- Remove as, arg and peh_vaddr arguments. -- * src/mi/Gget_unwind_table.c (unw_get_unwind_table): Likewise. -- Create address space from eh_frame_accessors. Set rti.table_data -- and rti.segbase from eh_frame_hdr_address. Pass eh_frame_arg -- to tdep_search_unwind_table. -- * src/dwarf/Gfde.c (parse_cie): Add FRYSK LOCAL hack to not -- read personality routine address. -- --2007-12-20 Mark Wielaard -- -- * configure.in (is_local_frysk_build): New function. -- (frysk_local_target_cpu): New function. -- Define target_cpu, target_alias and UNW_REMOTE_ONLY based on new -- functions. -- --2007-12-11 Andrew Cagney -- -- * src/x86/Gregs.c (linux_scratch_loc): Add XMM registers. -- (tdep_access_fpreg): Ditto. -- * src/x86/regname.c: Add XMM registers. -- * src/x86/is_fpreg.c: Include XMM0 .. XMM7 in floating point -- registers. -- * include/libunwind-x86.h (x86_regnum_t): Add UNW_X86_XMM0, -- UNW_X86_XMM1, UNW_X86_XMM2, UNW_X86_XMM3, UNW_X86_XMM4, -- UNW_X86_XMM5, UNW_X86_XMM7, UNW_X86_XMM7. -- (unw_tdep_fpreg_t): Change to a union of possible values. -- --2007-12-11 Mark Wielaard -- -- * include/libunwind-common.h.in (unw_get_unwind_table): Add -- unw_accessor_t, remove elf image arguments. -- * src/mi/Gget_unwind_table.c (unw_get_unwind_table): Likewise. -- Rewrite to use unw_accessor_t for reading all data. -- --2007-11-28 Mark Wielaard -- -- * src/mi/Gget_unwind_table.c (unw_get_unwind_table): Make addr a -- char *, pass addr as arg to dwarf_read functions, make -- local_access_mem use arg as base address for start indexed reads. -- --2007-11-28 Mark Wielaard -- -- Revert: -- 2006-12-10 Jan Kratochvil -- -- * src/elfxx.c (lookup_symbol): Avoid returning irrelevant symbols -- defined as the last ones before the address in different -- section. -- -- 2006-12-10 Jan Kratochvil -- -- * src/elfxx.c (lookup_symbol): Fixed excessive buffer -- size requirement. -- --2007-11-28 Mark Wielaard -- -- * .cvsignore, config/.cvsignore, doc/.cvsignore, -- include/.cvsignore, src/.cvsignore, tests/.cvsignore: Removed. -- --2007-11-23 Mark Wielaard -- -- Revert: -- 2006-09-16 Alexandre Oliva -- -- * src/x86/Gget_proc_info.c (unw_get_proc_info): Use -- unw_get_proc_name to build a proper proc_info_t. -- * src/x86_64/Gget_proc_info.c (unw_get_proc_info): Likewise. -- * src/hppa/Gget_proc_info.c (unw_get_proc_info): Likewise. -- -- 2006-09-27 Alexandre Oliva -- -- * src/elfxx.c (lookup_symbol): Cope with NULL buf and zero buf_len. -- * src/mi/Gget_proc_name.c (intern_string, get_proc_name): Likewise. -- * src/hppa/Gget_proc_info.c (unw_get_proc_info): Use it. -- * src/x86/Gget_proc_info.c (unw_get_proc_info): Likewise. -- * src/x86_64/Gget_proc_info.c (unw_get_proc_info): Likewise. -- * doc/unw_get_proc_name.tex: Document NULL buf and zero buf_len. -- * doc/unw_create_addr_space.tex (get_proc_name): Likewise. -- * doc/unw_get_proc_name.man: Rebuilt. -- * doc/unw_create_addr_space.man: Likewise. -- --2007-11-19 Mark Wielaard -- -- * src/mi/Gget_reg.c (unw_get_reg): Use cached value from cursor -- when looking for UNW_REG_IP. -- --2007-10-13 Mark Wielaard -- -- * config/.cvsignore: New. Ignore generated files. -- --2007-10-12 Mark Wielaard -- -- * src/ppc32/ucontext_i.h: Use locally defined reg structs. -- --2007-10-12 Jose Flavio Aguilar Paulino -- -- * include/tdep-ppc32/libunwind_i.h: Define tdep_fetch_proc_info_post. -- (tdep_get_elf_image): Add void *arg argument. -- * include/tdep-ppc64/libunwind_i.h: Likewise. -- * src/Makefile.am (libunwind_la_SOURCES_ppc): Add -- ppc/Lfetch_proc_info_post.c. -- (libunwind_ppc_la_SOURCES_ppc_generic): Add -- ppc/Gfetch_proc_info_post.c. -- * src/ppc/Gfetch_proc_info_post.c: New file. -- * src/ppc/Lfetch_proc_info_post.c: New file. -- * src/ppc32/Ginit.c (get_static_proc_name): Pass through arg. -- * src/ppc64/Ginit.c (get_static_proc_name): Likewise. -- --2007-10-11 Mark Wielaard -- -- * Imported and merged with libunwind 20071010. -- --2007-10-10 Andrew Cagney -- -- * src/x86/init.h (common_init): Use UNW_X86_ESI for dwarf.loc[ESI]. -- --2007-10-03 Mark Wielaard -- -- * tests/test-async-sig.c: Remove duplicate nerrors_max (merge error). -- * tests/test-ptrace.c: Remove duplicate -- and target_pid_kill definitions (merge error). -- --2007-10-03 Mark Wielaard -- -- * src/Makefile.am: Don't special case libunwind-ptrace. Use upstream -- .a archive rules. -- * tests/Makefile.am: Likewise. -- --2007-09-11 Mark Wielaard -- -- * Makefile.am (SUBDIRS): Exclude docs. -- --2007-09-10 Mark Wielaard -- -- * aux/config.guess: Remove generated file. -- * aux/config.sub: Likewise. -- * aux/ltmain.sh: Likewise. -- * src/ppc64/Make-arch.in: Likewise. -- --2007-09-10 Mark Wielaard -- -- * Imported and merged with libunwind 20070829. -- --2007-06-19 Andrew Cagney -- -- * Makefile.am (EXTRA_DIST): Add include/tdep-ppc64/jmpbuf.h, -- include/tdep-ppc64/libunwind_i.h, and include/tdep-ppc64/README. -- -- * Makefile.am (include_HEADERS_tdep): Add -- include/libunwind-ppc64.h. -- -- * src/Makefile.am (libunwind_la_SOURCES_x86_64_common): Remove -- stray '\'. -- --2007-06-14 Nurdin Premji -- -- * src/Makefile.am: Removed src/x86_64/setcontext.S. -- * src/x86_64/setcontext.S: Removed. -- --2007-05-10 Nurdin Premji -- -- * src/mi/Gget_unwind_table.c (unw_get_unwind_table): Don't abort, just -- return an error. -- Cleaned up logging. -- --2007-04-30 Nurdin Premji -- -- * src/mi/Gget_unwind_table.c (unw_get_unwind_table): Changed to return -- UNW_ENOINFO instead of -1. Allows stepping to continue. -- --2007-04-25 Nurdin Premji -- -- * src/mi/Gget_unwind_table.c (unw_get_unwind_table): Cleaned up logging. -- -- * include/libunwind-common.h.in (unw_get_unwind_table): Added. -- * src/elfxx.h (elf_map_image): map image using MAP_32BIT to avoid address -- truncation issues in cross-platform unwinding. -- * src/os-linux.h: (tdep_get_elf_image) Ditto for VDSO section. -- * src/Makefile.am (libunwind_la_SOURCES_generic): Added Gget_unwind_table.c. -- * src/mi/Gget_unwind_table.c: Added. -- * src/ptrace/_UPT_find_proc_info.c (_UPTi_find_unwind_table): -- Added dummy local address space for cross-platform unwinding. -- --2007-04-05 Jan Kratochvil -- -- * src/hppa/getcontext.S, src/hppa/setcontext.S, src/hppa/siglongjmp.S, -- src/ia64/Ginstall_cursor.S, src/ia64/Linstall_cursor.S, -- src/ia64/dyn_info_list.S, src/ia64/getcontext.S, src/ia64/longjmp.S, -- src/ia64/setjmp.S, src/ia64/siglongjmp.S, src/ia64/sigsetjmp.S, -- src/ppc64/longjmp.S, src/ppc64/siglongjmp.S, src/x86/longjmp.S, -- src/x86/siglongjmp.S, src/x86_64/longjmp.S, src/x86_64/setcontext.S, -- src/x86_64/siglongjmp.S: Stack should be non-executable, for SELinux. -- -- * tests/test-ptrace.c (target_pid_kill): New function. -- (target_pid, main): TARGET_PID made static, for target_pid_kill (). -- (main): Register target_pid_kill () for atexit(3). -- -- * tests/ia64-test-setjmp.c (doit): New forward declaration. -- (doit_pointer): New function pointer variable initialized to DOIT. -- (doit): Self-call made by an unoptimizable volatile indirect call. -- -- * src/Makefile.am (LIBRARIES_cdep, lib_LTLIBRARIES_cdep_setjmp): -- Removed, moved into ... -- (lib_LTLIBRARIES_cdep) ... here to fix libtool --disable-static. -- (libunwind_ptrace_a_SOURCES): Renamed to ... -- (libunwind_ptrace_la_SOURCES) ... here to fix libtool --disable-static. -- (install-exec-hook): Fixed for conditional compilations. -- (lib_LIBRARIES): Removed. -- (lib_LTLIBRARIES): Updated for removed `lib_LTLIBRARIES_cdep_setjmp'. -- (EXTRA_DIST): Updated for new renamed `libunwind_ptrace_la_SOURCES'. -- * tests/Makefile.am (test_ptrace_LDADD): Updated for libtool. -- --2007-04-04 Jan Kratochvil -- -- * acinclude.m4, config/compile, config/config.guess, config/config.sub, -- config/depcomp, config/install-sh, config/ltmain.sh, config/missing, -- config/mkinstalldirs: Removed the autotools generated files. -- * .cvsignore: `config' is no longer a repository stored directory. -- -- * include/libunwind-ppc64.h (UNW_TDEP_CURSOR_LEN): Fixed for assert()s. -- * include/tdep-ppc64/libunwind_i.h (mempool.h): Version update even for -- the ppc64 architecture. -- * src/Makefile.am (ppc64): Version forward-ported the ppc64 port. -- * src/ppc64/Ginit.c (ppc64_local_addr_space_init): Removed VALIDATE -- initialization as it is no longer a cross-architecture field. -- * src/ppc64/Lcreate_addr_space.c, src/ppc64/Lget_proc_info.c, -- src/ppc64/Lget_save_loc.c, src/ppc64/Lglobal.c, src/ppc64/Linit.c, -- src/ppc64/Linit_local.c, src/ppc64/Linit_remote.c, -- src/ppc64/Lis_signal_frame.c, src/ppc64/Lregs.c, src/ppc64/Lresume.c, -- src/ppc64/Lstep.c: New files. -- * src/ppc64/setcontext.S: Removed file as it had invalid unused content. -- * src/ppc64/siglongjmp.S (_UI_siglongjmp_cont): New stub function. -- * tests/flush-cache.S (flush_cache): New stub function for ppc64. -- * tests/test-ptrace-stepper.c (lockup): New ppc64 and crossplatform -- implementations. -- -- * tests/Gtest-dyn1.c, tests/Gtest-resume-sig.c, tests/test-async-sig.c, -- tests/test-ptrace.c: Fixed lockups on broken libunwind (as ppc64 is). -- --2007-03-31 Andrew Cagney -- -- * configure.in (AM_MAINTAINER_MODE): Delete. -- (get_arch): Map powerpc64 onto ppc64. -- (pkg_extra): Append -frysk. -- (pkg_maintainer): Change to frysk@sourceware.org. -- --2007-03-20 Nurdin Premji -- -- * tests/mapper.c: Change alarm timeout to 80. -- --2007-03-19 Nurdin Premji -- -- * tests/Makefile.am: Added test_ptrace_stepper, and test_ptrace_signull -- to list of tests to run. -- (XFAIL): Added test_ptrace_signull. -- * .cvsignore: Added Makefile.in. -- * doc/.cvsignore: Ditto. -- * src/.cvsignore: Ditto. -- * tests/.cvsignore: Ditto. -- --2007-03-07 Jan Kratochvil -- -- * include/tdep-hppa/libunwind_i.h, include/tdep-ppc64/libunwind_i.h, -- include/tdep-x86/libunwind_i.h, include/tdep-x86_64/libunwind_i.h -- (tdep_fetch_proc_info_post): Fixed its UNW_OBJ()-duality. -- * src/Makefile.am (libunwind_la_SOURCES_x86_common) -- (libunwind_la_SOURCES_x86, libunwind_x86_la_SOURCES_x86): Fixed -- x86/Gfetch_proc_info_post.c and x86/Lfetch_proc_info_post.c duality. -- (libunwind_la_SOURCES_x86_64_common, libunwind_la_SOURCES_x86_64) -- (libunwind_x86_64_la_SOURCES_x86_64): Fixed -- x86_64/Gfetch_proc_info_post.c and x86_64/Lfetch_proc_info_post.c -- duality. -- * src/x86/Lfetch_proc_info_post.c, src/x86_64/Lfetch_proc_info_post.c: -- New files. -- --2007-03-14 Nurdin Premji -- -- * tests/check-namespace.sh.in: Reverted so lib search to libunwind version. -- -- * Makefile.am: Added. -- * configure.in: Added. -- * config/ltmain.sh: Added. -- * doc/Makefile.am: Added. -- * src/Makefile.am: Added. -- * tests/Makefile.am: Added. -- * src/dwarf/Lexpr.c: Added. -- * src/dwarf/Lfde.c: Added -- * src/dwarf/Lfind_proc_info-lsb.c: Added -- * src/dwarf/Lparser.c: Added -- * src/dwarf/Lpe.c: Added -- * src/dwarf/Lstep.c: Added -- * src/hppa/Lcreate_addr_space.c: Added -- * src/hppa/Lget_proc_info.c: Added -- * src/hppa/Lget_save_loc.c: Added -- * src/hppa/Lglobal.c: Added -- * src/hppa/Linit.c: Added -- * src/hppa/Linit_local.c: Added -- * src/hppa/Linit_remote.c: Added -- * src/hppa/Lis_signal_frame.c: Added -- * src/hppa/Lregs.c: Added -- * src/hppa/Lresume.c: Added -- * src/hppa/Lstep.c: Added -- * src/ia64/Lcreate_addr_space.c: Added -- * src/ia64/Lget_proc_info.c: Added -- * src/ia64/Lget_save_loc.c: Added -- * src/ia64/Lglobal.c: Added -- * src/ia64/Linit.c: Added -- * src/ia64/Linit_local.c: Added -- * src/ia64/Linit_remote.c: Added -- * src/ia64/Linstall_cursor.S: Added -- * src/ia64/Lis_signal_frame.c: Added -- * src/ia64/Lparser.c: Added -- * src/ia64/Lrbs.c: Added -- * src/ia64/Lregs.c: Added -- * src/ia64/Lresume.c: Added -- * src/ia64/Lscript.c: Added -- * src/ia64/Lstep.c: Added -- * src/ia64/Ltables.c: Added -- * src/mi/Ldestroy_addr_space.c: Added -- * src/mi/Ldyn-extract.c: Added -- * src/mi/Lfind_dynamic_proc_info.c: Added -- * src/mi/Lget_accessors.c: Added -- * src/mi/Lget_fpreg.c: Added -- * src/mi/Lget_proc_info_by_ip.c: Added -- * src/mi/Lget_proc_name.c: Added -- * src/mi/Lget_reg.c: Added -- * src/mi/Lput_dynamic_unwind_info.c: Added -- * src/mi/Lset_caching_policy.c: Added -- * src/mi/Lset_fpreg.c: Added -- * src/mi/Lset_reg.c: Added -- * src/x86/Lcreate_addr_space.c: Added -- * src/x86/Lget_proc_info.c: Added -- * src/x86/Lget_save_loc.c: Added -- * src/x86/Lglobal.c: Added -- * src/x86/Linit.c: Added -- * src/x86/Linit_local.c: Added -- * src/x86/Linit_remote.c: Added -- * src/x86/Lis_signal_frame.c: Added -- * src/x86/Lregs.c: Added -- * src/x86/Lresume.c: Added -- * src/x86/Lstep.c: Added -- * src/x86_64/Lcreate_addr_space.c: Added -- * src/x86_64/Lget_proc_info.c: Added -- * src/x86_64/Lget_save_loc.c: Added -- * src/x86_64/Lglobal.c: Added -- * src/x86_64/Linit.c: Added -- * src/x86_64/Linit_local.c: Added -- * src/x86_64/Linit_remote.c: Added -- * src/x86_64/Lis_signal_frame.c: Added -- * src/x86_64/Lregs.c: Added -- * src/x86_64/Lresume.c: Added -- * src/x86_64/Lstep.c: Added -- * tests/Lia64-test-nat.c: Added -- * tests/Lia64-test-rbs.c: Added -- * tests/Lia64-test-readonly.c: Added -- * tests/Lia64-test-stack.c: Added -- * tests/Lperf-simple.c: Added -- * tests/Ltest-bt.c: Added -- * tests/Ltest-concurrent.c: Added -- * tests/Ltest-dyn1.c: Added -- * tests/Ltest-exc.c: Added -- * tests/Ltest-init.cxx: Added -- * tests/Ltest-resume-sig.c: Added -- * Makefile.in: Removed. -- * doc/Makefile.in: Removed. -- * src/Makefile.in: Removed. -- * tests/Makefile.in: Removed. -- * configure.ac: Removed. -- * scripts/kernel-diff.sh: Removed. -- * scripts/kernel-files.txt: Removed. -- * scripts/make-L-files: Removed. -- * src/Make-hpux.in: Removed. -- * src/Make-linux.in: Removed. -- * src/hppa/Make-arch.in: Removed. -- * src/hppa/get_accessors.c: Removed. -- * src/hppa/tables.c: Removed. -- * src/ia64/Make-arch.in: Removed. -- * src/ia64/NOTES: Removed. -- * src/setjmp/setjmp.c: Removed. -- * src/setjmp/sigsetjmp.c: Removed. -- * src/x86/Make-arch.in: Removed. -- * src/x86_64/Make-arch.in: Removed. -- * tests/perf-startup: Removed. -- * include/dwarf.h: Modified. -- * include/dwarf_i.h: Modified. -- * include/libunwind-common.h.in: Modified. -- * include/tdep-x86/libunwind_i.h: Modified. -- * include/tdep-x86_64/libunwind_i.h: Modified. -- * src/os-linux.h: Modified. -- * src/dwarf/Gparser.c: Modified. -- * src/hppa/init.h: Modified. -- * src/ia64/setjmp.S: Modified. -- * src/ia64/sigsetjmp.S: Modified. -- * src/mi/mempool.c: Modified. -- * src/ptrace/_UPT_find_proc_info.c: Modified. -- * src/setjmp/longjmp.c: Modified. -- * src/setjmp/siglongjmp.c: Modified. -- * src/x86_64/Ginit.c: Modified. -- * src/x86_64/Gis_signal_frame.c: Modified. -- * tests/Gia64-test-readonly.c: Modified. -- * tests/ia64-test-readonly-asm.S: Modified. -- --2007-03-07 Jan Kratochvil -- -- * tests/test-async-sig.c (do_backtrace): Limit maximum backtrace depth -- to 100 iterations; it workarounds FC6 DWARF-broken glibc. -- --2007-03-02 Nurdin Premji -- -- * src/elfxx.c (lookup_symbol): Undo previous correction, buf_len is decremented previously. -- --2007-02-28 Nurdin Premji -- -- * src/elfxx.c (lookup_symbol): Fix stack smashing buf memcpy. -- --2007-02-28 Jan Kratochvil -- -- * tests/Makefile.in (clean): No longer remove some source scripts. -- --2007-02-28 Jan Kratochvil -- -- * tests/check-namespace.sh.in: Backward compatible $(top_builddir) fix -- for the autoconf-2.59c compatibility. -- --2007-01-24 Jan Kratochvil -- -- * src/elfxx.c (lookup_symbol): Fix false preceding zero-sized function -- resolving (printed `_start' symbols for stripped binaries). -- --2006-12-18 Jan Kratochvil -- -- * src/elfxx.c (lookup_symbol): Fix regression in the 2006-12-10 bugfix; -- on already prelink(8)ed libraries loaded at a different address. -- No testcase provided as prelink(8) need `root' privileges. -- --2006-12-17 Jan Kratochvil -- -- * tests/check-namespace.sh.in (check_local_unw_abi): Restrict the -- checking of `unw_tdep_getcontext' only for platforms it is built on. -- --2006-12-16 Jan Kratochvil -- -- * tests/Gtest-resume-sig.c (main): Return SKIP instead of FAIL on ia64 -- as the libunwind functionality is still not implemented for non-ia64. -- --2006-12-11 Jan Kratochvil -- -- * tests/Makefile.in (XFAIL_TESTS): `run-ptrace-signull' is now XFAIL -- until the clone() CFI unwind stopping gets resolved in glibc. -- --2006-12-10 Jan Kratochvil -- -- * src/x86/Gstep.c (code_descriptor_trap): Handle the cases of signal -- frame leaving stale address due to page fault on an instruction fetch. -- (unw_step): Call `code_descriptor_trap' above. -- Debug dump the content of signal frame set from CFI. -- Fixed non-CFI signal frame detection regarding its false positives. -- Debug dump whether non-CFI unwinding as signal frame or not. -- * src/x86/offsets.h: New signal frame value `LINUX_SC_TRAPNO_PF'. -- --2006-12-10 Jan Kratochvil -- -- * src/x86/Gfetch_proc_info_post.c: Set `cursor->sigcontext_addr' -- even for CFI-unwinded signal frames. -- * src/x86/Make-arch.in: Include `Gfetch_proc_info_post.o'. -- * include/tdep-x86/libunwind_i.h (tdep_fetch_proc_info_post): Now -- declaration. -- --2006-12-10 Jan Kratochvil -- -- * src/x86_64/Gstep.c (unw_step): Fixed debug message exhanged values. -- --2006-12-10 Jan Kratochvil -- -- * src/x86/Gstep.c (unw_step): Handle the case of `c->dwarf.ip == 0'. -- * src/x86_64/Gstep.c (code_descriptor_trap): Handle the cases of signal -- frame leaving stale address due to page fault on an instruction fetch. -- (unw_step): Call `code_descriptor_trap' above. -- Debug dump the content of signal frame set from CFI. -- Handle the case of `c->dwarf.ip == 0'. -- * src/x86_64/ucontext_i.h: New signal frames fields `err' and `trapno'. -- * tests/Makefile.in: New `run-ptrace-signull'. -- * tests/run-ptrace-signull: New (NULL handling: gdb `signull' testcase). -- * tests/test-ptrace-signull.c: Likewise. -- --2006-12-10 Jan Kratochvil -- -- * src/x86_64/Gfetch_proc_info_post.c: Set `cursor->sigcontext_addr' -- even for CFI-unwinded signal frames. -- * src/dwarf/Gparser.c (fetch_proc_info): Call it. -- * src/x86_64/Make-arch.in: Include `Gfetch_proc_info_post.o'. -- * include/tdep-x86_64/libunwind_i.h (tdep_fetch_proc_info_post): New -- (declaration). -- * include/tdep-hppa/libunwind_i.h (tdep_fetch_proc_info_post): New -- (empty definition). -- * include/tdep-ia64/libunwind_i.h (tdep_fetch_proc_info_post): -- Likewise. -- * include/tdep-ppc64/libunwind_i.h (tdep_fetch_proc_info_post): -- Likewise. -- * include/tdep-x86/libunwind_i.h (tdep_fetch_proc_info_post): -- Likewise. -- --2006-12-10 Jan Kratochvil -- -- * src/elfxx.c (lookup_symbol): Avoid returning irrelevant symbols -- defined as the last ones before the address in different section. -- --2006-12-10 Jan Kratochvil -- -- * src/elfxx.c (lookup_symbol): Fixed excessive buffer size requirement. -- --2006-12-10 Jan Kratochvil -- -- * tests/test-ptrace.c (main): Check for too many unexpected child -- signals, such as the common `SIGSEGV'. -- --2006-12-10 Jan Kratochvil -- -- * tests/Gtest-resume-sig.c (handler): Fixed false PASS on non-ia64. -- Be adaptive to the number of unwinding steps from `SIGUSR1'. -- --2006-12-10 Jan Kratochvil -- -- * src/dwarf/Gparser.c (apply_reg_state): Handle undefined PC by -- `c->ip = 0' as in the case of the outermost frame of clone(3). -- --2006-12-01 Jan Kratochvil -- -- * tests/test-ptrace.c: Fixed `-b' to report missed target function. -- --2006-11-25 Jan Kratochvil -- -- * tests/test-ptrace.c: Fixed `-b' to never leave a stale child process. -- --2006-11-24 Jan Kratochvil -- -- * tests/run-ptrace-stepper: Fixed signal frame name for x86_64. -- --2006-11-24 Jan Kratochvil -- -- * src/Makefile.in (INCFLAGS): Backward compatible $(top_builddir) fix -- for the autoconf-2.59c compatibility. -- * tests/Makefile.in (INCFLAGS, LDFLAGS): Likewise. -- --2006-11-24 Jan Kratochvil -- -- * include/dwarf.h (dwarf_cie_info): New `signal_frame' marker. -- (dwarf_cursor): New `decrease_ip' marker. -- * src/dwarf/Gfde.c (parse_cie): Set the `signal_frame' marker. -- * src/dwarf/Gparser.c (run_cfi_program): Fixed occassionally offbyone -- `ip' missed CFI instructions, related to `fetch_proc_info'. -- (fetch_proc_info): Decrease parent `ip' only by `decrease_ip' marker. -- (is_signal_frame): Detect signal frames by the `signal_frame' marker. -- (uncached_dwarf_find_save_locs): Update the `decrease_ip' marker. -- (dwarf_find_save_locs): Likewise. -- * src/hppa/init.h (common_init): Initialize the `decrease_ip' marker. -- * src/ppc64/init.h (common_init): Likewise. -- * src/x86/init.h (common_init): Likewise. -- * src/x86_64/init.h (common_init): Likewise. -- * tests/Makefile.in: New `run-ptrace-stepper' and `test-ptrace-stepper'. -- * tests/test-ptrace.c (backtrace_check): New for `-b'. -- (do_exit): Variable to support breaking of the `main' mainloop. -- (do_backtrace): Implemented `-b' based on `backtrace_check'. -- Fixed compile warning for 32-bit platforms -- (main): Fixed segfault for some `argv's. -- Support backtrace option `-b' - `,'-delimited backtrace list to check. -- Support `do_exit'. -- * test-ptrace-stepper.c: New, test corner backtrace conditions. -- * run-ptrace-stepper: New, test `test-ptrace' on `test-ptrace-stepper'. -- --2006-09-27 Alexandre Oliva -- -- * src/elfxx.c (lookup_symbol): Cope with NULL buf and zero buf_len. -- * src/mi/Gget_proc_name.c (intern_string, get_proc_name): Likewise. -- * src/hppa/Gget_proc_info.c (unw_get_proc_info): Use it. -- * src/x86/Gget_proc_info.c (unw_get_proc_info): Likewise. -- * src/x86_64/Gget_proc_info.c (unw_get_proc_info): Likewise. -- * doc/unw_get_proc_name.tex: Document NULL buf and zero buf_len. -- * doc/unw_create_addr_space.tex (get_proc_name): Likewise. -- * doc/unw_get_proc_name.man: Rebuilt. -- * doc/unw_create_addr_space.man: Likewise. -- --2006-09-20 Arun Sharma -- -- * src/dwarf/Gparser.c (hash): Fixes the compiler warning on x86-32. -- --2006-09-20 Alexandre Oliva -- -- * src/os-linux.h (maps_next): Don't error out just because -- path is missing. -- * include/tdep-hppa/libunwind_i.h (tdep_get_elf_image): Add as -- and arg to the parameter list. -- * include/tdep-ia64/libunwind_i.h (tdep_get_elf_image): Ditto. -- * include/tdep-ppc64/libunwind_i.h (tdep_get_elf_image): Ditto. -- * include/tdep-x86/libunwind_i.h (tdep_get_elf_image): Ditto. -- * include/tdep-x86_64/libunwind_i.h (tdep_get_elf_image): Ditto. -- * src/elfxx.h (get_proc_name): Ditto. -- * src/elfxx.c (get_proc_name): Ditto. Adjust. -- * src/hppa/Ginit.c (get_static_proc_name): Adjust. -- * src/ia64/Ginit.c (get_static_proc_name): Ditto. -- * src/ppc64/Ginit.c (get_static_proc_name): Ditto. -- * src/x86/Ginit.c (get_static_proc_name): Ditto. -- * src/x86_64/Ginit.c (get_static_proc_name): Ditto. -- * src/ptrace/_UPT_find_proc_info.c (get_unwind_info): Ditto. -- * src/ptrace/_UPT_get_proc_name.c (_UPT_get_proc_name): Ditto. -- * src/os-hpux.c (tdep_get_elf_image): Ditto. -- * src/os-linux.c (tdep_get_elf_image): Ditto. Read in 1-page -- segments that start with the ELF magic. -- (MAX_VDSO_SIZE): New. -- --2006-09-16 Alexandre Oliva -- -- * src/x86/Gget_proc_info.c (unw_get_proc_info): Use -- unw_get_proc_name to build a proper proc_info_t. -- * src/x86_64/Gget_proc_info.c (unw_get_proc_info): Likewise. -- * src/hppa/Gget_proc_info.c (unw_get_proc_info): Likewise. -- --2006-09-16 Alexandre Oliva -- -- * configure.ac: Don't define UNW_REMOTE_ONLY. -- * src/os-linux.c: Restore #ifndef removed it previous patch. -- --2006-09-12 Yao Qi -- -- * src/ptrace/_UPT_find_proc_info.c: Add UNW_TARGET_PPC64 in #elif. -- --2006-09-08 Alexandre Oliva -- -- * src/os-linux.c (tdep_get_elf_image): Define for remote only too. -- --2006-08-29 Wu Zhou -- -- * include/libunwind-ppc64.h: New header file for ppc64 stubs. -- * include/tdep-ppc64/dwarf-config.h: Ditto. -- * include/tdep-ppc64/jmpbuf.h: Ditto. -- * include/tdep-ppc64/libunwind_i.h: Ditto. -- * include/tdep-ppc64/README: Readme file for this directory. -- * src/ppc64/Gcreate_addr_space.c: New file for ppc64 stubs. -- * src/ppc64/Gget_proc_info.c: Ditto. -- * src/ppc64/Gget_save_loc.c: Ditto. -- * src/ppc64/Gglobal.c: Ditto. -- * src/ppc64/Ginit.c: Ditto. -- * src/ppc64/Ginit_local.c: Ditto. -- * src/ppc64/Ginit_remote.c: Ditto. -- * src/ppc64/Gis_signal_frame.c: Ditto. -- * src/ppc64/Gregs.c: Ditto. -- * src/ppc64/Gresume.c: Ditto. -- * src/ppc64/Gstep.c: Ditto. -- * src/ppc64/init.h: Ditto. -- * src/ppc64/is_fpreg.c: Ditto. -- * src/ppc64/longjmp.S: Ditto. -- * src/ppc64/Make-arch.in: Ditto. -- * src/ppc64/README: Readme file for directory src/ppc64. -- * src/ppc64/regname.c: New file for ppc64 stubs. -- * src/ppc64/setcontext.S: Ditto. -- * src/ppc64/siglongjmp.S: Ditto. -- * src/ppc64/ucontext_i.h: Ditto. -- * src/ppc64/unwind_i.h: Ditto. -- * src/ptrace/_UPT_reg_offset.c (_UPT_reg_offset): Define empty -- register offset for target PPC64. -- --2006-08-17 Stepan Kasal -- -- * Makefile.in (installcheck): Another stub target. -- --2006-08-16 Andrew Cagney -- -- * Makefile.in (dvi): Add phony target. -- --2006-08-10 Rick Moseley -- -- * configure.ac: Turn on UNW_REMOTE_ONLY always for Frysk. -- --2006-07-14 Stepan Kasal -- -- * Makefile.in: Do not install for frysk. -- --2006-07-12 Stepan Kasal -- -- * Makefile.in: Add a dangerous temporary implementtation of the -- ``distdir'' target. -- - *********************************************************** - - Discontinued. See git log instead at -diff --git a/frysk-imports/libunwind/INSTALL b/frysk-imports/libunwind/INSTALL -deleted file mode 100644 -index b42a17a..0000000 ---- a/frysk-imports/libunwind/INSTALL -+++ /dev/null -@@ -1,182 +0,0 @@ --Basic Installation --================== -- -- These are generic installation instructions. -- -- 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, a file --`config.cache' that saves the results of its tests to speed up --reconfiguring, and a file `config.log' containing compiler output --(useful mainly for debugging `configure'). -- -- 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 at some point `config.cache' --contains results you don't want to keep, you may remove or edit it. -- -- The file `configure.in' is used to create `configure' by a program --called `autoconf'. You only need `configure.in' 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. If you're -- using `csh' on an old version of System V, you might need to type -- `sh ./configure' instead to prevent `csh' from trying to execute -- `configure' itself. -- -- Running `configure' takes awhile. 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. -- --Compilers and Options --===================== -- -- Some systems require unusual options for compilation or linking that --the `configure' script does not know about. You can give `configure' --initial values for variables by setting them in the environment. Using --a Bourne-compatible shell, you can do that on the command line like --this: -- CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure -- --Or on systems that have the `env' program, you can do it like this: -- env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure -- --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 must use a version of `make' that --supports the `VPATH' variable, such as 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 `..'. -- -- If you have to use a `make' that does not supports the `VPATH' --variable, you have 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' will install the package's files in --`/usr/local/bin', `/usr/local/man', etc. You can specify an --installation prefix other than `/usr/local' by giving `configure' the --option `--prefix=PATH'. -- -- You can specify separate installation prefixes for --architecture-specific files and architecture-independent files. If you --give `configure' the option `--exec-prefix=PATH', the package will use --PATH as the prefix for installing programs and libraries. --Documentation and other data files will still use the regular prefix. -- -- In addition, if you use an unusual directory layout you can give --options like `--bindir=PATH' 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' can not figure out --automatically, but needs to determine by the type of host the package --will run on. Usually `configure' can figure that out, but if it prints --a message saying it can not guess the host type, give it the --`--host=TYPE' option. TYPE can either be a short name for the system --type, such as `sun4', or a canonical name with three fields: -- CPU-COMPANY-SYSTEM -- --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 host type. -- -- If you are building compiler tools for cross-compiling, you can also --use the `--target=TYPE' option to select the type of system they will --produce code for and the `--build=TYPE' option to select the type of --system on which you are compiling the package. -- --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. -- --Operation Controls --================== -- -- `configure' recognizes the following options to control how it --operates. -- --`--cache-file=FILE' -- Use and save the results of the tests in FILE instead of -- `./config.cache'. Set FILE to `/dev/null' to disable caching, for -- debugging `configure'. -- --`--help' -- Print a summary of the options to `configure', and exit. -- --`--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. -- --`--version' -- Print the version of Autoconf used to generate the `configure' -- script, and exit. -- --`configure' also accepts some other, not widely useful, options. -diff --git a/frysk-imports/libunwind/Makefile.am b/frysk-imports/libunwind/Makefile.am -index e31e23e..6a3ed9e 100644 ---- a/frysk-imports/libunwind/Makefile.am -+++ b/frysk-imports/libunwind/Makefile.am -@@ -1,67 +1,96 @@ -+include_HEADERS = include/libunwind-dynamic.h \ -+ include/libunwind-ptrace.h \ -+ include/libunwind-coredump.h -+ -+if ARCH_AARCH64 -+include_HEADERS += include/libunwind-aarch64.h -+endif - if ARCH_ARM --include_HEADERS_tdep = include/libunwind-arm.h --else -+include_HEADERS += include/libunwind-arm.h -+endif - if ARCH_IA64 --include_HEADERS_tdep = include/libunwind-ia64.h --else -+include_HEADERS += include/libunwind-ia64.h -+endif - if ARCH_HPPA --include_HEADERS_tdep = include/libunwind-hppa.h --else -+include_HEADERS += include/libunwind-hppa.h -+endif - if ARCH_MIPS --include_HEADERS_tdep = include/libunwind-mips.h --else -+include_HEADERS += include/libunwind-mips.h -+endif -+if ARCH_TILEGX -+include_HEADERS += include/libunwind-tilegx.h -+endif - if ARCH_X86 --include_HEADERS_tdep = include/libunwind-x86.h --else -+include_HEADERS += include/libunwind-x86.h -+endif - if ARCH_X86_64 --include_HEADERS_tdep = include/libunwind-x86_64.h --else -+include_HEADERS += include/libunwind-x86_64.h -+endif - if ARCH_PPC32 --include_HEADERS_tdep = include/libunwind-ppc32.h --else -+include_HEADERS += include/libunwind-ppc32.h -+endif - if ARCH_PPC64 --include_HEADERS_tdep = include/libunwind-ppc64.h --endif # ARCH_PPC64 --endif # ARCH_PPC32 --endif # ARCH_X86_64 --endif # ARCH_X86 --endif # ARCH_MIPS --endif # ARCH_HPPA --endif # ARCH_IA64 --endif # ARCH_ARM -- --include_HEADERS_common = $(include_HEADERS_tdep) \ -- include/libunwind-dynamic.h include/libunwind-ptrace.h -+include_HEADERS += include/libunwind-ppc64.h -+endif -+if ARCH_SH -+include_HEADERS += include/libunwind-sh.h -+endif - --if REMOTE_ONLY -- include_HEADERS = $(include_HEADERS_common) --else -- include_HEADERS = $(include_HEADERS_common) include/libunwind.h \ -- include/unwind.h -+if !REMOTE_ONLY -+include_HEADERS += include/libunwind.h include/unwind.h - endif - - nodist_include_HEADERS = include/libunwind-common.h - --# FRYSK LOCAL --# Exclude the docs since we don't want to build or install them. - SUBDIRS = src tests --# END FRYSK LOCAL - --EXTRA_DIST = include/dwarf.h include/dwarf_i.h include/dwarf-eh.h \ -- include/libunwind_i.h include/mempool.h \ -+if CONFIG_DOCS -+SUBDIRS += doc -+endif -+ -+noinst_HEADERS = include/dwarf.h include/dwarf_i.h include/dwarf-eh.h \ -+ include/compiler.h include/libunwind_i.h include/mempool.h \ - include/remote.h \ -- include/libunwind-common.h.in \ -- include/libunwind-ia64.h include/tdep-ia64/libunwind_i.h \ -+ include/tdep-aarch64/dwarf-config.h \ -+ include/tdep-aarch64/jmpbuf.h \ -+ include/tdep-aarch64/libunwind_i.h \ -+ include/tdep-arm/dwarf-config.h include/tdep-arm/ex_tables.h \ -+ include/tdep-arm/jmpbuf.h include/tdep-arm/libunwind_i.h \ - include/tdep-ia64/jmpbuf.h include/tdep-ia64/rse.h \ -- include/tdep-ia64/script.h \ -- include/libunwind-hppa.h include/tdep-hppa/libunwind_i.h \ -+ include/tdep-ia64/libunwind_i.h include/tdep-ia64/script.h \ -+ include/tdep-hppa/libunwind_i.h \ - include/tdep-hppa/jmpbuf.h include/tdep-hppa/dwarf-config.h \ -- include/libunwind-x86.h include/tdep-x86/libunwind_i.h \ -+ include/tdep-mips/libunwind_i.h \ -+ include/tdep-mips/jmpbuf.h include/tdep-mips/dwarf-config.h \ -+ include/tdep-tilegx/libunwind_i.h \ -+ include/tdep-tilegx/jmpbuf.h include/tdep-tilegx/dwarf-config.h \ -+ include/tdep-x86/libunwind_i.h \ - include/tdep-x86/jmpbuf.h include/tdep-x86/dwarf-config.h \ -- include/libunwind-x86_64.h include/tdep-x86_64/libunwind_i.h \ -+ include/tdep-x86_64/libunwind_i.h \ - include/tdep-x86_64/jmpbuf.h include/tdep-x86_64/dwarf-config.h \ -- include/libunwind-ppc64.h include/tdep-ppc64/dwarf-config.h \ -+ include/tdep-ppc32/dwarf-config.h \ - include/tdep-ppc32/jmpbuf.h include/tdep-ppc32/libunwind_i.h \ -- include/tdep-ppc64/jmpbuf.h include/tdep-ppc64/libunwind_i.h -+ include/tdep-ppc64/dwarf-config.h \ -+ include/tdep-ppc64/jmpbuf.h include/tdep-ppc64/libunwind_i.h \ -+ include/tdep-sh/dwarf-config.h \ -+ include/tdep-sh/jmpbuf.h include/tdep-sh/libunwind_i.h \ -+ include/tdep/libunwind_i.h \ -+ include/tdep/jmpbuf.h include/tdep/dwarf-config.h -+ -+EXTRA_DIST = include/libunwind-common.h.in -+ -+MAINTAINERCLEANFILES = \ -+ Makefile.in \ -+ INSTALL \ -+ aclocal.m4 \ -+ configure \ -+ config/compile \ -+ config/config.guess \ -+ config/config.sub \ -+ config/depcomp \ -+ config/install-sh \ -+ config/ltmain.sh \ -+ config/missing \ -+ include/config.h.in \ -+ include/config.h.in~ - --DISTCLEANFILES = include/libunwind.h include/tdep -diff --git a/frysk-imports/libunwind/NEWS b/frysk-imports/libunwind/NEWS -index 83ac810..e26d1c9 100644 ---- a/frysk-imports/libunwind/NEWS -+++ b/frysk-imports/libunwind/NEWS -@@ -1,5 +1,23 @@ - -*-Mode: outline-*- - -+* News for v1.1: -+ -+** coredump unwind support -+** New arch: SuperH -+** Improved support for PowerPC, ARM -+** Lots of cleanups, perf tweaks -+** pkg-config support -+ -+* News for v1.0: -+ -+** Fast unwind (rbp, rsp, rip only) on x86_64 with a fallback to -+ slow code path (Lassi Tuura) -+** Improved local and remote unwinding on ARM (Ken Werner) -+** Testing, stability and many fixes on x86 (Paul Pluzhnikov) -+** FreeBSD port and clean separation of OS specific bits -+ (Konstantin Belousov) -+** Thanks for all the bug reports, contributions and testing! -+ - * News for v0.99: - - ** Greatly improved x86-64 support thanks to Arun Sharma. -diff --git a/frysk-imports/libunwind/README b/frysk-imports/libunwind/README -index 180edd2..cadffc1 100644 ---- a/frysk-imports/libunwind/README -+++ b/frysk-imports/libunwind/README -@@ -1,21 +1,27 @@ - -*- mode: Outline -*- - --This is version 0.99 of the unwind library. This library supports -+This is version 1.0 of the unwind library. This library supports - several architecture/operating-system combinations: - -- Linux/IA-64: Fully tested and supported. - Linux/x86-64: Works well. -- Linux/x86: Works well, but C library is missing some unwind-info. -+ Linux/x86: Works well. -+ Linux/ARM: Works well. -+ Linux/IA-64: Fully tested and supported. - Linux/PARISC: Works well, but C library missing unwind-info. - HP-UX/IA-64: Mostly works but known to have some serious limitations. -+ Linux/AArch64: Newly added. - Linux/PPC64: Newly added. -- -+ Linux/SuperH: Newly added. -+ FreeBSD/i386: Newly added. -+ FreeBSD/x86-64: Newly added (FreeBSD architecture is known as amd64). -+ Linux/Tilegx: Newly added (64-bit mode only). - - * General Build Instructions - - In general, this library can be built and installed with the following - commands: - -+ $ ./autogen.sh # Needed only for building from git. Depends on libtool. - $ ./configure - $ make - $ make install prefix=PREFIX -@@ -79,6 +85,14 @@ If libunwind seems to not work (backtracing failing), try to compile - it with -O0, without optimizations. There are some compiler problems - depending on the version of your gcc. - -+* Building on FreeBSD -+ -+General building instructions apply. To build and execute several tests, -+you need libexecinfo library available in ports as devel/libexecinfo. -+ -+Development of the port was done of FreeBSD 8.0-STABLE. The library -+was build with the system compiler that is modified version of gcc 4.2.1, -+as well as the gcc 4.4.3. - - * Regression Testing - -diff --git a/frysk-imports/libunwind/README.frysk b/frysk-imports/libunwind/README.frysk -deleted file mode 100644 -index a643b10..0000000 ---- a/frysk-imports/libunwind/README.frysk -+++ /dev/null -@@ -1,2 +0,0 @@ --This is a modified version of libunwind. The official version is --hosted at http://www.nongnu.org/libunwind/ -diff --git a/frysk-imports/libunwind/autogen.sh b/frysk-imports/libunwind/autogen.sh -new file mode 100755 -index 0000000..b08bc83 ---- /dev/null -+++ b/frysk-imports/libunwind/autogen.sh -@@ -0,0 +1,9 @@ -+#!/bin/sh -+ -+test -n "$srcdir" || srcdir=`dirname "$0"` -+test -n "$srcdir" || srcdir=. -+( -+ cd "$srcdir" && -+ autoreconf --force -v --install -+) || exit -+test -n "$NOCONFIGURE" || "$srcdir/configure" "$@" -diff --git a/frysk-imports/libunwind/aux/ltmain.sh b/frysk-imports/libunwind/aux/ltmain.sh -new file mode 100644 -index 0000000..6fc6900 ---- /dev/null -+++ b/frysk-imports/libunwind/aux/ltmain.sh -@@ -0,0 +1,5107 @@ -+# ltmain.sh - Provide generalized library-building support services. -+# NOTE: Changing this file will not affect anything until you rerun configure. -+# -+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 -+# Free Software Foundation, Inc. -+# Originally by Gordon Matzigkeit , 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 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. -+# -+# 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. -+ -+# Check that we have a working $echo. -+if test "X$1" = X--no-reexec; then -+ # Discard the --no-reexec flag, and continue. -+ shift -+elif test "X$1" = X--fallback-echo; then -+ # Avoid inline document here, it may be left over -+ : -+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then -+ # Yippee, $echo works! -+ : -+else -+ # Restart under the correct shell, and then maybe $echo will work. -+ exec $SHELL "$0" --no-reexec ${1+"$@"} -+fi -+ -+if test "X$1" = X--fallback-echo; then -+ # used as fallback echo -+ shift -+ cat <&2 -+ echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 -+ exit 1 -+fi -+ -+# Global variables. -+mode=$default_mode -+nonopt= -+prev= -+prevopt= -+run= -+show="$echo" -+show_help= -+execute_dlfiles= -+lo2o="s/\\.lo\$/.${objext}/" -+o2lo="s/\\.${objext}\$/.lo/" -+ -+# Parse our command line options once, thoroughly. -+while test $# -gt 0 -+do -+ arg="$1" -+ shift -+ -+ case $arg in -+ -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; -+ *) optarg= ;; -+ esac -+ -+ # If the previous option needs an argument, assign it. -+ if test -n "$prev"; then -+ case $prev in -+ execute_dlfiles) -+ execute_dlfiles="$execute_dlfiles $arg" -+ ;; -+ *) -+ eval "$prev=\$arg" -+ ;; -+ esac -+ -+ prev= -+ prevopt= -+ continue -+ fi -+ -+ # Have we seen a non-optional argument yet? -+ case $arg in -+ --help) -+ show_help=yes -+ ;; -+ -+ --version) -+ echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" -+ exit 0 -+ ;; -+ -+ --config) -+ ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 -+ exit 0 -+ ;; -+ -+ --debug) -+ echo "$progname: enabling shell trace mode" -+ set -x -+ ;; -+ -+ --dry-run | -n) -+ run=: -+ ;; -+ -+ --features) -+ echo "host: $host" -+ if test "$build_libtool_libs" = yes; then -+ echo "enable shared libraries" -+ else -+ echo "disable shared libraries" -+ fi -+ if test "$build_old_libs" = yes; then -+ echo "enable static libraries" -+ else -+ echo "disable static libraries" -+ fi -+ exit 0 -+ ;; -+ -+ --finish) mode="finish" ;; -+ -+ --mode) prevopt="--mode" prev=mode ;; -+ --mode=*) mode="$optarg" ;; -+ -+ --preserve-dup-deps) duplicate_deps="yes" ;; -+ -+ --quiet | --silent) -+ show=: -+ ;; -+ -+ -dlopen) -+ prevopt="-dlopen" -+ prev=execute_dlfiles -+ ;; -+ -+ -*) -+ $echo "$modename: unrecognized option \`$arg'" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ ;; -+ -+ *) -+ nonopt="$arg" -+ break -+ ;; -+ esac -+done -+ -+if test -n "$prevopt"; then -+ $echo "$modename: option \`$prevopt' requires an argument" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+fi -+ -+# If this variable is set in any of the actions, the command in it -+# will be execed at the end. This prevents here-documents from being -+# left over by shells. -+exec_cmd= -+ -+if test -z "$show_help"; then -+ -+ # Infer the operation mode. -+ if test -z "$mode"; then -+ case $nonopt in -+ *cc | *++ | gcc* | *-gcc* | g++* | xlc*) -+ mode=link -+ for arg -+ do -+ case $arg in -+ -c) -+ mode=compile -+ break -+ ;; -+ esac -+ done -+ ;; -+ *db | *dbx | *strace | *truss) -+ mode=execute -+ ;; -+ *install*|cp|mv) -+ mode=install -+ ;; -+ *rm) -+ mode=uninstall -+ ;; -+ *) -+ # If we have no mode, but dlfiles were specified, then do execute mode. -+ test -n "$execute_dlfiles" && mode=execute -+ -+ # Just use the default operation mode. -+ if test -z "$mode"; then -+ if test -n "$nonopt"; then -+ $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 -+ else -+ $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 -+ fi -+ fi -+ ;; -+ esac -+ fi -+ -+ # Only execute mode is allowed to have -dlopen flags. -+ if test -n "$execute_dlfiles" && test "$mode" != execute; then -+ $echo "$modename: unrecognized option \`-dlopen'" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ # Change the help message to a mode-specific one. -+ generic_help="$help" -+ help="Try \`$modename --help --mode=$mode' for more information." -+ -+ # These modes are in order of execution frequency so that they run quickly. -+ case $mode in -+ # libtool compile mode -+ compile) -+ modename="$modename: compile" -+ # Get the compilation command and the source file. -+ base_compile= -+ prev= -+ lastarg= -+ srcfile="$nonopt" -+ suppress_output= -+ -+ user_target=no -+ for arg -+ do -+ case $prev in -+ "") ;; -+ xcompiler) -+ # Aesthetically quote the previous argument. -+ prev= -+ lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -+ -+ case $arg in -+ # Double-quote args containing other shell metacharacters. -+ # Many Bourne shells cannot handle close brackets correctly -+ # in scan sets, so we specify it separately. -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -+ arg="\"$arg\"" -+ ;; -+ esac -+ -+ # Add the previous argument to base_compile. -+ if test -z "$base_compile"; then -+ base_compile="$lastarg" -+ else -+ base_compile="$base_compile $lastarg" -+ fi -+ continue -+ ;; -+ esac -+ -+ # Accept any command-line options. -+ case $arg in -+ -o) -+ if test "$user_target" != "no"; then -+ $echo "$modename: you cannot specify \`-o' more than once" 1>&2 -+ exit 1 -+ fi -+ user_target=next -+ ;; -+ -+ -static) -+ build_old_libs=yes -+ continue -+ ;; -+ -+ -prefer-pic) -+ pic_mode=yes -+ continue -+ ;; -+ -+ -prefer-non-pic) -+ pic_mode=no -+ continue -+ ;; -+ -+ -Xcompiler) -+ prev=xcompiler -+ continue -+ ;; -+ -+ -Wc,*) -+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` -+ lastarg= -+ save_ifs="$IFS"; IFS=',' -+ for arg in $args; do -+ IFS="$save_ifs" -+ -+ # Double-quote args containing other shell metacharacters. -+ # Many Bourne shells cannot handle close brackets correctly -+ # in scan sets, so we specify it separately. -+ case $arg in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -+ arg="\"$arg\"" -+ ;; -+ esac -+ lastarg="$lastarg $arg" -+ done -+ IFS="$save_ifs" -+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` -+ -+ # Add the arguments to base_compile. -+ if test -z "$base_compile"; then -+ base_compile="$lastarg" -+ else -+ base_compile="$base_compile $lastarg" -+ fi -+ continue -+ ;; -+ esac -+ -+ case $user_target in -+ next) -+ # The next one is the -o target name -+ user_target=yes -+ continue -+ ;; -+ yes) -+ # We got the output file -+ user_target=set -+ libobj="$arg" -+ continue -+ ;; -+ esac -+ -+ # Accept the current argument as the source file. -+ lastarg="$srcfile" -+ srcfile="$arg" -+ -+ # Aesthetically quote the previous argument. -+ -+ # Backslashify any backslashes, double quotes, and dollar signs. -+ # These are the only characters that are still specially -+ # interpreted inside of double-quoted scrings. -+ lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` -+ -+ # Double-quote args containing other shell metacharacters. -+ # Many Bourne shells cannot handle close brackets correctly -+ # in scan sets, so we specify it separately. -+ case $lastarg in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -+ lastarg="\"$lastarg\"" -+ ;; -+ esac -+ -+ # Add the previous argument to base_compile. -+ if test -z "$base_compile"; then -+ base_compile="$lastarg" -+ else -+ base_compile="$base_compile $lastarg" -+ fi -+ done -+ -+ case $user_target in -+ set) -+ ;; -+ no) -+ # Get the name of the library object. -+ libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` -+ ;; -+ *) -+ $echo "$modename: you must specify a target with \`-o'" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ # Recognize several different file suffixes. -+ # If the user specifies -o file.o, it is replaced with file.lo -+ xform='[cCFSfmso]' -+ case $libobj in -+ *.ada) xform=ada ;; -+ *.adb) xform=adb ;; -+ *.ads) xform=ads ;; -+ *.asm) xform=asm ;; -+ *.c++) xform=c++ ;; -+ *.cc) xform=cc ;; -+ *.cpp) xform=cpp ;; -+ *.cxx) xform=cxx ;; -+ *.f90) xform=f90 ;; -+ *.for) xform=for ;; -+ esac -+ -+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` -+ -+ case $libobj in -+ *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; -+ *) -+ $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ if test -z "$base_compile"; then -+ $echo "$modename: you must specify a compilation command" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ # Delete any leftover library objects. -+ if test "$build_old_libs" = yes; then -+ removelist="$obj $libobj" -+ else -+ removelist="$libobj" -+ fi -+ -+ $run $rm $removelist -+ trap "$run $rm $removelist; exit 1" 1 2 15 -+ -+ # On Cygwin there's no "real" PIC flag so we must build both object types -+ case $host_os in -+ cygwin* | mingw* | pw32* | os2*) -+ pic_mode=default -+ ;; -+ esac -+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then -+ # non-PIC code in shared libraries is not supported -+ pic_mode=default -+ fi -+ -+ # Calculate the filename of the output object if compiler does -+ # not support -o with -c -+ if test "$compiler_c_o" = no; then -+ output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} -+ lockfile="$output_obj.lock" -+ removelist="$removelist $output_obj $lockfile" -+ trap "$run $rm $removelist; exit 1" 1 2 15 -+ else -+ need_locks=no -+ lockfile= -+ fi -+ -+ # Lock this critical section if it is needed -+ # We use this script file to make the link, it avoids creating a new file -+ if test "$need_locks" = yes; then -+ until $run ln "$0" "$lockfile" 2>/dev/null; do -+ $show "Waiting for $lockfile to be removed" -+ sleep 2 -+ done -+ elif test "$need_locks" = warn; then -+ if test -f "$lockfile"; then -+ echo "\ -+*** ERROR, $lockfile exists and contains: -+`cat $lockfile 2>/dev/null` -+ -+This indicates that another process is trying to use the same -+temporary object file, and libtool could not work around it because -+your compiler does not support \`-c' and \`-o' together. If you -+repeat this compilation, it may succeed, by chance, but you had better -+avoid parallel builds (make -j) in this platform, or get a better -+compiler." -+ -+ $run $rm $removelist -+ exit 1 -+ fi -+ echo $srcfile > "$lockfile" -+ fi -+ -+ if test -n "$fix_srcfile_path"; then -+ eval srcfile=\"$fix_srcfile_path\" -+ fi -+ -+ # Only build a PIC object if we are building libtool libraries. -+ if test "$build_libtool_libs" = yes; then -+ # Without this assignment, base_compile gets emptied. -+ fbsd_hideous_sh_bug=$base_compile -+ -+ if test "$pic_mode" != no; then -+ # All platforms use -DPIC, to notify preprocessed assembler code. -+ command="$base_compile $srcfile $pic_flag -DPIC" -+ else -+ # Don't build PIC code -+ command="$base_compile $srcfile" -+ fi -+ if test "$build_old_libs" = yes; then -+ lo_libobj="$libobj" -+ dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$dir" = "X$libobj"; then -+ dir="$objdir" -+ else -+ dir="$dir/$objdir" -+ fi -+ libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` -+ -+ if test -d "$dir"; then -+ $show "$rm $libobj" -+ $run $rm $libobj -+ else -+ $show "$mkdir $dir" -+ $run $mkdir $dir -+ status=$? -+ if test $status -ne 0 && test ! -d $dir; then -+ exit $status -+ fi -+ fi -+ fi -+ if test "$compiler_o_lo" = yes; then -+ output_obj="$libobj" -+ command="$command -o $output_obj" -+ elif test "$compiler_c_o" = yes; then -+ output_obj="$obj" -+ command="$command -o $output_obj" -+ fi -+ -+ $run $rm "$output_obj" -+ $show "$command" -+ if $run eval "$command"; then : -+ else -+ test -n "$output_obj" && $run $rm $removelist -+ exit 1 -+ fi -+ -+ if test "$need_locks" = warn && -+ test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then -+ echo "\ -+*** ERROR, $lockfile contains: -+`cat $lockfile 2>/dev/null` -+ -+but it should contain: -+$srcfile -+ -+This indicates that another process is trying to use the same -+temporary object file, and libtool could not work around it because -+your compiler does not support \`-c' and \`-o' together. If you -+repeat this compilation, it may succeed, by chance, but you had better -+avoid parallel builds (make -j) in this platform, or get a better -+compiler." -+ -+ $run $rm $removelist -+ exit 1 -+ fi -+ -+ # Just move the object if needed, then go on to compile the next one -+ if test x"$output_obj" != x"$libobj"; then -+ $show "$mv $output_obj $libobj" -+ if $run $mv $output_obj $libobj; then : -+ else -+ error=$? -+ $run $rm $removelist -+ exit $error -+ fi -+ fi -+ -+ # If we have no pic_flag, then copy the object into place and finish. -+ if (test -z "$pic_flag" || test "$pic_mode" != default) && -+ test "$build_old_libs" = yes; then -+ # Rename the .lo from within objdir to obj -+ if test -f $obj; then -+ $show $rm $obj -+ $run $rm $obj -+ fi -+ -+ $show "$mv $libobj $obj" -+ if $run $mv $libobj $obj; then : -+ else -+ error=$? -+ $run $rm $removelist -+ exit $error -+ fi -+ -+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$obj"; then -+ xdir="." -+ else -+ xdir="$xdir" -+ fi -+ baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` -+ libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` -+ # Now arrange that obj and lo_libobj become the same file -+ $show "(cd $xdir && $LN_S $baseobj $libobj)" -+ if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then -+ # Unlock the critical section if it was locked -+ if test "$need_locks" != no; then -+ $run $rm "$lockfile" -+ fi -+ exit 0 -+ else -+ error=$? -+ $run $rm $removelist -+ exit $error -+ fi -+ fi -+ -+ # Allow error messages only from the first compilation. -+ suppress_output=' >/dev/null 2>&1' -+ fi -+ -+ # Only build a position-dependent object if we build old libraries. -+ if test "$build_old_libs" = yes; then -+ if test "$pic_mode" != yes; then -+ # Don't build PIC code -+ command="$base_compile $srcfile" -+ else -+ # All platforms use -DPIC, to notify preprocessed assembler code. -+ command="$base_compile $srcfile $pic_flag -DPIC" -+ fi -+ if test "$compiler_c_o" = yes; then -+ command="$command -o $obj" -+ output_obj="$obj" -+ fi -+ -+ # Suppress compiler output if we already did a PIC compilation. -+ command="$command$suppress_output" -+ $run $rm "$output_obj" -+ $show "$command" -+ if $run eval "$command"; then : -+ else -+ $run $rm $removelist -+ exit 1 -+ fi -+ -+ if test "$need_locks" = warn && -+ test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then -+ echo "\ -+*** ERROR, $lockfile contains: -+`cat $lockfile 2>/dev/null` -+ -+but it should contain: -+$srcfile -+ -+This indicates that another process is trying to use the same -+temporary object file, and libtool could not work around it because -+your compiler does not support \`-c' and \`-o' together. If you -+repeat this compilation, it may succeed, by chance, but you had better -+avoid parallel builds (make -j) in this platform, or get a better -+compiler." -+ -+ $run $rm $removelist -+ exit 1 -+ fi -+ -+ # Just move the object if needed -+ if test x"$output_obj" != x"$obj"; then -+ $show "$mv $output_obj $obj" -+ if $run $mv $output_obj $obj; then : -+ else -+ error=$? -+ $run $rm $removelist -+ exit $error -+ fi -+ fi -+ -+ # Create an invalid libtool object if no PIC, so that we do not -+ # accidentally link it into a program. -+ if test "$build_libtool_libs" != yes; then -+ $show "echo timestamp > $libobj" -+ $run eval "echo timestamp > \$libobj" || exit $? -+ else -+ # Move the .lo from within objdir -+ $show "$mv $libobj $lo_libobj" -+ if $run $mv $libobj $lo_libobj; then : -+ else -+ error=$? -+ $run $rm $removelist -+ exit $error -+ fi -+ fi -+ fi -+ -+ # Unlock the critical section if it was locked -+ if test "$need_locks" != no; then -+ $run $rm "$lockfile" -+ fi -+ -+ exit 0 -+ ;; -+ -+ # libtool link mode -+ link | relink) -+ modename="$modename: link" -+ case $host in -+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) -+ # It is impossible to link a dll without this setting, and -+ # we shouldn't force the makefile maintainer to figure out -+ # which system we are compiling for in order to pass an extra -+ # flag for every libtool invokation. -+ # allow_undefined=no -+ -+ # FIXME: Unfortunately, there are problems with the above when trying -+ # to make a dll which has undefined symbols, in which case not -+ # even a static library is built. For now, we need to specify -+ # -no-undefined on the libtool link line when we can be certain -+ # that all symbols are satisfied, otherwise we get a static library. -+ allow_undefined=yes -+ ;; -+ *) -+ allow_undefined=yes -+ ;; -+ esac -+ libtool_args="$nonopt" -+ compile_command="$nonopt" -+ finalize_command="$nonopt" -+ -+ compile_rpath= -+ finalize_rpath= -+ compile_shlibpath= -+ finalize_shlibpath= -+ convenience= -+ old_convenience= -+ deplibs= -+ old_deplibs= -+ compiler_flags= -+ linker_flags= -+ dllsearchpath= -+ lib_search_path=`pwd` -+ inst_prefix_dir= -+ -+ avoid_version=no -+ dlfiles= -+ dlprefiles= -+ dlself=no -+ export_dynamic=no -+ export_symbols= -+ export_symbols_regex= -+ generated= -+ libobjs= -+ ltlibs= -+ module=no -+ no_install=no -+ objs= -+ prefer_static_libs=no -+ preload=no -+ prev= -+ prevarg= -+ release= -+ rpath= -+ xrpath= -+ perm_rpath= -+ temp_rpath= -+ thread_safe=no -+ vinfo= -+ -+ # We need to know -static, to get the right output filenames. -+ for arg -+ do -+ case $arg in -+ -all-static | -static) -+ if test "X$arg" = "X-all-static"; then -+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then -+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 -+ fi -+ if test -n "$link_static_flag"; then -+ dlopen_self=$dlopen_self_static -+ fi -+ else -+ if test -z "$pic_flag" && test -n "$link_static_flag"; then -+ dlopen_self=$dlopen_self_static -+ fi -+ fi -+ build_libtool_libs=no -+ build_old_libs=yes -+ prefer_static_libs=yes -+ break -+ ;; -+ esac -+ done -+ -+ # See if our shared archives depend on static archives. -+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes -+ -+ # Go through the arguments, transforming them on the way. -+ while test $# -gt 0; do -+ arg="$1" -+ shift -+ case $arg in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -+ qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test -+ ;; -+ *) qarg=$arg ;; -+ esac -+ libtool_args="$libtool_args $qarg" -+ -+ # If the previous option needs an argument, assign it. -+ if test -n "$prev"; then -+ case $prev in -+ output) -+ compile_command="$compile_command @OUTPUT@" -+ finalize_command="$finalize_command @OUTPUT@" -+ ;; -+ esac -+ -+ case $prev in -+ dlfiles|dlprefiles) -+ if test "$preload" = no; then -+ # Add the symbol object into the linking commands. -+ compile_command="$compile_command @SYMFILE@" -+ finalize_command="$finalize_command @SYMFILE@" -+ preload=yes -+ fi -+ case $arg in -+ *.la | *.lo) ;; # We handle these cases below. -+ force) -+ if test "$dlself" = no; then -+ dlself=needless -+ export_dynamic=yes -+ fi -+ prev= -+ continue -+ ;; -+ self) -+ if test "$prev" = dlprefiles; then -+ dlself=yes -+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then -+ dlself=yes -+ else -+ dlself=needless -+ export_dynamic=yes -+ fi -+ prev= -+ continue -+ ;; -+ *) -+ if test "$prev" = dlfiles; then -+ dlfiles="$dlfiles $arg" -+ else -+ dlprefiles="$dlprefiles $arg" -+ fi -+ prev= -+ continue -+ ;; -+ esac -+ ;; -+ expsyms) -+ export_symbols="$arg" -+ if test ! -f "$arg"; then -+ $echo "$modename: symbol file \`$arg' does not exist" -+ exit 1 -+ fi -+ prev= -+ continue -+ ;; -+ expsyms_regex) -+ export_symbols_regex="$arg" -+ prev= -+ continue -+ ;; -+ inst_prefix) -+ inst_prefix_dir="$arg" -+ prev= -+ continue -+ ;; -+ release) -+ release="-$arg" -+ prev= -+ continue -+ ;; -+ rpath | xrpath) -+ # We need an absolute path. -+ case $arg in -+ [\\/]* | [A-Za-z]:[\\/]*) ;; -+ *) -+ $echo "$modename: only absolute run-paths are allowed" 1>&2 -+ exit 1 -+ ;; -+ esac -+ if test "$prev" = rpath; then -+ case "$rpath " in -+ *" $arg "*) ;; -+ *) rpath="$rpath $arg" ;; -+ esac -+ else -+ case "$xrpath " in -+ *" $arg "*) ;; -+ *) xrpath="$xrpath $arg" ;; -+ esac -+ fi -+ prev= -+ continue -+ ;; -+ xcompiler) -+ compiler_flags="$compiler_flags $qarg" -+ prev= -+ compile_command="$compile_command $qarg" -+ finalize_command="$finalize_command $qarg" -+ continue -+ ;; -+ xlinker) -+ linker_flags="$linker_flags $qarg" -+ compiler_flags="$compiler_flags $wl$qarg" -+ prev= -+ compile_command="$compile_command $wl$qarg" -+ finalize_command="$finalize_command $wl$qarg" -+ continue -+ ;; -+ *) -+ eval "$prev=\"\$arg\"" -+ prev= -+ continue -+ ;; -+ esac -+ fi # test -n $prev -+ -+ prevarg="$arg" -+ -+ case $arg in -+ -all-static) -+ if test -n "$link_static_flag"; then -+ compile_command="$compile_command $link_static_flag" -+ finalize_command="$finalize_command $link_static_flag" -+ fi -+ continue -+ ;; -+ -+ -allow-undefined) -+ # FIXME: remove this flag sometime in the future. -+ $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 -+ continue -+ ;; -+ -+ -avoid-version) -+ avoid_version=yes -+ continue -+ ;; -+ -+ -dlopen) -+ prev=dlfiles -+ continue -+ ;; -+ -+ -dlpreopen) -+ prev=dlprefiles -+ continue -+ ;; -+ -+ -export-dynamic) -+ export_dynamic=yes -+ continue -+ ;; -+ -+ -export-symbols | -export-symbols-regex) -+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then -+ $echo "$modename: more than one -exported-symbols argument is not allowed" -+ exit 1 -+ fi -+ if test "X$arg" = "X-export-symbols"; then -+ prev=expsyms -+ else -+ prev=expsyms_regex -+ fi -+ continue -+ ;; -+ -+ -inst-prefix-dir) -+ prev=inst_prefix -+ continue -+ ;; -+ -+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* -+ # so, if we see these flags be careful not to treat them like -L -+ -L[A-Z][A-Z]*:*) -+ case $with_gcc/$host in -+ no/*-*-irix* | no/*-*-nonstopux*) -+ compile_command="$compile_command $arg" -+ finalize_command="$finalize_command $arg" -+ ;; -+ esac -+ continue -+ ;; -+ -+ -L*) -+ dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` -+ # We need an absolute path. -+ case $dir in -+ [\\/]* | [A-Za-z]:[\\/]*) ;; -+ *) -+ absdir=`cd "$dir" && pwd` -+ if test -z "$absdir"; then -+ $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 -+ exit 1 -+ fi -+ dir="$absdir" -+ ;; -+ esac -+ case "$deplibs " in -+ *" -L$dir "*) ;; -+ *) -+ deplibs="$deplibs -L$dir" -+ lib_search_path="$lib_search_path $dir" -+ ;; -+ esac -+ case $host in -+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) -+ case :$dllsearchpath: in -+ *":$dir:"*) ;; -+ *) dllsearchpath="$dllsearchpath:$dir";; -+ esac -+ ;; -+ esac -+ continue -+ ;; -+ -+ -l*) -+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then -+ case $host in -+ *-*-cygwin* | *-*-pw32* | *-*-beos*) -+ # These systems don't actually have a C or math library (as such) -+ continue -+ ;; -+ *-*-mingw* | *-*-os2*) -+ # These systems don't actually have a C library (as such) -+ test "X$arg" = "X-lc" && continue -+ ;; -+ *-*-openbsd* | *-*-freebsd*) -+ # Do not include libc due to us having libc/libc_r. -+ test "X$arg" = "X-lc" && continue -+ ;; -+ esac -+ elif test "X$arg" = "X-lc_r"; then -+ case $host in -+ *-*-openbsd* | *-*-freebsd*) -+ # Do not include libc_r directly, use -pthread flag. -+ continue -+ ;; -+ esac -+ fi -+ deplibs="$deplibs $arg" -+ continue -+ ;; -+ -+ -module) -+ module=yes -+ continue -+ ;; -+ -+ -no-fast-install) -+ fast_install=no -+ continue -+ ;; -+ -+ -no-install) -+ case $host in -+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) -+ # The PATH hackery in wrapper scripts is required on Windows -+ # in order for the loader to find any dlls it needs. -+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 -+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 -+ fast_install=no -+ ;; -+ *) no_install=yes ;; -+ esac -+ continue -+ ;; -+ -+ -no-undefined) -+ allow_undefined=no -+ continue -+ ;; -+ -+ -o) prev=output ;; -+ -+ -release) -+ prev=release -+ continue -+ ;; -+ -+ -rpath) -+ prev=rpath -+ continue -+ ;; -+ -+ -R) -+ prev=xrpath -+ continue -+ ;; -+ -+ -R*) -+ dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` -+ # We need an absolute path. -+ case $dir in -+ [\\/]* | [A-Za-z]:[\\/]*) ;; -+ *) -+ $echo "$modename: only absolute run-paths are allowed" 1>&2 -+ exit 1 -+ ;; -+ esac -+ case "$xrpath " in -+ *" $dir "*) ;; -+ *) xrpath="$xrpath $dir" ;; -+ esac -+ continue -+ ;; -+ -+ -static) -+ # The effects of -static are defined in a previous loop. -+ # We used to do the same as -all-static on platforms that -+ # didn't have a PIC flag, but the assumption that the effects -+ # would be equivalent was wrong. It would break on at least -+ # Digital Unix and AIX. -+ continue -+ ;; -+ -+ -thread-safe) -+ thread_safe=yes -+ continue -+ ;; -+ -+ -version-info) -+ prev=vinfo -+ continue -+ ;; -+ -+ -Wc,*) -+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` -+ arg= -+ save_ifs="$IFS"; IFS=',' -+ for flag in $args; do -+ IFS="$save_ifs" -+ case $flag in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -+ flag="\"$flag\"" -+ ;; -+ esac -+ arg="$arg $wl$flag" -+ compiler_flags="$compiler_flags $flag" -+ done -+ IFS="$save_ifs" -+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"` -+ ;; -+ -+ -Wl,*) -+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` -+ arg= -+ save_ifs="$IFS"; IFS=',' -+ for flag in $args; do -+ IFS="$save_ifs" -+ case $flag in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -+ flag="\"$flag\"" -+ ;; -+ esac -+ arg="$arg $wl$flag" -+ compiler_flags="$compiler_flags $wl$flag" -+ linker_flags="$linker_flags $flag" -+ done -+ IFS="$save_ifs" -+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"` -+ ;; -+ -+ -Xcompiler) -+ prev=xcompiler -+ continue -+ ;; -+ -+ -Xlinker) -+ prev=xlinker -+ continue -+ ;; -+ -+ # Some other compiler flag. -+ -* | +*) -+ # Unknown arguments in both finalize_command and compile_command need -+ # to be aesthetically quoted because they are evaled later. -+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -+ case $arg in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -+ arg="\"$arg\"" -+ ;; -+ esac -+ ;; -+ -+ *.lo | *.$objext) -+ # A library or standard object. -+ if test "$prev" = dlfiles; then -+ # This file was specified with -dlopen. -+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then -+ dlfiles="$dlfiles $arg" -+ prev= -+ continue -+ else -+ # If libtool objects are unsupported, then we need to preload. -+ prev=dlprefiles -+ fi -+ fi -+ -+ if test "$prev" = dlprefiles; then -+ # Preload the old-style object. -+ dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` -+ prev= -+ else -+ case $arg in -+ *.lo) libobjs="$libobjs $arg" ;; -+ *) objs="$objs $arg" ;; -+ esac -+ fi -+ ;; -+ -+ *.$libext) -+ # An archive. -+ deplibs="$deplibs $arg" -+ old_deplibs="$old_deplibs $arg" -+ continue -+ ;; -+ -+ *.la) -+ # A libtool-controlled library. -+ -+ if test "$prev" = dlfiles; then -+ # This library was specified with -dlopen. -+ dlfiles="$dlfiles $arg" -+ prev= -+ elif test "$prev" = dlprefiles; then -+ # The library was specified with -dlpreopen. -+ dlprefiles="$dlprefiles $arg" -+ prev= -+ else -+ deplibs="$deplibs $arg" -+ fi -+ continue -+ ;; -+ -+ # Some other compiler argument. -+ *) -+ # Unknown arguments in both finalize_command and compile_command need -+ # to be aesthetically quoted because they are evaled later. -+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -+ case $arg in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") -+ arg="\"$arg\"" -+ ;; -+ esac -+ ;; -+ esac # arg -+ -+ # Now actually substitute the argument into the commands. -+ if test -n "$arg"; then -+ compile_command="$compile_command $arg" -+ finalize_command="$finalize_command $arg" -+ fi -+ done # argument parsing loop -+ -+ if test -n "$prev"; then -+ $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then -+ eval arg=\"$export_dynamic_flag_spec\" -+ compile_command="$compile_command $arg" -+ finalize_command="$finalize_command $arg" -+ fi -+ -+ # calculate the name of the file, without its directory -+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` -+ libobjs_save="$libobjs" -+ -+ if test -n "$shlibpath_var"; then -+ # get the directories listed in $shlibpath_var -+ eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` -+ else -+ shlib_search_path= -+ fi -+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\" -+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" -+ -+ output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$output_objdir" = "X$output"; then -+ output_objdir="$objdir" -+ else -+ output_objdir="$output_objdir/$objdir" -+ fi -+ # Create the object directory. -+ if test ! -d $output_objdir; then -+ $show "$mkdir $output_objdir" -+ $run $mkdir $output_objdir -+ status=$? -+ if test $status -ne 0 && test ! -d $output_objdir; then -+ exit $status -+ fi -+ fi -+ -+ # Determine the type of output -+ case $output in -+ "") -+ $echo "$modename: you must specify an output file" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ ;; -+ *.$libext) linkmode=oldlib ;; -+ *.lo | *.$objext) linkmode=obj ;; -+ *.la) linkmode=lib ;; -+ *) linkmode=prog ;; # Anything else should be a program. -+ esac -+ -+ specialdeplibs= -+ libs= -+ # Find all interdependent deplibs by searching for libraries -+ # that are linked more than once (e.g. -la -lb -la) -+ for deplib in $deplibs; do -+ if test "X$duplicate_deps" = "Xyes" ; then -+ case "$libs " in -+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; -+ esac -+ fi -+ libs="$libs $deplib" -+ done -+ deplibs= -+ newdependency_libs= -+ newlib_search_path= -+ need_relink=no # whether we're linking any uninstalled libtool libraries -+ notinst_deplibs= # not-installed libtool libraries -+ notinst_path= # paths that contain not-installed libtool libraries -+ case $linkmode in -+ lib) -+ passes="conv link" -+ for file in $dlfiles $dlprefiles; do -+ case $file in -+ *.la) ;; -+ *) -+ $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 -+ exit 1 -+ ;; -+ esac -+ done -+ ;; -+ prog) -+ compile_deplibs= -+ finalize_deplibs= -+ alldeplibs=no -+ newdlfiles= -+ newdlprefiles= -+ passes="conv scan dlopen dlpreopen link" -+ ;; -+ *) passes="conv" -+ ;; -+ esac -+ for pass in $passes; do -+ if test $linkmode = prog; then -+ # Determine which files to process -+ case $pass in -+ dlopen) -+ libs="$dlfiles" -+ save_deplibs="$deplibs" # Collect dlpreopened libraries -+ deplibs= -+ ;; -+ dlpreopen) libs="$dlprefiles" ;; -+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; -+ esac -+ fi -+ for deplib in $libs; do -+ lib= -+ found=no -+ case $deplib in -+ -l*) -+ if test $linkmode = oldlib && test $linkmode = obj; then -+ $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 -+ continue -+ fi -+ if test $pass = conv; then -+ deplibs="$deplib $deplibs" -+ continue -+ fi -+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` -+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do -+ # Search the libtool library -+ lib="$searchdir/lib${name}.la" -+ if test -f "$lib"; then -+ found=yes -+ break -+ fi -+ done -+ if test "$found" != yes; then -+ # deplib doesn't seem to be a libtool library -+ if test "$linkmode,$pass" = "prog,link"; then -+ compile_deplibs="$deplib $compile_deplibs" -+ finalize_deplibs="$deplib $finalize_deplibs" -+ else -+ deplibs="$deplib $deplibs" -+ test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" -+ fi -+ continue -+ fi -+ ;; # -l -+ -L*) -+ case $linkmode in -+ lib) -+ deplibs="$deplib $deplibs" -+ test $pass = conv && continue -+ newdependency_libs="$deplib $newdependency_libs" -+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` -+ ;; -+ prog) -+ if test $pass = conv; then -+ deplibs="$deplib $deplibs" -+ continue -+ fi -+ if test $pass = scan; then -+ deplibs="$deplib $deplibs" -+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` -+ else -+ compile_deplibs="$deplib $compile_deplibs" -+ finalize_deplibs="$deplib $finalize_deplibs" -+ fi -+ ;; -+ *) -+ $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 -+ ;; -+ esac # linkmode -+ continue -+ ;; # -L -+ -R*) -+ if test $pass = link; then -+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` -+ # Make sure the xrpath contains only unique directories. -+ case "$xrpath " in -+ *" $dir "*) ;; -+ *) xrpath="$xrpath $dir" ;; -+ esac -+ fi -+ deplibs="$deplib $deplibs" -+ continue -+ ;; -+ *.la) lib="$deplib" ;; -+ *.$libext) -+ if test $pass = conv; then -+ deplibs="$deplib $deplibs" -+ continue -+ fi -+ case $linkmode in -+ lib) -+ if test "$deplibs_check_method" != pass_all; then -+ echo -+ echo "*** Warning: Trying to link with static lib archive $deplib." -+ echo "*** I have the capability to make that library automatically link in when" -+ echo "*** you link to this library. But I can only do this if you have a" -+ echo "*** shared version of the library, which you do not appear to have" -+ echo "*** because the file extensions .$libext of this argument makes me believe" -+ echo "*** that it is just a static archive that I should not used here." -+ else -+ echo -+ echo "*** Warning: Linking the shared library $output against the" -+ echo "*** static library $deplib is not portable!" -+ deplibs="$deplib $deplibs" -+ fi -+ continue -+ ;; -+ prog) -+ if test $pass != link; then -+ deplibs="$deplib $deplibs" -+ else -+ compile_deplibs="$deplib $compile_deplibs" -+ finalize_deplibs="$deplib $finalize_deplibs" -+ fi -+ continue -+ ;; -+ esac # linkmode -+ ;; # *.$libext -+ *.lo | *.$objext) -+ if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then -+ # If there is no dlopen support or we're linking statically, -+ # we need to preload. -+ newdlprefiles="$newdlprefiles $deplib" -+ compile_deplibs="$deplib $compile_deplibs" -+ finalize_deplibs="$deplib $finalize_deplibs" -+ else -+ newdlfiles="$newdlfiles $deplib" -+ fi -+ continue -+ ;; -+ %DEPLIBS%) -+ alldeplibs=yes -+ continue -+ ;; -+ esac # case $deplib -+ if test $found = yes || test -f "$lib"; then : -+ else -+ $echo "$modename: cannot find the library \`$lib'" 1>&2 -+ exit 1 -+ fi -+ -+ # Check to see that this really is a libtool archive. -+ if (${SED} -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : -+ else -+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 -+ exit 1 -+ fi -+ -+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` -+ test "X$ladir" = "X$lib" && ladir="." -+ -+ dlname= -+ dlopen= -+ dlpreopen= -+ libdir= -+ library_names= -+ old_library= -+ # If the library was installed with an old release of libtool, -+ # it will not redefine variable installed. -+ installed=yes -+ -+ # Read the .la file -+ case $lib in -+ */* | *\\*) . $lib ;; -+ *) . ./$lib ;; -+ esac -+ -+ if test "$linkmode,$pass" = "lib,link" || -+ test "$linkmode,$pass" = "prog,scan" || -+ { test $linkmode = oldlib && test $linkmode = obj; }; then -+ # Add dl[pre]opened files of deplib -+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen" -+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" -+ fi -+ -+ if test $pass = conv; then -+ # Only check for convenience libraries -+ deplibs="$lib $deplibs" -+ if test -z "$libdir"; then -+ if test -z "$old_library"; then -+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 -+ exit 1 -+ fi -+ # It is a libtool convenience library, so add in its objects. -+ convenience="$convenience $ladir/$objdir/$old_library" -+ old_convenience="$old_convenience $ladir/$objdir/$old_library" -+ tmp_libs= -+ for deplib in $dependency_libs; do -+ deplibs="$deplib $deplibs" -+ if test "X$duplicate_deps" = "Xyes" ; then -+ case "$tmp_libs " in -+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; -+ esac -+ fi -+ tmp_libs="$tmp_libs $deplib" -+ done -+ elif test $linkmode != prog && test $linkmode != lib; then -+ $echo "$modename: \`$lib' is not a convenience library" 1>&2 -+ exit 1 -+ fi -+ continue -+ fi # $pass = conv -+ -+ # Get the name of the library we link against. -+ linklib= -+ for l in $old_library $library_names; do -+ linklib="$l" -+ done -+ if test -z "$linklib"; then -+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 -+ exit 1 -+ fi -+ -+ # This library was specified with -dlopen. -+ if test $pass = dlopen; then -+ if test -z "$libdir"; then -+ $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 -+ exit 1 -+ fi -+ if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then -+ # If there is no dlname, no dlopen support or we're linking -+ # statically, we need to preload. -+ dlprefiles="$dlprefiles $lib" -+ else -+ newdlfiles="$newdlfiles $lib" -+ fi -+ continue -+ fi # $pass = dlopen -+ -+ # We need an absolute path. -+ case $ladir in -+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; -+ *) -+ abs_ladir=`cd "$ladir" && pwd` -+ if test -z "$abs_ladir"; then -+ $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 -+ $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 -+ abs_ladir="$ladir" -+ fi -+ ;; -+ esac -+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -+ -+ # Find the relevant object directory and library name. -+ if test "X$installed" = Xyes; then -+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then -+ $echo "$modename: warning: library \`$lib' was moved." 1>&2 -+ dir="$ladir" -+ absdir="$abs_ladir" -+ libdir="$abs_ladir" -+ else -+ dir="$libdir" -+ absdir="$libdir" -+ fi -+ else -+ dir="$ladir/$objdir" -+ absdir="$abs_ladir/$objdir" -+ # Remove this search path later -+ notinst_path="$notinst_path $abs_ladir" -+ fi # $installed = yes -+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` -+ -+ # This library was specified with -dlpreopen. -+ if test $pass = dlpreopen; then -+ if test -z "$libdir"; then -+ $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 -+ exit 1 -+ fi -+ # Prefer using a static library (so that no silly _DYNAMIC symbols -+ # are required to link). -+ if test -n "$old_library"; then -+ newdlprefiles="$newdlprefiles $dir/$old_library" -+ # Otherwise, use the dlname, so that lt_dlopen finds it. -+ elif test -n "$dlname"; then -+ newdlprefiles="$newdlprefiles $dir/$dlname" -+ else -+ newdlprefiles="$newdlprefiles $dir/$linklib" -+ fi -+ fi # $pass = dlpreopen -+ -+ if test -z "$libdir"; then -+ # Link the convenience library -+ if test $linkmode = lib; then -+ deplibs="$dir/$old_library $deplibs" -+ elif test "$linkmode,$pass" = "prog,link"; then -+ compile_deplibs="$dir/$old_library $compile_deplibs" -+ finalize_deplibs="$dir/$old_library $finalize_deplibs" -+ else -+ deplibs="$lib $deplibs" -+ fi -+ continue -+ fi -+ -+ if test $linkmode = prog && test $pass != link; then -+ newlib_search_path="$newlib_search_path $ladir" -+ deplibs="$lib $deplibs" -+ -+ linkalldeplibs=no -+ if test "$link_all_deplibs" != no || test -z "$library_names" || -+ test "$build_libtool_libs" = no; then -+ linkalldeplibs=yes -+ fi -+ -+ tmp_libs= -+ for deplib in $dependency_libs; do -+ case $deplib in -+ -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test -+ esac -+ # Need to link against all dependency_libs? -+ if test $linkalldeplibs = yes; then -+ deplibs="$deplib $deplibs" -+ else -+ # Need to hardcode shared library paths -+ # or/and link against static libraries -+ newdependency_libs="$deplib $newdependency_libs" -+ fi -+ if test "X$duplicate_deps" = "Xyes" ; then -+ case "$tmp_libs " in -+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; -+ esac -+ fi -+ tmp_libs="$tmp_libs $deplib" -+ done # for deplib -+ continue -+ fi # $linkmode = prog... -+ -+ link_static=no # Whether the deplib will be linked statically -+ if test -n "$library_names" && -+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then -+ # Link against this shared library -+ -+ if test "$linkmode,$pass" = "prog,link" || -+ { test $linkmode = lib && test $hardcode_into_libs = yes; }; then -+ # Hardcode the library path. -+ # Skip directories that are in the system default run-time -+ # search path. -+ case " $sys_lib_dlsearch_path " in -+ *" $absdir "*) ;; -+ *) -+ case "$compile_rpath " in -+ *" $absdir "*) ;; -+ *) compile_rpath="$compile_rpath $absdir" -+ esac -+ ;; -+ esac -+ case " $sys_lib_dlsearch_path " in -+ *" $libdir "*) ;; -+ *) -+ case "$finalize_rpath " in -+ *" $libdir "*) ;; -+ *) finalize_rpath="$finalize_rpath $libdir" -+ esac -+ ;; -+ esac -+ if test $linkmode = prog; then -+ # We need to hardcode the library path -+ if test -n "$shlibpath_var"; then -+ # Make sure the rpath contains only unique directories. -+ case "$temp_rpath " in -+ *" $dir "*) ;; -+ *" $absdir "*) ;; -+ *) temp_rpath="$temp_rpath $dir" ;; -+ esac -+ fi -+ fi -+ fi # $linkmode,$pass = prog,link... -+ -+ if test "$alldeplibs" = yes && -+ { test "$deplibs_check_method" = pass_all || -+ { test "$build_libtool_libs" = yes && -+ test -n "$library_names"; }; }; then -+ # We only need to search for static libraries -+ continue -+ fi -+ -+ if test "$installed" = no; then -+ notinst_deplibs="$notinst_deplibs $lib" -+ need_relink=yes -+ fi -+ -+ if test -n "$old_archive_from_expsyms_cmds"; then -+ # figure out the soname -+ set dummy $library_names -+ realname="$2" -+ shift; shift -+ libname=`eval \\$echo \"$libname_spec\"` -+ # use dlname if we got it. it's perfectly good, no? -+ if test -n "$dlname"; then -+ soname="$dlname" -+ elif test -n "$soname_spec"; then -+ # bleh windows -+ case $host in -+ *cygwin*) -+ major=`expr $current - $age` -+ versuffix="-$major" -+ ;; -+ esac -+ eval soname=\"$soname_spec\" -+ else -+ soname="$realname" -+ fi -+ -+ # Make a new name for the extract_expsyms_cmds to use -+ soroot="$soname" -+ soname=`echo $soroot | ${SED} -e 's/^.*\///'` -+ newlib="libimp-`echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" -+ -+ # If the library has no export list, then create one now -+ if test -f "$output_objdir/$soname-def"; then : -+ else -+ $show "extracting exported symbol list from \`$soname'" -+ save_ifs="$IFS"; IFS='~' -+ eval cmds=\"$extract_expsyms_cmds\" -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ fi -+ -+ # Create $newlib -+ if test -f "$output_objdir/$newlib"; then :; else -+ $show "generating import library for \`$soname'" -+ save_ifs="$IFS"; IFS='~' -+ eval cmds=\"$old_archive_from_expsyms_cmds\" -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ fi -+ # make sure the library variables are pointing to the new library -+ dir=$output_objdir -+ linklib=$newlib -+ fi # test -n $old_archive_from_expsyms_cmds -+ -+ if test $linkmode = prog || test "$mode" != relink; then -+ add_shlibpath= -+ add_dir= -+ add= -+ lib_linked=yes -+ case $hardcode_action in -+ immediate | unsupported) -+ if test "$hardcode_direct" = no; then -+ add="$dir/$linklib" -+ elif test "$hardcode_minus_L" = no; then -+ case $host in -+ *-*-sunos*) add_shlibpath="$dir" ;; -+ esac -+ add_dir="-L$dir" -+ add="-l$name" -+ elif test "$hardcode_shlibpath_var" = no; then -+ add_shlibpath="$dir" -+ add="-l$name" -+ else -+ lib_linked=no -+ fi -+ ;; -+ relink) -+ if test "$hardcode_direct" = yes; then -+ add="$dir/$linklib" -+ elif test "$hardcode_minus_L" = yes; then -+ add_dir="-L$dir" -+ # Try looking first in the location we're being installed to. -+ if test -n "$inst_prefix_dir"; then -+ case "$libdir" in -+ [\/]*) -+ add_dir="-L$inst_prefix_dir$libdir $add_dir" -+ ;; -+ esac -+ fi -+ add="-l$name" -+ elif test "$hardcode_shlibpath_var" = yes; then -+ add_shlibpath="$dir" -+ add="-l$name" -+ else -+ lib_linked=no -+ fi -+ ;; -+ *) lib_linked=no ;; -+ esac -+ -+ if test "$lib_linked" != yes; then -+ $echo "$modename: configuration error: unsupported hardcode properties" -+ exit 1 -+ fi -+ -+ if test -n "$add_shlibpath"; then -+ case :$compile_shlibpath: in -+ *":$add_shlibpath:"*) ;; -+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; -+ esac -+ fi -+ if test $linkmode = prog; then -+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" -+ test -n "$add" && compile_deplibs="$add $compile_deplibs" -+ else -+ test -n "$add_dir" && deplibs="$add_dir $deplibs" -+ test -n "$add" && deplibs="$add $deplibs" -+ if test "$hardcode_direct" != yes && \ -+ test "$hardcode_minus_L" != yes && \ -+ test "$hardcode_shlibpath_var" = yes; then -+ case :$finalize_shlibpath: in -+ *":$libdir:"*) ;; -+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; -+ esac -+ fi -+ fi -+ fi -+ -+ if test $linkmode = prog || test "$mode" = relink; then -+ add_shlibpath= -+ add_dir= -+ add= -+ # Finalize command for both is simple: just hardcode it. -+ if test "$hardcode_direct" = yes; then -+ add="$libdir/$linklib" -+ elif test "$hardcode_minus_L" = yes; then -+ add_dir="-L$libdir" -+ add="-l$name" -+ elif test "$hardcode_shlibpath_var" = yes; then -+ case :$finalize_shlibpath: in -+ *":$libdir:"*) ;; -+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; -+ esac -+ add="-l$name" -+ else -+ # We cannot seem to hardcode it, guess we'll fake it. -+ add_dir="-L$libdir" -+ # Try looking first in the location we're being installed to. -+ if test -n "$inst_prefix_dir"; then -+ case "$libdir" in -+ [\/]*) -+ add_dir="-L$inst_prefix_dir$libdir $add_dir" -+ ;; -+ esac -+ fi -+ add="-l$name" -+ fi -+ -+ if test $linkmode = prog; then -+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" -+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs" -+ else -+ test -n "$add_dir" && deplibs="$add_dir $deplibs" -+ test -n "$add" && deplibs="$add $deplibs" -+ fi -+ fi -+ elif test $linkmode = prog; then -+ if test "$alldeplibs" = yes && -+ { test "$deplibs_check_method" = pass_all || -+ { test "$build_libtool_libs" = yes && -+ test -n "$library_names"; }; }; then -+ # We only need to search for static libraries -+ continue -+ fi -+ -+ # Try to link the static library -+ # Here we assume that one of hardcode_direct or hardcode_minus_L -+ # is not unsupported. This is valid on all known static and -+ # shared platforms. -+ if test "$hardcode_direct" != unsupported; then -+ test -n "$old_library" && linklib="$old_library" -+ compile_deplibs="$dir/$linklib $compile_deplibs" -+ finalize_deplibs="$dir/$linklib $finalize_deplibs" -+ else -+ compile_deplibs="-l$name -L$dir $compile_deplibs" -+ finalize_deplibs="-l$name -L$dir $finalize_deplibs" -+ fi -+ elif test "$build_libtool_libs" = yes; then -+ # Not a shared library -+ if test "$deplibs_check_method" != pass_all; then -+ # We're trying link a shared library against a static one -+ # but the system doesn't support it. -+ -+ # Just print a warning and add the library to dependency_libs so -+ # that the program can be linked against the static library. -+ echo -+ echo "*** Warning: This system can not link to static lib archive $lib." -+ echo "*** I have the capability to make that library automatically link in when" -+ echo "*** you link to this library. But I can only do this if you have a" -+ echo "*** shared version of the library, which you do not appear to have." -+ if test "$module" = yes; then -+ echo "*** But as you try to build a module library, libtool will still create " -+ echo "*** a static module, that should work as long as the dlopening application" -+ echo "*** is linked with the -dlopen flag to resolve symbols at runtime." -+ if test -z "$global_symbol_pipe"; then -+ echo -+ echo "*** However, this would only work if libtool was able to extract symbol" -+ echo "*** lists from a program, using \`nm' or equivalent, but libtool could" -+ echo "*** not find such a program. So, this module is probably useless." -+ echo "*** \`nm' from GNU binutils and a full rebuild may help." -+ fi -+ if test "$build_old_libs" = no; then -+ build_libtool_libs=module -+ build_old_libs=yes -+ else -+ build_libtool_libs=no -+ fi -+ fi -+ else -+ convenience="$convenience $dir/$old_library" -+ old_convenience="$old_convenience $dir/$old_library" -+ deplibs="$dir/$old_library $deplibs" -+ link_static=yes -+ fi -+ fi # link shared/static library? -+ -+ if test $linkmode = lib; then -+ if test -n "$dependency_libs" && -+ { test $hardcode_into_libs != yes || test $build_old_libs = yes || -+ test $link_static = yes; }; then -+ # Extract -R from dependency_libs -+ temp_deplibs= -+ for libdir in $dependency_libs; do -+ case $libdir in -+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` -+ case " $xrpath " in -+ *" $temp_xrpath "*) ;; -+ *) xrpath="$xrpath $temp_xrpath";; -+ esac;; -+ *) temp_deplibs="$temp_deplibs $libdir";; -+ esac -+ done -+ dependency_libs="$temp_deplibs" -+ fi -+ -+ newlib_search_path="$newlib_search_path $absdir" -+ # Link against this library -+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" -+ # ... and its dependency_libs -+ tmp_libs= -+ for deplib in $dependency_libs; do -+ newdependency_libs="$deplib $newdependency_libs" -+ if test "X$duplicate_deps" = "Xyes" ; then -+ case "$tmp_libs " in -+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; -+ esac -+ fi -+ tmp_libs="$tmp_libs $deplib" -+ done -+ -+ if test $link_all_deplibs != no; then -+ # Add the search paths of all dependency libraries -+ for deplib in $dependency_libs; do -+ case $deplib in -+ -L*) path="$deplib" ;; -+ *.la) -+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` -+ test "X$dir" = "X$deplib" && dir="." -+ # We need an absolute path. -+ case $dir in -+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; -+ *) -+ absdir=`cd "$dir" && pwd` -+ if test -z "$absdir"; then -+ $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 -+ absdir="$dir" -+ fi -+ ;; -+ esac -+ if grep "^installed=no" $deplib > /dev/null; then -+ path="-L$absdir/$objdir" -+ else -+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` -+ if test -z "$libdir"; then -+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 -+ exit 1 -+ fi -+ if test "$absdir" != "$libdir"; then -+ $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 -+ fi -+ path="-L$absdir" -+ fi -+ ;; -+ *) continue ;; -+ esac -+ case " $deplibs " in -+ *" $path "*) ;; -+ *) deplibs="$deplibs $path" ;; -+ esac -+ done -+ fi # link_all_deplibs != no -+ fi # linkmode = lib -+ done # for deplib in $libs -+ if test $pass = dlpreopen; then -+ # Link the dlpreopened libraries before other libraries -+ for deplib in $save_deplibs; do -+ deplibs="$deplib $deplibs" -+ done -+ fi -+ if test $pass != dlopen; then -+ test $pass != scan && dependency_libs="$newdependency_libs" -+ if test $pass != conv; then -+ # Make sure lib_search_path contains only unique directories. -+ lib_search_path= -+ for dir in $newlib_search_path; do -+ case "$lib_search_path " in -+ *" $dir "*) ;; -+ *) lib_search_path="$lib_search_path $dir" ;; -+ esac -+ done -+ newlib_search_path= -+ fi -+ -+ if test "$linkmode,$pass" != "prog,link"; then -+ vars="deplibs" -+ else -+ vars="compile_deplibs finalize_deplibs" -+ fi -+ for var in $vars dependency_libs; do -+ # Add libraries to $var in reverse order -+ eval tmp_libs=\"\$$var\" -+ new_libs= -+ for deplib in $tmp_libs; do -+ case $deplib in -+ -L*) new_libs="$deplib $new_libs" ;; -+ *) -+ case " $specialdeplibs " in -+ *" $deplib "*) new_libs="$deplib $new_libs" ;; -+ *) -+ case " $new_libs " in -+ *" $deplib "*) ;; -+ *) new_libs="$deplib $new_libs" ;; -+ esac -+ ;; -+ esac -+ ;; -+ esac -+ done -+ tmp_libs= -+ for deplib in $new_libs; do -+ case $deplib in -+ -L*) -+ case " $tmp_libs " in -+ *" $deplib "*) ;; -+ *) tmp_libs="$tmp_libs $deplib" ;; -+ esac -+ ;; -+ *) tmp_libs="$tmp_libs $deplib" ;; -+ esac -+ done -+ eval $var=\"$tmp_libs\" -+ done # for var -+ fi -+ if test "$pass" = "conv" && -+ { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then -+ libs="$deplibs" # reset libs -+ deplibs= -+ fi -+ done # for pass -+ if test $linkmode = prog; then -+ dlfiles="$newdlfiles" -+ dlprefiles="$newdlprefiles" -+ fi -+ -+ case $linkmode in -+ oldlib) -+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then -+ $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 -+ fi -+ -+ if test -n "$rpath"; then -+ $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 -+ fi -+ -+ if test -n "$xrpath"; then -+ $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 -+ fi -+ -+ if test -n "$vinfo"; then -+ $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 -+ fi -+ -+ if test -n "$release"; then -+ $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 -+ fi -+ -+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then -+ $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 -+ fi -+ -+ # Now set the variables for building old libraries. -+ build_libtool_libs=no -+ oldlibs="$output" -+ objs="$objs$old_deplibs" -+ ;; -+ -+ lib) -+ # Make sure we only generate libraries of the form `libNAME.la'. -+ case $outputname in -+ lib*) -+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` -+ eval libname=\"$libname_spec\" -+ ;; -+ *) -+ if test "$module" = no; then -+ $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ if test "$need_lib_prefix" != no; then -+ # Add the "lib" prefix for modules if required -+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` -+ eval libname=\"$libname_spec\" -+ else -+ libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` -+ fi -+ ;; -+ esac -+ -+ if test -n "$objs"; then -+ if test "$deplibs_check_method" != pass_all; then -+ $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 -+ exit 1 -+ else -+ echo -+ echo "*** Warning: Linking the shared library $output against the non-libtool" -+ echo "*** objects $objs is not portable!" -+ libobjs="$libobjs $objs" -+ fi -+ fi -+ -+ if test "$dlself" != no; then -+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 -+ fi -+ -+ set dummy $rpath -+ if test $# -gt 2; then -+ $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 -+ fi -+ install_libdir="$2" -+ -+ oldlibs= -+ if test -z "$rpath"; then -+ if test "$build_libtool_libs" = yes; then -+ # Building a libtool convenience library. -+ libext=al -+ oldlibs="$output_objdir/$libname.$libext $oldlibs" -+ build_libtool_libs=convenience -+ build_old_libs=yes -+ fi -+ -+ if test -n "$vinfo"; then -+ $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 -+ fi -+ -+ if test -n "$release"; then -+ $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 -+ fi -+ else -+ -+ # Parse the version information argument. -+ save_ifs="$IFS"; IFS=':' -+ set dummy $vinfo 0 0 0 -+ IFS="$save_ifs" -+ -+ if test -n "$8"; then -+ $echo "$modename: too many parameters to \`-version-info'" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ current="$2" -+ revision="$3" -+ age="$4" -+ -+ # Check that each of the things are valid numbers. -+ case $current in -+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; -+ *) -+ $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 -+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ case $revision in -+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; -+ *) -+ $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 -+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ case $age in -+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; -+ *) -+ $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 -+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ if test $age -gt $current; then -+ $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 -+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2 -+ exit 1 -+ fi -+ -+ # Calculate the version variables. -+ major= -+ versuffix= -+ verstring= -+ case $version_type in -+ none) ;; -+ -+ darwin) -+ # Like Linux, but with the current version available in -+ # verstring for coding it into the library header -+ major=.`expr $current - $age` -+ versuffix="$major.$age.$revision" -+ # Darwin ld doesn't like 0 for these options... -+ minor_current=`expr $current + 1` -+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" -+ ;; -+ -+ freebsd-aout) -+ major=".$current" -+ versuffix=".$current.$revision"; -+ ;; -+ -+ freebsd-elf) -+ major=".$current" -+ versuffix=".$current"; -+ ;; -+ -+ irix | nonstopux) -+ major=`expr $current - $age + 1` -+ -+ case $version_type in -+ nonstopux) verstring_prefix=nonstopux ;; -+ *) verstring_prefix=sgi ;; -+ esac -+ verstring="$verstring_prefix$major.$revision" -+ -+ # Add in all the interfaces that we are compatible with. -+ loop=$revision -+ while test $loop != 0; do -+ iface=`expr $revision - $loop` -+ loop=`expr $loop - 1` -+ verstring="$verstring_prefix$major.$iface:$verstring" -+ done -+ -+ # Before this point, $major must not contain `.'. -+ major=.$major -+ versuffix="$major.$revision" -+ ;; -+ -+ linux) -+ major=.`expr $current - $age` -+ versuffix="$major.$age.$revision" -+ ;; -+ -+ osf) -+ major=.`expr $current - $age` -+ versuffix=".$current.$age.$revision" -+ verstring="$current.$age.$revision" -+ -+ # Add in all the interfaces that we are compatible with. -+ loop=$age -+ while test $loop != 0; do -+ iface=`expr $current - $loop` -+ loop=`expr $loop - 1` -+ verstring="$verstring:${iface}.0" -+ done -+ -+ # Make executables depend on our current version. -+ verstring="$verstring:${current}.0" -+ ;; -+ -+ sunos) -+ major=".$current" -+ versuffix=".$current.$revision" -+ ;; -+ -+ windows) -+ # Use '-' rather than '.', since we only want one -+ # extension on DOS 8.3 filesystems. -+ major=`expr $current - $age` -+ versuffix="-$major" -+ ;; -+ -+ *) -+ $echo "$modename: unknown library version type \`$version_type'" 1>&2 -+ echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ # Clear the version info if we defaulted, and they specified a release. -+ if test -z "$vinfo" && test -n "$release"; then -+ major= -+ verstring="0.0" -+ case $version_type in -+ darwin) -+ # we can't check for "0.0" in archive_cmds due to quoting -+ # problems, so we reset it completely -+ verstring="" -+ ;; -+ *) -+ verstring="0.0" -+ ;; -+ esac -+ if test "$need_version" = no; then -+ versuffix= -+ else -+ versuffix=".0.0" -+ fi -+ fi -+ -+ # Remove version info from name if versioning should be avoided -+ if test "$avoid_version" = yes && test "$need_version" = no; then -+ major= -+ versuffix= -+ verstring="" -+ fi -+ -+ # Check to see if the archive will have undefined symbols. -+ if test "$allow_undefined" = yes; then -+ if test "$allow_undefined_flag" = unsupported; then -+ $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 -+ build_libtool_libs=no -+ build_old_libs=yes -+ fi -+ else -+ # Don't allow undefined symbols. -+ allow_undefined_flag="$no_undefined_flag" -+ fi -+ fi -+ -+ if test "$mode" != relink; then -+ # Remove our outputs. -+ $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" -+ $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* -+ fi -+ -+ # Now set the variables for building old libraries. -+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then -+ oldlibs="$oldlibs $output_objdir/$libname.$libext" -+ -+ # Transform .lo files to .o files. -+ oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` -+ fi -+ -+ # Eliminate all temporary directories. -+ for path in $notinst_path; do -+ lib_search_path=`echo "$lib_search_path " | ${SED} -e 's% $path % %g'` -+ deplibs=`echo "$deplibs " | ${SED} -e 's% -L$path % %g'` -+ dependency_libs=`echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` -+ done -+ -+ if test -n "$xrpath"; then -+ # If the user specified any rpath flags, then add them. -+ temp_xrpath= -+ for libdir in $xrpath; do -+ temp_xrpath="$temp_xrpath -R$libdir" -+ case "$finalize_rpath " in -+ *" $libdir "*) ;; -+ *) finalize_rpath="$finalize_rpath $libdir" ;; -+ esac -+ done -+ if test $hardcode_into_libs != yes || test $build_old_libs = yes; then -+ dependency_libs="$temp_xrpath $dependency_libs" -+ fi -+ fi -+ -+ # Make sure dlfiles contains only unique files that won't be dlpreopened -+ old_dlfiles="$dlfiles" -+ dlfiles= -+ for lib in $old_dlfiles; do -+ case " $dlprefiles $dlfiles " in -+ *" $lib "*) ;; -+ *) dlfiles="$dlfiles $lib" ;; -+ esac -+ done -+ -+ # Make sure dlprefiles contains only unique files -+ old_dlprefiles="$dlprefiles" -+ dlprefiles= -+ for lib in $old_dlprefiles; do -+ case "$dlprefiles " in -+ *" $lib "*) ;; -+ *) dlprefiles="$dlprefiles $lib" ;; -+ esac -+ done -+ -+ if test "$build_libtool_libs" = yes; then -+ if test -n "$rpath"; then -+ case $host in -+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) -+ # these systems don't actually have a c library (as such)! -+ ;; -+ *-*-rhapsody* | *-*-darwin1.[012]) -+ # Rhapsody C library is in the System framework -+ deplibs="$deplibs -framework System" -+ ;; -+ *-*-netbsd*) -+ # Don't link with libc until the a.out ld.so is fixed. -+ ;; -+ *-*-openbsd* | *-*-freebsd*) -+ # Do not include libc due to us having libc/libc_r. -+ ;; -+ *) -+ # Add libc to deplibs on all other systems if necessary. -+ if test $build_libtool_need_lc = "yes"; then -+ deplibs="$deplibs -lc" -+ fi -+ ;; -+ esac -+ fi -+ -+ # Transform deplibs into only deplibs that can be linked in shared. -+ name_save=$name -+ libname_save=$libname -+ release_save=$release -+ versuffix_save=$versuffix -+ major_save=$major -+ # I'm not sure if I'm treating the release correctly. I think -+ # release should show up in the -l (ie -lgmp5) so we don't want to -+ # add it in twice. Is that correct? -+ release="" -+ versuffix="" -+ major="" -+ newdeplibs= -+ droppeddeps=no -+ case $deplibs_check_method in -+ pass_all) -+ # Don't check for shared/static. Everything works. -+ # This might be a little naive. We might want to check -+ # whether the library exists or not. But this is on -+ # osf3 & osf4 and I'm not really sure... Just -+ # implementing what was already the behaviour. -+ newdeplibs=$deplibs -+ ;; -+ test_compile) -+ # This code stresses the "libraries are programs" paradigm to its -+ # limits. Maybe even breaks it. We compile a program, linking it -+ # against the deplibs as a proxy for the library. Then we can check -+ # whether they linked in statically or dynamically with ldd. -+ $rm conftest.c -+ cat > conftest.c </dev/null` -+ for potent_lib in $potential_libs; do -+ # Follow soft links. -+ if ls -lLd "$potent_lib" 2>/dev/null \ -+ | grep " -> " >/dev/null; then -+ continue -+ fi -+ # The statement above tries to avoid entering an -+ # endless loop below, in case of cyclic links. -+ # We might still enter an endless loop, since a link -+ # loop can be closed while we follow links, -+ # but so what? -+ potlib="$potent_lib" -+ while test -h "$potlib" 2>/dev/null; do -+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` -+ case $potliblink in -+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; -+ *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; -+ esac -+ done -+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ -+ | ${SED} 10q \ -+ | egrep "$file_magic_regex" > /dev/null; then -+ newdeplibs="$newdeplibs $a_deplib" -+ a_deplib="" -+ break 2 -+ fi -+ done -+ done -+ if test -n "$a_deplib" ; then -+ droppeddeps=yes -+ echo -+ echo "*** Warning: linker path does not have real file for library $a_deplib." -+ echo "*** I have the capability to make that library automatically link in when" -+ echo "*** you link to this library. But I can only do this if you have a" -+ echo "*** shared version of the library, which you do not appear to have" -+ echo "*** because I did check the linker path looking for a file starting" -+ if test -z "$potlib" ; then -+ echo "*** with $libname but no candidates were found. (...for file magic test)" -+ else -+ echo "*** with $libname and none of the candidates passed a file format test" -+ echo "*** using a file magic. Last file checked: $potlib" -+ fi -+ fi -+ else -+ # Add a -L argument. -+ newdeplibs="$newdeplibs $a_deplib" -+ fi -+ done # Gone through all deplibs. -+ ;; -+ match_pattern*) -+ set dummy $deplibs_check_method -+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` -+ for a_deplib in $deplibs; do -+ name="`expr $a_deplib : '-l\(.*\)'`" -+ # If $name is empty we are operating on a -L argument. -+ if test -n "$name" && test "$name" != "0"; then -+ libname=`eval \\$echo \"$libname_spec\"` -+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do -+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null` -+ for potent_lib in $potential_libs; do -+ potlib="$potent_lib" # see symlink-check below in file_magic test -+ if eval echo \"$potent_lib\" 2>/dev/null \ -+ | ${SED} 10q \ -+ | egrep "$match_pattern_regex" > /dev/null; then -+ newdeplibs="$newdeplibs $a_deplib" -+ a_deplib="" -+ break 2 -+ fi -+ done -+ done -+ if test -n "$a_deplib" ; then -+ droppeddeps=yes -+ echo -+ echo "*** Warning: linker path does not have real file for library $a_deplib." -+ echo "*** I have the capability to make that library automatically link in when" -+ echo "*** you link to this library. But I can only do this if you have a" -+ echo "*** shared version of the library, which you do not appear to have" -+ echo "*** because I did check the linker path looking for a file starting" -+ if test -z "$potlib" ; then -+ echo "*** with $libname but no candidates were found. (...for regex pattern test)" -+ else -+ echo "*** with $libname and none of the candidates passed a file format test" -+ echo "*** using a regex pattern. Last file checked: $potlib" -+ fi -+ fi -+ else -+ # Add a -L argument. -+ newdeplibs="$newdeplibs $a_deplib" -+ fi -+ done # Gone through all deplibs. -+ ;; -+ none | unknown | *) -+ newdeplibs="" -+ if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -+ -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | -+ grep . >/dev/null; then -+ echo -+ if test "X$deplibs_check_method" = "Xnone"; then -+ echo "*** Warning: inter-library dependencies are not supported in this platform." -+ else -+ echo "*** Warning: inter-library dependencies are not known to be supported." -+ fi -+ echo "*** All declared inter-library dependencies are being dropped." -+ droppeddeps=yes -+ fi -+ ;; -+ esac -+ versuffix=$versuffix_save -+ major=$major_save -+ release=$release_save -+ libname=$libname_save -+ name=$name_save -+ -+ case $host in -+ *-*-rhapsody* | *-*-darwin1.[012]) -+ # On Rhapsody replace the C library is the System framework -+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` -+ ;; -+ esac -+ -+ if test "$droppeddeps" = yes; then -+ if test "$module" = yes; then -+ echo -+ echo "*** Warning: libtool could not satisfy all declared inter-library" -+ echo "*** dependencies of module $libname. Therefore, libtool will create" -+ echo "*** a static module, that should work as long as the dlopening" -+ echo "*** application is linked with the -dlopen flag." -+ if test -z "$global_symbol_pipe"; then -+ echo -+ echo "*** However, this would only work if libtool was able to extract symbol" -+ echo "*** lists from a program, using \`nm' or equivalent, but libtool could" -+ echo "*** not find such a program. So, this module is probably useless." -+ echo "*** \`nm' from GNU binutils and a full rebuild may help." -+ fi -+ if test "$build_old_libs" = no; then -+ oldlibs="$output_objdir/$libname.$libext" -+ build_libtool_libs=module -+ build_old_libs=yes -+ else -+ build_libtool_libs=no -+ fi -+ else -+ echo "*** The inter-library dependencies that have been dropped here will be" -+ echo "*** automatically added whenever a program is linked with this library" -+ echo "*** or is declared to -dlopen it." -+ -+ if test $allow_undefined = no; then -+ echo -+ echo "*** Since this library must not contain undefined symbols," -+ echo "*** because either the platform does not support them or" -+ echo "*** it was explicitly requested with -no-undefined," -+ echo "*** libtool will only create a static version of it." -+ if test "$build_old_libs" = no; then -+ oldlibs="$output_objdir/$libname.$libext" -+ build_libtool_libs=module -+ build_old_libs=yes -+ else -+ build_libtool_libs=no -+ fi -+ fi -+ fi -+ fi -+ # Done checking deplibs! -+ deplibs=$newdeplibs -+ fi -+ -+ # All the library-specific variables (install_libdir is set above). -+ library_names= -+ old_library= -+ dlname= -+ -+ # Test again, we may have decided not to build it any more -+ if test "$build_libtool_libs" = yes; then -+ if test $hardcode_into_libs = yes; then -+ # Hardcode the library paths -+ hardcode_libdirs= -+ dep_rpath= -+ rpath="$finalize_rpath" -+ test "$mode" != relink && rpath="$compile_rpath$rpath" -+ for libdir in $rpath; do -+ if test -n "$hardcode_libdir_flag_spec"; then -+ if test -n "$hardcode_libdir_separator"; then -+ if test -z "$hardcode_libdirs"; then -+ hardcode_libdirs="$libdir" -+ else -+ # Just accumulate the unique libdirs. -+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in -+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) -+ ;; -+ *) -+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" -+ ;; -+ esac -+ fi -+ else -+ eval flag=\"$hardcode_libdir_flag_spec\" -+ dep_rpath="$dep_rpath $flag" -+ fi -+ elif test -n "$runpath_var"; then -+ case "$perm_rpath " in -+ *" $libdir "*) ;; -+ *) perm_rpath="$perm_rpath $libdir" ;; -+ esac -+ fi -+ done -+ # Substitute the hardcoded libdirs into the rpath. -+ if test -n "$hardcode_libdir_separator" && -+ test -n "$hardcode_libdirs"; then -+ libdir="$hardcode_libdirs" -+ eval dep_rpath=\"$hardcode_libdir_flag_spec\" -+ fi -+ if test -n "$runpath_var" && test -n "$perm_rpath"; then -+ # We should set the runpath_var. -+ rpath= -+ for dir in $perm_rpath; do -+ rpath="$rpath$dir:" -+ done -+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" -+ fi -+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" -+ fi -+ -+ shlibpath="$finalize_shlibpath" -+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" -+ if test -n "$shlibpath"; then -+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" -+ fi -+ -+ # Get the real and link names of the library. -+ eval library_names=\"$library_names_spec\" -+ set dummy $library_names -+ realname="$2" -+ shift; shift -+ -+ if test -n "$soname_spec"; then -+ eval soname=\"$soname_spec\" -+ else -+ soname="$realname" -+ fi -+ test -z "$dlname" && dlname=$soname -+ -+ lib="$output_objdir/$realname" -+ for link -+ do -+ linknames="$linknames $link" -+ done -+ -+ # Ensure that we have .o objects for linkers which dislike .lo -+ # (e.g. aix) in case we are running --disable-static -+ for obj in $libobjs; do -+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$obj"; then -+ xdir="." -+ else -+ xdir="$xdir" -+ fi -+ baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` -+ oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` -+ if test ! -f $xdir/$oldobj; then -+ $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" -+ $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? -+ fi -+ done -+ -+ # Use standard objects if they are pic -+ test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` -+ -+ # Prepare the list of exported symbols -+ if test -z "$export_symbols"; then -+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then -+ $show "generating symbol list for \`$libname.la'" -+ export_symbols="$output_objdir/$libname.exp" -+ $run $rm $export_symbols -+ eval cmds=\"$export_symbols_cmds\" -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ if test -n "$export_symbols_regex"; then -+ $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" -+ $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' -+ $show "$mv \"${export_symbols}T\" \"$export_symbols\"" -+ $run eval '$mv "${export_symbols}T" "$export_symbols"' -+ fi -+ fi -+ fi -+ -+ if test -n "$export_symbols" && test -n "$include_expsyms"; then -+ $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' -+ fi -+ -+ if test -n "$convenience"; then -+ if test -n "$whole_archive_flag_spec"; then -+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\" -+ else -+ gentop="$output_objdir/${outputname}x" -+ $show "${rm}r $gentop" -+ $run ${rm}r "$gentop" -+ $show "mkdir $gentop" -+ $run mkdir "$gentop" -+ status=$? -+ if test $status -ne 0 && test ! -d "$gentop"; then -+ exit $status -+ fi -+ generated="$generated $gentop" -+ -+ for xlib in $convenience; do -+ # Extract the objects. -+ case $xlib in -+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; -+ *) xabs=`pwd`"/$xlib" ;; -+ esac -+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` -+ xdir="$gentop/$xlib" -+ -+ $show "${rm}r $xdir" -+ $run ${rm}r "$xdir" -+ $show "mkdir $xdir" -+ $run mkdir "$xdir" -+ status=$? -+ if test $status -ne 0 && test ! -d "$xdir"; then -+ exit $status -+ fi -+ $show "(cd $xdir && $AR x $xabs)" -+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? -+ -+ libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` -+ done -+ fi -+ fi -+ -+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then -+ eval flag=\"$thread_safe_flag_spec\" -+ linker_flags="$linker_flags $flag" -+ fi -+ -+ # Make a backup of the uninstalled library when relinking -+ if test "$mode" = relink; then -+ $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? -+ fi -+ -+ # Do each of the archive commands. -+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then -+ eval cmds=\"$archive_expsym_cmds\" -+ else -+ save_deplibs="$deplibs" -+ for conv in $convenience; do -+ tmp_deplibs= -+ for test_deplib in $deplibs; do -+ if test "$test_deplib" != "$conv"; then -+ tmp_deplibs="$tmp_deplibs $test_deplib" -+ fi -+ done -+ deplibs="$tmp_deplibs" -+ done -+ eval cmds=\"$archive_cmds\" -+ deplibs="$save_deplibs" -+ fi -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ -+ # Restore the uninstalled library and exit -+ if test "$mode" = relink; then -+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? -+ exit 0 -+ fi -+ -+ # Create links to the real library. -+ for linkname in $linknames; do -+ if test "$realname" != "$linkname"; then -+ $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" -+ $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? -+ fi -+ done -+ -+ # If -module or -export-dynamic was specified, set the dlname. -+ if test "$module" = yes || test "$export_dynamic" = yes; then -+ # On all known operating systems, these are identical. -+ dlname="$soname" -+ fi -+ fi -+ ;; -+ -+ obj) -+ if test -n "$deplibs"; then -+ $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 -+ fi -+ -+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then -+ $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 -+ fi -+ -+ if test -n "$rpath"; then -+ $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 -+ fi -+ -+ if test -n "$xrpath"; then -+ $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 -+ fi -+ -+ if test -n "$vinfo"; then -+ $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 -+ fi -+ -+ if test -n "$release"; then -+ $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 -+ fi -+ -+ case $output in -+ *.lo) -+ if test -n "$objs$old_deplibs"; then -+ $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 -+ exit 1 -+ fi -+ libobj="$output" -+ obj=`$echo "X$output" | $Xsed -e "$lo2o"` -+ ;; -+ *) -+ libobj= -+ obj="$output" -+ ;; -+ esac -+ -+ # Delete the old objects. -+ $run $rm $obj $libobj -+ -+ # Objects from convenience libraries. This assumes -+ # single-version convenience libraries. Whenever we create -+ # different ones for PIC/non-PIC, this we'll have to duplicate -+ # the extraction. -+ reload_conv_objs= -+ gentop= -+ # reload_cmds runs $LD directly, so let us get rid of -+ # -Wl from whole_archive_flag_spec -+ wl= -+ -+ if test -n "$convenience"; then -+ if test -n "$whole_archive_flag_spec"; then -+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" -+ else -+ gentop="$output_objdir/${obj}x" -+ $show "${rm}r $gentop" -+ $run ${rm}r "$gentop" -+ $show "mkdir $gentop" -+ $run mkdir "$gentop" -+ status=$? -+ if test $status -ne 0 && test ! -d "$gentop"; then -+ exit $status -+ fi -+ generated="$generated $gentop" -+ -+ for xlib in $convenience; do -+ # Extract the objects. -+ case $xlib in -+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; -+ *) xabs=`pwd`"/$xlib" ;; -+ esac -+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` -+ xdir="$gentop/$xlib" -+ -+ $show "${rm}r $xdir" -+ $run ${rm}r "$xdir" -+ $show "mkdir $xdir" -+ $run mkdir "$xdir" -+ status=$? -+ if test $status -ne 0 && test ! -d "$xdir"; then -+ exit $status -+ fi -+ $show "(cd $xdir && $AR x $xabs)" -+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? -+ -+ reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` -+ done -+ fi -+ fi -+ -+ # Create the old-style object. -+ reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test -+ -+ output="$obj" -+ eval cmds=\"$reload_cmds\" -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ -+ # Exit if we aren't doing a library object file. -+ if test -z "$libobj"; then -+ if test -n "$gentop"; then -+ $show "${rm}r $gentop" -+ $run ${rm}r $gentop -+ fi -+ -+ exit 0 -+ fi -+ -+ if test "$build_libtool_libs" != yes; then -+ if test -n "$gentop"; then -+ $show "${rm}r $gentop" -+ $run ${rm}r $gentop -+ fi -+ -+ # Create an invalid libtool object if no PIC, so that we don't -+ # accidentally link it into a program. -+ $show "echo timestamp > $libobj" -+ $run eval "echo timestamp > $libobj" || exit $? -+ exit 0 -+ fi -+ -+ if test -n "$pic_flag" || test "$pic_mode" != default; then -+ # Only do commands if we really have different PIC objects. -+ reload_objs="$libobjs $reload_conv_objs" -+ output="$libobj" -+ eval cmds=\"$reload_cmds\" -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ else -+ # Just create a symlink. -+ $show $rm $libobj -+ $run $rm $libobj -+ xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$libobj"; then -+ xdir="." -+ else -+ xdir="$xdir" -+ fi -+ baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` -+ oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` -+ $show "(cd $xdir && $LN_S $oldobj $baseobj)" -+ $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? -+ fi -+ -+ if test -n "$gentop"; then -+ $show "${rm}r $gentop" -+ $run ${rm}r $gentop -+ fi -+ -+ exit 0 -+ ;; -+ -+ prog) -+ case $host in -+ *cygwin*) output=`echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; -+ esac -+ if test -n "$vinfo"; then -+ $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 -+ fi -+ -+ if test -n "$release"; then -+ $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 -+ fi -+ -+ if test "$preload" = yes; then -+ if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && -+ test "$dlopen_self_static" = unknown; then -+ $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." -+ fi -+ fi -+ -+ case $host in -+ *-*-rhapsody* | *-*-darwin1.[012]) -+ # On Rhapsody replace the C library is the System framework -+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` -+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` -+ case $host in -+ *darwin*) -+ # Don't allow lazy linking, it breaks C++ global constructors -+ compile_command="$compile_command ${wl}-bind_at_load" -+ finalize_command="$finalize_command ${wl}-bind_at_load" -+ ;; -+ esac -+ ;; -+ esac -+ -+ compile_command="$compile_command $compile_deplibs" -+ finalize_command="$finalize_command $finalize_deplibs" -+ -+ if test -n "$rpath$xrpath"; then -+ # If the user specified any rpath flags, then add them. -+ for libdir in $rpath $xrpath; do -+ # This is the magic to use -rpath. -+ case "$finalize_rpath " in -+ *" $libdir "*) ;; -+ *) finalize_rpath="$finalize_rpath $libdir" ;; -+ esac -+ done -+ fi -+ -+ # Now hardcode the library paths -+ rpath= -+ hardcode_libdirs= -+ for libdir in $compile_rpath $finalize_rpath; do -+ if test -n "$hardcode_libdir_flag_spec"; then -+ if test -n "$hardcode_libdir_separator"; then -+ if test -z "$hardcode_libdirs"; then -+ hardcode_libdirs="$libdir" -+ else -+ # Just accumulate the unique libdirs. -+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in -+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) -+ ;; -+ *) -+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" -+ ;; -+ esac -+ fi -+ else -+ eval flag=\"$hardcode_libdir_flag_spec\" -+ rpath="$rpath $flag" -+ fi -+ elif test -n "$runpath_var"; then -+ case "$perm_rpath " in -+ *" $libdir "*) ;; -+ *) perm_rpath="$perm_rpath $libdir" ;; -+ esac -+ fi -+ case $host in -+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) -+ case :$dllsearchpath: in -+ *":$libdir:"*) ;; -+ *) dllsearchpath="$dllsearchpath:$libdir";; -+ esac -+ ;; -+ esac -+ done -+ # Substitute the hardcoded libdirs into the rpath. -+ if test -n "$hardcode_libdir_separator" && -+ test -n "$hardcode_libdirs"; then -+ libdir="$hardcode_libdirs" -+ eval rpath=\" $hardcode_libdir_flag_spec\" -+ fi -+ compile_rpath="$rpath" -+ -+ rpath= -+ hardcode_libdirs= -+ for libdir in $finalize_rpath; do -+ if test -n "$hardcode_libdir_flag_spec"; then -+ if test -n "$hardcode_libdir_separator"; then -+ if test -z "$hardcode_libdirs"; then -+ hardcode_libdirs="$libdir" -+ else -+ # Just accumulate the unique libdirs. -+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in -+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) -+ ;; -+ *) -+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" -+ ;; -+ esac -+ fi -+ else -+ eval flag=\"$hardcode_libdir_flag_spec\" -+ rpath="$rpath $flag" -+ fi -+ elif test -n "$runpath_var"; then -+ case "$finalize_perm_rpath " in -+ *" $libdir "*) ;; -+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; -+ esac -+ fi -+ done -+ # Substitute the hardcoded libdirs into the rpath. -+ if test -n "$hardcode_libdir_separator" && -+ test -n "$hardcode_libdirs"; then -+ libdir="$hardcode_libdirs" -+ eval rpath=\" $hardcode_libdir_flag_spec\" -+ fi -+ finalize_rpath="$rpath" -+ -+ if test -n "$libobjs" && test "$build_old_libs" = yes; then -+ # Transform all the library objects into standard objects. -+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` -+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` -+ fi -+ -+ dlsyms= -+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then -+ if test -n "$NM" && test -n "$global_symbol_pipe"; then -+ dlsyms="${outputname}S.c" -+ else -+ $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 -+ fi -+ fi -+ -+ if test -n "$dlsyms"; then -+ case $dlsyms in -+ "") ;; -+ *.c) -+ # Discover the nlist of each of the dlfiles. -+ nlist="$output_objdir/${outputname}.nm" -+ -+ $show "$rm $nlist ${nlist}S ${nlist}T" -+ $run $rm "$nlist" "${nlist}S" "${nlist}T" -+ -+ # Parse the name list into a source file. -+ $show "creating $output_objdir/$dlsyms" -+ -+ test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ -+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ -+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ -+ -+#ifdef __cplusplus -+extern \"C\" { -+#endif -+ -+/* Prevent the only kind of declaration conflicts we can make. */ -+#define lt_preloaded_symbols some_other_symbol -+ -+/* External symbol declarations for the compiler. */\ -+" -+ -+ if test "$dlself" = yes; then -+ $show "generating symbol list for \`$output'" -+ -+ test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" -+ -+ # Add our own program objects to the symbol list. -+ progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` -+ for arg in $progfiles; do -+ $show "extracting global C symbols from \`$arg'" -+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" -+ done -+ -+ if test -n "$exclude_expsyms"; then -+ $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' -+ $run eval '$mv "$nlist"T "$nlist"' -+ fi -+ -+ if test -n "$export_symbols_regex"; then -+ $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' -+ $run eval '$mv "$nlist"T "$nlist"' -+ fi -+ -+ # Prepare the list of exported symbols -+ if test -z "$export_symbols"; then -+ export_symbols="$output_objdir/$output.exp" -+ $run $rm $export_symbols -+ $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' -+ else -+ $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' -+ $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' -+ $run eval 'mv "$nlist"T "$nlist"' -+ fi -+ fi -+ -+ for arg in $dlprefiles; do -+ $show "extracting global C symbols from \`$arg'" -+ name=`echo "$arg" | ${SED} -e 's%^.*/%%'` -+ $run eval 'echo ": $name " >> "$nlist"' -+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" -+ done -+ -+ if test -z "$run"; then -+ # Make sure we have at least an empty file. -+ test -f "$nlist" || : > "$nlist" -+ -+ if test -n "$exclude_expsyms"; then -+ egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T -+ $mv "$nlist"T "$nlist" -+ fi -+ -+ # Try sorting and uniquifying the output. -+ if grep -v "^: " < "$nlist" | -+ if sort -k 3 /dev/null 2>&1; then -+ sort -k 3 -+ else -+ sort +2 -+ fi | -+ uniq > "$nlist"S; then -+ : -+ else -+ grep -v "^: " < "$nlist" > "$nlist"S -+ fi -+ -+ if test -f "$nlist"S; then -+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' -+ else -+ echo '/* NONE */' >> "$output_objdir/$dlsyms" -+ fi -+ -+ $echo >> "$output_objdir/$dlsyms" "\ -+ -+#undef lt_preloaded_symbols -+ -+#if defined (__STDC__) && __STDC__ -+# define lt_ptr void * -+#else -+# define lt_ptr char * -+# define const -+#endif -+ -+/* The mapping between symbol names and symbols. */ -+const struct { -+ const char *name; -+ lt_ptr address; -+} -+lt_preloaded_symbols[] = -+{\ -+" -+ -+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" -+ -+ $echo >> "$output_objdir/$dlsyms" "\ -+ {0, (lt_ptr) 0} -+}; -+ -+/* This works around a problem in FreeBSD linker */ -+#ifdef FREEBSD_WORKAROUND -+static const void *lt_preloaded_setup() { -+ return lt_preloaded_symbols; -+} -+#endif -+ -+#ifdef __cplusplus -+} -+#endif\ -+" -+ fi -+ -+ pic_flag_for_symtable= -+ case $host in -+ # compiling the symbol table file with pic_flag works around -+ # a FreeBSD bug that causes programs to crash when -lm is -+ # linked before any other PIC object. But we must not use -+ # pic_flag when linking with -static. The problem exists in -+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. -+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) -+ case "$compile_command " in -+ *" -static "*) ;; -+ *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; -+ esac;; -+ *-*-hpux*) -+ case "$compile_command " in -+ *" -static "*) ;; -+ *) pic_flag_for_symtable=" $pic_flag -DPIC";; -+ esac -+ esac -+ -+ # Now compile the dynamic symbol file. -+ $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" -+ $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? -+ -+ # Clean up the generated files. -+ $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" -+ $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" -+ -+ # Transform the symbol file into the correct name. -+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` -+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` -+ ;; -+ *) -+ $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 -+ exit 1 -+ ;; -+ esac -+ else -+ # We keep going just in case the user didn't refer to -+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe -+ # really was required. -+ -+ # Nullify the symbol file. -+ compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` -+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` -+ fi -+ -+ if test $need_relink = no || test "$build_libtool_libs" != yes; then -+ # Replace the output file specification. -+ compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` -+ link_command="$compile_command$compile_rpath" -+ -+ # We have no uninstalled library dependencies, so finalize right now. -+ $show "$link_command" -+ $run eval "$link_command" -+ status=$? -+ -+ # Delete the generated files. -+ if test -n "$dlsyms"; then -+ $show "$rm $output_objdir/${outputname}S.${objext}" -+ $run $rm "$output_objdir/${outputname}S.${objext}" -+ fi -+ -+ exit $status -+ fi -+ -+ if test -n "$shlibpath_var"; then -+ # We should set the shlibpath_var -+ rpath= -+ for dir in $temp_rpath; do -+ case $dir in -+ [\\/]* | [A-Za-z]:[\\/]*) -+ # Absolute path. -+ rpath="$rpath$dir:" -+ ;; -+ *) -+ # Relative path: add a thisdir entry. -+ rpath="$rpath\$thisdir/$dir:" -+ ;; -+ esac -+ done -+ temp_rpath="$rpath" -+ fi -+ -+ if test -n "$compile_shlibpath$finalize_shlibpath"; then -+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" -+ fi -+ if test -n "$finalize_shlibpath"; then -+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" -+ fi -+ -+ compile_var= -+ finalize_var= -+ if test -n "$runpath_var"; then -+ if test -n "$perm_rpath"; then -+ # We should set the runpath_var. -+ rpath= -+ for dir in $perm_rpath; do -+ rpath="$rpath$dir:" -+ done -+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" " -+ fi -+ if test -n "$finalize_perm_rpath"; then -+ # We should set the runpath_var. -+ rpath= -+ for dir in $finalize_perm_rpath; do -+ rpath="$rpath$dir:" -+ done -+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " -+ fi -+ fi -+ -+ if test "$no_install" = yes; then -+ # We don't need to create a wrapper script. -+ link_command="$compile_var$compile_command$compile_rpath" -+ # Replace the output file specification. -+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` -+ # Delete the old output file. -+ $run $rm $output -+ # Link the executable and exit -+ $show "$link_command" -+ $run eval "$link_command" || exit $? -+ exit 0 -+ fi -+ -+ if test "$hardcode_action" = relink; then -+ # Fast installation is not supported -+ link_command="$compile_var$compile_command$compile_rpath" -+ relink_command="$finalize_var$finalize_command$finalize_rpath" -+ -+ $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 -+ $echo "$modename: \`$output' will be relinked during installation" 1>&2 -+ else -+ if test "$fast_install" != no; then -+ link_command="$finalize_var$compile_command$finalize_rpath" -+ if test "$fast_install" = yes; then -+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` -+ else -+ # fast_install is set to needless -+ relink_command= -+ fi -+ else -+ link_command="$compile_var$compile_command$compile_rpath" -+ relink_command="$finalize_var$finalize_command$finalize_rpath" -+ fi -+ fi -+ -+ # Replace the output file specification. -+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` -+ -+ # Delete the old output files. -+ $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname -+ -+ $show "$link_command" -+ $run eval "$link_command" || exit $? -+ -+ # Now create the wrapper script. -+ $show "creating $output" -+ -+ # Quote the relink command for shipping. -+ if test -n "$relink_command"; then -+ # Preserve any variables that may affect compiler behavior -+ for var in $variables_saved_for_relink; do -+ if eval test -z \"\${$var+set}\"; then -+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" -+ elif eval var_value=\$$var; test -z "$var_value"; then -+ relink_command="$var=; export $var; $relink_command" -+ else -+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` -+ relink_command="$var=\"$var_value\"; export $var; $relink_command" -+ fi -+ done -+ relink_command="(cd `pwd`; $relink_command)" -+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` -+ fi -+ -+ # Quote $echo for shipping. -+ if test "X$echo" = "X$SHELL $0 --fallback-echo"; then -+ case $0 in -+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; -+ *) qecho="$SHELL `pwd`/$0 --fallback-echo";; -+ esac -+ qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` -+ else -+ qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` -+ fi -+ -+ # Only actually do things if our run command is non-null. -+ if test -z "$run"; then -+ # win32 will think the script is a binary if it has -+ # a .exe suffix, so we strip it off here. -+ case $output in -+ *.exe) output=`echo $output|${SED} 's,.exe$,,'` ;; -+ esac -+ # test for cygwin because mv fails w/o .exe extensions -+ case $host in -+ *cygwin*) exeext=.exe ;; -+ *) exeext= ;; -+ esac -+ $rm $output -+ trap "$rm $output; exit 1" 1 2 15 -+ -+ $echo > $output "\ -+#! $SHELL -+ -+# $output - temporary wrapper script for $objdir/$outputname -+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -+# -+# The $output program cannot be directly executed until all the libtool -+# libraries that it depends on are installed. -+# -+# This wrapper script should never be moved out of the build directory. -+# If it is, it will not operate correctly. -+ -+# Sed substitution that helps us do robust quoting. It backslashifies -+# metacharacters that are still active within double-quoted strings. -+Xsed="${SED}"' -e 1s/^X//' -+sed_quote_subst='$sed_quote_subst' -+ -+# The HP-UX ksh and POSIX shell print the target directory to stdout -+# if CDPATH is set. -+if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi -+ -+relink_command=\"$relink_command\" -+ -+# This environment variable determines our operation mode. -+if test \"\$libtool_install_magic\" = \"$magic\"; then -+ # install mode needs the following variable: -+ notinst_deplibs='$notinst_deplibs' -+else -+ # When we are sourced in execute mode, \$file and \$echo are already set. -+ if test \"\$libtool_execute_magic\" != \"$magic\"; then -+ echo=\"$qecho\" -+ file=\"\$0\" -+ # Make sure echo works. -+ if test \"X\$1\" = X--no-reexec; then -+ # Discard the --no-reexec flag, and continue. -+ shift -+ elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then -+ # Yippee, \$echo works! -+ : -+ else -+ # Restart under the correct shell, and then maybe \$echo will work. -+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} -+ fi -+ fi\ -+" -+ $echo >> $output "\ -+ -+ # Find the directory that this script lives in. -+ thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` -+ test \"x\$thisdir\" = \"x\$file\" && thisdir=. -+ -+ # Follow symbolic links until we get to the real thisdir. -+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` -+ while test -n \"\$file\"; do -+ destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` -+ -+ # If there was a directory component, then change thisdir. -+ if test \"x\$destdir\" != \"x\$file\"; then -+ case \"\$destdir\" in -+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; -+ *) thisdir=\"\$thisdir/\$destdir\" ;; -+ esac -+ fi -+ -+ file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` -+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` -+ done -+ -+ # Try to get the absolute directory name. -+ absdir=\`cd \"\$thisdir\" && pwd\` -+ test -n \"\$absdir\" && thisdir=\"\$absdir\" -+" -+ -+ if test "$fast_install" = yes; then -+ echo >> $output "\ -+ program=lt-'$outputname'$exeext -+ progdir=\"\$thisdir/$objdir\" -+ -+ if test ! -f \"\$progdir/\$program\" || \\ -+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ -+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then -+ -+ file=\"\$\$-\$program\" -+ -+ if test ! -d \"\$progdir\"; then -+ $mkdir \"\$progdir\" -+ else -+ $rm \"\$progdir/\$file\" -+ fi" -+ -+ echo >> $output "\ -+ -+ # relink executable if necessary -+ if test -n \"\$relink_command\"; then -+ if relink_command_output=\`eval \$relink_command 2>&1\`; then : -+ else -+ $echo \"\$relink_command_output\" >&2 -+ $rm \"\$progdir/\$file\" -+ exit 1 -+ fi -+ fi -+ -+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || -+ { $rm \"\$progdir/\$program\"; -+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } -+ $rm \"\$progdir/\$file\" -+ fi" -+ else -+ echo >> $output "\ -+ program='$outputname' -+ progdir=\"\$thisdir/$objdir\" -+" -+ fi -+ -+ echo >> $output "\ -+ -+ if test -f \"\$progdir/\$program\"; then" -+ -+ # Export our shlibpath_var if we have one. -+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then -+ $echo >> $output "\ -+ # Add our own library path to $shlibpath_var -+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" -+ -+ # Some systems cannot cope with colon-terminated $shlibpath_var -+ # The second colon is a workaround for a bug in BeOS R4 ${SED} -+ $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` -+ -+ export $shlibpath_var -+" -+ fi -+ -+ # fixup the dll searchpath if we need to. -+ if test -n "$dllsearchpath"; then -+ $echo >> $output "\ -+ # Add the dll search path components to the executable PATH -+ PATH=$dllsearchpath:\$PATH -+" -+ fi -+ -+ $echo >> $output "\ -+ if test \"\$libtool_execute_magic\" != \"$magic\"; then -+ # Run the actual program with our arguments. -+" -+ case $host in -+ # win32 systems need to use the prog path for dll -+ # lookup to work -+ *-*-cygwin* | *-*-pw32*) -+ $echo >> $output "\ -+ exec \$progdir/\$program \${1+\"\$@\"} -+" -+ ;; -+ -+ # Backslashes separate directories on plain windows -+ *-*-mingw | *-*-os2*) -+ $echo >> $output "\ -+ exec \$progdir\\\\\$program \${1+\"\$@\"} -+" -+ ;; -+ -+ *) -+ $echo >> $output "\ -+ # Export the path to the program. -+ PATH=\"\$progdir:\$PATH\" -+ export PATH -+ -+ exec \$program \${1+\"\$@\"} -+" -+ ;; -+ esac -+ $echo >> $output "\ -+ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" -+ exit 1 -+ fi -+ else -+ # The program doesn't exist. -+ \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 -+ \$echo \"This script is just a wrapper for \$program.\" 1>&2 -+ echo \"See the $PACKAGE documentation for more information.\" 1>&2 -+ exit 1 -+ fi -+fi\ -+" -+ chmod +x $output -+ fi -+ exit 0 -+ ;; -+ esac -+ -+ # See if we need to build an old-fashioned archive. -+ for oldlib in $oldlibs; do -+ -+ if test "$build_libtool_libs" = convenience; then -+ oldobjs="$libobjs_save" -+ addlibs="$convenience" -+ build_libtool_libs=no -+ else -+ if test "$build_libtool_libs" = module; then -+ oldobjs="$libobjs_save" -+ build_libtool_libs=no -+ else -+ oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` -+ fi -+ addlibs="$old_convenience" -+ fi -+ -+ if test -n "$addlibs"; then -+ gentop="$output_objdir/${outputname}x" -+ $show "${rm}r $gentop" -+ $run ${rm}r "$gentop" -+ $show "mkdir $gentop" -+ $run mkdir "$gentop" -+ status=$? -+ if test $status -ne 0 && test ! -d "$gentop"; then -+ exit $status -+ fi -+ generated="$generated $gentop" -+ -+ # Add in members from convenience archives. -+ for xlib in $addlibs; do -+ # Extract the objects. -+ case $xlib in -+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; -+ *) xabs=`pwd`"/$xlib" ;; -+ esac -+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` -+ xdir="$gentop/$xlib" -+ -+ $show "${rm}r $xdir" -+ $run ${rm}r "$xdir" -+ $show "mkdir $xdir" -+ $run mkdir "$xdir" -+ status=$? -+ if test $status -ne 0 && test ! -d "$xdir"; then -+ exit $status -+ fi -+ $show "(cd $xdir && $AR x $xabs)" -+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? -+ -+ oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` -+ done -+ fi -+ -+ # Do each command in the archive commands. -+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then -+ eval cmds=\"$old_archive_from_new_cmds\" -+ else -+ # Ensure that we have .o objects in place in case we decided -+ # not to build a shared library, and have fallen back to building -+ # static libs even though --disable-static was passed! -+ for oldobj in $oldobjs; do -+ if test ! -f $oldobj; then -+ xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$xdir" = "X$oldobj"; then -+ xdir="." -+ else -+ xdir="$xdir" -+ fi -+ baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` -+ obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` -+ $show "(cd $xdir && ${LN_S} $obj $baseobj)" -+ $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? -+ fi -+ done -+ -+ eval cmds=\"$old_archive_cmds\" -+ fi -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ done -+ -+ if test -n "$generated"; then -+ $show "${rm}r$generated" -+ $run ${rm}r$generated -+ fi -+ -+ # Now create the libtool archive. -+ case $output in -+ *.la) -+ old_library= -+ test "$build_old_libs" = yes && old_library="$libname.$libext" -+ $show "creating $output" -+ -+ # Preserve any variables that may affect compiler behavior -+ for var in $variables_saved_for_relink; do -+ if eval test -z \"\${$var+set}\"; then -+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" -+ elif eval var_value=\$$var; test -z "$var_value"; then -+ relink_command="$var=; export $var; $relink_command" -+ else -+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` -+ relink_command="$var=\"$var_value\"; export $var; $relink_command" -+ fi -+ done -+ # Quote the link command for shipping. -+ relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)" -+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` -+ -+ # Only create the output if not a dry run. -+ if test -z "$run"; then -+ for installed in no yes; do -+ if test "$installed" = yes; then -+ if test -z "$install_libdir"; then -+ break -+ fi -+ output="$output_objdir/$outputname"i -+ # Replace all uninstalled libtool libraries with the installed ones -+ newdependency_libs= -+ for deplib in $dependency_libs; do -+ case $deplib in -+ *.la) -+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` -+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` -+ if test -z "$libdir"; then -+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 -+ exit 1 -+ fi -+ newdependency_libs="$newdependency_libs $libdir/$name" -+ ;; -+ *) newdependency_libs="$newdependency_libs $deplib" ;; -+ esac -+ done -+ dependency_libs="$newdependency_libs" -+ newdlfiles= -+ for lib in $dlfiles; do -+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` -+ if test -z "$libdir"; then -+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 -+ exit 1 -+ fi -+ newdlfiles="$newdlfiles $libdir/$name" -+ done -+ dlfiles="$newdlfiles" -+ newdlprefiles= -+ for lib in $dlprefiles; do -+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` -+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` -+ if test -z "$libdir"; then -+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 -+ exit 1 -+ fi -+ newdlprefiles="$newdlprefiles $libdir/$name" -+ done -+ dlprefiles="$newdlprefiles" -+ fi -+ $rm $output -+ # place dlname in correct position for cygwin -+ tdlname=$dlname -+ case $host,$output,$installed,$module,$dlname in -+ *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; -+ esac -+ $echo > $output "\ -+# $outputname - a libtool library file -+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -+# -+# Please DO NOT delete this file! -+# It is necessary for linking the library. -+ -+# The name that we can dlopen(3). -+dlname='$tdlname' -+ -+# Names of this library. -+library_names='$library_names' -+ -+# The name of the static archive. -+old_library='$old_library' -+ -+# Libraries that this one depends upon. -+dependency_libs='$dependency_libs' -+ -+# Version information for $libname. -+current=$current -+age=$age -+revision=$revision -+ -+# Is this an already installed library? -+installed=$installed -+ -+# Files to dlopen/dlpreopen -+dlopen='$dlfiles' -+dlpreopen='$dlprefiles' -+ -+# Directory that this library needs to be installed in: -+libdir='$install_libdir'" -+ if test "$installed" = no && test $need_relink = yes; then -+ $echo >> $output "\ -+relink_command=\"$relink_command\"" -+ fi -+ done -+ fi -+ -+ # Do a symbolic link so that the libtool archive can be found in -+ # LD_LIBRARY_PATH before the program is installed. -+ $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" -+ $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? -+ ;; -+ esac -+ exit 0 -+ ;; -+ -+ # libtool install mode -+ install) -+ modename="$modename: install" -+ -+ # There may be an optional sh(1) argument at the beginning of -+ # install_prog (especially on Windows NT). -+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || -+ # Allow the use of GNU shtool's install command. -+ $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then -+ # Aesthetically quote it. -+ arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` -+ case $arg in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) -+ arg="\"$arg\"" -+ ;; -+ esac -+ install_prog="$arg " -+ arg="$1" -+ shift -+ else -+ install_prog= -+ arg="$nonopt" -+ fi -+ -+ # The real first argument should be the name of the installation program. -+ # Aesthetically quote it. -+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -+ case $arg in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) -+ arg="\"$arg\"" -+ ;; -+ esac -+ install_prog="$install_prog$arg" -+ -+ # We need to accept at least all the BSD install flags. -+ dest= -+ files= -+ opts= -+ prev= -+ install_type= -+ isdir=no -+ stripme= -+ for arg -+ do -+ if test -n "$dest"; then -+ files="$files $dest" -+ dest="$arg" -+ continue -+ fi -+ -+ case $arg in -+ -d) isdir=yes ;; -+ -f) prev="-f" ;; -+ -g) prev="-g" ;; -+ -m) prev="-m" ;; -+ -o) prev="-o" ;; -+ -s) -+ stripme=" -s" -+ continue -+ ;; -+ -*) ;; -+ -+ *) -+ # If the previous option needed an argument, then skip it. -+ if test -n "$prev"; then -+ prev= -+ else -+ dest="$arg" -+ continue -+ fi -+ ;; -+ esac -+ -+ # Aesthetically quote the argument. -+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` -+ case $arg in -+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) -+ arg="\"$arg\"" -+ ;; -+ esac -+ install_prog="$install_prog $arg" -+ done -+ -+ if test -z "$install_prog"; then -+ $echo "$modename: you must specify an install program" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ if test -n "$prev"; then -+ $echo "$modename: the \`$prev' option requires an argument" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ if test -z "$files"; then -+ if test -z "$dest"; then -+ $echo "$modename: no file or destination specified" 1>&2 -+ else -+ $echo "$modename: you must specify a destination" 1>&2 -+ fi -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ # Strip any trailing slash from the destination. -+ dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` -+ -+ # Check to see that the destination is a directory. -+ test -d "$dest" && isdir=yes -+ if test "$isdir" = yes; then -+ destdir="$dest" -+ destname= -+ else -+ destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` -+ test "X$destdir" = "X$dest" && destdir=. -+ destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` -+ -+ # Not a directory, so check to see that there is only one file specified. -+ set dummy $files -+ if test $# -gt 2; then -+ $echo "$modename: \`$dest' is not a directory" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ fi -+ case $destdir in -+ [\\/]* | [A-Za-z]:[\\/]*) ;; -+ *) -+ for file in $files; do -+ case $file in -+ *.lo) ;; -+ *) -+ $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ ;; -+ esac -+ done -+ ;; -+ esac -+ -+ # This variable tells wrapper scripts just to set variables rather -+ # than running their programs. -+ libtool_install_magic="$magic" -+ -+ staticlibs= -+ future_libdirs= -+ current_libdirs= -+ for file in $files; do -+ -+ # Do each installation. -+ case $file in -+ *.$libext) -+ # Do the static libraries later. -+ staticlibs="$staticlibs $file" -+ ;; -+ -+ *.la) -+ # Check to see that this really is a libtool archive. -+ if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : -+ else -+ $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ library_names= -+ old_library= -+ relink_command= -+ # If there is no directory component, then add one. -+ case $file in -+ */* | *\\*) . $file ;; -+ *) . ./$file ;; -+ esac -+ -+ # Add the libdir to current_libdirs if it is the destination. -+ if test "X$destdir" = "X$libdir"; then -+ case "$current_libdirs " in -+ *" $libdir "*) ;; -+ *) current_libdirs="$current_libdirs $libdir" ;; -+ esac -+ else -+ # Note the libdir as a future libdir. -+ case "$future_libdirs " in -+ *" $libdir "*) ;; -+ *) future_libdirs="$future_libdirs $libdir" ;; -+ esac -+ fi -+ -+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ -+ test "X$dir" = "X$file/" && dir= -+ dir="$dir$objdir" -+ -+ if test -n "$relink_command"; then -+ # Determine the prefix the user has applied to our future dir. -+ inst_prefix_dir=`$echo "$destdir" | sed "s%$libdir\$%%"` -+ -+ # Don't allow the user to place us outside of our expected -+ # location b/c this prevents finding dependent libraries that -+ # are installed to the same prefix. -+ if test "$inst_prefix_dir" = "$destdir"; then -+ $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 -+ exit 1 -+ fi -+ -+ if test -n "$inst_prefix_dir"; then -+ # Stick the inst_prefix_dir data into the link command. -+ relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` -+ else -+ relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%%"` -+ fi -+ -+ $echo "$modename: warning: relinking \`$file'" 1>&2 -+ $show "$relink_command" -+ if $run eval "$relink_command"; then : -+ else -+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 -+ exit 1 -+ fi -+ fi -+ -+ # See the names of the shared library. -+ set dummy $library_names -+ if test -n "$2"; then -+ realname="$2" -+ shift -+ shift -+ -+ srcname="$realname" -+ test -n "$relink_command" && srcname="$realname"T -+ -+ # Install the shared library and build the symlinks. -+ $show "$install_prog $dir/$srcname $destdir/$realname" -+ $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? -+ if test -n "$stripme" && test -n "$striplib"; then -+ $show "$striplib $destdir/$realname" -+ $run eval "$striplib $destdir/$realname" || exit $? -+ fi -+ -+ if test $# -gt 0; then -+ # Delete the old symlinks, and create new ones. -+ for linkname -+ do -+ if test "$linkname" != "$realname"; then -+ $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" -+ $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" -+ fi -+ done -+ fi -+ -+ # Do each command in the postinstall commands. -+ lib="$destdir/$realname" -+ eval cmds=\"$postinstall_cmds\" -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ fi -+ -+ # Install the pseudo-library for information purposes. -+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -+ instname="$dir/$name"i -+ $show "$install_prog $instname $destdir/$name" -+ $run eval "$install_prog $instname $destdir/$name" || exit $? -+ -+ # Maybe install the static library, too. -+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" -+ ;; -+ -+ *.lo) -+ # Install (i.e. copy) a libtool object. -+ -+ # Figure out destination file name, if it wasn't already specified. -+ if test -n "$destname"; then -+ destfile="$destdir/$destname" -+ else -+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -+ destfile="$destdir/$destfile" -+ fi -+ -+ # Deduce the name of the destination old-style object file. -+ case $destfile in -+ *.lo) -+ staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` -+ ;; -+ *.$objext) -+ staticdest="$destfile" -+ destfile= -+ ;; -+ *) -+ $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ # Install the libtool object if requested. -+ if test -n "$destfile"; then -+ $show "$install_prog $file $destfile" -+ $run eval "$install_prog $file $destfile" || exit $? -+ fi -+ -+ # Install the old object if enabled. -+ if test "$build_old_libs" = yes; then -+ # Deduce the name of the old-style object file. -+ staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` -+ -+ $show "$install_prog $staticobj $staticdest" -+ $run eval "$install_prog \$staticobj \$staticdest" || exit $? -+ fi -+ exit 0 -+ ;; -+ -+ *) -+ # Figure out destination file name, if it wasn't already specified. -+ if test -n "$destname"; then -+ destfile="$destdir/$destname" -+ else -+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -+ destfile="$destdir/$destfile" -+ fi -+ -+ # Do a test to see if this is really a libtool program. -+ case $host in -+ *cygwin*|*mingw*) -+ wrapper=`echo $file | ${SED} -e 's,.exe$,,'` -+ ;; -+ *) -+ wrapper=$file -+ ;; -+ esac -+ if (${SED} -e '4q' $wrapper | egrep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then -+ notinst_deplibs= -+ relink_command= -+ -+ # If there is no directory component, then add one. -+ case $file in -+ */* | *\\*) . $wrapper ;; -+ *) . ./$wrapper ;; -+ esac -+ -+ # Check the variables that should have been set. -+ if test -z "$notinst_deplibs"; then -+ $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 -+ exit 1 -+ fi -+ -+ finalize=yes -+ for lib in $notinst_deplibs; do -+ # Check to see that each library is installed. -+ libdir= -+ if test -f "$lib"; then -+ # If there is no directory component, then add one. -+ case $lib in -+ */* | *\\*) . $lib ;; -+ *) . ./$lib ;; -+ esac -+ fi -+ libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test -+ if test -n "$libdir" && test ! -f "$libfile"; then -+ $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 -+ finalize=no -+ fi -+ done -+ -+ relink_command= -+ # If there is no directory component, then add one. -+ case $file in -+ */* | *\\*) . $wrapper ;; -+ *) . ./$wrapper ;; -+ esac -+ -+ outputname= -+ if test "$fast_install" = no && test -n "$relink_command"; then -+ if test "$finalize" = yes && test -z "$run"; then -+ tmpdir="/tmp" -+ test -n "$TMPDIR" && tmpdir="$TMPDIR" -+ tmpdir="$tmpdir/libtool-$$" -+ if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : -+ else -+ $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 -+ continue -+ fi -+ file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -+ outputname="$tmpdir/$file" -+ # Replace the output file specification. -+ relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` -+ -+ $show "$relink_command" -+ if $run eval "$relink_command"; then : -+ else -+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 -+ ${rm}r "$tmpdir" -+ continue -+ fi -+ file="$outputname" -+ else -+ $echo "$modename: warning: cannot relink \`$file'" 1>&2 -+ fi -+ else -+ # Install the binary that we compiled earlier. -+ file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` -+ fi -+ fi -+ -+ # remove .exe since cygwin /usr/bin/install will append another -+ # one anyways -+ case $install_prog,$host in -+ /usr/bin/install*,*cygwin*) -+ case $file:$destfile in -+ *.exe:*.exe) -+ # this is ok -+ ;; -+ *.exe:*) -+ destfile=$destfile.exe -+ ;; -+ *:*.exe) -+ destfile=`echo $destfile | ${SED} -e 's,.exe$,,'` -+ ;; -+ esac -+ ;; -+ esac -+ $show "$install_prog$stripme $file $destfile" -+ $run eval "$install_prog\$stripme \$file \$destfile" || exit $? -+ test -n "$outputname" && ${rm}r "$tmpdir" -+ ;; -+ esac -+ done -+ -+ for file in $staticlibs; do -+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -+ -+ # Set up the ranlib parameters. -+ oldlib="$destdir/$name" -+ -+ $show "$install_prog $file $oldlib" -+ $run eval "$install_prog \$file \$oldlib" || exit $? -+ -+ if test -n "$stripme" && test -n "$striplib"; then -+ $show "$old_striplib $oldlib" -+ $run eval "$old_striplib $oldlib" || exit $? -+ fi -+ -+ # Do each command in the postinstall commands. -+ eval cmds=\"$old_postinstall_cmds\" -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || exit $? -+ done -+ IFS="$save_ifs" -+ done -+ -+ if test -n "$future_libdirs"; then -+ $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 -+ fi -+ -+ if test -n "$current_libdirs"; then -+ # Maybe just do a dry run. -+ test -n "$run" && current_libdirs=" -n$current_libdirs" -+ exec_cmd='$SHELL $0 --finish$current_libdirs' -+ else -+ exit 0 -+ fi -+ ;; -+ -+ # libtool finish mode -+ finish) -+ modename="$modename: finish" -+ libdirs="$nonopt" -+ admincmds= -+ -+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then -+ for dir -+ do -+ libdirs="$libdirs $dir" -+ done -+ -+ for libdir in $libdirs; do -+ if test -n "$finish_cmds"; then -+ # Do each command in the finish commands. -+ eval cmds=\"$finish_cmds\" -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" || admincmds="$admincmds -+ $cmd" -+ done -+ IFS="$save_ifs" -+ fi -+ if test -n "$finish_eval"; then -+ # Do the single finish_eval. -+ eval cmds=\"$finish_eval\" -+ $run eval "$cmds" || admincmds="$admincmds -+ $cmds" -+ fi -+ done -+ fi -+ -+ # Exit here if they wanted silent mode. -+ test "$show" = ":" && exit 0 -+ -+ echo "----------------------------------------------------------------------" -+ echo "Libraries have been installed in:" -+ for libdir in $libdirs; do -+ echo " $libdir" -+ done -+ echo -+ echo "If you ever happen to want to link against installed libraries" -+ echo "in a given directory, LIBDIR, you must either use libtool, and" -+ echo "specify the full pathname of the library, or use the \`-LLIBDIR'" -+ echo "flag during linking and do at least one of the following:" -+ if test -n "$shlibpath_var"; then -+ echo " - add LIBDIR to the \`$shlibpath_var' environment variable" -+ echo " during execution" -+ fi -+ if test -n "$runpath_var"; then -+ echo " - add LIBDIR to the \`$runpath_var' environment variable" -+ echo " during linking" -+ fi -+ if test -n "$hardcode_libdir_flag_spec"; then -+ libdir=LIBDIR -+ eval flag=\"$hardcode_libdir_flag_spec\" -+ -+ echo " - use the \`$flag' linker flag" -+ fi -+ if test -n "$admincmds"; then -+ echo " - have your system administrator run these commands:$admincmds" -+ fi -+ if test -f /etc/ld.so.conf; then -+ echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" -+ fi -+ echo -+ echo "See any operating system documentation about shared libraries for" -+ echo "more information, such as the ld(1) and ld.so(8) manual pages." -+ echo "----------------------------------------------------------------------" -+ exit 0 -+ ;; -+ -+ # libtool execute mode -+ execute) -+ modename="$modename: execute" -+ -+ # The first argument is the command name. -+ cmd="$nonopt" -+ if test -z "$cmd"; then -+ $echo "$modename: you must specify a COMMAND" 1>&2 -+ $echo "$help" -+ exit 1 -+ fi -+ -+ # Handle -dlopen flags immediately. -+ for file in $execute_dlfiles; do -+ if test ! -f "$file"; then -+ $echo "$modename: \`$file' is not a file" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ dir= -+ case $file in -+ *.la) -+ # Check to see that this really is a libtool archive. -+ if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : -+ else -+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ # Read the libtool library. -+ dlname= -+ library_names= -+ -+ # If there is no directory component, then add one. -+ case $file in -+ */* | *\\*) . $file ;; -+ *) . ./$file ;; -+ esac -+ -+ # Skip this library if it cannot be dlopened. -+ if test -z "$dlname"; then -+ # Warn if it was a shared library. -+ test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" -+ continue -+ fi -+ -+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` -+ test "X$dir" = "X$file" && dir=. -+ -+ if test -f "$dir/$objdir/$dlname"; then -+ dir="$dir/$objdir" -+ else -+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 -+ exit 1 -+ fi -+ ;; -+ -+ *.lo) -+ # Just add the directory containing the .lo file. -+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` -+ test "X$dir" = "X$file" && dir=. -+ ;; -+ -+ *) -+ $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 -+ continue -+ ;; -+ esac -+ -+ # Get the absolute pathname. -+ absdir=`cd "$dir" && pwd` -+ test -n "$absdir" && dir="$absdir" -+ -+ # Now add the directory to shlibpath_var. -+ if eval "test -z \"\$$shlibpath_var\""; then -+ eval "$shlibpath_var=\"\$dir\"" -+ else -+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" -+ fi -+ done -+ -+ # This variable tells wrapper scripts just to set shlibpath_var -+ # rather than running their programs. -+ libtool_execute_magic="$magic" -+ -+ # Check if any of the arguments is a wrapper script. -+ args= -+ for file -+ do -+ case $file in -+ -*) ;; -+ *) -+ # Do a test to see if this is really a libtool program. -+ if (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -+ # If there is no directory component, then add one. -+ case $file in -+ */* | *\\*) . $file ;; -+ *) . ./$file ;; -+ esac -+ -+ # Transform arg to wrapped name. -+ file="$progdir/$program" -+ fi -+ ;; -+ esac -+ # Quote arguments (to preserve shell metacharacters). -+ file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` -+ args="$args \"$file\"" -+ done -+ -+ if test -z "$run"; then -+ if test -n "$shlibpath_var"; then -+ # Export the shlibpath_var. -+ eval "export $shlibpath_var" -+ fi -+ -+ # Restore saved enviroment variables -+ if test "${save_LC_ALL+set}" = set; then -+ LC_ALL="$save_LC_ALL"; export LC_ALL -+ fi -+ if test "${save_LANG+set}" = set; then -+ LANG="$save_LANG"; export LANG -+ fi -+ -+ # Now prepare to actually exec the command. -+ exec_cmd="\$cmd$args" -+ else -+ # Display what would be done. -+ if test -n "$shlibpath_var"; then -+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" -+ $echo "export $shlibpath_var" -+ fi -+ $echo "$cmd$args" -+ exit 0 -+ fi -+ ;; -+ -+ # libtool clean and uninstall mode -+ clean | uninstall) -+ modename="$modename: $mode" -+ rm="$nonopt" -+ files= -+ rmforce= -+ exit_status=0 -+ -+ # This variable tells wrapper scripts just to set variables rather -+ # than running their programs. -+ libtool_install_magic="$magic" -+ -+ for arg -+ do -+ case $arg in -+ -f) rm="$rm $arg"; rmforce=yes ;; -+ -*) rm="$rm $arg" ;; -+ *) files="$files $arg" ;; -+ esac -+ done -+ -+ if test -z "$rm"; then -+ $echo "$modename: you must specify an RM program" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ fi -+ -+ rmdirs= -+ -+ for file in $files; do -+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` -+ if test "X$dir" = "X$file"; then -+ dir=. -+ objdir="$objdir" -+ else -+ objdir="$dir/$objdir" -+ fi -+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` -+ test $mode = uninstall && objdir="$dir" -+ -+ # Remember objdir for removal later, being careful to avoid duplicates -+ if test $mode = clean; then -+ case " $rmdirs " in -+ *" $objdir "*) ;; -+ *) rmdirs="$rmdirs $objdir" ;; -+ esac -+ fi -+ -+ # Don't error if the file doesn't exist and rm -f was used. -+ if (test -L "$file") >/dev/null 2>&1 \ -+ || (test -h "$file") >/dev/null 2>&1 \ -+ || test -f "$file"; then -+ : -+ elif test -d "$file"; then -+ exit_status=1 -+ continue -+ elif test "$rmforce" = yes; then -+ continue -+ fi -+ -+ rmfiles="$file" -+ -+ case $name in -+ *.la) -+ # Possibly a libtool archive, so verify it. -+ if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -+ . $dir/$name -+ -+ # Delete the libtool libraries and symlinks. -+ for n in $library_names; do -+ rmfiles="$rmfiles $objdir/$n" -+ done -+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" -+ test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" -+ -+ if test $mode = uninstall; then -+ if test -n "$library_names"; then -+ # Do each command in the postuninstall commands. -+ eval cmds=\"$postuninstall_cmds\" -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" -+ if test $? != 0 && test "$rmforce" != yes; then -+ exit_status=1 -+ fi -+ done -+ IFS="$save_ifs" -+ fi -+ -+ if test -n "$old_library"; then -+ # Do each command in the old_postuninstall commands. -+ eval cmds=\"$old_postuninstall_cmds\" -+ save_ifs="$IFS"; IFS='~' -+ for cmd in $cmds; do -+ IFS="$save_ifs" -+ $show "$cmd" -+ $run eval "$cmd" -+ if test $? != 0 && test "$rmforce" != yes; then -+ exit_status=1 -+ fi -+ done -+ IFS="$save_ifs" -+ fi -+ # FIXME: should reinstall the best remaining shared library. -+ fi -+ fi -+ ;; -+ -+ *.lo) -+ if test "$build_old_libs" = yes; then -+ oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` -+ rmfiles="$rmfiles $dir/$oldobj" -+ fi -+ ;; -+ -+ *) -+ # Do a test to see if this is a libtool program. -+ if test $mode = clean && -+ (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then -+ relink_command= -+ . $dir/$file -+ -+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" -+ if test "$fast_install" = yes && test -n "$relink_command"; then -+ rmfiles="$rmfiles $objdir/lt-$name" -+ fi -+ fi -+ ;; -+ esac -+ $show "$rm $rmfiles" -+ $run $rm $rmfiles || exit_status=1 -+ done -+ -+ # Try to remove the ${objdir}s in the directories where we deleted files -+ for dir in $rmdirs; do -+ if test -d "$dir"; then -+ $show "rmdir $dir" -+ $run rmdir $dir >/dev/null 2>&1 -+ fi -+ done -+ -+ exit $exit_status -+ ;; -+ -+ "") -+ $echo "$modename: you must specify a MODE" 1>&2 -+ $echo "$generic_help" 1>&2 -+ exit 1 -+ ;; -+ esac -+ -+ if test -z "$exec_cmd"; then -+ $echo "$modename: invalid operation mode \`$mode'" 1>&2 -+ $echo "$generic_help" 1>&2 -+ exit 1 -+ fi -+fi # test -z "$show_help" -+ -+if test -n "$exec_cmd"; then -+ eval exec $exec_cmd -+ exit 1 -+fi -+ -+# We need to display help for each of the modes. -+case $mode in -+"") $echo \ -+"Usage: $modename [OPTION]... [MODE-ARG]... -+ -+Provide generalized library-building support services. -+ -+ --config show all configuration variables -+ --debug enable verbose shell tracing -+-n, --dry-run display commands without modifying any files -+ --features display basic configuration information and exit -+ --finish same as \`--mode=finish' -+ --help display this help message and exit -+ --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] -+ --quiet same as \`--silent' -+ --silent don't print informational messages -+ --version print version information -+ -+MODE must be one of the following: -+ -+ clean remove files from the build directory -+ compile compile a source file into a libtool object -+ execute automatically set library path, then run a program -+ finish complete the installation of libtool libraries -+ install install libraries or executables -+ link create a library or an executable -+ uninstall remove libraries from an installed directory -+ -+MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for -+a more detailed description of MODE." -+ exit 0 -+ ;; -+ -+clean) -+ $echo \ -+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... -+ -+Remove files from the build directory. -+ -+RM is the name of the program to use to delete files associated with each FILE -+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -+to RM. -+ -+If FILE is a libtool library, object or program, all the files associated -+with it are deleted. Otherwise, only FILE itself is deleted using RM." -+ ;; -+ -+compile) -+ $echo \ -+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE -+ -+Compile a source file into a libtool library object. -+ -+This mode accepts the following additional options: -+ -+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE -+ -prefer-pic try to building PIC objects only -+ -prefer-non-pic try to building non-PIC objects only -+ -static always build a \`.o' file suitable for static linking -+ -+COMPILE-COMMAND is a command to be used in creating a \`standard' object file -+from the given SOURCEFILE. -+ -+The output file name is determined by removing the directory component from -+SOURCEFILE, then substituting the C source code suffix \`.c' with the -+library object suffix, \`.lo'." -+ ;; -+ -+execute) -+ $echo \ -+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... -+ -+Automatically set library path, then run a program. -+ -+This mode accepts the following additional options: -+ -+ -dlopen FILE add the directory containing FILE to the library path -+ -+This mode sets the library path environment variable according to \`-dlopen' -+flags. -+ -+If any of the ARGS are libtool executable wrappers, then they are translated -+into their corresponding uninstalled binary, and any of their required library -+directories are added to the library path. -+ -+Then, COMMAND is executed, with ARGS as arguments." -+ ;; -+ -+finish) -+ $echo \ -+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... -+ -+Complete the installation of libtool libraries. -+ -+Each LIBDIR is a directory that contains libtool libraries. -+ -+The commands that this mode executes may require superuser privileges. Use -+the \`--dry-run' option if you just want to see what would be executed." -+ ;; -+ -+install) -+ $echo \ -+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... -+ -+Install executables or libraries. -+ -+INSTALL-COMMAND is the installation command. The first component should be -+either the \`install' or \`cp' program. -+ -+The rest of the components are interpreted as arguments to that command (only -+BSD-compatible install options are recognized)." -+ ;; -+ -+link) -+ $echo \ -+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... -+ -+Link object files or libraries together to form another library, or to -+create an executable program. -+ -+LINK-COMMAND is a command using the C compiler that you would use to create -+a program from several object files. -+ -+The following components of LINK-COMMAND are treated specially: -+ -+ -all-static do not do any dynamic linking at all -+ -avoid-version do not add a version suffix if possible -+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -+ -export-symbols SYMFILE -+ try to export only the symbols listed in SYMFILE -+ -export-symbols-regex REGEX -+ try to export only the symbols matching REGEX -+ -LLIBDIR search LIBDIR for required installed libraries -+ -lNAME OUTPUT-FILE requires the installed library libNAME -+ -module build a library that can dlopened -+ -no-fast-install disable the fast-install mode -+ -no-install link a not-installable executable -+ -no-undefined declare that a library does not refer to external symbols -+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -+ -release RELEASE specify package release information -+ -rpath LIBDIR the created library will eventually be installed in LIBDIR -+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -+ -static do not do any dynamic linking of libtool libraries -+ -version-info CURRENT[:REVISION[:AGE]] -+ specify library version info [each variable defaults to 0] -+ -+All other options (arguments beginning with \`-') are ignored. -+ -+Every other argument is treated as a filename. Files ending in \`.la' are -+treated as uninstalled libtool libraries, other files are standard or library -+object files. -+ -+If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -+only library objects (\`.lo' files) may be specified, and \`-rpath' is -+required, except when creating a convenience library. -+ -+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -+using \`ar' and \`ranlib', or on Windows using \`lib'. -+ -+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -+is created, otherwise an executable program is created." -+ ;; -+ -+uninstall) -+ $echo \ -+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... -+ -+Remove libraries from an installation directory. -+ -+RM is the name of the program to use to delete files associated with each FILE -+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -+to RM. -+ -+If FILE is a libtool library, all the files associated with it are deleted. -+Otherwise, only FILE itself is deleted using RM." -+ ;; -+ -+*) -+ $echo "$modename: invalid operation mode \`$mode'" 1>&2 -+ $echo "$help" 1>&2 -+ exit 1 -+ ;; -+esac -+ -+echo -+$echo "Try \`$modename --help' for more information about other modes." -+ -+exit 0 -+ -+# Local Variables: -+# mode:shell-script -+# sh-indentation:2 -+# End: -diff --git a/frysk-imports/libunwind/configure.ac b/frysk-imports/libunwind/configure.ac -index 26e256d..7fa2e4b 100644 ---- a/frysk-imports/libunwind/configure.ac -+++ b/frysk-imports/libunwind/configure.ac -@@ -1,10 +1,10 @@ --define(pkg_major, 0) --define(pkg_minor, 99) --define(pkg_extra, -alpha-frysk) --define(pkg_maintainer, frysk@sourceware.org) -+define(pkg_major, 1) -+define(pkg_minor, 1) -+define(pkg_extra, -frysk) -+define(pkg_maintainer, frysk@nongnu.org) - define(mkvers, $1.$2$3) - dnl Process this file with autoconf to produce a configure script. --AC_INIT(libunwind, mkvers(pkg_major, pkg_minor, pkg_extra), pkg_maintainer) -+AC_INIT([libunwind],[mkvers(pkg_major, pkg_minor, pkg_extra)],[pkg_maintainer]) - AC_CONFIG_SRCDIR(src/mi/backtrace.c) - AC_CONFIG_AUX_DIR(config) - -@@ -31,87 +31,144 @@ if test x$frysk_local = xyes; then - target_alias=${target_cpu}-unknown-linux-gnu - fi - --AC_CANONICAL_SYSTEM -+AC_CANONICAL_TARGET - AM_INIT_AUTOMAKE([1.6 subdir-objects]) --AM_CONFIG_HEADER(include/config.h) -+AC_CONFIG_HEADERS([include/config.h]) - - dnl Checks for programs. - AC_PROG_CC - AC_PROG_CXX - AC_PROG_INSTALL - AC_PROG_MAKE_SET --AM_PROG_LIBTOOL -+LT_INIT - AM_PROG_AS - AM_PROG_CC_C_O - - dnl Checks for libraries. - AC_CHECK_LIB(uca, __uc_get_grs) -+OLD_LIBS=${LIBS} -+AC_SEARCH_LIBS(dlopen, dl) -+LIBS=${OLD_LIBS} -+case "$ac_cv_search_dlopen" in -+ -l*) DLLIB=$ac_cv_search_dlopen;; -+ *) DLLIB="";; -+esac -+ - CHECK_ATOMIC_OPS - - dnl Checks for header files. - AC_HEADER_STDC --AC_CHECK_HEADERS(asm/ptrace_offsets.h endian.h execinfo.h ia64intrin.h \ -- sys/uc_access.h unistd.h signal.h) -+AC_CHECK_HEADERS(asm/ptrace_offsets.h endian.h sys/endian.h execinfo.h \ -+ ia64intrin.h sys/uc_access.h unistd.h signal.h sys/types.h \ -+ sys/procfs.h sys/ptrace.h byteswap.h elf.h sys/elf.h link.h sys/link.h) - - dnl Checks for typedefs, structures, and compiler characteristics. - AC_C_CONST - AC_C_INLINE --AC_TYPE_SIGNAL - AC_TYPE_SIZE_T -+AC_CHECK_SIZEOF(off_t) - - CPPFLAGS="${CPPFLAGS} -D_GNU_SOURCE" --if test x$enable_debug = xyes; then -- CPPFLAGS="${CPPFLAGS} -DDEBUG" --else -- CPPFLAGS="${CPPFLAGS} -DNDEBUG" --fi - - AC_CHECK_MEMBERS([struct dl_phdr_info.dlpi_subs],,,[#include ]) --AC_CHECK_TYPES([sighandler_t], [], [], -+AC_CHECK_TYPES([struct elf_prstatus, struct prstatus], [], [], - [$ac_includes_default --#if HAVE_SIGNAL_H --# include -+#if HAVE_SYS_PROCFS_H -+# include - #endif - ]) - -+AC_CHECK_DECLS([PTRACE_POKEUSER, PTRACE_POKEDATA, -+PTRACE_TRACEME, PTRACE_CONT, PTRACE_SINGLESTEP, -+PTRACE_SYSCALL, PT_IO, PT_GETREGS, -+PT_GETFPREGS, PT_CONTINUE, PT_TRACE_ME, -+PT_STEP, PT_SYSCALL], [], [], -+[$ac_includes_default -+#if HAVE_SYS_TYPES_H -+#include -+#endif -+#include -+]) -+ - dnl Checks for library functions. --AC_FUNC_MEMCMP --AC_TYPE_SIGNAL - AC_CHECK_FUNCS(dl_iterate_phdr dl_phdr_removals_counter dlmodinfo getunwind \ -- ttrace) --is_gcc_m64() { -- if test `echo $CFLAGS | grep "\-m64" -c` -eq 1 ; then echo ppc64; -- else -- if test `echo $CC | grep "\-m64" -c` -eq 1 ; then echo ppc64; else echo ppc32; fi; -- fi; --} -+ ttrace mincore) - --is_gcc_altivec() { -- if test `echo $CFLAGS | grep "\-maltivec" -c` -eq 1 ; then echo has_altivec; -- else -- if test `echo $CC | grep "\-maltivec" -c` -eq 1 ; then echo has_altivec; else echo no_altivec; fi; -- fi; --} -+AC_MSG_CHECKING([if building with AltiVec]) -+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -+#ifndef __ALTIVEC__ -+# error choke -+#endif -+]])], [use_altivec=yes],[use_altivec=no]) -+AM_CONDITIONAL(USE_ALTIVEC, [test x$use_altivec = xyes]) -+AC_MSG_RESULT([$use_altivec]) - --use_altivec=`is_gcc_altivec` --AM_CONDITIONAL(USE_ALTIVEC, test x$use_altivec = xhas_altivec) -- --get_arch() { -- case "$1" in -- arm*) echo arm;; -- i?86) echo x86;; -- hppa*) echo hppa;; -- mips*) echo mips;; -- powerpc64) echo "ppc64";; -- *) echo $1;; -- esac --} -+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -+#ifndef __powerpc64__ -+# error choke -+#endif -+]])], [ppc_bits=64], [ppc_bits=32]) -+ -+AC_DEFUN([SET_ARCH],[ -+ AS_CASE([$1], -+ [aarch64*],[$2=aarch64], -+ [arm*],[$2=arm], -+ [i?86],[$2=x86], -+ [hppa*],[$2=hppa], -+ [mips*],[$2=mips], -+ [powerpc*],[$2=ppc$ppc_bits], -+ [sh*],[$2=sh], -+ [amd64],[$2=x86_64], -+ [tile*],[$2=tilegx], -+ [$2=$1]) -+]) dnl SET_ARCH -+ -+SET_ARCH([$build_cpu],[build_arch]) -+SET_ARCH([$host_cpu],[host_arch]) -+SET_ARCH([$target_cpu],[target_arch]) - --build_arch=`get_arch $build_cpu` --host_arch=`get_arch $host_cpu` --target_arch=`get_arch $target_cpu` -+AC_ARG_ENABLE(coredump, -+ AS_HELP_STRING([--enable-coredump],[building libunwind-coredump library]),, -+ [AS_CASE([$host_arch], [aarch64*|arm*|mips*|sh*|x86*|tile*], [enable_coredump=yes], [enable_coredump=no])] -+) - --AM_CONDITIONAL(REMOTE_ONLY, test x$frysk_local = xyes) -+AC_MSG_CHECKING([if we should build libunwind-coredump]) -+AC_MSG_RESULT([$enable_coredump]) -+ -+AC_ARG_ENABLE(ptrace, -+ AS_HELP_STRING([--enable-ptrace],[building libunwind-ptrace library]),, -+ [AC_CHECK_HEADER([sys/ptrace.h], [enable_ptrace=yes], [enable_ptrace=no])] -+) -+ -+AC_MSG_CHECKING([if we should build libunwind-ptrace]) -+AC_MSG_RESULT([$enable_ptrace]) -+ -+AC_ARG_ENABLE(setjmp, -+ AS_HELP_STRING([--enable-setjmp],[building libunwind-setjmp library]),, -+ [AS_IF([test x$target_arch == x$host_arch], [enable_setjmp=yes], [enable_setjmp=no])] -+) -+ -+AC_ARG_ENABLE(documentation, -+ AS_HELP_STRING([--disable-documentation],[Disable generating the man pages]),, -+ [enable_documentation=yes]) -+ -+AC_MSG_CHECKING([if we should build libunwind-setjmp]) -+AC_MSG_RESULT([$enable_setjmp]) -+ -+AC_MSG_CHECKING([for build architecture]) -+AC_MSG_RESULT([$build_arch]) -+AC_MSG_CHECKING([for host architecture]) -+AC_MSG_RESULT([$host_arch]) -+AC_MSG_CHECKING([for target architecture]) -+AC_MSG_RESULT([$target_arch]) -+AC_MSG_CHECKING([for target operating system]) -+AC_MSG_RESULT([$target_os]) -+ -+AM_CONDITIONAL(BUILD_COREDUMP, test x$enable_coredump = xyes) -+AM_CONDITIONAL(BUILD_PTRACE, test x$enable_ptrace = xyes) -+AM_CONDITIONAL(BUILD_SETJMP, test x$enable_setjmp = xyes) -+AM_CONDITIONAL(REMOTE_ONLY, test x$target_arch != x$host_arch) -+AM_CONDITIONAL(ARCH_AARCH64, test x$target_arch = xaarch64) - AM_CONDITIONAL(ARCH_ARM, test x$target_arch = xarm) - AM_CONDITIONAL(ARCH_IA64, test x$target_arch = xia64) - AM_CONDITIONAL(ARCH_HPPA, test x$target_arch = xhppa) -@@ -120,8 +177,32 @@ AM_CONDITIONAL(ARCH_X86, test x$target_arch = xx86) - AM_CONDITIONAL(ARCH_X86_64, test x$target_arch = xx86_64) - AM_CONDITIONAL(ARCH_PPC32, test x$target_arch = xppc32) - AM_CONDITIONAL(ARCH_PPC64, test x$target_arch = xppc64) -+AM_CONDITIONAL(ARCH_SH, test x$target_arch = xsh) -+AM_CONDITIONAL(ARCH_TILEGX, test x$target_arch = xtilegx) - AM_CONDITIONAL(OS_LINUX, expr x$target_os : xlinux >/dev/null) - AM_CONDITIONAL(OS_HPUX, expr x$target_os : xhpux >/dev/null) -+AM_CONDITIONAL(OS_FREEBSD, expr x$target_os : xfreebsd >/dev/null) -+AM_CONDITIONAL(OS_QNX, expr x$target_os : xnto-qnx >/dev/null) -+ -+AC_MSG_CHECKING([for ELF helper width]) -+case "${target_arch}" in -+(arm|hppa|ppc32|x86|sh) use_elf32=yes; AC_MSG_RESULT([32]);; -+(aarch64|ia64|ppc64|x86_64|tilegx) use_elf64=yes; AC_MSG_RESULT([64]);; -+(mips) use_elfxx=yes; AC_MSG_RESULT([xx]);; -+*) AC_MSG_ERROR([Unknown ELF target: ${target_arch}]) -+esac -+AM_CONDITIONAL(USE_ELF32, [test x$use_elf32 = xyes]) -+AM_CONDITIONAL(USE_ELF64, [test x$use_elf64 = xyes]) -+AM_CONDITIONAL(USE_ELFXX, [test x$use_elfxx = xyes]) -+ -+AC_MSG_CHECKING([whether to include DWARF support]) -+if test x$target_arch != xia64; then -+ use_dwarf=yes -+else -+ use_dwarf=no -+fi -+AM_CONDITIONAL(USE_DWARF, [test x$use_dwarf = xyes]) -+AC_MSG_RESULT([$use_dwarf]) - - if test x$target_arch = xppc64; then - libdir='${exec_prefix}/lib64' -@@ -129,35 +210,174 @@ if test x$target_arch = xppc64; then - AC_SUBST([libdir]) - fi - --if test x$frysk_local = xyes; then -+AC_MSG_CHECKING([whether to restrict build to remote support]) -+if test x$target_arch != x$host_arch; then - CPPFLAGS="${CPPFLAGS} -DUNW_REMOTE_ONLY" -+ remote_only=yes -+else -+ remote_only=no - fi --AC_CONFIG_LINKS(include/libunwind.h:include/libunwind-$target_arch.h -- include/tdep:include/tdep-$target_arch) -+AC_MSG_RESULT([$remote_only]) - -+AC_MSG_CHECKING([whether to enable debug support]) - AC_ARG_ENABLE(debug, --[ --enable-debug turn on debug support (slows down execution)], --[enable_debug=yes], []) -+AS_HELP_STRING([--enable-debug],[turn on debug support (slows down execution)]),[], -+ [enable_debug=yes]) -+if test x$enable_debug = xyes; then -+ CPPFLAGS="${CPPFLAGS} -DDEBUG" -+else -+ CPPFLAGS="${CPPFLAGS} -DNDEBUG" -+fi -+AC_MSG_RESULT([$enable_debug]) - --LIBUNWIND___THREAD -+AC_MSG_CHECKING([whether to enable C++ exception support]) -+AC_ARG_ENABLE(cxx_exceptions, -+AS_HELP_STRING([--enable-cxx-exceptions],[use libunwind to handle C++ exceptions]),, -+[ -+# C++ exception handling doesn't work too well on x86 -+case $target_arch in -+ x86*) enable_cxx_exceptions=no;; -+ aarch64*) enable_cxx_exceptions=no;; -+ arm*) enable_cxx_exceptions=no;; -+ mips*) enable_cxx_exceptions=no;; -+ tile*) enable_cxx_exceptions=no;; -+ *) enable_cxx_exceptions=yes;; -+esac -+]) - --save_LDFLAGS="$LDFLAGS" --LDFLAGS="$LDFLAGS -static-libcxa" --AC_TRY_LINK([], [], [have_static_libcxa=yes]) --LDFLAGS="$save_LDFLAGS" --if test "x$have_static_libcxa" = xyes; then -- LDFLAGS_STATIC_LIBCXA="-XCClinker -static-libcxa" -+AM_CONDITIONAL([SUPPORT_CXX_EXCEPTIONS], [test x$enable_cxx_exceptions = xyes]) -+AC_MSG_RESULT([$enable_cxx_exceptions]) -+ -+AC_MSG_CHECKING([whether to load .debug_frame sections]) -+AC_ARG_ENABLE(debug_frame, -+AS_HELP_STRING([--enable-debug-frame],[Load the ".debug_frame" section if available]),, [ -+case "${target_arch}" in -+ (arm) enable_debug_frame=yes;; -+ (*) enable_debug_frame=no;; -+esac]) -+if test x$enable_debug_frame = xyes; then -+ AC_DEFINE([CONFIG_DEBUG_FRAME], [], [Enable Debug Frame]) - fi -+AC_MSG_RESULT([$enable_debug_frame]) - --AC_TRY_COMPILE([], [#ifndef __INTEL_COMPILER -+AC_MSG_CHECKING([whether to block signals during mutex ops]) -+AC_ARG_ENABLE(block_signals, -+AS_HELP_STRING([--enable-block-signals],[Block signals before performing mutex operations]),, -+[enable_block_signals=yes]) -+if test x$enable_block_signals = xyes; then -+ AC_DEFINE([CONFIG_BLOCK_SIGNALS], [], [Block signals before mutex operations]) -+fi -+AC_MSG_RESULT([$enable_block_signals]) -+ -+AC_MSG_CHECKING([whether to validate memory addresses before use]) -+AC_ARG_ENABLE(conservative_checks, -+AS_HELP_STRING([--enable-conservative-checks],[Validate all memory addresses before use]),, -+[enable_conservative_checks=yes]) -+if test x$enable_conservative_checks = xyes; then -+ AC_DEFINE(CONSERVATIVE_CHECKS, 1, -+ [Define to 1 if you want every memory access validated]) -+fi -+AC_MSG_RESULT([$enable_conservative_checks]) -+ -+AC_MSG_CHECKING([whether to enable msabi support]) -+AC_ARG_ENABLE(msabi_support, -+AS_HELP_STRING([--enable-msabi-support],[Enables support for Microsoft ABI extensions])) -+if test x$enable_msabi_support = xyes; then -+ AC_DEFINE([CONFIG_MSABI_SUPPORT], [], [Support for Microsoft ABI extensions]) -+fi -+AC_MSG_RESULT([$enable_msabi_support]) -+ -+LIBLZMA= -+AC_MSG_CHECKING([whether to support LZMA-compressed symbol tables]) -+AC_ARG_ENABLE(minidebuginfo, -+AS_HELP_STRING([--enable-minidebuginfo], [Enables support for LZMA-compressed symbol tables]),, [enable_minidebuginfo=auto]) -+AC_MSG_RESULT([$enable_minidebuginfo]) -+if test x$enable_minidebuginfo != xno; then -+ AC_CHECK_LIB([lzma], [lzma_mf_is_supported], -+ [LIBLZMA=-llzma -+ AC_DEFINE([HAVE_LZMA], [1], [Define if you have liblzma]) -+ enable_minidebuginfo=yes], -+ [if test x$enable_minidebuginfo = xyes; then -+ AC_MSG_FAILURE([liblzma not found]) -+ fi]) -+fi -+AC_SUBST([LIBLZMA]) -+AM_CONDITIONAL(HAVE_LZMA, test x$enable_minidebuginfo = xyes) -+ -+LIBUNWIND___THREAD -+ -+AC_MSG_CHECKING([for Intel compiler]) -+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[#ifndef __INTEL_COMPILER - #error choke me --#endif], [intel_compiler=yes]) -+#endif]])],[intel_compiler=yes],[intel_compiler=no]) - - if test x$GCC = xyes -a x$intel_compiler != xyes; then - CFLAGS="${CFLAGS} -fexceptions -Wall -Wsign-compare" -- LIBCRTS="-lgcc" -+fi -+AC_MSG_RESULT([$intel_compiler]) -+ -+AC_MSG_CHECKING([for QCC compiler]) -+AS_CASE([$CC], [qcc*|QCC*], [qcc_compiler=yes], [qcc_compiler=no]) -+AC_MSG_RESULT([$qcc_compiler]) -+ -+if test x$intel_compiler = xyes; then -+ AC_MSG_CHECKING([if linker supports -static-libcxa]) -+ save_LDFLAGS="$LDFLAGS" -+ LDFLAGS="$LDFLAGS -static-libcxa" -+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[have_static_libcxa=yes],[have_static_libcxa=no]) -+ LDFLAGS="$save_LDFLAGS" -+ if test "x$have_static_libcxa" = xyes; then -+ LDFLAGS_STATIC_LIBCXA="-XCClinker -static-libcxa" -+ fi -+ AC_MSG_RESULT([$have_static_libcxa]) - fi - -+if test x$qcc_compiler = xyes; then -+ LDFLAGS_NOSTARTFILES="-XCClinker -Wc,-nostartfiles" -+else -+ LDFLAGS_NOSTARTFILES="-XCClinker -nostartfiles" -+fi -+ -+if test x$GCC = xyes -a x$intel_compiler != xyes -a x$qcc_compiler != xyes; then -+ LIBCRTS="-lgcc_s" -+fi -+ -+AC_MSG_CHECKING([for __builtin___clear_cache]) -+AC_LINK_IFELSE( -+ [AC_LANG_PROGRAM([[]], [[__builtin___clear_cache(0, 0)]])], -+ [have__builtin___clear_cache=yes], -+ [have__builtin___clear_cache=no]) -+if test x$have__builtin___clear_cache = xyes; then -+ AC_DEFINE([HAVE__BUILTIN___CLEAR_CACHE], [1], -+ [Defined if __builtin___clear_cache() is available]) -+fi -+AC_MSG_RESULT([$have__builtin___clear_cache]) -+ -+AC_MSG_CHECKING([for __builtin_unreachable]) -+AC_LINK_IFELSE( -+ [AC_LANG_PROGRAM([[]], [[__builtin_unreachable()]])], -+ [have__builtin_unreachable=yes], -+ [have__builtin_unreachable=no]) -+if test x$have__builtin_unreachable = xyes; then -+ AC_DEFINE([HAVE__BUILTIN_UNREACHABLE], [1], -+ [Defined if __builtin_unreachable() is available]) -+fi -+AC_MSG_RESULT([$have__builtin_unreachable]) -+ -+AC_MSG_CHECKING([for __sync atomics]) -+AC_LINK_IFELSE( -+ [AC_LANG_PROGRAM([[]], [[ -+ __sync_bool_compare_and_swap((int *)0, 0, 1); -+ __sync_fetch_and_add((int *)0, 1); -+ ]])], -+ [have_sync_atomics=yes], -+ [have_sync_atomics=no]) -+if test x$have_sync_atomics = xyes; then -+ AC_DEFINE([HAVE_SYNC_ATOMICS], [1], -+ [Defined if __sync atomics are available]) -+fi -+AC_MSG_RESULT([$have_sync_atomics]) -+ - CCASFLAGS="${CCASFLAGS} ${CPPFLAGS}" - - arch="$target_arch" -@@ -169,17 +389,41 @@ PKG_MINOR=pkg_minor - PKG_EXTRA=pkg_extra - PKG_MAINTAINER=pkg_maintainer - -+old_LIBS="$LIBS" -+LIBS="" -+AC_SEARCH_LIBS(backtrace, execinfo) -+LIBS="$old_LIBS" -+ - AC_SUBST(build_arch) - AC_SUBST(target_os) - AC_SUBST(arch) - AC_SUBST(ARCH) - AC_SUBST(LDFLAGS_STATIC_LIBCXA) -+AC_SUBST(LDFLAGS_NOSTARTFILES) - AC_SUBST(LIBCRTS) - AC_SUBST(PKG_MAJOR) - AC_SUBST(PKG_MINOR) - AC_SUBST(PKG_EXTRA) - AC_SUBST(PKG_MAINTAINER) -+AC_SUBST(enable_cxx_exceptions) -+AC_SUBST(enable_debug_frame) -+AC_SUBST(DLLIB) -+ -+AC_PATH_PROG([LATEX2MAN],[latex2man]) -+if test "x$LATEX2MAN" = "x"; then -+ AC_MSG_WARN([latex2man not found. Install latex2man. Disabling docs.]) -+ enable_documentation="no"; -+fi -+ -+AM_CONDITIONAL([CONFIG_DOCS], [test x$enable_documentation = xyes]) -+if test "x$enable_documentation" = "xyes"; then -+ AC_CONFIG_FILES(doc/Makefile doc/common.tex) -+fi - - AC_CONFIG_FILES(Makefile src/Makefile tests/Makefile tests/check-namespace.sh -- doc/Makefile doc/common.tex include/libunwind-common.h) -+ include/libunwind-common.h -+ include/libunwind.h include/tdep/libunwind_i.h) -+AC_CONFIG_FILES(src/unwind/libunwind.pc src/coredump/libunwind-coredump.pc -+ src/ptrace/libunwind-ptrace.pc src/setjmp/libunwind-setjmp.pc -+ src/libunwind-generic.pc) - AC_OUTPUT -diff --git a/frysk-imports/libunwind/doc/.gitignore b/frysk-imports/libunwind/doc/.gitignore -deleted file mode 100644 -index 70845e0..0000000 ---- a/frysk-imports/libunwind/doc/.gitignore -+++ /dev/null -@@ -1 +0,0 @@ --Makefile.in -diff --git a/frysk-imports/libunwind/doc/Makefile.am b/frysk-imports/libunwind/doc/Makefile.am -index b414568..2534066 100644 ---- a/frysk-imports/libunwind/doc/Makefile.am -+++ b/frysk-imports/libunwind/doc/Makefile.am -@@ -1,6 +1,7 @@ - # man pages that go into section 3: - man3_MANS = libunwind.man libunwind-dynamic.man libunwind-ia64.man \ - libunwind-ptrace.man libunwind-setjmp.man \ -+ unw_backtrace.man \ - unw_flush_cache.man \ - unw_get_accessors.man \ - unw_get_proc_info.man \ -@@ -26,6 +27,7 @@ man3_MANS = libunwind.man libunwind-dynamic.man libunwind-ia64.man \ - EXTRA_DIST = NOTES libunwind.trans \ - libunwind.tex libunwind-dynamic.tex libunwind-ia64.tex \ - libunwind-ptrace.tex libunwind-setjmp.tex \ -+ unw_backtrace.tex \ - unw_flush_cache.tex \ - unw_get_accessors.tex \ - unw_get_proc_info.tex \ -@@ -67,3 +69,5 @@ pdf: - page=`basename $$n .man`; \ - $(L2P) $(srcdir)/$$page.tex "$$page(3).pdf"; \ - done -+ -+MAINTAINERCLEANFILES = Makefile.in -diff --git a/frysk-imports/libunwind/doc/libunwind-setjmp.man b/frysk-imports/libunwind/doc/libunwind-setjmp.man -index e8b9de8..1faa38e 100644 ---- a/frysk-imports/libunwind/doc/libunwind-setjmp.man -+++ b/frysk-imports/libunwind/doc/libunwind-setjmp.man -@@ -36,7 +36,7 @@ _longjmp(jmp_buf env, - int val); - .br - int --setjmp(sigjmp_buf env, -+sigsetjmp(sigjmp_buf env, - int savemask); - .br - void -diff --git a/frysk-imports/libunwind/doc/libunwind-setjmp.tex b/frysk-imports/libunwind/doc/libunwind-setjmp.tex -index b31ee9e..17ce073 100644 ---- a/frysk-imports/libunwind/doc/libunwind-setjmp.tex -+++ b/frysk-imports/libunwind/doc/libunwind-setjmp.tex -@@ -17,7 +17,7 @@ - \Type{void} \Func{longjmp}(\Type{jmp\_buf}~\Var{env}, \Type{int}~\Var{val});\\ - \Type{int} \Func{\_setjmp}(\Type{jmp\_buf}~\Var{env});\\ - \Type{void} \Func{\_longjmp}(\Type{jmp\_buf}~\Var{env}, \Type{int}~\Var{val});\\ --\Type{int} \Func{setjmp}(\Type{sigjmp\_buf}~\Var{env}, \Type{int}~\Var{savemask});\\ -+\Type{int} \Func{sigsetjmp}(\Type{sigjmp\_buf}~\Var{env}, \Type{int}~\Var{savemask});\\ - \Type{void} \Func{siglongjmp}(\Type{sigjmp\_buf}~\Var{env}, \Type{int}~\Var{val});\\ - - \section{Description} -diff --git a/frysk-imports/libunwind/doc/unw_backtrace.man b/frysk-imports/libunwind/doc/unw_backtrace.man -new file mode 100644 -index 0000000..5699bbf ---- /dev/null -+++ b/frysk-imports/libunwind/doc/unw_backtrace.man -@@ -0,0 +1,86 @@ -+'\" t -+.\" Manual page created with latex2man on Fri Aug 31 13:39:04 EEST 2012 -+.\" NOTE: This file is generated, DO NOT EDIT. -+.de Vb -+.ft CW -+.nf -+.. -+.de Ve -+.ft R -+ -+.fi -+.. -+.TH "UNW\\_BACKTRACE" "3" "31 August 2012" "Programming Library " "Programming Library " -+.SH NAME -+unw_backtrace -+\-\- return backtrace for the calling program -+.PP -+.SH SYNOPSIS -+ -+.PP -+#include -+.br -+.PP -+int -+unw_backtrace(void **buffer, -+int size); -+.br -+.PP -+#include -+.br -+.PP -+int -+backtrace(void **buffer, -+int size); -+.br -+.PP -+.SH DESCRIPTION -+ -+.PP -+unw_backtrace() -+is a convenient routine for obtaining the backtrace for -+the calling program. The routine fills up to size -+addresses in the array -+pointed by buffer\&. -+The routine is only available for local unwinding. -+.PP -+Note that many (but not all) systems provide practically identical function -+called backtrace(). -+The prototype for this function is usually obtained -+by including the -+header file \-\- a prototype for -+backtrace() -+is not provided by libunwind\&. -+libunwind -+weakly -+aliases backtrace() -+to unw_backtrace(), -+so when a program -+calling backtrace() -+is linked against libunwind, -+it may end up -+calling unw_backtrace(). -+.PP -+.SH RETURN VALUE -+ -+.PP -+The routine returns the number of addresses stored in the array pointed by -+buffer\&. -+The return value may be zero to indicate that no addresses were -+stored. -+.PP -+.SH SEE ALSO -+ -+.PP -+libunwind(3), -+unw_step(3) -+.PP -+.SH AUTHOR -+ -+.PP -+David Mosberger\-Tang -+.br -+Email: \fBdmosberger@gmail.com\fP -+.br -+WWW: \fBhttp://www.nongnu.org/libunwind/\fP\&. -+.\" NOTE: This file is generated, DO NOT EDIT. -diff --git a/frysk-imports/libunwind/doc/unw_backtrace.tex b/frysk-imports/libunwind/doc/unw_backtrace.tex -new file mode 100644 -index 0000000..c383eeb ---- /dev/null -+++ b/frysk-imports/libunwind/doc/unw_backtrace.tex -@@ -0,0 +1,54 @@ -+\documentclass{article} -+\usepackage[fancyhdr,pdf]{latex2man} -+ -+\input{common.tex} -+ -+\begin{document} -+ -+\begin{Name}{3}{unw\_backtrace}{David Mosberger-Tang}{Programming Library}{unw\_backtrace}unw\_backtrace -- return backtrace for the calling program -+\end{Name} -+ -+\section{Synopsis} -+ -+\File{\#include $<$libunwind.h$>$}\\ -+ -+\Type{int} \Func{unw\_backtrace}(\Type{void~**}\Var{buffer}, \Type{int}~\Var{size});\\ -+ -+\File{\#include $<$execinfo.h$>$}\\ -+ -+\Type{int} \Func{backtrace}(\Type{void~**}\Var{buffer}, \Type{int}~\Var{size});\\ -+ -+\section{Description} -+ -+\Func{unw\_backtrace}() is a convenient routine for obtaining the backtrace for -+the calling program. The routine fills up to \Var{size} addresses in the array -+pointed by \Var{buffer}. The routine is only available for local unwinding. -+ -+Note that many (but not all) systems provide practically identical function -+called \Func{backtrace}(). The prototype for this function is usually obtained -+by including the \File{$<$execinfo.h$>$} header file -- a prototype for -+\Func{backtrace}() is not provided by \Prog{libunwind}. \Prog{libunwind} weakly -+aliases \Func{backtrace}() to \Func{unw\_backtrace}(), so when a program -+calling \Func{backtrace}() is linked against \Prog{libunwind}, it may end up -+calling \Func{unw\_backtrace}(). -+ -+\section{Return Value} -+ -+The routine returns the number of addresses stored in the array pointed by -+\Var{buffer}. The return value may be zero to indicate that no addresses were -+stored. -+ -+\section{See Also} -+ -+\SeeAlso{libunwind(3)}, -+\SeeAlso{unw\_step(3)} -+ -+\section{Author} -+ -+\noindent -+David Mosberger-Tang\\ -+Email: \Email{dmosberger@gmail.com}\\ -+WWW: \URL{http://www.nongnu.org/libunwind/}. -+\LatexManEnd -+ -+\end{document} -diff --git a/frysk-imports/libunwind/doc/unw_get_proc_name.man b/frysk-imports/libunwind/doc/unw_get_proc_name.man -index bbf350f..8b2bd06 100644 ---- a/frysk-imports/libunwind/doc/unw_get_proc_name.man -+++ b/frysk-imports/libunwind/doc/unw_get_proc_name.man -@@ -95,7 +95,7 @@ UNW_ENOINFO - was unable to determine - the name of the procedure. - .TP --UNW_ENOMME -+UNW_ENOMEM - The procedure name is too long to fit - in the buffer provided. A truncated version of the name has been - returned. -diff --git a/frysk-imports/libunwind/doc/unw_get_proc_name.tex b/frysk-imports/libunwind/doc/unw_get_proc_name.tex -index 4a9b585..c413990 100644 ---- a/frysk-imports/libunwind/doc/unw_get_proc_name.tex -+++ b/frysk-imports/libunwind/doc/unw_get_proc_name.tex -@@ -58,7 +58,7 @@ signal handler. - \item[\Const{UNW\_EUNSPEC}] An unspecified error occurred. - \item[\Const{UNW\_ENOINFO}] \Prog{Libunwind} was unable to determine - the name of the procedure. --\item[\Const{UNW\_ENOMME}] The procedure name is too long to fit -+\item[\Const{UNW\_ENOMEM}] The procedure name is too long to fit - in the buffer provided. A truncated version of the name has been - returned. - \end{Description} -diff --git a/frysk-imports/libunwind/include/.gitignore b/frysk-imports/libunwind/include/.gitignore -deleted file mode 100644 -index 2a9005d..0000000 ---- a/frysk-imports/libunwind/include/.gitignore -+++ /dev/null -@@ -1 +0,0 @@ --config.h.in -diff --git a/frysk-imports/libunwind/include/compiler.h b/frysk-imports/libunwind/include/compiler.h -new file mode 100644 -index 0000000..abd424d ---- /dev/null -+++ b/frysk-imports/libunwind/include/compiler.h -@@ -0,0 +1,74 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2001-2005 Hewlett-Packard Co -+ Copyright (C) 2007 David Mosberger-Tang -+ Contributed by David Mosberger-Tang -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+/* Compiler specific useful bits that are used in libunwind, and also in the -+ * tests. */ -+ -+#ifndef COMPILER_H -+#define COMPILER_H -+ -+#ifdef __GNUC__ -+# define ALIGNED(x) __attribute__((aligned(x))) -+# define CONST_ATTR __attribute__((__const__)) -+# define UNUSED __attribute__((unused)) -+# define NOINLINE __attribute__((noinline)) -+# define NORETURN __attribute__((noreturn)) -+# define ALIAS(name) __attribute__((alias (#name))) -+# if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) -+# define ALWAYS_INLINE inline __attribute__((always_inline)) -+# define HIDDEN __attribute__((visibility ("hidden"))) -+# define PROTECTED __attribute__((visibility ("protected"))) -+# else -+# define ALWAYS_INLINE -+# define HIDDEN -+# define PROTECTED -+# endif -+# define WEAK __attribute__((weak)) -+# if (__GNUC__ >= 3) -+# define likely(x) __builtin_expect ((x), 1) -+# define unlikely(x) __builtin_expect ((x), 0) -+# else -+# define likely(x) (x) -+# define unlikely(x) (x) -+# endif -+#else -+# define ALIGNED(x) -+# define ALWAYS_INLINE -+# define CONST_ATTR -+# define UNUSED -+# define NOINLINE -+# define NORETURN -+# define ALIAS(name) -+# define HIDDEN -+# define PROTECTED -+# define WEAK -+# define likely(x) (x) -+# define unlikely(x) (x) -+#endif -+ -+#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) -+ -+#endif /* COMPILER_H */ -diff --git a/frysk-imports/libunwind/include/dwarf-eh.h b/frysk-imports/libunwind/include/dwarf-eh.h -index 405e394..e81aaef 100644 ---- a/frysk-imports/libunwind/include/dwarf-eh.h -+++ b/frysk-imports/libunwind/include/dwarf-eh.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -58,9 +58,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - string: - - 'z': The operand for this character is a uleb128 value that gives the -- length of the CIE augmentation body, not counting the length -- of the uleb128 operand itself. If present, this code must -- appear as the first character in the augmentation body. -+ length of the CIE augmentation body, not counting the length -+ of the uleb128 operand itself. If present, this code must -+ appear as the first character in the augmentation body. - - 'L': Indicates that the FDE's augmentation body contains an LSDA - pointer. The operand for this character is a single byte -@@ -73,13 +73,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - operand for this character is a single byte that specifies - the pointer-encoding (PE) that is used for the - code-pointers. Note: the "address_range" member is always -- encoded as an absolute value. Apart from that, the specified -- FDE pointer-encoding applies. -+ encoded as an absolute value. Apart from that, the specified -+ FDE pointer-encoding applies. - - 'P': Indicates the presence of a personality routine (handler). - The first operand for this character specifies the -- pointer-encoding (PE) that is used for the second operand, -- which specifies the address of the personality routine. -+ pointer-encoding (PE) that is used for the second operand, -+ which specifies the address of the personality routine. - - If the augmentation string contains any other characters, the - remainder of the augmentation string should be ignored. -@@ -104,7 +104,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - */ - --#define DW_EH_VERSION 1 /* The version we're implementing */ -+#define DW_EH_VERSION 1 /* The version we're implementing */ - - struct dwarf_eh_frame_hdr - { -@@ -115,14 +115,14 @@ struct dwarf_eh_frame_hdr - /* The rest of the header is variable-length and consists of the - following members: - -- encoded_t eh_frame_ptr; -- encoded_t fde_count; -- struct -- { -- encoded_t start_ip; // first address covered by this FDE -- encoded_t fde_addr; // address of the FDE -- } -- binary_search_table[fde_count]; */ -+ encoded_t eh_frame_ptr; -+ encoded_t fde_count; -+ struct -+ { -+ encoded_t start_ip; // first address covered by this FDE -+ encoded_t fde_addr; // address of the FDE -+ } -+ binary_search_table[fde_count]; */ - }; - - #endif /* dwarf_eh_h */ -diff --git a/frysk-imports/libunwind/include/dwarf.h b/frysk-imports/libunwind/include/dwarf.h -index 61e5823..19795ff 100644 ---- a/frysk-imports/libunwind/include/dwarf.h -+++ b/frysk-imports/libunwind/include/dwarf.h -@@ -1,6 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2007-2008, Red Hat Inc. - - This file is part of libunwind. - -@@ -26,67 +27,83 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef dwarf_h - #define dwarf_h - -+#include -+ -+struct dwarf_cursor; /* forward-declaration */ -+struct elf_dyn_info; -+ -+#include "dwarf-config.h" -+ - #ifdef HAVE_CONFIG_H --#include -+# include "config.h" - #endif - --#ifdef HAVE_ATOMIC_OPS_H --# include -+#ifdef HAVE___THREAD -+ /* For now, turn off per-thread caching. It uses up too much TLS -+ memory per thread even when the thread never uses libunwind at -+ all. */ -+# undef HAVE___THREAD - #endif - --#include -- --struct dwarf_cursor; /* forward-declaration */ -+#ifndef UNW_REMOTE_ONLY -+ #if defined(HAVE_LINK_H) -+ #include -+ #elif defined(HAVE_SYS_LINK_H) -+ #include -+ #else -+ #error Could not find -+ #endif -+#endif - --#include "dwarf-config.h" -+#include - - /* DWARF expression opcodes. */ - - typedef enum - { -- DW_OP_addr = 0x03, -- DW_OP_deref = 0x06, -- DW_OP_const1u = 0x08, -- DW_OP_const1s = 0x09, -- DW_OP_const2u = 0x0a, -- DW_OP_const2s = 0x0b, -- DW_OP_const4u = 0x0c, -- DW_OP_const4s = 0x0d, -- DW_OP_const8u = 0x0e, -- DW_OP_const8s = 0x0f, -- DW_OP_constu = 0x10, -- DW_OP_consts = 0x11, -- DW_OP_dup = 0x12, -- DW_OP_drop = 0x13, -- DW_OP_over = 0x14, -- DW_OP_pick = 0x15, -- 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, -- DW_OP_shl = 0x24, -- DW_OP_shr = 0x25, -- DW_OP_shra = 0x26, -- DW_OP_xor = 0x27, -- DW_OP_skip = 0x2f, -- DW_OP_bra = 0x28, -- 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_lit0 = 0x30, -+ DW_OP_addr = 0x03, -+ DW_OP_deref = 0x06, -+ DW_OP_const1u = 0x08, -+ DW_OP_const1s = 0x09, -+ DW_OP_const2u = 0x0a, -+ DW_OP_const2s = 0x0b, -+ DW_OP_const4u = 0x0c, -+ DW_OP_const4s = 0x0d, -+ DW_OP_const8u = 0x0e, -+ DW_OP_const8s = 0x0f, -+ DW_OP_constu = 0x10, -+ DW_OP_consts = 0x11, -+ DW_OP_dup = 0x12, -+ DW_OP_drop = 0x13, -+ DW_OP_over = 0x14, -+ DW_OP_pick = 0x15, -+ 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, -+ DW_OP_shl = 0x24, -+ DW_OP_shr = 0x25, -+ DW_OP_shra = 0x26, -+ DW_OP_xor = 0x27, -+ DW_OP_skip = 0x2f, -+ DW_OP_bra = 0x28, -+ 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_lit0 = 0x30, - DW_OP_lit1, DW_OP_lit2, DW_OP_lit3, DW_OP_lit4, DW_OP_lit5, - DW_OP_lit6, DW_OP_lit7, DW_OP_lit8, DW_OP_lit9, DW_OP_lit10, - DW_OP_lit11, DW_OP_lit12, DW_OP_lit13, DW_OP_lit14, DW_OP_lit15, -@@ -94,7 +111,7 @@ typedef enum - DW_OP_lit21, DW_OP_lit22, DW_OP_lit23, DW_OP_lit24, DW_OP_lit25, - DW_OP_lit26, DW_OP_lit27, DW_OP_lit28, DW_OP_lit29, DW_OP_lit30, - DW_OP_lit31, -- DW_OP_reg0 = 0x50, -+ DW_OP_reg0 = 0x50, - DW_OP_reg1, DW_OP_reg2, DW_OP_reg3, DW_OP_reg4, DW_OP_reg5, - DW_OP_reg6, DW_OP_reg7, DW_OP_reg8, DW_OP_reg9, DW_OP_reg10, - DW_OP_reg11, DW_OP_reg12, DW_OP_reg13, DW_OP_reg14, DW_OP_reg15, -@@ -102,7 +119,7 @@ typedef enum - DW_OP_reg21, DW_OP_reg22, DW_OP_reg23, DW_OP_reg24, DW_OP_reg25, - DW_OP_reg26, DW_OP_reg27, DW_OP_reg28, DW_OP_reg29, DW_OP_reg30, - DW_OP_reg31, -- DW_OP_breg0 = 0x70, -+ DW_OP_breg0 = 0x70, - DW_OP_breg1, DW_OP_breg2, DW_OP_breg3, DW_OP_breg4, DW_OP_breg5, - DW_OP_breg6, DW_OP_breg7, DW_OP_breg8, DW_OP_breg9, DW_OP_breg10, - DW_OP_breg11, DW_OP_breg12, DW_OP_breg13, DW_OP_breg14, DW_OP_breg15, -@@ -110,58 +127,59 @@ typedef enum - DW_OP_breg21, DW_OP_breg22, DW_OP_breg23, DW_OP_breg24, DW_OP_breg25, - DW_OP_breg26, DW_OP_breg27, DW_OP_breg28, DW_OP_breg29, DW_OP_breg30, - DW_OP_breg31, -- DW_OP_regx = 0x90, -- DW_OP_fbreg = 0x91, -- DW_OP_bregx = 0x92, -- DW_OP_piece = 0x93, -- DW_OP_deref_size = 0x94, -- DW_OP_xderef_size = 0x95, -- 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_lo_user = 0xe0, -- DW_OP_hi_user = 0xff -+ DW_OP_regx = 0x90, -+ DW_OP_fbreg = 0x91, -+ DW_OP_bregx = 0x92, -+ DW_OP_piece = 0x93, -+ DW_OP_deref_size = 0x94, -+ DW_OP_xderef_size = 0x95, -+ 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_lo_user = 0xe0, -+ DW_OP_hi_user = 0xff - } - dwarf_expr_op_t; - --#define DWARF_CIE_VERSION 3 /* GCC emits version 1??? */ -+#define DWARF_CIE_VERSION 3 /* GCC emits version 1??? */ - --#define DWARF_CFA_OPCODE_MASK 0xc0 --#define DWARF_CFA_OPERAND_MASK 0x3f -+#define DWARF_CFA_OPCODE_MASK 0xc0 -+#define DWARF_CFA_OPERAND_MASK 0x3f - - typedef enum - { -- DW_CFA_advance_loc = 0x40, -- DW_CFA_offset = 0x80, -- DW_CFA_restore = 0xc0, -- 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_lo_user = 0x1c, -- DW_CFA_MIPS_advance_loc8 = 0x1d, -- DW_CFA_GNU_window_save = 0x2d, -- DW_CFA_GNU_args_size = 0x2e, -- DW_CFA_GNU_negative_offset_extended = 0x2f, -- DW_CFA_hi_user = 0x3c -+ DW_CFA_advance_loc = 0x40, -+ DW_CFA_offset = 0x80, -+ DW_CFA_restore = 0xc0, -+ 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_expression = 0x16, -+ DW_CFA_lo_user = 0x1c, -+ DW_CFA_MIPS_advance_loc8 = 0x1d, -+ DW_CFA_GNU_window_save = 0x2d, -+ DW_CFA_GNU_args_size = 0x2e, -+ DW_CFA_GNU_negative_offset_extended = 0x2f, -+ DW_CFA_hi_user = 0x3c - } - dwarf_cfa_t; - -@@ -176,52 +194,53 @@ dwarf_cfa_t; - engineered from GCC. - - */ --#define DW_EH_PE_FORMAT_MASK 0x0f /* format of the encoded value */ --#define DW_EH_PE_APPL_MASK 0x70 /* how the value is to be applied */ -+#define DW_EH_PE_FORMAT_MASK 0x0f /* format of the encoded value */ -+#define DW_EH_PE_APPL_MASK 0x70 /* how the value is to be applied */ - /* Flag bit. If set, the resulting pointer is the address of the word - that contains the final address. */ --#define DW_EH_PE_indirect 0x80 -+#define DW_EH_PE_indirect 0x80 - - /* Pointer-encoding formats: */ --#define DW_EH_PE_omit 0xff --#define DW_EH_PE_ptr 0x00 /* pointer-sized unsigned value */ --#define DW_EH_PE_uleb128 0x01 /* unsigned LE base-128 value */ --#define DW_EH_PE_udata2 0x02 /* unsigned 16-bit value */ --#define DW_EH_PE_udata4 0x03 /* unsigned 32-bit value */ --#define DW_EH_PE_udata8 0x04 /* unsigned 64-bit value */ --#define DW_EH_PE_sleb128 0x09 /* signed LE base-128 value */ --#define DW_EH_PE_sdata2 0x0a /* signed 16-bit value */ --#define DW_EH_PE_sdata4 0x0b /* signed 32-bit value */ --#define DW_EH_PE_sdata8 0x0c /* signed 64-bit value */ -+#define DW_EH_PE_omit 0xff -+#define DW_EH_PE_ptr 0x00 /* pointer-sized unsigned value */ -+#define DW_EH_PE_uleb128 0x01 /* unsigned LE base-128 value */ -+#define DW_EH_PE_udata2 0x02 /* unsigned 16-bit value */ -+#define DW_EH_PE_udata4 0x03 /* unsigned 32-bit value */ -+#define DW_EH_PE_udata8 0x04 /* unsigned 64-bit value */ -+#define DW_EH_PE_sleb128 0x09 /* signed LE base-128 value */ -+#define DW_EH_PE_sdata2 0x0a /* signed 16-bit value */ -+#define DW_EH_PE_sdata4 0x0b /* signed 32-bit value */ -+#define DW_EH_PE_sdata8 0x0c /* signed 64-bit value */ - - /* Pointer-encoding application: */ --#define DW_EH_PE_absptr 0x00 /* absolute value */ --#define DW_EH_PE_pcrel 0x10 /* rel. to addr. of encoded value */ --#define DW_EH_PE_textrel 0x20 /* text-relative (GCC-specific???) */ --#define DW_EH_PE_datarel 0x30 /* data-relative */ -+#define DW_EH_PE_absptr 0x00 /* absolute value */ -+#define DW_EH_PE_pcrel 0x10 /* rel. to addr. of encoded value */ -+#define DW_EH_PE_textrel 0x20 /* text-relative (GCC-specific???) */ -+#define DW_EH_PE_datarel 0x30 /* data-relative */ - /* The following are not documented by LSB v1.3, yet they are used by - GCC, presumably they aren't documented by LSB since they aren't - used on Linux: */ --#define DW_EH_PE_funcrel 0x40 /* start-of-procedure-relative */ --#define DW_EH_PE_aligned 0x50 /* aligned pointer */ -+#define DW_EH_PE_funcrel 0x40 /* start-of-procedure-relative */ -+#define DW_EH_PE_aligned 0x50 /* aligned pointer */ - - extern struct mempool dwarf_reg_state_pool; - extern struct mempool dwarf_cie_info_pool; - - typedef enum - { -- DWARF_WHERE_UNDEF, /* register isn't saved at all */ -- DWARF_WHERE_SAME, /* register has same value as in prev. frame */ -- DWARF_WHERE_CFAREL, /* register saved at CFA-relative address */ -- DWARF_WHERE_REG, /* register saved in another register */ -- DWARF_WHERE_EXPR, /* register saved */ -+ DWARF_WHERE_UNDEF, /* register isn't saved at all */ -+ DWARF_WHERE_SAME, /* register has same value as in prev. frame */ -+ DWARF_WHERE_CFAREL, /* register saved at CFA-relative address */ -+ DWARF_WHERE_REG, /* register saved in another register */ -+ DWARF_WHERE_EXPR, /* register saved */ -+ DWARF_WHERE_VAL_EXPR, /* register has computed value */ - } - dwarf_where_t; - - typedef struct - { -- dwarf_where_t where; /* how is the register saved? */ -- unw_word_t val; /* where it's saved */ -+ dwarf_where_t where; /* how is the register saved? */ -+ unw_word_t val; /* where it's saved */ - } - dwarf_save_loc_t; - -@@ -235,18 +254,20 @@ dwarf_save_loc_t; - case of DWARF_WHERE_REG, member "val" gives the number of the - base-register and the "val" member of DWARF_CFA_OFF_COLUMN gives - the offset value. */ --#define DWARF_CFA_REG_COLUMN DWARF_NUM_PRESERVED_REGS --#define DWARF_CFA_OFF_COLUMN (DWARF_NUM_PRESERVED_REGS + 1) -+#define DWARF_CFA_REG_COLUMN DWARF_NUM_PRESERVED_REGS -+#define DWARF_CFA_OFF_COLUMN (DWARF_NUM_PRESERVED_REGS + 1) - - typedef struct dwarf_reg_state - { -- struct dwarf_reg_state *next; /* for rs_stack */ -+ struct dwarf_reg_state *next; /* for rs_stack */ - dwarf_save_loc_t reg[DWARF_NUM_PRESERVED_REGS + 2]; -- unw_word_t ip; /* ip this rs is for */ -+ unw_word_t ip; /* ip this rs is for */ - unw_word_t ret_addr_column; /* indicates which column in the rule table represents return address */ -- unsigned short lru_chain; /* used for least-recently-used chain */ -- unsigned short coll_chain; /* used for hash collisions */ -- unsigned short hint; /* hint for next rs to try (or -1) */ -+ unsigned short lru_chain; /* used for least-recently-used chain */ -+ unsigned short coll_chain; /* used for hash collisions */ -+ unsigned short hint; /* hint for next rs to try (or -1) */ -+ unsigned short valid : 1; /* optional machine-dependent signal info */ -+ unsigned short signal_frame : 1; /* optional machine-dependent signal info */ - } - dwarf_reg_state_t; - -@@ -256,14 +277,14 @@ typedef struct dwarf_cie_info - unw_addr_space_t as; /* reference to frame address-space */ - void *as_arg; /* argument to address-space callbacks */ - #endif -- unw_word_t cie_instr_start; /* start addr. of CIE "initial_instructions" */ -- unw_word_t cie_instr_end; /* end addr. of CIE "initial_instructions" */ -- unw_word_t fde_instr_start; /* start addr. of FDE "instructions" */ -- unw_word_t fde_instr_end; /* end addr. of FDE "instructions" */ -- unw_word_t code_align; /* code-alignment factor */ -- unw_word_t data_align; /* data-alignment factor */ -- unw_word_t ret_addr_column; /* column of return-address register */ -- unw_word_t handler; /* address of personality-routine */ -+ unw_word_t cie_instr_start; /* start addr. of CIE "initial_instructions" */ -+ unw_word_t cie_instr_end; /* end addr. of CIE "initial_instructions" */ -+ unw_word_t fde_instr_start; /* start addr. of FDE "instructions" */ -+ unw_word_t fde_instr_end; /* end addr. of FDE "instructions" */ -+ unw_word_t code_align; /* code-alignment factor */ -+ unw_word_t data_align; /* data-alignment factor */ -+ unw_word_t ret_addr_column; /* column of return-address register */ -+ unw_word_t handler; /* address of personality-routine */ - uint16_t abi; - uint16_t tag; - uint8_t fde_encoding; -@@ -279,57 +300,54 @@ typedef struct dwarf_state_record - unsigned char fde_encoding; - unw_word_t args_size; - -- dwarf_reg_state_t rs_initial; /* reg-state after CIE instructions */ -- dwarf_reg_state_t rs_current; /* current reg-state */ -+ dwarf_reg_state_t rs_initial; /* reg-state after CIE instructions */ -+ dwarf_reg_state_t rs_current; /* current reg-state */ - } - dwarf_state_record_t; - - typedef struct dwarf_cursor - { -- void *as_arg; /* argument to address-space callbacks */ -- unw_addr_space_t as; /* reference to per-address-space info */ -+ void *as_arg; /* argument to address-space callbacks */ -+ unw_addr_space_t as; /* reference to per-address-space info */ - -- unw_word_t cfa; /* canonical frame address; aka frame-/stack-pointer */ -- unw_word_t ip; /* instruction pointer */ -- unw_word_t args_size; /* size of arguments */ -- unw_word_t ret_addr_column; /* column for return-address */ -+ unw_word_t cfa; /* canonical frame address; aka frame-/stack-pointer */ -+ unw_word_t ip; /* instruction pointer */ -+ unw_word_t args_size; /* size of arguments */ -+ unw_word_t ret_addr_column; /* column for return-address */ - unw_word_t eh_args[UNW_TDEP_NUM_EH_REGS]; - unsigned int eh_valid_mask; - - dwarf_loc_t loc[DWARF_NUM_PRESERVED_REGS]; - -- unsigned int decrease_ip :1; /* decrease `ip' back into the `call' instr */ -- unsigned int pi_valid :1; /* is proc_info valid? */ -+ unsigned int stash_frames :1; /* stash frames for fast lookup */ -+ unsigned int use_prev_instr :1; /* use previous (= call) or current (= signal) instruction? */ -+ unsigned int pi_valid :1; /* is proc_info valid? */ - unsigned int pi_is_dynamic :1; /* proc_info found via dynamic proc info? */ -- unw_proc_info_t pi; /* info about current procedure */ -+ unw_proc_info_t pi; /* info about current procedure */ - - short hint; /* faster lookup of the rs cache */ - short prev_rs; - } - dwarf_cursor_t; - --#define DWARF_LOG_UNW_CACHE_SIZE 7 --#define DWARF_UNW_CACHE_SIZE (1 << DWARF_LOG_UNW_CACHE_SIZE) -+#define DWARF_LOG_UNW_CACHE_SIZE 7 -+#define DWARF_UNW_CACHE_SIZE (1 << DWARF_LOG_UNW_CACHE_SIZE) - --#define DWARF_LOG_UNW_HASH_SIZE (DWARF_LOG_UNW_CACHE_SIZE + 1) --#define DWARF_UNW_HASH_SIZE (1 << DWARF_LOG_UNW_HASH_SIZE) -+#define DWARF_LOG_UNW_HASH_SIZE (DWARF_LOG_UNW_CACHE_SIZE + 1) -+#define DWARF_UNW_HASH_SIZE (1 << DWARF_LOG_UNW_HASH_SIZE) - - typedef unsigned char unw_hash_index_t; - - struct dwarf_rs_cache - { --#ifdef HAVE_ATOMIC_OPS_H -- AO_TS_t busy; /* is the rs-cache busy? */ --#else - pthread_mutex_t lock; --#endif -- unsigned short lru_head; /* index of lead-recently used rs */ -- unsigned short lru_tail; /* index of most-recently used rs */ -+ unsigned short lru_head; /* index of lead-recently used rs */ -+ unsigned short lru_tail; /* index of most-recently used rs */ - - /* hash table that maps instruction pointer to rs index: */ - unsigned short hash[DWARF_UNW_HASH_SIZE]; - -- uint32_t generation; /* generation number */ -+ uint32_t generation; /* generation number */ - - /* rs cache: */ - dwarf_reg_state_t buckets[DWARF_UNW_CACHE_SIZE]; -@@ -352,52 +370,78 @@ struct unw_debug_frame_list - struct unw_debug_frame_list *next; - }; - -+struct dwarf_callback_data -+ { -+ /* in: */ -+ unw_word_t ip; /* instruction-pointer we're looking for */ -+ unw_proc_info_t *pi; /* proc-info pointer */ -+ int need_unwind_info; -+ /* out: */ -+ int single_fde; /* did we find a single FDE? (vs. a table) */ -+ unw_dyn_info_t di; /* table info (if single_fde is false) */ -+ unw_dyn_info_t di_debug; /* additional table info for .debug_frame */ -+ }; -+ - /* Convenience macros: */ --#define dwarf_init UNW_ARCH_OBJ (dwarf_init) --#define dwarf_find_proc_info UNW_OBJ (dwarf_find_proc_info) --#define dwarf_search_unwind_table UNW_OBJ (dwarf_search_unwind_table) --#define dwarf_put_unwind_info UNW_OBJ (dwarf_put_unwind_info) --#define dwarf_put_unwind_info UNW_OBJ (dwarf_put_unwind_info) --#define dwarf_eval_expr UNW_OBJ (dwarf_eval_expr) -+#define dwarf_init UNW_ARCH_OBJ (dwarf_init) -+#define dwarf_callback UNW_OBJ (dwarf_callback) -+#define dwarf_find_proc_info UNW_OBJ (dwarf_find_proc_info) -+#define dwarf_find_debug_frame UNW_OBJ (dwarf_find_debug_frame) -+#define dwarf_search_unwind_table UNW_OBJ (dwarf_search_unwind_table) -+#define dwarf_find_unwind_table UNW_OBJ (dwarf_find_unwind_table) -+#define dwarf_put_unwind_info UNW_OBJ (dwarf_put_unwind_info) -+#define dwarf_put_unwind_info UNW_OBJ (dwarf_put_unwind_info) -+#define dwarf_eval_expr UNW_OBJ (dwarf_eval_expr) - #define dwarf_extract_proc_info_from_fde \ -- UNW_OBJ (dwarf_extract_proc_info_from_fde) --#define dwarf_find_save_locs UNW_OBJ (dwarf_find_save_locs) --#define dwarf_create_state_record UNW_OBJ (dwarf_create_state_record) --#define dwarf_make_proc_info UNW_OBJ (dwarf_make_proc_info) --#define dwarf_read_encoded_pointer UNW_OBJ (dwarf_read_encoded_pointer) --#define dwarf_step UNW_OBJ (dwarf_step) -+ UNW_OBJ (dwarf_extract_proc_info_from_fde) -+#define dwarf_find_save_locs UNW_OBJ (dwarf_find_save_locs) -+#define dwarf_create_state_record UNW_OBJ (dwarf_create_state_record) -+#define dwarf_make_proc_info UNW_OBJ (dwarf_make_proc_info) -+#define dwarf_read_encoded_pointer UNW_OBJ (dwarf_read_encoded_pointer) -+#define dwarf_step UNW_OBJ (dwarf_step) - - extern int dwarf_init (void); -+#ifndef UNW_REMOTE_ONLY -+extern int dwarf_callback (struct dl_phdr_info *info, size_t size, void *ptr); - extern int dwarf_find_proc_info (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, -- int need_unwind_info, void *arg); -+ unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); -+#endif /* !UNW_REMOTE_ONLY */ -+extern int dwarf_find_debug_frame (int found, unw_dyn_info_t *di_debug, -+ unw_word_t ip, unw_word_t segbase, -+ const char* obj_name, unw_word_t start, -+ unw_word_t end); - extern int dwarf_search_unwind_table (unw_addr_space_t as, -- unw_word_t ip, -- unw_dyn_info_t *di, -- unw_proc_info_t *pi, -- int need_unwind_info, void *arg); -+ unw_word_t ip, -+ unw_dyn_info_t *di, -+ unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); -+extern int dwarf_find_unwind_table (struct elf_dyn_info *edi, unw_addr_space_t as, -+ char *path, unw_word_t segbase, unw_word_t mapoff, -+ unw_word_t ip); - extern void dwarf_put_unwind_info (unw_addr_space_t as, -- unw_proc_info_t *pi, void *arg); -+ unw_proc_info_t *pi, void *arg); - extern int dwarf_eval_expr (struct dwarf_cursor *c, unw_word_t *addr, -- unw_word_t len, unw_word_t *valp, -- int *is_register); -+ unw_word_t len, unw_word_t *valp, -+ int *is_register); - extern int dwarf_extract_proc_info_from_fde (unw_addr_space_t as, -- unw_accessors_t *a, -- unw_word_t *fde_addr, -- unw_proc_info_t *pi, -- int need_unwind_info, -- unw_word_t base, -- void *arg); -+ unw_accessors_t *a, -+ unw_word_t *fde_addr, -+ unw_proc_info_t *pi, -+ unw_word_t base, -+ int need_unwind_info, -+ int is_debug_frame, -+ void *arg); - extern int dwarf_find_save_locs (struct dwarf_cursor *c); - extern int dwarf_create_state_record (struct dwarf_cursor *c, -- dwarf_state_record_t *sr); -+ dwarf_state_record_t *sr); - extern int dwarf_make_proc_info (struct dwarf_cursor *c); - extern int dwarf_read_encoded_pointer (unw_addr_space_t as, -- unw_accessors_t *a, -- unw_word_t *addr, -- unsigned char encoding, -- const unw_proc_info_t *pi, -- unw_word_t *valp, void *arg); -+ unw_accessors_t *a, -+ unw_word_t *addr, -+ unsigned char encoding, -+ const unw_proc_info_t *pi, -+ unw_word_t *valp, void *arg); - extern int dwarf_step (struct dwarf_cursor *c); - - #endif /* dwarf_h */ -diff --git a/frysk-imports/libunwind/include/dwarf_i.h b/frysk-imports/libunwind/include/dwarf_i.h -index d01eab8..4a02a7d 100644 ---- a/frysk-imports/libunwind/include/dwarf_i.h -+++ b/frysk-imports/libunwind/include/dwarf_i.h -@@ -15,13 +15,13 @@ - # define dwarf_addr_size(as) (sizeof (unw_word_t)) - #endif - --#define dwarf_to_unw_regnum_map UNW_OBJ (dwarf_to_unw_regnum_map) -- --extern uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH]; -- -+#ifndef dwarf_to_unw_regnum -+# define dwarf_to_unw_regnum_map UNW_OBJ (dwarf_to_unw_regnum_map) -+extern const uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH]; - /* REG is evaluated multiple times; it better be side-effects free! */ --#define dwarf_to_unw_regnum(reg) \ -- (((reg) <= DWARF_REGNUM_MAP_LENGTH) ? dwarf_to_unw_regnum_map[reg] : 0) -+# define dwarf_to_unw_regnum(reg) \ -+ (((reg) < DWARF_REGNUM_MAP_LENGTH) ? dwarf_to_unw_regnum_map[reg] : 0) -+#endif - - #ifdef UNW_LOCAL_ONLY - -@@ -44,7 +44,7 @@ dwarf_misaligned_value_t; - - static inline int - dwarf_reads8 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- int8_t *val, void *arg) -+ int8_t *val, void *arg) - { - dwarf_misaligned_value_t *mvp = (void *) (uintptr_t) *addr; - -@@ -55,7 +55,7 @@ dwarf_reads8 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_reads16 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- int16_t *val, void *arg) -+ int16_t *val, void *arg) - { - dwarf_misaligned_value_t *mvp = (void *) (uintptr_t) *addr; - -@@ -66,7 +66,7 @@ dwarf_reads16 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_reads32 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- int32_t *val, void *arg) -+ int32_t *val, void *arg) - { - dwarf_misaligned_value_t *mvp = (void *) (uintptr_t) *addr; - -@@ -77,7 +77,7 @@ dwarf_reads32 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_reads64 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- int64_t *val, void *arg) -+ int64_t *val, void *arg) - { - dwarf_misaligned_value_t *mvp = (void *) (uintptr_t) *addr; - -@@ -88,7 +88,7 @@ dwarf_reads64 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readu8 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- uint8_t *val, void *arg) -+ uint8_t *val, void *arg) - { - dwarf_misaligned_value_t *mvp = (void *) (uintptr_t) *addr; - -@@ -99,7 +99,7 @@ dwarf_readu8 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readu16 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- uint16_t *val, void *arg) -+ uint16_t *val, void *arg) - { - dwarf_misaligned_value_t *mvp = (void *) (uintptr_t) *addr; - -@@ -110,7 +110,7 @@ dwarf_readu16 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readu32 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- uint32_t *val, void *arg) -+ uint32_t *val, void *arg) - { - dwarf_misaligned_value_t *mvp = (void *) (uintptr_t) *addr; - -@@ -121,7 +121,7 @@ dwarf_readu32 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readu64 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- uint64_t *val, void *arg) -+ uint64_t *val, void *arg) - { - dwarf_misaligned_value_t *mvp = (void *) (uintptr_t) *addr; - -@@ -134,7 +134,7 @@ dwarf_readu64 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readu8 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- uint8_t *valp, void *arg) -+ uint8_t *valp, void *arg) - { - unw_word_t val, aligned_addr = *addr & -sizeof (unw_word_t); - unw_word_t off = *addr - aligned_addr; -@@ -153,7 +153,7 @@ dwarf_readu8 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readu16 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- uint16_t *val, void *arg) -+ uint16_t *val, void *arg) - { - uint8_t v0, v1; - int ret; -@@ -171,7 +171,7 @@ dwarf_readu16 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readu32 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- uint32_t *val, void *arg) -+ uint32_t *val, void *arg) - { - uint16_t v0, v1; - int ret; -@@ -189,7 +189,7 @@ dwarf_readu32 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readu64 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- uint64_t *val, void *arg) -+ uint64_t *val, void *arg) - { - uint32_t v0, v1; - int ret; -@@ -207,7 +207,7 @@ dwarf_readu64 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_reads8 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- int8_t *val, void *arg) -+ int8_t *val, void *arg) - { - uint8_t uval; - int ret; -@@ -220,7 +220,7 @@ dwarf_reads8 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_reads16 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- int16_t *val, void *arg) -+ int16_t *val, void *arg) - { - uint16_t uval; - int ret; -@@ -233,7 +233,7 @@ dwarf_reads16 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_reads32 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- int32_t *val, void *arg) -+ int32_t *val, void *arg) - { - uint32_t uval; - int ret; -@@ -246,7 +246,7 @@ dwarf_reads32 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_reads64 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- int64_t *val, void *arg) -+ int64_t *val, void *arg) - { - uint64_t uval; - int ret; -@@ -261,7 +261,7 @@ dwarf_reads64 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_readw (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- unw_word_t *val, void *arg) -+ unw_word_t *val, void *arg) - { - uint32_t u32; - uint64_t u64; -@@ -272,14 +272,14 @@ dwarf_readw (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - case 4: - ret = dwarf_readu32 (as, a, addr, &u32, arg); - if (ret < 0) -- return ret; -+ return ret; - *val = u32; - return ret; - - case 8: - ret = dwarf_readu64 (as, a, addr, &u64, arg); - if (ret < 0) -- return ret; -+ return ret; - *val = u64; - return ret; - -@@ -293,7 +293,7 @@ dwarf_readw (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_read_uleb128 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- unw_word_t *valp, void *arg) -+ unw_word_t *valp, void *arg) - { - unw_word_t val = 0, shift = 0; - unsigned char byte; -@@ -302,7 +302,7 @@ dwarf_read_uleb128 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - do - { - if ((ret = dwarf_readu8 (as, a, addr, &byte, arg)) < 0) -- return ret; -+ return ret; - - val |= ((unw_word_t) byte & 0x7f) << shift; - shift += 7; -@@ -318,7 +318,7 @@ dwarf_read_uleb128 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline int - dwarf_read_sleb128 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- unw_word_t *valp, void *arg) -+ unw_word_t *valp, void *arg) - { - unw_word_t val = 0, shift = 0; - unsigned char byte; -@@ -327,7 +327,7 @@ dwarf_read_sleb128 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - do - { - if ((ret = dwarf_readu8 (as, a, addr, &byte, arg)) < 0) -- return ret; -+ return ret; - - val |= ((unw_word_t) byte & 0x7f) << shift; - shift += 7; -@@ -344,9 +344,9 @@ dwarf_read_sleb128 (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static ALWAYS_INLINE int - dwarf_read_encoded_pointer_inlined (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, unsigned char encoding, -- const unw_proc_info_t *pi, -- unw_word_t *valp, void *arg) -+ unw_word_t *addr, unsigned char encoding, -+ const unw_proc_info_t *pi, -+ unw_word_t *valp, void *arg) - { - unw_word_t val, initial_addr = *addr; - uint16_t uval16; -@@ -375,58 +375,58 @@ dwarf_read_encoded_pointer_inlined (unw_addr_space_t as, unw_accessors_t *a, - { - case DW_EH_PE_ptr: - if ((ret = dwarf_readw (as, a, addr, &val, arg)) < 0) -- return ret; -+ return ret; - break; - - case DW_EH_PE_uleb128: - if ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0) -- return ret; -+ return ret; - break; - - case DW_EH_PE_udata2: - if ((ret = dwarf_readu16 (as, a, addr, &uval16, arg)) < 0) -- return ret; -+ return ret; - val = uval16; - break; - - case DW_EH_PE_udata4: - if ((ret = dwarf_readu32 (as, a, addr, &uval32, arg)) < 0) -- return ret; -+ return ret; - val = uval32; - break; - - case DW_EH_PE_udata8: - if ((ret = dwarf_readu64 (as, a, addr, &uval64, arg)) < 0) -- return ret; -+ return ret; - val = uval64; - break; - - case DW_EH_PE_sleb128: - if ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0) -- return ret; -+ return ret; - break; - - case DW_EH_PE_sdata2: - if ((ret = dwarf_reads16 (as, a, addr, &sval16, arg)) < 0) -- return ret; -+ return ret; - val = sval16; - break; - - case DW_EH_PE_sdata4: - if ((ret = dwarf_reads32 (as, a, addr, &sval32, arg)) < 0) -- return ret; -+ return ret; - val = sval32; - break; - - case DW_EH_PE_sdata8: - if ((ret = dwarf_reads64 (as, a, addr, &sval64, arg)) < 0) -- return ret; -+ return ret; - val = sval64; - break; - - default: - Debug (1, "unexpected encoding format 0x%x\n", -- encoding & DW_EH_PE_FORMAT_MASK); -+ encoding & DW_EH_PE_FORMAT_MASK); - return -UNW_EINVAL; - } - -@@ -462,7 +462,7 @@ dwarf_read_encoded_pointer_inlined (unw_addr_space_t as, unw_accessors_t *a, - "segbase" member to unw_proc_info_t. */ - default: - Debug (1, "unexpected application type 0x%x\n", -- encoding & DW_EH_PE_APPL_MASK); -+ encoding & DW_EH_PE_APPL_MASK); - return -UNW_EINVAL; - } - -@@ -480,7 +480,7 @@ dwarf_read_encoded_pointer_inlined (unw_addr_space_t as, unw_accessors_t *a, - unw_word_t indirect_addr = val; - - if ((ret = dwarf_readw (as, a, &indirect_addr, &val, arg)) < 0) -- return ret; -+ return ret; - } - - *valp = val; -diff --git a/frysk-imports/libunwind/include/libunwind-aarch64.h b/frysk-imports/libunwind/include/libunwind-aarch64.h -new file mode 100644 -index 0000000..cd01e57 ---- /dev/null -+++ b/frysk-imports/libunwind/include/libunwind-aarch64.h -@@ -0,0 +1,187 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2001-2004 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef LIBUNWIND_H -+#define LIBUNWIND_H -+ -+#if defined(__cplusplus) || defined(c_plusplus) -+extern "C" { -+#endif -+ -+#include -+#include -+#include -+ -+#define UNW_TARGET aarch64 -+#define UNW_TARGET_AARCH64 1 -+ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+ -+/* This needs to be big enough to accommodate "struct cursor", while -+ leaving some slack for future expansion. Changing this value will -+ require recompiling all users of this library. Stack allocation is -+ relatively cheap and unwind-state copying is relatively rare, so we -+ want to err on making it rather too big than too small. */ -+ -+#define UNW_TDEP_CURSOR_LEN 4096 -+ -+typedef uint64_t unw_word_t; -+typedef int64_t unw_sword_t; -+ -+typedef long double unw_tdep_fpreg_t; -+ -+typedef struct -+ { -+ /* no aarch64-specific auxiliary proc-info */ -+ } -+unw_tdep_proc_info_t; -+ -+typedef enum -+ { -+ /* 64-bit general registers. */ -+ UNW_AARCH64_X0, -+ UNW_AARCH64_X1, -+ UNW_AARCH64_X2, -+ UNW_AARCH64_X3, -+ UNW_AARCH64_X4, -+ UNW_AARCH64_X5, -+ UNW_AARCH64_X6, -+ UNW_AARCH64_X7, -+ UNW_AARCH64_X8, -+ -+ /* Temporary registers. */ -+ UNW_AARCH64_X9, -+ UNW_AARCH64_X10, -+ UNW_AARCH64_X11, -+ UNW_AARCH64_X12, -+ UNW_AARCH64_X13, -+ UNW_AARCH64_X14, -+ UNW_AARCH64_X15, -+ -+ /* Intra-procedure-call temporary registers. */ -+ UNW_AARCH64_X16, -+ UNW_AARCH64_X17, -+ -+ /* Callee-saved registers. */ -+ UNW_AARCH64_X18, -+ UNW_AARCH64_X19, -+ UNW_AARCH64_X20, -+ UNW_AARCH64_X21, -+ UNW_AARCH64_X22, -+ UNW_AARCH64_X23, -+ UNW_AARCH64_X24, -+ UNW_AARCH64_X25, -+ UNW_AARCH64_X26, -+ UNW_AARCH64_X27, -+ UNW_AARCH64_X28, -+ -+ /* 64-bit frame pointer. */ -+ UNW_AARCH64_X29, -+ -+ /* 64-bit link register. */ -+ UNW_AARCH64_X30, -+ -+ /* 64-bit stack pointer. */ -+ UNW_AARCH64_SP = 31, -+ UNW_AARCH64_PC, -+ UNW_AARCH64_PSTATE, -+ -+ /* 128-bit FP/Advanced SIMD registers. */ -+ UNW_AARCH64_V0 = 64, -+ UNW_AARCH64_V1, -+ UNW_AARCH64_V2, -+ UNW_AARCH64_V3, -+ UNW_AARCH64_V4, -+ UNW_AARCH64_V5, -+ UNW_AARCH64_V6, -+ UNW_AARCH64_V7, -+ UNW_AARCH64_V8, -+ UNW_AARCH64_V9, -+ UNW_AARCH64_V10, -+ UNW_AARCH64_V11, -+ UNW_AARCH64_V12, -+ UNW_AARCH64_V13, -+ UNW_AARCH64_V14, -+ UNW_AARCH64_V15, -+ UNW_AARCH64_V16, -+ UNW_AARCH64_V17, -+ UNW_AARCH64_V18, -+ UNW_AARCH64_V19, -+ UNW_AARCH64_V20, -+ UNW_AARCH64_V21, -+ UNW_AARCH64_V22, -+ UNW_AARCH64_V23, -+ UNW_AARCH64_V24, -+ UNW_AARCH64_V25, -+ UNW_AARCH64_V26, -+ UNW_AARCH64_V27, -+ UNW_AARCH64_V28, -+ UNW_AARCH64_V29, -+ UNW_AARCH64_V30, -+ UNW_AARCH64_V31, -+ -+ UNW_AARCH64_FPSR, -+ UNW_AARCH64_FPCR, -+ -+ /* For AArch64, the CFA is the value of SP (x31) at the call site of the -+ previous frame. */ -+ UNW_AARCH64_CFA = UNW_AARCH64_SP, -+ -+ UNW_TDEP_LAST_REG = UNW_AARCH64_FPCR, -+ -+ UNW_TDEP_IP = UNW_AARCH64_X30, -+ UNW_TDEP_SP = UNW_AARCH64_SP, -+ UNW_TDEP_EH = UNW_AARCH64_X0, -+ -+ } -+aarch64_regnum_t; -+ -+/* Use R0 through R3 to pass exception handling information. */ -+#define UNW_TDEP_NUM_EH_REGS 4 -+ -+typedef struct unw_tdep_save_loc -+ { -+ /* Additional target-dependent info on a save location. */ -+ } -+unw_tdep_save_loc_t; -+ -+ -+/* On AArch64, we can directly use ucontext_t as the unwind context. */ -+typedef ucontext_t unw_tdep_context_t; -+ -+#include "libunwind-common.h" -+#include "libunwind-dynamic.h" -+ -+#define unw_tdep_getcontext(uc) (getcontext (uc), 0) -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+ -+extern int unw_tdep_is_fpreg (int); -+ -+#if defined(__cplusplus) || defined(c_plusplus) -+} -+#endif -+ -+#endif /* LIBUNWIND_H */ -diff --git a/frysk-imports/libunwind/include/libunwind-arm.h b/frysk-imports/libunwind/include/libunwind-arm.h -index 492331e..f208487 100644 ---- a/frysk-imports/libunwind/include/libunwind-arm.h -+++ b/frysk-imports/libunwind/include/libunwind-arm.h -@@ -30,12 +30,12 @@ extern "C" { - #endif - - #include --#include -+#include - --#define UNW_TARGET arm --#define UNW_TARGET_ARM 1 -+#define UNW_TARGET arm -+#define UNW_TARGET_ARM 1 - --#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ - - /* This needs to be big enough to accommodate "struct cursor", while - leaving some slack for future expansion. Changing this value will -@@ -44,7 +44,7 @@ extern "C" { - want to err on making it rather too big than too small. */ - - /* FIXME for ARM. Too big? What do other things use for similar tasks? */ --#define UNW_TDEP_CURSOR_LEN 4096 -+#define UNW_TDEP_CURSOR_LEN 4096 - - typedef uint32_t unw_word_t; - typedef int32_t unw_sword_t; -@@ -242,7 +242,7 @@ typedef enum - } - arm_regnum_t; - --#define UNW_TDEP_NUM_EH_REGS 2 /* FIXME for ARM. */ -+#define UNW_TDEP_NUM_EH_REGS 2 /* FIXME for ARM. */ - - typedef struct unw_tdep_save_loc - { -@@ -250,31 +250,35 @@ typedef struct unw_tdep_save_loc - } - unw_tdep_save_loc_t; - --/* On ARM, we can directly use ucontext_t as the unwind context. */ --typedef ucontext_t unw_tdep_context_t; -+/* On ARM, we define our own unw_tdep_context instead of using ucontext_t. -+ This allows us to support systems that don't support getcontext and -+ therefore do not define ucontext_t. */ -+typedef struct unw_tdep_context -+ { -+ unsigned long regs[16]; -+ } -+unw_tdep_context_t; - - /* There is no getcontext() on ARM. Use a stub version which only saves GP - registers. FIXME: Not ideal, may not be sufficient for all libunwind - use cases. Stores pc+8, which is only approximately correct, really. */ - #ifndef __thumb__ --#define unw_tdep_getcontext(uc) (({ \ -- unw_tdep_context_t *unw_ctx = (uc); \ -- register int unw_base asm ("r0") \ -- = (int) (&unw_ctx->uc_mcontext.arm_r0); \ -- __asm__ __volatile__ ( \ -- "stmia %[base], {r0-r15}" \ -- : : [base] "r" (unw_base) : "memory"); \ -+#define unw_tdep_getcontext(uc) (({ \ -+ unw_tdep_context_t *unw_ctx = (uc); \ -+ register unsigned long *unw_base asm ("r0") = unw_ctx->regs; \ -+ __asm__ __volatile__ ( \ -+ "stmia %[base], {r0-r15}" \ -+ : : [base] "r" (unw_base) : "memory"); \ - }), 0) - #else /* __thumb__ */ --#define unw_tdep_getcontext(uc) (({ \ -- unw_tdep_context_t *unw_ctx = (uc); \ -- register int unw_base asm ("r0") \ -- = (int) (&unw_ctx->uc_mcontext.arm_r0); \ -- __asm__ __volatile__ ( \ -- ".align 2\nbx pc\nnop\n.code 32\n" \ -- "stmia %[base], {r0-r15}\n" \ -- "orr %[base], pc, #1\nbx %[base]" \ -- : [base] "+r" (unw_base) : : "memory", "cc"); \ -+#define unw_tdep_getcontext(uc) (({ \ -+ unw_tdep_context_t *unw_ctx = (uc); \ -+ register unsigned long *unw_base asm ("r0") = unw_ctx->regs; \ -+ __asm__ __volatile__ ( \ -+ ".align 2\nbx pc\nnop\n.code 32\n" \ -+ "stmia %[base], {r0-r15}\n" \ -+ "orr %[base], pc, #1\nbx %[base]" \ -+ : [base] "+r" (unw_base) : : "memory", "cc"); \ - }), 0) - #endif - -@@ -288,7 +292,7 @@ unw_tdep_proc_info_t; - - #include "libunwind-common.h" - --#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) - extern int unw_tdep_is_fpreg (int); - - #if defined(__cplusplus) || defined(c_plusplus) -diff --git a/frysk-imports/libunwind/include/libunwind-common.h.in b/frysk-imports/libunwind/include/libunwind-common.h.in -index b9e582a..02fac10 100644 ---- a/frysk-imports/libunwind/include/libunwind-common.h.in -+++ b/frysk-imports/libunwind/include/libunwind-common.h.in -@@ -2,6 +2,7 @@ - Copyright (C) 2001-2004 Hewlett-Packard Co - Contributed by David Mosberger-Tang - Copyright Red Hat 2007 -+ Copyright (C) 2016, Andrew Cagney - - This file is part of libunwind. - -@@ -120,6 +121,8 @@ typedef struct unw_addr_space *unw_addr_space_t; - /* Each target may define it's own set of flags, but bits 0-15 are - reserved for general libunwind-use. */ - #define UNW_PI_FLAG_FIRST_TDEP_BIT 16 -+/* The information comes from a .debug_frame section. */ -+#define UNW_PI_FLAG_DEBUG_FRAME 32 - - typedef struct unw_proc_info - { -@@ -221,6 +224,7 @@ unw_save_loc_t; - #define unw_set_fpreg UNW_OBJ(set_fpreg) - #define unw_get_save_loc UNW_OBJ(get_save_loc) - #define unw_is_signal_frame UNW_OBJ(is_signal_frame) -+#define unw_handle_signal_frame UNW_OBJ(handle_signal_frame) - #define unw_get_proc_name UNW_OBJ(get_proc_name) - #define unw_set_caching_policy UNW_OBJ(set_caching_policy) - #define unw_regname UNW_ARCH_OBJ(regname) -@@ -248,12 +252,14 @@ extern int unw_get_fpreg (unw_cursor_t *, int, unw_fpreg_t *); - extern int unw_set_fpreg (unw_cursor_t *, int, unw_fpreg_t); - extern int unw_get_save_loc (unw_cursor_t *, int, unw_save_loc_t *); - extern int unw_is_signal_frame (unw_cursor_t *); -+extern int unw_handle_signal_frame (unw_cursor_t *); - extern int unw_get_proc_name (unw_cursor_t *, char *, size_t, unw_word_t *); - extern const char *unw_strerror (int); --extern int unw_get_unwind_table(unw_word_t ip, -- unw_proc_info_t *pi, int need_unwind_info, -- unw_accessors_t *eh_frame_accessors, -+extern int unw_backtrace (void **, int); -+extern int unw_get_unwind_table(unw_word_t ip, unw_proc_info_t *pi, -+ int need_unwind_info, - unw_word_t eh_frame_hdr_address, -- void *eh_frame_arg); -+ unw_addr_space_t eh_frame_addr_space, -+ void *eh_frame_addr_space_arg); - - extern unw_addr_space_t unw_local_addr_space; -diff --git a/frysk-imports/libunwind/include/libunwind-coredump.h b/frysk-imports/libunwind/include/libunwind-coredump.h -new file mode 100644 -index 0000000..3c78141 ---- /dev/null -+++ b/frysk-imports/libunwind/include/libunwind-coredump.h -@@ -0,0 +1,73 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef libunwind_coredump_h -+#define libunwind_coredump_h -+ -+#include -+ -+#if defined(__cplusplus) || defined(c_plusplus) -+extern "C" { -+#endif -+ -+/* Helper routines which make it easy to use libunwind on a coredump. -+ They're available only if UNW_REMOTE_ONLY is _not_ defined and they -+ aren't really part of the libunwind API. They are implemented in a -+ archive library called libunwind-coredump.a. */ -+ -+struct UCD_info; -+ -+extern struct UCD_info *_UCD_create(const char *filename); -+extern void _UCD_destroy(struct UCD_info *); -+ -+extern int _UCD_get_num_threads(struct UCD_info *); -+extern void _UCD_select_thread(struct UCD_info *, int); -+extern pid_t _UCD_get_pid(struct UCD_info *); -+extern int _UCD_get_cursig(struct UCD_info *); -+extern int _UCD_add_backing_file_at_segment(struct UCD_info *, int phdr_no, const char *filename); -+extern int _UCD_add_backing_file_at_vaddr(struct UCD_info *, -+ unsigned long vaddr, -+ const char *filename); -+ -+extern int _UCD_find_proc_info (unw_addr_space_t, unw_word_t, -+ unw_proc_info_t *, int, void *); -+extern void _UCD_put_unwind_info (unw_addr_space_t, unw_proc_info_t *, void *); -+extern int _UCD_get_dyn_info_list_addr (unw_addr_space_t, unw_word_t *, -+ void *); -+extern int _UCD_access_mem (unw_addr_space_t, unw_word_t, unw_word_t *, int, -+ void *); -+extern int _UCD_access_reg (unw_addr_space_t, unw_regnum_t, unw_word_t *, -+ int, void *); -+extern int _UCD_access_fpreg (unw_addr_space_t, unw_regnum_t, unw_fpreg_t *, -+ int, void *); -+extern int _UCD_get_proc_name (unw_addr_space_t, unw_word_t, char *, size_t, -+ unw_word_t *, void *); -+extern int _UCD_resume (unw_addr_space_t, unw_cursor_t *, void *); -+extern unw_accessors_t _UCD_accessors; -+ -+ -+#if defined(__cplusplus) || defined(c_plusplus) -+} -+#endif -+ -+#endif /* libunwind_coredump_h */ -diff --git a/frysk-imports/libunwind/include/libunwind-dynamic.h b/frysk-imports/libunwind/include/libunwind-dynamic.h -index 8f6041f..edb0bbd 100644 ---- a/frysk-imports/libunwind/include/libunwind-dynamic.h -+++ b/frysk-imports/libunwind/include/libunwind-dynamic.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -59,49 +59,54 @@ the following rules should be followed in declaring these structures: - - typedef enum - { -- UNW_DYN_STOP = 0, /* end-of-unwind-info marker */ -- UNW_DYN_SAVE_REG, /* save register to another register */ -- UNW_DYN_SPILL_FP_REL, /* frame-pointer-relative register spill */ -- UNW_DYN_SPILL_SP_REL, /* stack-pointer-relative register spill */ -- UNW_DYN_ADD, /* add constant value to a register */ -- UNW_DYN_POP_FRAMES, /* drop one or more stack frames */ -- UNW_DYN_LABEL_STATE, /* name the current state */ -- UNW_DYN_COPY_STATE, /* set the region's entry-state */ -- UNW_DYN_ALIAS /* get unwind info from an alias */ -+ UNW_DYN_STOP = 0, /* end-of-unwind-info marker */ -+ UNW_DYN_SAVE_REG, /* save register to another register */ -+ UNW_DYN_SPILL_FP_REL, /* frame-pointer-relative register spill */ -+ UNW_DYN_SPILL_SP_REL, /* stack-pointer-relative register spill */ -+ UNW_DYN_ADD, /* add constant value to a register */ -+ UNW_DYN_POP_FRAMES, /* drop one or more stack frames */ -+ UNW_DYN_LABEL_STATE, /* name the current state */ -+ UNW_DYN_COPY_STATE, /* set the region's entry-state */ -+ UNW_DYN_ALIAS /* get unwind info from an alias */ - } - unw_dyn_operation_t; - - typedef enum - { -- UNW_INFO_FORMAT_DYNAMIC, /* unw_dyn_proc_info_t */ -- UNW_INFO_FORMAT_TABLE, /* unw_dyn_table_t */ -- UNW_INFO_FORMAT_REMOTE_TABLE, /* unw_dyn_remote_table_t */ -+ UNW_INFO_FORMAT_DYNAMIC, /* unw_dyn_proc_info_t */ -+ UNW_INFO_FORMAT_TABLE, /* unw_dyn_table_t */ -+ UNW_INFO_FORMAT_REMOTE_TABLE, /* unw_dyn_remote_table_t */ -+ UNW_INFO_FORMAT_ARM_EXIDX, /* ARM specific unwind info */ -+ UNW_INFO_FORMAT_IP_OFFSET, /* Like UNW_INFO_FORMAT_REMOTE_TABLE, but -+ table entries are considered -+ relative to di->start_ip, rather -+ than di->segbase */ - } - unw_dyn_info_format_t; - - typedef struct unw_dyn_op - { -- int8_t tag; /* what operation? */ -- int8_t qp; /* qualifying predicate register */ -- int16_t reg; /* what register */ -- int32_t when; /* when does it take effect? */ -- unw_word_t val; /* auxiliary value */ -+ int8_t tag; /* what operation? */ -+ int8_t qp; /* qualifying predicate register */ -+ int16_t reg; /* what register */ -+ int32_t when; /* when does it take effect? */ -+ unw_word_t val; /* auxiliary value */ - } - unw_dyn_op_t; - - typedef struct unw_dyn_region_info - { -- struct unw_dyn_region_info *next; /* linked list of regions */ -- int32_t insn_count; /* region length (# of instructions) */ -- uint32_t op_count; /* length of op-array */ -- unw_dyn_op_t op[1]; /* variable-length op-array */ -+ struct unw_dyn_region_info *next; /* linked list of regions */ -+ int32_t insn_count; /* region length (# of instructions) */ -+ uint32_t op_count; /* length of op-array */ -+ unw_dyn_op_t op[1]; /* variable-length op-array */ - } - unw_dyn_region_info_t; - - typedef struct unw_dyn_proc_info - { -- unw_word_t name_ptr; /* address of human-readable procedure name */ -- unw_word_t handler; /* address of personality routine */ -+ unw_word_t name_ptr; /* address of human-readable procedure name */ -+ unw_word_t handler; /* address of personality routine */ - uint32_t flags; - int32_t pad0; - unw_dyn_region_info_t *regions; -@@ -110,18 +115,18 @@ unw_dyn_proc_info_t; - - typedef struct unw_dyn_table_info - { -- unw_word_t name_ptr; /* addr. of table name (e.g., library name) */ -- unw_word_t segbase; /* segment base */ -- unw_word_t table_len; /* must be a multiple of sizeof(unw_word_t)! */ -+ unw_word_t name_ptr; /* addr. of table name (e.g., library name) */ -+ unw_word_t segbase; /* segment base */ -+ unw_word_t table_len; /* must be a multiple of sizeof(unw_word_t)! */ - unw_word_t *table_data; - } - unw_dyn_table_info_t; - - typedef struct unw_dyn_remote_table_info - { -- unw_word_t name_ptr; /* addr. of table name (e.g., library name) */ -- unw_word_t segbase; /* segment base */ -- unw_word_t table_len; /* must be a multiple of sizeof(unw_word_t)! */ -+ unw_word_t name_ptr; /* addr. of table name (e.g., library name) */ -+ unw_word_t segbase; /* segment base */ -+ unw_word_t table_len; /* must be a multiple of sizeof(unw_word_t)! */ - unw_word_t table_data; - } - unw_dyn_remote_table_info_t; -@@ -131,16 +136,16 @@ typedef struct unw_dyn_info - /* doubly-linked list of dyn-info structures: */ - struct unw_dyn_info *next; - struct unw_dyn_info *prev; -- unw_word_t start_ip; /* first IP covered by this entry */ -- unw_word_t end_ip; /* first IP NOT covered by this entry */ -- unw_word_t gp; /* global-pointer in effect for this entry */ -- int32_t format; /* real type: unw_dyn_info_format_t */ -+ unw_word_t start_ip; /* first IP covered by this entry */ -+ unw_word_t end_ip; /* first IP NOT covered by this entry */ -+ unw_word_t gp; /* global-pointer in effect for this entry */ -+ int32_t format; /* real type: unw_dyn_info_format_t */ - int32_t pad; - union - { -- unw_dyn_proc_info_t pi; -- unw_dyn_table_info_t ti; -- unw_dyn_remote_table_info_t rti; -+ unw_dyn_proc_info_t pi; -+ unw_dyn_table_info_t ti; -+ unw_dyn_remote_table_info_t rti; - } - u; - } -@@ -156,9 +161,9 @@ unw_dyn_info_list_t; - - /* Return the size (in bytes) of an unw_dyn_region_info_t structure that can - hold OP_COUNT ops. */ --#define _U_dyn_region_info_size(op_count) \ -- ((char *) (((unw_dyn_region_info_t *) NULL)->op + (op_count)) \ -- - (char *) NULL) -+#define _U_dyn_region_info_size(op_count) \ -+ ((char *) (((unw_dyn_region_info_t *) NULL)->op + (op_count)) \ -+ - (char *) NULL) - - /* Register the unwind info for a single procedure. - This routine is NOT signal-safe. */ -@@ -171,39 +176,39 @@ extern void _U_dyn_cancel (unw_dyn_info_t *); - - /* Convenience routines. */ - --#define _U_dyn_op(_tag, _qp, _when, _reg, _val) \ -- ((unw_dyn_op_t) { (_tag), (_qp), (_reg), (_when), (_val) }) -+#define _U_dyn_op(_tag, _qp, _when, _reg, _val) \ -+ ((unw_dyn_op_t) { (_tag), (_qp), (_reg), (_when), (_val) }) - --#define _U_dyn_op_save_reg(op, qp, when, reg, dst) \ -- (*(op) = _U_dyn_op (UNW_DYN_SAVE_REG, (qp), (when), (reg), (dst))) -+#define _U_dyn_op_save_reg(op, qp, when, reg, dst) \ -+ (*(op) = _U_dyn_op (UNW_DYN_SAVE_REG, (qp), (when), (reg), (dst))) - --#define _U_dyn_op_spill_fp_rel(op, qp, when, reg, offset) \ -- (*(op) = _U_dyn_op (UNW_DYN_SPILL_FP_REL, (qp), (when), (reg), \ -- (offset))) -+#define _U_dyn_op_spill_fp_rel(op, qp, when, reg, offset) \ -+ (*(op) = _U_dyn_op (UNW_DYN_SPILL_FP_REL, (qp), (when), (reg), \ -+ (offset))) - --#define _U_dyn_op_spill_sp_rel(op, qp, when, reg, offset) \ -- (*(op) = _U_dyn_op (UNW_DYN_SPILL_SP_REL, (qp), (when), (reg), \ -- (offset))) -+#define _U_dyn_op_spill_sp_rel(op, qp, when, reg, offset) \ -+ (*(op) = _U_dyn_op (UNW_DYN_SPILL_SP_REL, (qp), (when), (reg), \ -+ (offset))) - --#define _U_dyn_op_add(op, qp, when, reg, value) \ -- (*(op) = _U_dyn_op (UNW_DYN_ADD, (qp), (when), (reg), (value))) -+#define _U_dyn_op_add(op, qp, when, reg, value) \ -+ (*(op) = _U_dyn_op (UNW_DYN_ADD, (qp), (when), (reg), (value))) - --#define _U_dyn_op_pop_frames(op, qp, when, num_frames) \ -- (*(op) = _U_dyn_op (UNW_DYN_POP_FRAMES, (qp), (when), 0, (num_frames))) -+#define _U_dyn_op_pop_frames(op, qp, when, num_frames) \ -+ (*(op) = _U_dyn_op (UNW_DYN_POP_FRAMES, (qp), (when), 0, (num_frames))) - --#define _U_dyn_op_label_state(op, label) \ -- (*(op) = _U_dyn_op (UNW_DYN_LABEL_STATE, _U_QP_TRUE, -1, 0, (label))) -+#define _U_dyn_op_label_state(op, label) \ -+ (*(op) = _U_dyn_op (UNW_DYN_LABEL_STATE, _U_QP_TRUE, -1, 0, (label))) - --#define _U_dyn_op_copy_state(op, label) \ -- (*(op) = _U_dyn_op (UNW_DYN_COPY_STATE, _U_QP_TRUE, -1, 0, (label))) -+#define _U_dyn_op_copy_state(op, label) \ -+ (*(op) = _U_dyn_op (UNW_DYN_COPY_STATE, _U_QP_TRUE, -1, 0, (label))) - --#define _U_dyn_op_alias(op, qp, when, addr) \ -- (*(op) = _U_dyn_op (UNW_DYN_ALIAS, (qp), (when), 0, (addr))) -+#define _U_dyn_op_alias(op, qp, when, addr) \ -+ (*(op) = _U_dyn_op (UNW_DYN_ALIAS, (qp), (when), 0, (addr))) - --#define _U_dyn_op_stop(op) \ -- (*(op) = _U_dyn_op (UNW_DYN_STOP, _U_QP_TRUE, -1, 0, 0)) -+#define _U_dyn_op_stop(op) \ -+ (*(op) = _U_dyn_op (UNW_DYN_STOP, _U_QP_TRUE, -1, 0, 0)) - - /* The target-dependent qualifying predicate which is always TRUE. On - IA-64, that's p0 (0), on non-predicated architectures, the value is - ignored. */ --#define _U_QP_TRUE _U_TDEP_QP_TRUE -+#define _U_QP_TRUE _U_TDEP_QP_TRUE -diff --git a/frysk-imports/libunwind/include/libunwind-hppa.h b/frysk-imports/libunwind/include/libunwind-hppa.h -index 74ea70d..7013aa7 100644 ---- a/frysk-imports/libunwind/include/libunwind-hppa.h -+++ b/frysk-imports/libunwind/include/libunwind-hppa.h -@@ -32,17 +32,17 @@ extern "C" { - #include - #include - --#define UNW_TARGET hppa --#define UNW_TARGET_HPPA 1 -+#define UNW_TARGET hppa -+#define UNW_TARGET_HPPA 1 - --#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ - - /* This needs to be big enough to accommodate "struct cursor", while - leaving some slack for future expansion. Changing this value will - require recompiling all users of this library. Stack allocation is - relatively cheap and unwind-state copying is relatively rare, so we - want to err on making it rather too big than too small. */ --#define UNW_TDEP_CURSOR_LEN 511 -+#define UNW_TDEP_CURSOR_LEN 511 - - typedef uint32_t unw_word_t; - typedef int32_t unw_sword_t; -@@ -61,13 +61,13 @@ typedef enum - implementation of the C++ exception handling ABI. See - _Unwind_SetGR() and _Unwind_GetGR() for details. */ - UNW_HPPA_GR = 0, -- UNW_HPPA_RP = 2, /* return pointer */ -- UNW_HPPA_FP = 3, /* frame pointer */ -+ UNW_HPPA_RP = 2, /* return pointer */ -+ UNW_HPPA_FP = 3, /* frame pointer */ - UNW_HPPA_SP = UNW_HPPA_GR + 30, - - UNW_HPPA_FR = UNW_HPPA_GR + 32, - -- UNW_HPPA_IP = UNW_HPPA_FR + 32, /* instruction pointer */ -+ UNW_HPPA_IP = UNW_HPPA_FR + 32, /* instruction pointer */ - - /* other "preserved" registers (fpsr etc.)... */ - -@@ -76,10 +76,10 @@ typedef enum - exception-handling registers which we then alias to the actual - physical register. */ - -- UNW_HPPA_EH0 = UNW_HPPA_IP + 1, /* alias for UNW_HPPA_GR + 20 */ -- UNW_HPPA_EH1 = UNW_HPPA_EH0 + 1, /* alias for UNW_HPPA_GR + 21 */ -- UNW_HPPA_EH2 = UNW_HPPA_EH1 + 1, /* alias for UNW_HPPA_GR + 22 */ -- UNW_HPPA_EH3 = UNW_HPPA_EH2 + 1, /* alias for UNW_HPPA_GR + 31 */ -+ UNW_HPPA_EH0 = UNW_HPPA_IP + 1, /* alias for UNW_HPPA_GR + 20 */ -+ UNW_HPPA_EH1 = UNW_HPPA_EH0 + 1, /* alias for UNW_HPPA_GR + 21 */ -+ UNW_HPPA_EH2 = UNW_HPPA_EH1 + 1, /* alias for UNW_HPPA_GR + 22 */ -+ UNW_HPPA_EH3 = UNW_HPPA_EH2 + 1, /* alias for UNW_HPPA_GR + 31 */ - - /* frame info (read-only) */ - UNW_HPPA_CFA, -@@ -92,7 +92,7 @@ typedef enum - } - hppa_regnum_t; - --#define UNW_TDEP_NUM_EH_REGS 4 -+#define UNW_TDEP_NUM_EH_REGS 4 - - typedef struct unw_tdep_save_loc - { -@@ -103,7 +103,7 @@ unw_tdep_save_loc_t; - /* On PA-RISC, we can directly use ucontext_t as the unwind context. */ - typedef ucontext_t unw_tdep_context_t; - --#define unw_tdep_is_fpreg(r) ((unsigned) ((r) - UNW_HPPA_FR) < 32) -+#define unw_tdep_is_fpreg(r) ((unsigned) ((r) - UNW_HPPA_FR) < 32) - - #include "libunwind-dynamic.h" - -@@ -115,7 +115,7 @@ unw_tdep_proc_info_t; - - #include "libunwind-common.h" - --#define unw_tdep_getcontext UNW_ARCH_OBJ (getcontext) -+#define unw_tdep_getcontext UNW_ARCH_OBJ (getcontext) - extern int unw_tdep_getcontext (unw_tdep_context_t *); - - #if defined(__cplusplus) || defined(c_plusplus) -diff --git a/frysk-imports/libunwind/include/libunwind-ia64.h b/frysk-imports/libunwind/include/libunwind-ia64.h -index fb2fbfe..0cc4f39 100644 ---- a/frysk-imports/libunwind/include/libunwind-ia64.h -+++ b/frysk-imports/libunwind/include/libunwind-ia64.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -47,24 +47,24 @@ extern "C" { - # define UNW_GENERIC_ONLY - #endif - --#define UNW_TARGET ia64 --#define UNW_TARGET_IA64 1 -+#define UNW_TARGET ia64 -+#define UNW_TARGET_IA64 1 - --#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ - - /* This needs to be big enough to accommodate "struct cursor", while - leaving some slack for future expansion. Changing this value will - require recompiling all users of this library. Stack allocation is - relatively cheap and unwind-state copying is relatively rare, so we - want to err on making it rather too big than too small. */ --#define UNW_TDEP_CURSOR_LEN 511 -+#define UNW_TDEP_CURSOR_LEN 511 - - /* If this bit is it indicates that the procedure saved all of ar.bsp, - ar.bspstore, and ar.rnat. If, additionally, ar.bsp != saved ar.bsp, - then this procedure has performed a register-backing-store switch. */ --#define UNW_PI_FLAG_IA64_RBS_SWITCH_BIT (UNW_PI_FLAG_FIRST_TDEP_BIT + 0) -+#define UNW_PI_FLAG_IA64_RBS_SWITCH_BIT (UNW_PI_FLAG_FIRST_TDEP_BIT + 0) - --#define UNW_PI_FLAG_IA64_RBS_SWITCH (1 << UNW_PI_FLAG_IA64_RBS_SWITCH_BIT) -+#define UNW_PI_FLAG_IA64_RBS_SWITCH (1 << UNW_PI_FLAG_IA64_RBS_SWITCH_BIT) - - typedef uint64_t unw_word_t; - typedef int64_t unw_sword_t; -@@ -76,7 +76,7 @@ typedef int64_t unw_sword_t; - typedef union - { - struct { unw_word_t bits[2]; } raw; -- long double dummy; /* dummy to force 16-byte alignment */ -+ long double dummy; /* dummy to force 16-byte alignment */ - } - unw_tdep_fpreg_t; - -@@ -92,15 +92,15 @@ typedef enum - This convention facilitates architecture-independent - implementation of the C++ exception handling ABI. See - _Unwind_SetGR() and _Unwind_GetGR() for details. */ -- UNW_IA64_GR = 0, /* general registers (r0..r127) */ -+ UNW_IA64_GR = 0, /* general registers (r0..r127) */ - UNW_IA64_GP = UNW_IA64_GR + 1, - UNW_IA64_TP = UNW_IA64_GR + 13, - -- UNW_IA64_NAT = UNW_IA64_GR + 128, /* NaT registers (nat0..nat127) */ -+ UNW_IA64_NAT = UNW_IA64_GR + 128, /* NaT registers (nat0..nat127) */ - -- UNW_IA64_FR = UNW_IA64_NAT + 128, /* fp registers (f0..f127) */ -+ UNW_IA64_FR = UNW_IA64_NAT + 128, /* fp registers (f0..f127) */ - -- UNW_IA64_AR = UNW_IA64_FR + 128, /* application registers (ar0..r127) */ -+ UNW_IA64_AR = UNW_IA64_FR + 128, /* application registers (ar0..r127) */ - UNW_IA64_AR_RSC = UNW_IA64_AR + 16, - UNW_IA64_AR_BSP = UNW_IA64_AR + 17, - UNW_IA64_AR_BSPSTORE = UNW_IA64_AR + 18, -@@ -115,9 +115,9 @@ typedef enum - UNW_IA64_AR_LC = UNW_IA64_AR + 65, - UNW_IA64_AR_EC = UNW_IA64_AR + 66, - -- UNW_IA64_BR = UNW_IA64_AR + 128, /* branch registers (b0..p7) */ -- UNW_IA64_RP = UNW_IA64_BR + 0, /* return pointer (rp) */ -- UNW_IA64_PR = UNW_IA64_BR + 8, /* predicate registers (p0..p63) */ -+ UNW_IA64_BR = UNW_IA64_AR + 128, /* branch registers (b0..p7) */ -+ UNW_IA64_RP = UNW_IA64_BR + 0, /* return pointer (rp) */ -+ UNW_IA64_PR = UNW_IA64_BR + 8, /* predicate registers (p0..p63) */ - UNW_IA64_CFM, - - /* frame info: */ -@@ -133,7 +133,7 @@ typedef enum - } - ia64_regnum_t; - --#define UNW_TDEP_NUM_EH_REGS 4 /* r15-r18 are exception args */ -+#define UNW_TDEP_NUM_EH_REGS 4 /* r15-r18 are exception args */ - - typedef struct unw_tdep_save_loc - { -@@ -150,7 +150,7 @@ unw_tdep_save_loc_t; - /* On IA-64, we can directly use ucontext_t as the unwind context. */ - typedef ucontext_t unw_tdep_context_t; - --#define unw_tdep_is_fpreg(r) ((unsigned) ((r) - UNW_IA64_FR) < 128) -+#define unw_tdep_is_fpreg(r) ((unsigned) ((r) - UNW_IA64_FR) < 128) - - #include "libunwind-dynamic.h" - #include "libunwind-common.h" -@@ -159,9 +159,9 @@ typedef ucontext_t unw_tdep_context_t; - /* In theory, we could use _Uia64_getcontext() on HP-UX as well, but - the benefit of doing so would be marginal given that it can't - support UNW_LOCAL_ONLY. */ --# define unw_tdep_getcontext getcontext -+# define unw_tdep_getcontext getcontext - #else --# define unw_tdep_getcontext UNW_ARCH_OBJ (getcontext) -+# define unw_tdep_getcontext UNW_ARCH_OBJ (getcontext) - extern int unw_tdep_getcontext (unw_tdep_context_t *); - #endif - -@@ -171,17 +171,17 @@ typedef ucontext_t unw_tdep_context_t; - with malloc(), and should be free()d during the put_unwind_info() - callback. This routine is signal-safe for the local-address-space - case ONLY. */ --#define unw_search_ia64_unwind_table UNW_OBJ(search_unwind_table) -+#define unw_search_ia64_unwind_table UNW_OBJ(search_unwind_table) - extern int unw_search_ia64_unwind_table (unw_addr_space_t, unw_word_t, -- unw_dyn_info_t *, unw_proc_info_t *, -- int, void *); -+ unw_dyn_info_t *, unw_proc_info_t *, -+ int, void *); - - /* This is a helper routine which the get_dyn_info_list_addr() - callback can use to locate the special dynamic-info list entry in - an IA-64 unwind table. If the entry exists in the table, the - list-address is returned. In all other cases, 0 is returned. */ - extern unw_word_t _Uia64_find_dyn_list (unw_addr_space_t, unw_dyn_info_t *, -- void *); -+ void *); - - /* This is a helper routine to obtain the kernel-unwind info. It is - signal-safe. */ -diff --git a/frysk-imports/libunwind/include/libunwind-mips.h b/frysk-imports/libunwind/include/libunwind-mips.h -index 91f7001..4591d06 100644 ---- a/frysk-imports/libunwind/include/libunwind-mips.h -+++ b/frysk-imports/libunwind/include/libunwind-mips.h -@@ -36,10 +36,10 @@ extern "C" { - # undef mips - #endif - --#define UNW_TARGET mips --#define UNW_TARGET_MIPS 1 -+#define UNW_TARGET mips -+#define UNW_TARGET_MIPS 1 - --#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ - - /* This needs to be big enough to accommodate "struct cursor", while - leaving some slack for future expansion. Changing this value will -@@ -48,7 +48,7 @@ extern "C" { - want to err on making it rather too big than too small. */ - - /* FIXME for MIPS. Too big? What do other things use for similar tasks? */ --#define UNW_TDEP_CURSOR_LEN 4096 -+#define UNW_TDEP_CURSOR_LEN 4096 - - /* The size of a "word" varies on MIPS. This type is used for memory - addresses and register values. To allow a single library to support -@@ -95,6 +95,8 @@ typedef enum - UNW_MIPS_R30, - UNW_MIPS_R31, - -+ UNW_MIPS_PC = 34, -+ - /* FIXME: Other registers! */ - - /* For MIPS, the CFA is the value of SP (r29) at the call site in the -@@ -117,7 +119,7 @@ typedef enum - } - mips_abi_t; - --#define UNW_TDEP_NUM_EH_REGS 2 /* FIXME for MIPS. */ -+#define UNW_TDEP_NUM_EH_REGS 2 /* FIXME for MIPS. */ - - typedef struct unw_tdep_save_loc - { -@@ -145,7 +147,7 @@ unw_tdep_proc_info_t; - #define unw_tdep_getcontext UNW_ARCH_OBJ(getcontext) - extern int unw_tdep_getcontext (ucontext_t *uc); - --#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) - extern int unw_tdep_is_fpreg (int); - - #if defined(__cplusplus) || defined(c_plusplus) -diff --git a/frysk-imports/libunwind/include/libunwind-ppc32.h b/frysk-imports/libunwind/include/libunwind-ppc32.h -index c45a43a..47ebfde 100644 ---- a/frysk-imports/libunwind/include/libunwind-ppc32.h -+++ b/frysk-imports/libunwind/include/libunwind-ppc32.h -@@ -39,10 +39,10 @@ extern "C" { - #include - #include - --#define UNW_TARGET ppc32 --#define UNW_TARGET_PPC32 1 -+#define UNW_TARGET ppc32 -+#define UNW_TARGET_PPC32 1 - --#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ - - /* - * This needs to be big enough to accommodate "struct cursor", while -@@ -52,7 +52,7 @@ extern "C" { - * to err on making it rather too big than too small. - * - * To simplify this whole process, we are at least initially taking the -- * tack that ppc32 regs map straight across to the .eh_frame column register -+ * tack that UNW_PPC32_* map straight across to the .eh_frame column register - * numbers. These register numbers come from gcc's source in - * gcc/config/rs6000/rs6000.h - * -@@ -62,7 +62,7 @@ extern "C" { - * round that up to 280. - */ - --#define UNW_TDEP_CURSOR_LEN 200 -+#define UNW_TDEP_CURSOR_LEN 280 - - #if __WORDSIZE==32 - typedef uint32_t unw_word_t; -@@ -170,7 +170,7 @@ ppc32_regnum_t; - * passing parameters to exception handlers. - */ - --#define UNW_TDEP_NUM_EH_REGS 4 -+#define UNW_TDEP_NUM_EH_REGS 4 - - typedef struct unw_tdep_save_loc - { -@@ -185,7 +185,7 @@ typedef ucontext_t unw_tdep_context_t; - using the "getcontext" name just because it's using libunwind. We - can't just use __getcontext() either, because that isn't exported - by glibc... */ --#define unw_tdep_getcontext(uc) (getcontext (uc), 0) -+#define unw_tdep_getcontext(uc) (getcontext (uc), 0) - - #include "libunwind-dynamic.h" - -@@ -197,7 +197,7 @@ unw_tdep_proc_info_t; - - #include "libunwind-common.h" - --#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) - extern int unw_tdep_is_fpreg (int); - - #if defined(__cplusplus) || defined(c_plusplus) -diff --git a/frysk-imports/libunwind/include/libunwind-ppc64.h b/frysk-imports/libunwind/include/libunwind-ppc64.h -index 1a5e626..9944628 100644 ---- a/frysk-imports/libunwind/include/libunwind-ppc64.h -+++ b/frysk-imports/libunwind/include/libunwind-ppc64.h -@@ -39,10 +39,10 @@ extern "C" { - #include - #include - --#define UNW_TARGET ppc64 --#define UNW_TARGET_PPC64 1 -+#define UNW_TARGET ppc64 -+#define UNW_TARGET_PPC64 1 - --#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ - - /* - * This needs to be big enough to accommodate "struct cursor", while -@@ -52,7 +52,7 @@ extern "C" { - * to err on making it rather too big than too small. - * - * To simplify this whole process, we are at least initially taking the -- * tack that ppc64 regs map straight across to the .eh_frame column register -+ * tack that UNW_PPC64_* map straight across to the .eh_frame column register - * numbers. These register numbers come from gcc's source in - * gcc/config/rs6000/rs6000.h - * -@@ -222,12 +222,19 @@ typedef enum - } - ppc64_regnum_t; - -+typedef enum -+ { -+ UNW_PPC64_ABI_ELFv1, -+ UNW_PPC64_ABI_ELFv2 -+ } -+ppc64_abi_t; -+ - /* - * According to David Edelsohn, GNU gcc uses R3, R4, R5, and maybe R6 for - * passing parameters to exception handlers. - */ - --#define UNW_TDEP_NUM_EH_REGS 4 -+#define UNW_TDEP_NUM_EH_REGS 4 - - typedef struct unw_tdep_save_loc - { -@@ -242,7 +249,7 @@ typedef ucontext_t unw_tdep_context_t; - using the "getcontext" name just because it's using libunwind. We - can't just use __getcontext() either, because that isn't exported - by glibc... */ --#define unw_tdep_getcontext(uc) (getcontext (uc), 0) -+#define unw_tdep_getcontext(uc) (getcontext (uc), 0) - - #include "libunwind-dynamic.h" - -@@ -254,7 +261,7 @@ unw_tdep_proc_info_t; - - #include "libunwind-common.h" - --#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) - extern int unw_tdep_is_fpreg (int); - - #if defined(__cplusplus) || defined(c_plusplus) -diff --git a/frysk-imports/libunwind/include/libunwind-ptrace.h b/frysk-imports/libunwind/include/libunwind-ptrace.h -index 7fca205..801325c 100644 ---- a/frysk-imports/libunwind/include/libunwind-ptrace.h -+++ b/frysk-imports/libunwind/include/libunwind-ptrace.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -40,18 +40,18 @@ extern "C" { - extern void *_UPT_create (pid_t); - extern void _UPT_destroy (void *); - extern int _UPT_find_proc_info (unw_addr_space_t, unw_word_t, -- unw_proc_info_t *, int, void *); -+ unw_proc_info_t *, int, void *); - extern void _UPT_put_unwind_info (unw_addr_space_t, unw_proc_info_t *, void *); - extern int _UPT_get_dyn_info_list_addr (unw_addr_space_t, unw_word_t *, -- void *); -+ void *); - extern int _UPT_access_mem (unw_addr_space_t, unw_word_t, unw_word_t *, int, -- void *); -+ void *); - extern int _UPT_access_reg (unw_addr_space_t, unw_regnum_t, unw_word_t *, -- int, void *); -+ int, void *); - extern int _UPT_access_fpreg (unw_addr_space_t, unw_regnum_t, unw_fpreg_t *, -- int, void *); -+ int, void *); - extern int _UPT_get_proc_name (unw_addr_space_t, unw_word_t, char *, size_t, -- unw_word_t *, void *); -+ unw_word_t *, void *); - extern int _UPT_resume (unw_addr_space_t, unw_cursor_t *, void *); - extern unw_accessors_t _UPT_accessors; - -diff --git a/frysk-imports/libunwind/include/libunwind-sh.h b/frysk-imports/libunwind/include/libunwind-sh.h -new file mode 100644 -index 0000000..927f61f ---- /dev/null -+++ b/frysk-imports/libunwind/include/libunwind-sh.h -@@ -0,0 +1,114 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef LIBUNWIND_H -+#define LIBUNWIND_H -+ -+#if defined(__cplusplus) || defined(c_plusplus) -+extern "C" { -+#endif -+ -+#include -+#include -+#include -+ -+#define UNW_TARGET sh -+#define UNW_TARGET_SH 1 -+ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+ -+/* This needs to be big enough to accommodate "struct cursor", while -+ leaving some slack for future expansion. Changing this value will -+ require recompiling all users of this library. Stack allocation is -+ relatively cheap and unwind-state copying is relatively rare, so we -+ want to err on making it rather too big than too small. */ -+ -+#define UNW_TDEP_CURSOR_LEN 4096 -+ -+typedef uint32_t unw_word_t; -+typedef int32_t unw_sword_t; -+ -+typedef long double unw_tdep_fpreg_t; -+ -+typedef enum -+ { -+ UNW_SH_R0, -+ UNW_SH_R1, -+ UNW_SH_R2, -+ UNW_SH_R3, -+ UNW_SH_R4, -+ UNW_SH_R5, -+ UNW_SH_R6, -+ UNW_SH_R7, -+ UNW_SH_R8, -+ UNW_SH_R9, -+ UNW_SH_R10, -+ UNW_SH_R11, -+ UNW_SH_R12, -+ UNW_SH_R13, -+ UNW_SH_R14, -+ UNW_SH_R15, -+ -+ UNW_SH_PC, -+ UNW_SH_PR, -+ -+ UNW_TDEP_LAST_REG = UNW_SH_PR, -+ -+ UNW_TDEP_IP = UNW_SH_PR, -+ UNW_TDEP_SP = UNW_SH_R15, -+ UNW_TDEP_EH = UNW_SH_R0 -+ } -+sh_regnum_t; -+ -+#define UNW_TDEP_NUM_EH_REGS 2 -+ -+typedef ucontext_t unw_tdep_context_t; -+ -+#define unw_tdep_getcontext(uc) (getcontext (uc), 0) -+ -+typedef struct unw_tdep_save_loc -+ { -+ /* Additional target-dependent info on a save location. */ -+ } -+unw_tdep_save_loc_t; -+ -+#include "libunwind-dynamic.h" -+ -+typedef struct -+ { -+ /* no sh-specific auxiliary proc-info */ -+ } -+unw_tdep_proc_info_t; -+ -+#include "libunwind-common.h" -+ -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+extern int unw_tdep_is_fpreg (int); -+ -+#if defined(__cplusplus) || defined(c_plusplus) -+} -+#endif -+ -+#endif /* LIBUNWIND_H */ -diff --git a/frysk-imports/libunwind/include/libunwind-tilegx.h b/frysk-imports/libunwind/include/libunwind-tilegx.h -new file mode 100644 -index 0000000..0f84ea6 ---- /dev/null -+++ b/frysk-imports/libunwind/include/libunwind-tilegx.h -@@ -0,0 +1,161 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef LIBUNWIND_H -+#define LIBUNWIND_H -+ -+#if defined(__cplusplus) || defined(c_plusplus) -+extern "C" { -+#endif -+ -+#include -+#include -+ -+#define UNW_TARGET tilegx -+#define UNW_TARGET_TILEGX 1 -+ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+ -+/* This needs to be big enough to accommodate "struct cursor", while -+ leaving some slack for future expansion. Changing this value will -+ require recompiling all users of this library. Stack allocation is -+ relatively cheap and unwind-state copying is relatively rare, so we -+ want to err on making it rather too big than too small. */ -+ -+#define UNW_TDEP_CURSOR_LEN 4096 -+ -+/* The size of a "word" varies on TILEGX. This type is used for memory -+ addresses and register values. */ -+typedef uint64_t unw_word_t; -+typedef int64_t unw_sword_t; -+ -+typedef long double unw_tdep_fpreg_t; -+ -+typedef enum -+{ -+ UNW_TILEGX_R0, -+ UNW_TILEGX_R1, -+ UNW_TILEGX_R2, -+ UNW_TILEGX_R3, -+ UNW_TILEGX_R4, -+ UNW_TILEGX_R5, -+ UNW_TILEGX_R6, -+ UNW_TILEGX_R7, -+ UNW_TILEGX_R8, -+ UNW_TILEGX_R9, -+ UNW_TILEGX_R10, -+ UNW_TILEGX_R11, -+ UNW_TILEGX_R12, -+ UNW_TILEGX_R13, -+ UNW_TILEGX_R14, -+ UNW_TILEGX_R15, -+ UNW_TILEGX_R16, -+ UNW_TILEGX_R17, -+ UNW_TILEGX_R18, -+ UNW_TILEGX_R19, -+ UNW_TILEGX_R20, -+ UNW_TILEGX_R21, -+ UNW_TILEGX_R22, -+ UNW_TILEGX_R23, -+ UNW_TILEGX_R24, -+ UNW_TILEGX_R25, -+ UNW_TILEGX_R26, -+ UNW_TILEGX_R27, -+ UNW_TILEGX_R28, -+ UNW_TILEGX_R29, -+ UNW_TILEGX_R30, -+ UNW_TILEGX_R31, -+ UNW_TILEGX_R32, -+ UNW_TILEGX_R33, -+ UNW_TILEGX_R34, -+ UNW_TILEGX_R35, -+ UNW_TILEGX_R36, -+ UNW_TILEGX_R37, -+ UNW_TILEGX_R38, -+ UNW_TILEGX_R39, -+ UNW_TILEGX_R40, -+ UNW_TILEGX_R41, -+ UNW_TILEGX_R42, -+ UNW_TILEGX_R43, -+ UNW_TILEGX_R44, -+ UNW_TILEGX_R45, -+ UNW_TILEGX_R46, -+ UNW_TILEGX_R47, -+ UNW_TILEGX_R48, -+ UNW_TILEGX_R49, -+ UNW_TILEGX_R50, -+ UNW_TILEGX_R51, -+ UNW_TILEGX_R52, -+ UNW_TILEGX_R53, -+ UNW_TILEGX_R54, -+ UNW_TILEGX_R55, -+ -+ /* FIXME: Other registers! */ -+ -+ UNW_TILEGX_PC, -+ /* For TILEGX, the CFA is the value of SP (r54) at the call site in the -+ previous frame. */ -+ UNW_TILEGX_CFA, -+ -+ UNW_TDEP_LAST_REG = UNW_TILEGX_PC, -+ -+ UNW_TDEP_IP = UNW_TILEGX_R55, /* R55 is link register for Tilegx */ -+ UNW_TDEP_SP = UNW_TILEGX_R54, -+ UNW_TDEP_EH = UNW_TILEGX_R0 /* FIXME. */ -+} tilegx_regnum_t; -+ -+typedef enum -+{ -+ UNW_TILEGX_ABI_N64 = 2 -+} tilegx_abi_t; -+ -+#define UNW_TDEP_NUM_EH_REGS 2 /* FIXME for TILEGX. */ -+ -+typedef struct unw_tdep_save_loc -+{ -+ /* Additional target-dependent info on a save location. */ -+} unw_tdep_save_loc_t; -+ -+typedef ucontext_t unw_tdep_context_t; -+ -+#include "libunwind-dynamic.h" -+ -+typedef struct -+{ -+ /* no tilegx-specific auxiliary proc-info */ -+} unw_tdep_proc_info_t; -+ -+#include "libunwind-common.h" -+ -+#define unw_tdep_getcontext getcontext -+ -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+extern int unw_tdep_is_fpreg (int); -+ -+#if defined(__cplusplus) || defined(c_plusplus) -+} -+#endif -+ -+#endif /* LIBUNWIND_H */ -diff --git a/frysk-imports/libunwind/include/libunwind-x86.h b/frysk-imports/libunwind/include/libunwind-x86.h -index 1e321db..40fe046 100644 ---- a/frysk-imports/libunwind/include/libunwind-x86.h -+++ b/frysk-imports/libunwind/include/libunwind-x86.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -30,20 +30,21 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - extern "C" { - #endif - -+#include - #include - #include - --#define UNW_TARGET x86 --#define UNW_TARGET_X86 1 -+#define UNW_TARGET x86 -+#define UNW_TARGET_X86 1 - --#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ - - /* This needs to be big enough to accommodate "struct cursor", while - leaving some slack for future expansion. Changing this value will - require recompiling all users of this library. Stack allocation is - relatively cheap and unwind-state copying is relatively rare, so we - want to err on making it rather too big than too small. */ --#define UNW_TDEP_CURSOR_LEN 127 -+#define UNW_TDEP_CURSOR_LEN 127 - - typedef uint32_t unw_word_t; - typedef int32_t unw_sword_t; -@@ -71,88 +72,88 @@ typedef enum - DWARF, but that doesn't work because the libunwind requires - that the exception argument registers be consecutive, which the - wouldn't be with the DWARF numbering. */ -- UNW_X86_EAX, /* scratch (exception argument 1) */ -- UNW_X86_EDX, /* scratch (exception argument 2) */ -- UNW_X86_ECX, /* scratch */ -- UNW_X86_EBX, /* preserved */ -- UNW_X86_ESI, /* preserved */ -- UNW_X86_EDI, /* preserved */ -- UNW_X86_EBP, /* (optional) frame-register */ -- UNW_X86_ESP, /* (optional) frame-register */ -- UNW_X86_EIP, /* frame-register */ -- UNW_X86_EFLAGS, /* scratch (except for "direction", which is fixed */ -- UNW_X86_TRAPNO, /* scratch */ -+ UNW_X86_EAX, /* scratch (exception argument 1) */ -+ UNW_X86_EDX, /* scratch (exception argument 2) */ -+ UNW_X86_ECX, /* scratch */ -+ UNW_X86_EBX, /* preserved */ -+ UNW_X86_ESI, /* preserved */ -+ UNW_X86_EDI, /* preserved */ -+ UNW_X86_EBP, /* (optional) frame-register */ -+ UNW_X86_ESP, /* (optional) frame-register */ -+ UNW_X86_EIP, /* frame-register */ -+ UNW_X86_EFLAGS, /* scratch (except for "direction", which is fixed */ -+ UNW_X86_TRAPNO, /* scratch */ - - /* MMX/stacked-fp registers */ -- UNW_X86_ST0, /* fp return value */ -- UNW_X86_ST1, /* scratch */ -- UNW_X86_ST2, /* scratch */ -- UNW_X86_ST3, /* scratch */ -- UNW_X86_ST4, /* scratch */ -- UNW_X86_ST5, /* scratch */ -- UNW_X86_ST6, /* scratch */ -- UNW_X86_ST7, /* scratch */ -- -- UNW_X86_FCW, /* scratch */ -- UNW_X86_FSW, /* scratch */ -- UNW_X86_FTW, /* scratch */ -- UNW_X86_FOP, /* scratch */ -- UNW_X86_FCS, /* scratch */ -- UNW_X86_FIP, /* scratch */ -- UNW_X86_FEA, /* scratch */ -- UNW_X86_FDS, /* scratch */ -+ UNW_X86_ST0, /* fp return value */ -+ UNW_X86_ST1, /* scratch */ -+ UNW_X86_ST2, /* scratch */ -+ UNW_X86_ST3, /* scratch */ -+ UNW_X86_ST4, /* scratch */ -+ UNW_X86_ST5, /* scratch */ -+ UNW_X86_ST6, /* scratch */ -+ UNW_X86_ST7, /* scratch */ -+ -+ UNW_X86_FCW, /* scratch */ -+ UNW_X86_FSW, /* scratch */ -+ UNW_X86_FTW, /* scratch */ -+ UNW_X86_FOP, /* scratch */ -+ UNW_X86_FCS, /* scratch */ -+ UNW_X86_FIP, /* scratch */ -+ UNW_X86_FEA, /* scratch */ -+ UNW_X86_FDS, /* scratch */ - - /* SSE registers */ -- UNW_X86_XMM0_lo, /* scratch */ -- UNW_X86_XMM0_hi, /* scratch */ -- UNW_X86_XMM1_lo, /* scratch */ -- UNW_X86_XMM1_hi, /* scratch */ -- UNW_X86_XMM2_lo, /* scratch */ -- UNW_X86_XMM2_hi, /* scratch */ -- UNW_X86_XMM3_lo, /* scratch */ -- UNW_X86_XMM3_hi, /* scratch */ -- UNW_X86_XMM4_lo, /* scratch */ -- UNW_X86_XMM4_hi, /* scratch */ -- UNW_X86_XMM5_lo, /* scratch */ -- UNW_X86_XMM5_hi, /* scratch */ -- UNW_X86_XMM6_lo, /* scratch */ -- UNW_X86_XMM6_hi, /* scratch */ -- UNW_X86_XMM7_lo, /* scratch */ -- UNW_X86_XMM7_hi, /* scratch */ -- -- UNW_X86_MXCSR, /* scratch */ -+ UNW_X86_XMM0_lo, /* scratch */ -+ UNW_X86_XMM0_hi, /* scratch */ -+ UNW_X86_XMM1_lo, /* scratch */ -+ UNW_X86_XMM1_hi, /* scratch */ -+ UNW_X86_XMM2_lo, /* scratch */ -+ UNW_X86_XMM2_hi, /* scratch */ -+ UNW_X86_XMM3_lo, /* scratch */ -+ UNW_X86_XMM3_hi, /* scratch */ -+ UNW_X86_XMM4_lo, /* scratch */ -+ UNW_X86_XMM4_hi, /* scratch */ -+ UNW_X86_XMM5_lo, /* scratch */ -+ UNW_X86_XMM5_hi, /* scratch */ -+ UNW_X86_XMM6_lo, /* scratch */ -+ UNW_X86_XMM6_hi, /* scratch */ -+ UNW_X86_XMM7_lo, /* scratch */ -+ UNW_X86_XMM7_hi, /* scratch */ -+ -+ UNW_X86_MXCSR, /* scratch */ - - /* segment registers */ -- UNW_X86_GS, /* special */ -- UNW_X86_FS, /* special */ -- UNW_X86_ES, /* special */ -- UNW_X86_DS, /* special */ -- UNW_X86_SS, /* special */ -- UNW_X86_CS, /* special */ -- UNW_X86_TSS, /* special */ -- UNW_X86_LDT, /* special */ -+ UNW_X86_GS, /* special */ -+ UNW_X86_FS, /* special */ -+ UNW_X86_ES, /* special */ -+ UNW_X86_DS, /* special */ -+ UNW_X86_SS, /* special */ -+ UNW_X86_CS, /* special */ -+ UNW_X86_TSS, /* special */ -+ UNW_X86_LDT, /* special */ - - /* frame info (read-only) */ - UNW_X86_CFA, - -- UNW_X86_XMM0, /* scratch */ -- UNW_X86_XMM1, /* scratch */ -- UNW_X86_XMM2, /* scratch */ -- UNW_X86_XMM3, /* scratch */ -- UNW_X86_XMM4, /* scratch */ -- UNW_X86_XMM5, /* scratch */ -- UNW_X86_XMM6, /* scratch */ -- UNW_X86_XMM7, /* scratch */ -+ UNW_X86_XMM0, /* scratch */ -+ UNW_X86_XMM1, /* scratch */ -+ UNW_X86_XMM2, /* scratch */ -+ UNW_X86_XMM3, /* scratch */ -+ UNW_X86_XMM4, /* scratch */ -+ UNW_X86_XMM5, /* scratch */ -+ UNW_X86_XMM6, /* scratch */ -+ UNW_X86_XMM7, /* scratch */ - - UNW_TDEP_LAST_REG = UNW_X86_XMM7, - - UNW_TDEP_IP = UNW_X86_EIP, -- UNW_TDEP_SP = UNW_X86_CFA, -+ UNW_TDEP_SP = UNW_X86_ESP, - UNW_TDEP_EH = UNW_X86_EAX - } - x86_regnum_t; - --#define UNW_TDEP_NUM_EH_REGS 2 /* eax and edx are exception args */ -+#define UNW_TDEP_NUM_EH_REGS 2 /* eax and edx are exception args */ - - typedef struct unw_tdep_save_loc - { -@@ -163,12 +164,6 @@ unw_tdep_save_loc_t; - /* On x86, we can directly use ucontext_t as the unwind context. */ - typedef ucontext_t unw_tdep_context_t; - --/* XXX this is not ideal: an application should not be prevented from -- using the "getcontext" name just because it's using libunwind. We -- can't just use __getcontext() either, because that isn't exported -- by glibc... */ --#define unw_tdep_getcontext(uc) (getcontext (uc), 0) -- - #include "libunwind-dynamic.h" - - typedef struct -@@ -179,7 +174,10 @@ unw_tdep_proc_info_t; - - #include "libunwind-common.h" - --#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+#define unw_tdep_getcontext UNW_ARCH_OBJ(getcontext) -+extern int unw_tdep_getcontext (unw_tdep_context_t *); -+ -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) - extern int unw_tdep_is_fpreg (int); - - #if defined(__cplusplus) || defined(c_plusplus) -diff --git a/frysk-imports/libunwind/include/libunwind-x86_64.h b/frysk-imports/libunwind/include/libunwind-x86_64.h -index a87b57e..78eb541 100644 ---- a/frysk-imports/libunwind/include/libunwind-x86_64.h -+++ b/frysk-imports/libunwind/include/libunwind-x86_64.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -32,20 +32,21 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - extern "C" { - #endif - -+#include - #include - #include - --#define UNW_TARGET x86_64 --#define UNW_TARGET_X86_64 1 -+#define UNW_TARGET x86_64 -+#define UNW_TARGET_X86_64 1 - --#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ -+#define _U_TDEP_QP_TRUE 0 /* see libunwind-dynamic.h */ - - /* This needs to be big enough to accommodate "struct cursor", while - leaving some slack for future expansion. Changing this value will - require recompiling all users of this library. Stack allocation is - relatively cheap and unwind-state copying is relatively rare, so we - want to err on making it rather too big than too small. */ --#define UNW_TDEP_CURSOR_LEN 127 -+#define UNW_TDEP_CURSOR_LEN 127 - - typedef uint64_t unw_word_t; - typedef int64_t unw_sword_t; -@@ -71,14 +72,33 @@ typedef enum - UNW_X86_64_R14, - UNW_X86_64_R15, - UNW_X86_64_RIP, -+#ifdef CONFIG_MSABI_SUPPORT -+ UNW_X86_64_XMM0, -+ UNW_X86_64_XMM1, -+ UNW_X86_64_XMM2, -+ UNW_X86_64_XMM3, -+ UNW_X86_64_XMM4, -+ UNW_X86_64_XMM5, -+ UNW_X86_64_XMM6, -+ UNW_X86_64_XMM7, -+ UNW_X86_64_XMM8, -+ UNW_X86_64_XMM9, -+ UNW_X86_64_XMM10, -+ UNW_X86_64_XMM11, -+ UNW_X86_64_XMM12, -+ UNW_X86_64_XMM13, -+ UNW_X86_64_XMM14, -+ UNW_X86_64_XMM15, -+ UNW_TDEP_LAST_REG = UNW_X86_64_XMM15, -+#else -+ UNW_TDEP_LAST_REG = UNW_X86_64_RIP, -+#endif - - /* XXX Add other regs here */ - - /* frame info (read-only) */ - UNW_X86_64_CFA, - -- UNW_TDEP_LAST_REG = UNW_X86_64_RIP, -- - UNW_TDEP_IP = UNW_X86_64_RIP, - UNW_TDEP_SP = UNW_X86_64_RSP, - UNW_TDEP_BP = UNW_X86_64_RBP, -@@ -86,34 +106,32 @@ typedef enum - } - x86_64_regnum_t; - --#define UNW_TDEP_NUM_EH_REGS 2 /* XXX Not sure what this means */ -+#define UNW_TDEP_NUM_EH_REGS 2 /* XXX Not sure what this means */ - - typedef struct unw_tdep_save_loc - { - /* Additional target-dependent info on a save location. */ -+ char unused; - } - unw_tdep_save_loc_t; - - /* On x86_64, we can directly use ucontext_t as the unwind context. */ - typedef ucontext_t unw_tdep_context_t; - --/* XXX this is not ideal: an application should not be prevented from -- using the "getcontext" name just because it's using libunwind. We -- can't just use __getcontext() either, because that isn't exported -- by glibc... */ --#define unw_tdep_getcontext(uc) (getcontext (uc), 0) -- --#include "libunwind-dynamic.h" -- - typedef struct - { - /* no x86-64-specific auxiliary proc-info */ -+ char unused; - } - unw_tdep_proc_info_t; - -+#include "libunwind-dynamic.h" - #include "libunwind-common.h" - --#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+#define unw_tdep_getcontext UNW_ARCH_OBJ(getcontext) -+#define unw_tdep_is_fpreg UNW_ARCH_OBJ(is_fpreg) -+ -+extern int unw_tdep_getcontext (unw_tdep_context_t *); - extern int unw_tdep_is_fpreg (int); - - #if defined(__cplusplus) || defined(c_plusplus) -diff --git a/frysk-imports/libunwind/include/libunwind.h.in b/frysk-imports/libunwind/include/libunwind.h.in -new file mode 100644 -index 0000000..7a56168 ---- /dev/null -+++ b/frysk-imports/libunwind/include/libunwind.h.in -@@ -0,0 +1,36 @@ -+/* Provide a real file - not a symlink - as it would cause multiarch conflicts -+ when multiple different arch releases are installed simultaneously. */ -+ -+#ifndef UNW_REMOTE_ONLY -+ -+#if defined __aarch64__ -+#include "libunwind-aarch64.h" -+#elif defined __arm__ -+# include "libunwind-arm.h" -+#elif defined __hppa__ -+# include "libunwind-hppa.h" -+#elif defined __ia64__ -+# include "libunwind-ia64.h" -+#elif defined __mips__ -+# include "libunwind-mips.h" -+#elif defined __powerpc__ && !defined __powerpc64__ -+# include "libunwind-ppc32.h" -+#elif defined __powerpc64__ -+# include "libunwind-ppc64.h" -+#elif defined __sh__ -+# include "libunwind-sh.h" -+#elif defined __i386__ -+# include "libunwind-x86.h" -+#elif defined __x86_64__ -+# include "libunwind-x86_64.h" -+#elif defined __tilegx__ -+# include "libunwind-tilegx.h" -+#else -+# error "Unsupported arch" -+#endif -+ -+#else /* UNW_REMOTE_ONLY */ -+ -+# include "libunwind-@arch@.h" -+ -+#endif /* UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/include/libunwind_i.h b/frysk-imports/libunwind/include/libunwind_i.h -index 17b3cf8..ee2ea2f 100644 ---- a/frysk-imports/libunwind/include/libunwind_i.h -+++ b/frysk-imports/libunwind/include/libunwind_i.h -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2005 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -35,6 +35,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - # include "config.h" - #endif - -+#include "compiler.h" -+ - #ifdef HAVE___THREAD - /* For now, turn off per-thread caching. It uses up too much TLS - memory per thread even when the thread never uses libunwind at -@@ -44,7 +46,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* Platform-independent libunwind-internal declarations. */ - --#include /* HP-UX needs this before include of pthread.h */ -+#include /* HP-UX needs this before include of pthread.h */ - - #include - #include -@@ -53,58 +55,50 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - #include - #include -+#include - --#ifdef HAVE_ENDIAN_H -+#if defined(HAVE_ELF_H) -+# include -+#elif defined(HAVE_SYS_ELF_H) -+# include -+#else -+# error Could not locate -+#endif -+ -+#if defined(HAVE_ENDIAN_H) - # include -+#elif defined(HAVE_SYS_ENDIAN_H) -+# include - #else --# define __LITTLE_ENDIAN 1234 --# define __BIG_ENDIAN 4321 -+# define __LITTLE_ENDIAN 1234 -+# define __BIG_ENDIAN 4321 - # if defined(__hpux) - # define __BYTE_ORDER __BIG_ENDIAN -+# elif defined(__QNX__) -+# if defined(__BIGENDIAN__) -+# define __BYTE_ORDER __BIG_ENDIAN -+# elif defined(__LITTLEENDIAN__) -+# define __BYTE_ORDER __LITTLE_ENDIAN -+# else -+# error Host has unknown byte-order. -+# endif - # else - # error Host has unknown byte-order. - # endif - #endif - --#ifdef __GNUC__ --# define UNUSED __attribute__((unused)) --# define NORETURN __attribute__((noreturn)) --# define ALIAS(name) __attribute__((alias (#name))) --# if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ > 2) --# define ALWAYS_INLINE inline __attribute__((always_inline)) --# define HIDDEN __attribute__((visibility ("hidden"))) --# define PROTECTED __attribute__((visibility ("protected"))) --# else --# define ALWAYS_INLINE --# define HIDDEN --# define PROTECTED --# endif --# if (__GNUC__ >= 3) --# define likely(x) __builtin_expect ((x), 1) --# define unlikely(x) __builtin_expect ((x), 0) --# else --# define likely(x) (x) --# define unlikely(x) (x) --# endif -+#if defined(HAVE__BUILTIN_UNREACHABLE) -+# define unreachable() __builtin_unreachable() - #else --# define ALWAYS_INLINE --# define UNUSED --# define NORETURN --# define ALIAS(name) --# define HIDDEN --# define PROTECTED --# define likely(x) (x) --# define unlikely(x) (x) -+# define unreachable() do { } while (1) - #endif - - #ifdef DEBUG --# define UNW_DEBUG 1 -+# define UNW_DEBUG 1 - #else --# define UNW_DEBUG 0 -+# define UNW_DEBUG 0 - #endif - --#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) -- - /* Make it easy to write thread-safe code which may or may not be - linked against libpthread. The macros below can be used - unconditionally and if -lpthread is around, they'll call the -@@ -114,12 +108,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #pragma weak pthread_mutex_lock - #pragma weak pthread_mutex_unlock - --#define mutex_init(l) \ -- (pthread_mutex_init != 0 ? pthread_mutex_init ((l), 0) : 0) --#define mutex_lock(l) \ -- (pthread_mutex_lock != 0 ? pthread_mutex_lock (l) : 0) --#define mutex_unlock(l) \ -- (pthread_mutex_unlock != 0 ? pthread_mutex_unlock (l) : 0) -+#define mutex_init(l) \ -+ (pthread_mutex_init != NULL ? pthread_mutex_init ((l), NULL) : 0) -+#define mutex_lock(l) \ -+ (pthread_mutex_lock != NULL ? pthread_mutex_lock (l) : 0) -+#define mutex_unlock(l) \ -+ (pthread_mutex_unlock != NULL ? pthread_mutex_unlock (l) : 0) - - #ifdef HAVE_ATOMIC_OPS_H - # include -@@ -136,15 +130,17 @@ cmpxchg_ptr (void *addr, void *old, void *new) - u.vp = addr; - return AO_compare_and_swap(u.aop, (AO_t) old, (AO_t) new); - } --# define fetch_and_add1(_ptr) AO_fetch_and_add1(_ptr) -+# define fetch_and_add1(_ptr) AO_fetch_and_add1(_ptr) -+# define fetch_and_add(_ptr, value) AO_fetch_and_add(_ptr, value) - /* GCC 3.2.0 on HP-UX crashes on cmpxchg_ptr() */ - # if !(defined(__hpux) && __GNUC__ == 3 && __GNUC_MINOR__ == 2) - # define HAVE_CMPXCHG - # endif --# define HAVE_FETCH_AND_ADD1 --#else -+# define HAVE_FETCH_AND_ADD -+#elif defined(HAVE_SYNC_ATOMICS) || defined(HAVE_IA64INTRIN_H) - # ifdef HAVE_IA64INTRIN_H - # include -+# endif - static inline int - cmpxchg_ptr (void *addr, void *old, void *new) - { -@@ -158,14 +154,14 @@ cmpxchg_ptr (void *addr, void *old, void *new) - u.vp = addr; - return __sync_bool_compare_and_swap(u.vlp, (long) old, (long) new); - } --# define fetch_and_add1(_ptr) __sync_fetch_and_add(_ptr, 1) --# define HAVE_CMPXCHG --# define HAVE_FETCH_AND_ADD1 --# endif -+# define fetch_and_add1(_ptr) __sync_fetch_and_add(_ptr, 1) -+# define fetch_and_add(_ptr, value) __sync_fetch_and_add(_ptr, value) -+# define HAVE_CMPXCHG -+# define HAVE_FETCH_AND_ADD - #endif --#define atomic_read(ptr) (*(ptr)) -+#define atomic_read(ptr) (*(ptr)) - --#define UNWI_OBJ(fn) UNW_PASTE(UNW_PREFIX,UNW_PASTE(I,fn)) -+#define UNWI_OBJ(fn) UNW_PASTE(UNW_PREFIX,UNW_PASTE(I,fn)) - #define UNWI_ARCH_OBJ(fn) UNW_PASTE(UNW_PASTE(UNW_PASTE(_UI,UNW_TARGET),_), fn) - - #define unwi_full_mask UNWI_ARCH_OBJ(full_mask) -@@ -178,116 +174,184 @@ typedef sigset_t intrmask_t; - - extern intrmask_t unwi_full_mask; - -+/* Silence compiler warnings about variables which are used only if libunwind -+ is configured in a certain way */ -+static inline void mark_as_used(void *v UNUSED) { -+} -+ -+#if defined(CONFIG_BLOCK_SIGNALS) -+# define SIGPROCMASK(how, new_mask, old_mask) \ -+ sigprocmask((how), (new_mask), (old_mask)) -+#else -+# define SIGPROCMASK(how, new_mask, old_mask) mark_as_used(old_mask) -+#endif -+ -+/* Prefer adaptive mutexes if available */ -+#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP -+#define UNW_PTHREAD_MUTEX_INITIALIZER PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP -+#else -+#define UNW_PTHREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER -+#endif -+ - #define define_lock(name) \ -- pthread_mutex_t name = PTHREAD_MUTEX_INITIALIZER --#define lock_init(l) mutex_init (l) --#define lock_acquire(l,m) \ --do { \ -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &(m)); \ -- mutex_lock (l); \ -+ pthread_mutex_t name = UNW_PTHREAD_MUTEX_INITIALIZER -+#define lock_init(l) mutex_init (l) -+#define lock_acquire(l,m) \ -+do { \ -+ SIGPROCMASK (SIG_SETMASK, &unwi_full_mask, &(m)); \ -+ mutex_lock (l); \ - } while (0) --#define lock_release(l,m) \ --do { \ -- mutex_unlock (l); \ -- sigprocmask (SIG_SETMASK, &(m), NULL); \ -+#define lock_release(l,m) \ -+do { \ -+ mutex_unlock (l); \ -+ SIGPROCMASK (SIG_SETMASK, &(m), NULL); \ - } while (0) - --#define SOS_MEMORY_SIZE 16384 /* see src/mi/mempool.c */ -+#define SOS_MEMORY_SIZE 16384 /* see src/mi/mempool.c */ - --#define GET_MEMORY(mem, size_in_bytes) \ --do { \ -+#ifndef MAP_ANONYMOUS -+# define MAP_ANONYMOUS MAP_ANON -+#endif -+#define GET_MEMORY(mem, size) \ -+do { \ - /* Hopefully, mmap() goes straight through to a system call stub... */ \ -- mem = mmap (0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, \ -- -1, 0); \ -- if (mem == MAP_FAILED) \ -- mem = NULL; \ -+ mem = mmap (NULL, size, PROT_READ | PROT_WRITE, \ -+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); \ -+ if (mem == MAP_FAILED) \ -+ mem = NULL; \ - } while (0) - --#define unwi_find_dynamic_proc_info UNWI_OBJ(find_dynamic_proc_info) --#define unwi_extract_dynamic_proc_info UNWI_OBJ(extract_dynamic_proc_info) --#define unwi_put_dynamic_unwind_info UNWI_OBJ(put_dynamic_unwind_info) --#define unwi_dyn_remote_find_proc_info UNWI_OBJ(dyn_remote_find_proc_info) --#define unwi_dyn_remote_put_unwind_info UNWI_OBJ(dyn_remote_put_unwind_info) --#define unwi_dyn_validate_cache UNWI_OBJ(dyn_validate_cache) -+#define unwi_find_dynamic_proc_info UNWI_OBJ(find_dynamic_proc_info) -+#define unwi_extract_dynamic_proc_info UNWI_OBJ(extract_dynamic_proc_info) -+#define unwi_put_dynamic_unwind_info UNWI_OBJ(put_dynamic_unwind_info) -+#define unwi_dyn_remote_find_proc_info UNWI_OBJ(dyn_remote_find_proc_info) -+#define unwi_dyn_remote_put_unwind_info UNWI_OBJ(dyn_remote_put_unwind_info) -+#define unwi_dyn_validate_cache UNWI_OBJ(dyn_validate_cache) - - extern int unwi_find_dynamic_proc_info (unw_addr_space_t as, -- unw_word_t ip, -- unw_proc_info_t *pi, -- int need_unwind_info, void *arg); -+ unw_word_t ip, -+ unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); - extern int unwi_extract_dynamic_proc_info (unw_addr_space_t as, -- unw_word_t ip, -- unw_proc_info_t *pi, -- unw_dyn_info_t *di, -- int need_unwind_info, -- void *arg); -+ unw_word_t ip, -+ unw_proc_info_t *pi, -+ unw_dyn_info_t *di, -+ int need_unwind_info, -+ void *arg); - extern void unwi_put_dynamic_unwind_info (unw_addr_space_t as, -- unw_proc_info_t *pi, void *arg); -+ unw_proc_info_t *pi, void *arg); - - /* These handle the remote (cross-address-space) case of accessing - dynamic unwind info. */ - - extern int unwi_dyn_remote_find_proc_info (unw_addr_space_t as, -- unw_word_t ip, -- unw_proc_info_t *pi, -- int need_unwind_info, -- void *arg); -+ unw_word_t ip, -+ unw_proc_info_t *pi, -+ int need_unwind_info, -+ void *arg); - extern void unwi_dyn_remote_put_unwind_info (unw_addr_space_t as, -- unw_proc_info_t *pi, -- void *arg); -+ unw_proc_info_t *pi, -+ void *arg); - extern int unwi_dyn_validate_cache (unw_addr_space_t as, void *arg); - - extern unw_dyn_info_list_t _U_dyn_info_list; - extern pthread_mutex_t _U_dyn_info_list_lock; - - #if UNW_DEBUG --#define unwi_debug_level UNWI_ARCH_OBJ(debug_level) -+#define unwi_debug_level UNWI_ARCH_OBJ(debug_level) - extern long unwi_debug_level; - - # include --# define Debug(level,format...) \ --do { \ -- if (unwi_debug_level >= level) \ -- { \ -- int _n = level; \ -- if (_n > 16) \ -- _n = 16; \ -- fprintf (stderr, "%*c>%s: ", _n, ' ', __FUNCTION__); \ -- fprintf (stderr, format); \ -- } \ -+# define Debug(level,format...) \ -+do { \ -+ if (unwi_debug_level >= level) \ -+ { \ -+ int _n = level; \ -+ if (_n > 16) \ -+ _n = 16; \ -+ fprintf (stderr, "%*c>%s: ", _n, ' ', __FUNCTION__); \ -+ fprintf (stderr, format); \ -+ } \ - } while (0) --# define dprintf(format...) fprintf (stderr, format) --# ifdef __GNUC__ --# undef inline --# define inline UNUSED --# endif -+# define Dprintf(format...) fprintf (stderr, format) - #else - # define Debug(level,format...) --# define dprintf(format...) -+# define Dprintf(format...) - #endif - --static ALWAYS_INLINE void -+static ALWAYS_INLINE int - print_error (const char *string) - { -- write (2, string, strlen (string)); -+ return write (2, string, strlen (string)); - } - --#define mi_init UNWI_ARCH_OBJ(mi_init) -+#define mi_init UNWI_ARCH_OBJ(mi_init) - --extern void mi_init (void); /* machine-independent initializations */ -+extern void mi_init (void); /* machine-independent initializations */ - extern unw_word_t _U_dyn_info_list_addr (void); - - /* This is needed/used by ELF targets only. */ - - struct elf_image - { -- void *image; /* pointer to mmap'd image */ -- size_t size; /* (file-) size of the image */ -+ void *image; /* pointer to mmap'd image */ -+ size_t size; /* (file-) size of the image */ - }; - -+struct elf_dyn_info -+ { -+ struct elf_image ei; -+ unw_dyn_info_t di_cache; -+ unw_dyn_info_t di_debug; /* additional table info for .debug_frame */ -+#if UNW_TARGET_IA64 -+ unw_dyn_info_t ktab; -+#endif -+#if UNW_TARGET_ARM -+ unw_dyn_info_t di_arm; /* additional table info for .ARM.exidx */ -+#endif -+ }; -+ -+static inline void invalidate_edi (struct elf_dyn_info *edi) -+{ -+ if (edi->ei.image) -+ munmap (edi->ei.image, edi->ei.size); -+ memset (edi, 0, sizeof (*edi)); -+ edi->di_cache.format = -1; -+ edi->di_debug.format = -1; -+#if UNW_TARGET_ARM -+ edi->di_arm.format = -1; -+#endif -+} -+ -+ -+/* Provide a place holder for architecture to override for fast access -+ to memory when known not to need to validate and know the access -+ will be local to the process. A suitable override will improve -+ unw_tdep_trace() performance in particular. */ -+#define ACCESS_MEM_FAST(ret,validate,cur,addr,to) \ -+ do { (ret) = dwarf_get ((cur), DWARF_MEM_LOC ((cur), (addr)), &(to)); } \ -+ while (0) -+ -+/* Define GNU and processor specific values for the Phdr p_type field in case -+ they aren't defined by . */ -+#ifndef PT_GNU_EH_FRAME -+# define PT_GNU_EH_FRAME 0x6474e550 -+#endif /* !PT_GNU_EH_FRAME */ -+#ifndef PT_ARM_EXIDX -+# define PT_ARM_EXIDX 0x70000001 /* ARM unwind segment */ -+#endif /* !PT_ARM_EXIDX */ -+ - #include "tdep/libunwind_i.h" - - #ifndef tdep_get_func_addr --# define tdep_get_func_addr(as,addr,v) (*(v) = addr, 0) -+# define tdep_get_func_addr(as,addr,v) (*(v) = addr, 0) -+#endif -+ -+#ifndef DWARF_VAL_LOC -+# define DWARF_IS_VAL_LOC(l) 0 -+# define DWARF_VAL_LOC(c,v) DWARF_NULL_LOC - #endif - -+#define UNW_ALIGN(x,a) (((x)+(a)-1UL)&~((a)-1UL)) -+ - #endif /* libunwind_i_h */ -diff --git a/frysk-imports/libunwind/include/mempool.h b/frysk-imports/libunwind/include/mempool.h -index 4b55974..1f1c770 100644 ---- a/frysk-imports/libunwind/include/mempool.h -+++ b/frysk-imports/libunwind/include/mempool.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -51,23 +51,23 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "libunwind_i.h" - --#define sos_alloc(s) UNWI_ARCH_OBJ(_sos_alloc)(s) --#define mempool_init(p,s,r) UNWI_ARCH_OBJ(_mempool_init)(p,s,r) --#define mempool_alloc(p) UNWI_ARCH_OBJ(_mempool_alloc)(p) --#define mempool_free(p,o) UNWI_ARCH_OBJ(_mempool_free)(p,o) -+#define sos_alloc(s) UNWI_ARCH_OBJ(_sos_alloc)(s) -+#define mempool_init(p,s,r) UNWI_ARCH_OBJ(_mempool_init)(p,s,r) -+#define mempool_alloc(p) UNWI_ARCH_OBJ(_mempool_alloc)(p) -+#define mempool_free(p,o) UNWI_ARCH_OBJ(_mempool_free)(p,o) - - /* The mempool structure should be treated as an opaque object. It's - declared here only to enable static allocation of mempools. */ - struct mempool - { - pthread_mutex_t lock; -- size_t obj_size; /* object size (rounded up for alignment) */ -- size_t chunk_size; /* allocation granularity */ -- unsigned int reserve; /* minimum (desired) size of the free-list */ -- unsigned int num_free; /* number of objects on the free-list */ -+ size_t obj_size; /* object size (rounded up for alignment) */ -+ size_t chunk_size; /* allocation granularity */ -+ unsigned int reserve; /* minimum (desired) size of the free-list */ -+ unsigned int num_free; /* number of objects on the free-list */ - struct object - { -- struct object *next; -+ struct object *next; - } - *free_list; - }; -@@ -82,7 +82,7 @@ extern void *sos_alloc (size_t size); - tight memory situations. If it is zero, mempool attempts to pick a - reasonable default value. */ - extern void mempool_init (struct mempool *pool, -- size_t obj_size, size_t reserve); -+ size_t obj_size, size_t reserve); - extern void *mempool_alloc (struct mempool *pool); - extern void mempool_free (struct mempool *pool, void *object); - -diff --git a/frysk-imports/libunwind/include/remote.h b/frysk-imports/libunwind/include/remote.h -index 9fb90c3..6fdf64c 100644 ---- a/frysk-imports/libunwind/include/remote.h -+++ b/frysk-imports/libunwind/include/remote.h -@@ -9,7 +9,7 @@ - - static inline int - fetch8 (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, int8_t *valp, void *arg) -+ unw_word_t *addr, int8_t *valp, void *arg) - { - *valp = *(int8_t *) (uintptr_t) *addr; - *addr += 1; -@@ -18,7 +18,7 @@ fetch8 (unw_addr_space_t as, unw_accessors_t *a, - - static inline int - fetch16 (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, int16_t *valp, void *arg) -+ unw_word_t *addr, int16_t *valp, void *arg) - { - *valp = *(int16_t *) (uintptr_t) *addr; - *addr += 2; -@@ -27,7 +27,7 @@ fetch16 (unw_addr_space_t as, unw_accessors_t *a, - - static inline int - fetch32 (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, int32_t *valp, void *arg) -+ unw_word_t *addr, int32_t *valp, void *arg) - { - *valp = *(int32_t *) (uintptr_t) *addr; - *addr += 4; -@@ -36,7 +36,7 @@ fetch32 (unw_addr_space_t as, unw_accessors_t *a, - - static inline int - fetchw (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, unw_word_t *valp, void *arg) -+ unw_word_t *addr, unw_word_t *valp, void *arg) - { - *valp = *(unw_word_t *) (uintptr_t) *addr; - *addr += sizeof (unw_word_t); -@@ -45,11 +45,11 @@ fetchw (unw_addr_space_t as, unw_accessors_t *a, - - #else /* !UNW_LOCAL_ONLY */ - --#define WSIZE (sizeof (unw_word_t)) -+#define WSIZE (sizeof (unw_word_t)) - - static inline int - fetch8 (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, int8_t *valp, void *arg) -+ unw_word_t *addr, int8_t *valp, void *arg) - { - unw_word_t val, aligned_addr = *addr & -WSIZE, off = *addr - aligned_addr; - int ret; -@@ -69,7 +69,7 @@ fetch8 (unw_addr_space_t as, unw_accessors_t *a, - - static inline int - fetch16 (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, int16_t *valp, void *arg) -+ unw_word_t *addr, int16_t *valp, void *arg) - { - unw_word_t val, aligned_addr = *addr & -WSIZE, off = *addr - aligned_addr; - int ret; -@@ -91,7 +91,7 @@ fetch16 (unw_addr_space_t as, unw_accessors_t *a, - - static inline int - fetch32 (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, int32_t *valp, void *arg) -+ unw_word_t *addr, int32_t *valp, void *arg) - { - unw_word_t val, aligned_addr = *addr & -WSIZE, off = *addr - aligned_addr; - int ret; -@@ -113,7 +113,7 @@ fetch32 (unw_addr_space_t as, unw_accessors_t *a, - - static inline int - fetchw (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, unw_word_t *valp, void *arg) -+ unw_word_t *addr, unw_word_t *valp, void *arg) - { - int ret; - -diff --git a/frysk-imports/libunwind/include/stamp-h.in b/frysk-imports/libunwind/include/stamp-h.in -deleted file mode 100644 -index e69de29..0000000 -diff --git a/frysk-imports/libunwind/include/tdep-aarch64/dwarf-config.h b/frysk-imports/libunwind/include/tdep-aarch64/dwarf-config.h -new file mode 100644 -index 0000000..f65db17 ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-aarch64/dwarf-config.h -@@ -0,0 +1,52 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef dwarf_config_h -+#define dwarf_config_h -+ -+/* This matches the value udes by GCC (see -+ gcc/config/aarch64/aarch64.h:DWARF_FRAME_REGISTERS. */ -+#define DWARF_NUM_PRESERVED_REGS 97 -+ -+/* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ -+#define dwarf_is_big_endian(addr_space) 0 -+ -+#define dwarf_to_unw_regnum(reg) (((reg) <= UNW_AARCH64_V31) ? (reg) : 0) -+ -+/* Convert a pointer to a dwarf_cursor structure to a pointer to -+ unw_cursor_t. */ -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+ -+typedef struct dwarf_loc -+ { -+ unw_word_t val; -+#ifndef UNW_LOCAL_ONLY -+ unw_word_t type; /* see DWARF_LOC_TYPE_* macros. */ -+#endif -+ } -+dwarf_loc_t; -+ -+#endif /* dwarf_config_h */ -diff --git a/frysk-imports/libunwind/include/tdep-aarch64/jmpbuf.h b/frysk-imports/libunwind/include/tdep-aarch64/jmpbuf.h -new file mode 100644 -index 0000000..3f01a44 ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-aarch64/jmpbuf.h -@@ -0,0 +1,33 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+/* Use glibc's jump-buffer indices; NPTL peeks at SP: */ -+ -+/* FIXME for AArch64 */ -+ -+#define JB_SP 13 -+#define JB_RP 14 -+#define JB_MASK_SAVED 15 -+#define JB_MASK 16 -diff --git a/frysk-imports/libunwind/include/tdep-aarch64/libunwind_i.h b/frysk-imports/libunwind/include/tdep-aarch64/libunwind_i.h -new file mode 100644 -index 0000000..ca28155 ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-aarch64/libunwind_i.h -@@ -0,0 +1,318 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2001-2005 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef AARCH64_LIBUNWIND_I_H -+#define AARCH64_LIBUNWIND_I_H -+ -+/* Target-dependent definitions that are internal to libunwind but need -+ to be shared with target-independent code. */ -+ -+#include -+#include -+ -+#include "elf64.h" -+#include "mempool.h" -+#include "dwarf.h" -+ -+typedef enum -+ { -+ UNW_AARCH64_FRAME_STANDARD = -2, /* regular fp, sp +/- offset */ -+ UNW_AARCH64_FRAME_SIGRETURN = -1, /* special sigreturn frame */ -+ UNW_AARCH64_FRAME_OTHER = 0, /* not cacheable (special or unrecognised) */ -+ UNW_AARCH64_FRAME_GUESSED = 1 /* guessed it was regular, but not known */ -+ } -+unw_tdep_frame_type_t; -+ -+typedef struct -+ { -+ uint64_t virtual_address; -+ int64_t frame_type : 2; /* unw_tdep_frame_type_t classification */ -+ int64_t last_frame : 1; /* non-zero if last frame in chain */ -+ int64_t cfa_reg_sp : 1; /* cfa dwarf base register is sp vs. fp */ -+ int64_t cfa_reg_offset : 30; /* cfa is at this offset from base register value */ -+ int64_t fp_cfa_offset : 30; /* fp saved at this offset from cfa (-1 = not saved) */ -+ int64_t lr_cfa_offset : 30; /* lr saved at this offset from cfa (-1 = not saved) */ -+ int64_t sp_cfa_offset : 30; /* sp saved at this offset from cfa (-1 = not saved) */ -+ } -+unw_tdep_frame_t; -+ -+#ifdef UNW_LOCAL_ONLY -+ -+typedef unw_word_t aarch64_loc_t; -+ -+#else /* !UNW_LOCAL_ONLY */ -+ -+typedef struct aarch64_loc -+ { -+ unw_word_t w0, w1; -+ } -+aarch64_loc_t; -+ -+#endif /* !UNW_LOCAL_ONLY */ -+ -+struct unw_addr_space -+ { -+ struct unw_accessors acc; -+ int big_endian; -+ unw_caching_policy_t caching_policy; -+#ifdef HAVE_ATOMIC_OPS_H -+ AO_t cache_generation; -+#else -+ uint32_t cache_generation; -+#endif -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ struct dwarf_rs_cache global_cache; -+ struct unw_debug_frame_list *debug_frames; -+ }; -+ -+struct cursor -+ { -+ struct dwarf_cursor dwarf; /* must be first */ -+ -+ unw_tdep_frame_t frame_info; /* quick tracing assist info */ -+ -+ enum -+ { -+ AARCH64_SCF_NONE, -+ AARCH64_SCF_LINUX_RT_SIGFRAME, -+ } -+ sigcontext_format; -+ unw_word_t sigcontext_addr; -+ unw_word_t sigcontext_sp; -+ unw_word_t sigcontext_pc; -+ int validate; -+ }; -+ -+#define DWARF_GET_LOC(l) ((l).val) -+ -+#ifdef UNW_LOCAL_ONLY -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+# define DWARF_IS_REG_LOC(l) 0 -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+ -+static inline int -+dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *val = *(unw_fpreg_t *) DWARF_GET_LOC (loc); -+ return 0; -+} -+ -+static inline int -+dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *(unw_fpreg_t *) DWARF_GET_LOC (loc) = val; -+ return 0; -+} -+ -+static inline int -+dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *val = *(unw_word_t *) DWARF_GET_LOC (loc); -+ return 0; -+} -+ -+static inline int -+dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *(unw_word_t *) DWARF_GET_LOC (loc) = val; -+ return 0; -+} -+ -+#else /* !UNW_LOCAL_ONLY */ -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) -+ -+static inline int -+dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -+{ -+ char *valp = (char *) &val; -+ unw_word_t addr; -+ int ret; -+ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -+ val, 0, c->as_arg); -+ -+ addr = DWARF_GET_LOC (loc); -+ if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -+ 0, c->as_arg)) < 0) -+ return ret; -+ -+ return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0, -+ c->as_arg); -+} -+ -+static inline int -+dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) -+{ -+ char *valp = (char *) &val; -+ unw_word_t addr; -+ int ret; -+ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -+ &val, 1, c->as_arg); -+ -+ addr = DWARF_GET_LOC (loc); -+ if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -+ 1, c->as_arg)) < 0) -+ return ret; -+ -+ return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, -+ 1, c->as_arg); -+} -+ -+static inline int -+dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) -+{ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ /* If a code-generator were to save a value of type unw_word_t in a -+ floating-point register, we would have to support this case. I -+ suppose it could happen with MMX registers, but does it really -+ happen? */ -+ assert (!DWARF_IS_FP_LOC (loc)); -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -+ 0, c->as_arg); -+ else -+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -+ 0, c->as_arg); -+} -+ -+static inline int -+dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) -+{ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ /* If a code-generator were to save a value of type unw_word_t in a -+ floating-point register, we would have to support this case. I -+ suppose it could happen with MMX registers, but does it really -+ happen? */ -+ assert (!DWARF_IS_FP_LOC (loc)); -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -+ 1, c->as_arg); -+ else -+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -+ 1, c->as_arg); -+} -+ -+#endif /* !UNW_LOCAL_ONLY */ -+ -+ -+ -+#define tdep_getcontext_trace UNW_ARCH_OBJ(getcontext_trace) -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init UNW_OBJ(init) -+/* Platforms that support UNW_INFO_FORMAT_TABLE need to define -+ tdep_search_unwind_table. */ -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame UNW_OBJ(tdep_stash_frame) -+#define tdep_trace UNW_OBJ(tdep_trace) -+ -+#ifdef UNW_LOCAL_ONLY -+# define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) -+#else -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+#endif -+ -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_big_endian(as) ((as)->big_endian) -+ -+extern int tdep_init_done; -+ -+extern void tdep_init (void); -+extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); -+extern void *tdep_uc_addr (unw_tdep_context_t *uc, int reg); -+extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); -+extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -+ unw_word_t *valp, int write); -+extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -+ unw_fpreg_t *valp, int write); -+extern int tdep_trace (unw_cursor_t *cursor, void **addresses, int *n); -+extern void tdep_stash_frame (struct dwarf_cursor *c, -+ struct dwarf_reg_state *rs); -+extern int tdep_getcontext_trace (unw_tdep_context_t *); -+ -+#endif /* AARCH64_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-arm/dwarf-config.h b/frysk-imports/libunwind/include/tdep-arm/dwarf-config.h -index 455d15f..f502289 100644 ---- a/frysk-imports/libunwind/include/tdep-arm/dwarf-config.h -+++ b/frysk-imports/libunwind/include/tdep-arm/dwarf-config.h -@@ -1,5 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala - - This file is part of libunwind. - -@@ -27,23 +28,22 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* This is FIRST_PSEUDO_REGISTER in GCC, since DWARF_FRAME_REGISTERS is not - explicitly defined. */ --#define DWARF_NUM_PRESERVED_REGS 128 -+#define DWARF_NUM_PRESERVED_REGS 128 - --/* FIXME: Probably unnecessary on ARM. See arm/Gglobal.c. */ --#define DWARF_REGNUM_MAP_LENGTH 16 -+#define dwarf_to_unw_regnum(reg) (((reg) < 16) ? (reg) : 0) - - /* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ --#define dwarf_is_big_endian(addr_space) 0 -+#define dwarf_is_big_endian(addr_space) 0 - - /* Convert a pointer to a dwarf_cursor structure to a pointer to - unw_cursor_t. */ --#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) - - typedef struct dwarf_loc - { - unw_word_t val; - #ifndef UNW_LOCAL_ONLY -- unw_word_t type; /* see DWARF_LOC_TYPE_* macros. */ -+ unw_word_t type; /* see DWARF_LOC_TYPE_* macros. */ - #endif - } - dwarf_loc_t; -diff --git a/frysk-imports/libunwind/include/tdep-arm/ex_tables.h b/frysk-imports/libunwind/include/tdep-arm/ex_tables.h -new file mode 100644 -index 0000000..9df5e0a ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-arm/ex_tables.h -@@ -0,0 +1,55 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright 2011 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef ARM_EX_TABLES_H -+#define ARM_EX_TABLES_H -+ -+typedef enum arm_exbuf_cmd { -+ ARM_EXIDX_CMD_FINISH, -+ ARM_EXIDX_CMD_DATA_PUSH, -+ ARM_EXIDX_CMD_DATA_POP, -+ ARM_EXIDX_CMD_REG_POP, -+ ARM_EXIDX_CMD_REG_TO_SP, -+ ARM_EXIDX_CMD_VFP_POP, -+ ARM_EXIDX_CMD_WREG_POP, -+ ARM_EXIDX_CMD_WCGR_POP, -+ ARM_EXIDX_CMD_RESERVED, -+ ARM_EXIDX_CMD_REFUSED, -+} arm_exbuf_cmd_t; -+ -+struct arm_exbuf_data -+{ -+ arm_exbuf_cmd_t cmd; -+ uint32_t data; -+}; -+ -+#define arm_exidx_extract UNW_OBJ(arm_exidx_extract) -+#define arm_exidx_decode UNW_OBJ(arm_exidx_decode) -+#define arm_exidx_apply_cmd UNW_OBJ(arm_exidx_apply_cmd) -+ -+int arm_exidx_extract (struct dwarf_cursor *c, uint8_t *buf); -+int arm_exidx_decode (const uint8_t *buf, uint8_t len, struct dwarf_cursor *c); -+int arm_exidx_apply_cmd (struct arm_exbuf_data *edata, struct dwarf_cursor *c); -+ -+#endif // ARM_EX_TABLES_H -diff --git a/frysk-imports/libunwind/include/tdep-arm/jmpbuf.h b/frysk-imports/libunwind/include/tdep-arm/jmpbuf.h -index 499e7de..008e77f 100644 ---- a/frysk-imports/libunwind/include/tdep-arm/jmpbuf.h -+++ b/frysk-imports/libunwind/include/tdep-arm/jmpbuf.h -@@ -26,7 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* FIXME for ARM! */ - --#define JB_SP 4 --#define JB_RP 5 --#define JB_MASK_SAVED 6 --#define JB_MASK 7 -+#define JB_SP 4 -+#define JB_RP 5 -+#define JB_MASK_SAVED 6 -+#define JB_MASK 7 -diff --git a/frysk-imports/libunwind/include/tdep-arm/libunwind_i.h b/frysk-imports/libunwind/include/tdep-arm/libunwind_i.h -index 3424d86..d3a279c 100644 ---- a/frysk-imports/libunwind/include/tdep-arm/libunwind_i.h -+++ b/frysk-imports/libunwind/include/tdep-arm/libunwind_i.h -@@ -34,6 +34,29 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "elf32.h" - #include "mempool.h" - #include "dwarf.h" -+#include "ex_tables.h" -+ -+typedef enum -+ { -+ UNW_ARM_FRAME_STANDARD = -2, /* regular r7, sp +/- offset */ -+ UNW_ARM_FRAME_SIGRETURN = -1, /* special sigreturn frame */ -+ UNW_ARM_FRAME_OTHER = 0, /* not cacheable (special or unrecognised) */ -+ UNW_ARM_FRAME_GUESSED = 1 /* guessed it was regular, but not known */ -+ } -+unw_tdep_frame_type_t; -+ -+typedef struct -+ { -+ uint32_t virtual_address; -+ int32_t frame_type : 2; /* unw_tdep_frame_type_t classification */ -+ int32_t last_frame : 1; /* non-zero if last frame in chain */ -+ int32_t cfa_reg_sp : 1; /* cfa dwarf base register is sp vs. r7 */ -+ int32_t cfa_reg_offset : 30; /* cfa is at this offset from base register value */ -+ int32_t r7_cfa_offset : 30; /* r7 saved at this offset from cfa (-1 = not saved) */ -+ int32_t lr_cfa_offset : 30; /* lr saved at this offset from cfa (-1 = not saved) */ -+ int32_t sp_cfa_offset : 30; /* sp saved at this offset from cfa (-1 = not saved) */ -+ } -+unw_tdep_frame_t; - - struct unw_addr_space - { -@@ -45,30 +68,45 @@ struct unw_addr_space - #else - uint32_t cache_generation; - #endif -- unw_word_t dyn_generation; /* see dyn-common.h */ -- unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ - struct dwarf_rs_cache global_cache; - struct unw_debug_frame_list *debug_frames; - }; - - struct cursor - { -- struct dwarf_cursor dwarf; /* must be first */ -+ struct dwarf_cursor dwarf; /* must be first */ -+ -+ unw_tdep_frame_t frame_info; /* quick tracing assist info */ -+ -+ enum -+ { -+ ARM_SCF_NONE, /* no signal frame */ -+ ARM_SCF_LINUX_SIGFRAME, /* non-RT signal frame, kernel >=2.6.18 */ -+ ARM_SCF_LINUX_RT_SIGFRAME, /* RT signal frame, kernel >=2.6.18 */ -+ ARM_SCF_LINUX_OLD_SIGFRAME, /* non-RT signal frame, kernel < 2.6.18 */ -+ ARM_SCF_LINUX_OLD_RT_SIGFRAME /* RT signal frame, kernel < 2.6.18 */ -+ } -+ sigcontext_format; - unw_word_t sigcontext_addr; -+ unw_word_t sigcontext_sp; -+ unw_word_t sigcontext_pc; -+ int validate; - }; - --#define DWARF_GET_LOC(l) ((l).val) -+#define DWARF_GET_LOC(l) ((l).val) - - #ifdef UNW_LOCAL_ONLY --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) --# define DWARF_IS_REG_LOC(l) 0 --# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+# define DWARF_IS_REG_LOC(l) 0 -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) - - static inline int - dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -@@ -107,18 +145,18 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - } - - #else /* !UNW_LOCAL_ONLY */ --# define DWARF_LOC_TYPE_FP (1 << 0) --# define DWARF_LOC_TYPE_REG (1 << 1) --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) \ -- ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) --# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) --# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) --# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_FP)) -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) - - static inline int - dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -@@ -132,15 +170,15 @@ dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -- 0, c->as_arg)) < 0) -+ 0, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0, -- c->as_arg); -+ c->as_arg); - } - - static inline int -@@ -155,15 +193,15 @@ dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- &val, 1, c->as_arg); -+ &val, 1, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -- 1, c->as_arg)) < 0) -+ 1, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, -- 1, c->as_arg); -+ 1, c->as_arg); - } - - static inline int -@@ -180,10 +218,10 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - } - - static inline int -@@ -200,55 +238,84 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - } - - #endif /* !UNW_LOCAL_ONLY */ - --#define tdep_needs_initialization UNW_OBJ(needs_initialization) --#define tdep_init UNW_OBJ(init) -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init UNW_OBJ(init) -+#define arm_find_proc_info UNW_OBJ(find_proc_info) -+#define arm_put_unwind_info UNW_OBJ(put_unwind_info) - /* Platforms that support UNW_INFO_FORMAT_TABLE need to define - tdep_search_unwind_table. */ --#define tdep_search_unwind_table dwarf_search_unwind_table --#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) --#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) --#define tdep_access_reg UNW_OBJ(access_reg) --#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_search_unwind_table UNW_OBJ(search_unwind_table) -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame UNW_OBJ(tdep_stash_frame) -+#define tdep_trace UNW_OBJ(tdep_trace) - - #ifdef UNW_LOCAL_ONLY --# define tdep_find_proc_info(c,ip,n) \ -- dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- dwarf_put_unwind_info((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ arm_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ arm_put_unwind_info((as), (pi), (arg)) - #else --# define tdep_find_proc_info(c,ip,n) \ -- (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) - #endif - --#define tdep_get_as(c) ((c)->dwarf.as) --#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) --#define tdep_get_ip(c) ((c)->dwarf.ip) --#define tdep_big_endian(as) ((as)->big_endian) -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_big_endian(as) ((as)->big_endian) - --extern int tdep_needs_initialization; -+extern int tdep_init_done; - - extern void tdep_init (void); -+extern int arm_find_proc_info (unw_addr_space_t as, unw_word_t ip, -+ unw_proc_info_t *pi, int need_unwind_info, -+ void *arg); -+extern void arm_put_unwind_info (unw_addr_space_t as, -+ unw_proc_info_t *pi, void *arg); - extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t *di, unw_proc_info_t *pi, -- int need_unwind_info, void *arg); --extern void *tdep_uc_addr (ucontext_t *uc, int reg); -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); -+extern void *tdep_uc_addr (unw_tdep_context_t *uc, int reg); - extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff); -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); - extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -- unw_word_t *valp, int write); -+ unw_word_t *valp, int write); - extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -- unw_fpreg_t *valp, int write); -+ unw_fpreg_t *valp, int write); -+extern int tdep_trace (unw_cursor_t *cursor, void **addresses, int *n); -+extern void tdep_stash_frame (struct dwarf_cursor *c, -+ struct dwarf_reg_state *rs); -+ -+/* unwinding method selection support */ -+#define UNW_ARM_METHOD_ALL 0xFF -+#define UNW_ARM_METHOD_DWARF 0x01 -+#define UNW_ARM_METHOD_FRAME 0x02 -+#define UNW_ARM_METHOD_EXIDX 0x04 -+ -+#define unwi_unwind_method UNW_OBJ(unwind_method) -+extern int unwi_unwind_method; -+ -+#define UNW_TRY_METHOD(x) (unwi_unwind_method & x) - - #endif /* ARM_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-hppa/dwarf-config.h b/frysk-imports/libunwind/include/tdep-hppa/dwarf-config.h -index 29f9eee..fb963c7 100644 ---- a/frysk-imports/libunwind/include/tdep-hppa/dwarf-config.h -+++ b/frysk-imports/libunwind/include/tdep-hppa/dwarf-config.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2004 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,26 +27,26 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #define dwarf_config_h - - /* See DWARF_FRAME_REGNUM() macro in gcc/config/pa/pa32-regs.h: */ --#define dwarf_to_unw_regnum(reg) \ -+#define dwarf_to_unw_regnum(reg) \ - (((reg) < DWARF_NUM_PRESERVED_REGS) ? (reg) : 0) - - /* This matches the value used by GCC (see - gcc/config/pa/pa32-regs.h:FIRST_PSEUDO_REGISTER), which leaves - plenty of room for expansion. */ --#define DWARF_NUM_PRESERVED_REGS 89 -+#define DWARF_NUM_PRESERVED_REGS 89 - - /* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ --#define dwarf_is_big_endian(addr_space) 1 -+#define dwarf_is_big_endian(addr_space) 1 - - /* Convert a pointer to a dwarf_cursor structure to a pointer to - unw_cursor_t. */ --#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) - - typedef struct dwarf_loc - { - unw_word_t val; - #ifndef UNW_LOCAL_ONLY -- unw_word_t type; /* see X86_LOC_TYPE_* macros. */ -+ unw_word_t type; /* see X86_LOC_TYPE_* macros. */ - #endif - } - dwarf_loc_t; -diff --git a/frysk-imports/libunwind/include/tdep-hppa/jmpbuf.h b/frysk-imports/libunwind/include/tdep-hppa/jmpbuf.h -index 6735b21..91f062f 100644 ---- a/frysk-imports/libunwind/include/tdep-hppa/jmpbuf.h -+++ b/frysk-imports/libunwind/include/tdep-hppa/jmpbuf.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,8 +26,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - /* Use glibc's jump-buffer indices; NPTL peeks at SP: */ - - #ifndef JB_SP --# define JB_SP 19 -+# define JB_SP 19 - #endif --#define JB_RP 20 --#define JB_MASK_SAVED 21 --#define JB_MASK 22 -+#define JB_RP 20 -+#define JB_MASK_SAVED 21 -+#define JB_MASK 22 -diff --git a/frysk-imports/libunwind/include/tdep-hppa/libunwind_i.h b/frysk-imports/libunwind/include/tdep-hppa/libunwind_i.h -index 6a5ef23..d5cc1b9 100644 ---- a/frysk-imports/libunwind/include/tdep-hppa/libunwind_i.h -+++ b/frysk-imports/libunwind/include/tdep-hppa/libunwind_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -33,8 +33,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - - #include "elf32.h" -+#include "mempool.h" - #include "dwarf.h" - -+typedef struct -+ { -+ /* no hppa-specific fast trace */ -+ } -+unw_tdep_frame_t; -+ - struct unw_addr_space - { - struct unw_accessors acc; -@@ -44,38 +51,39 @@ struct unw_addr_space - #else - uint32_t cache_generation; - #endif -- unw_word_t dyn_generation; /* see dyn-common.h */ -- unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ struct dwarf_rs_cache global_cache; - struct unw_debug_frame_list *debug_frames; - }; - - struct cursor - { -- struct dwarf_cursor dwarf; /* must be first */ -+ struct dwarf_cursor dwarf; /* must be first */ - - /* Format of sigcontext structure and address at which it is - stored: */ - enum - { -- HPPA_SCF_NONE, /* no signal frame encountered */ -- HPPA_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */ -+ HPPA_SCF_NONE, /* no signal frame encountered */ -+ HPPA_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */ - } - sigcontext_format; - unw_word_t sigcontext_addr; - }; - --#define DWARF_GET_LOC(l) ((l).val) -+#define DWARF_GET_LOC(l) ((l).val) - - #ifdef UNW_LOCAL_ONLY --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) --# define DWARF_IS_REG_LOC(l) 0 --# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+# define DWARF_IS_REG_LOC(l) 0 -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) - - static inline int - dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -@@ -114,18 +122,18 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - } - - #else /* !UNW_LOCAL_ONLY */ --# define DWARF_LOC_TYPE_FP (1 << 0) --# define DWARF_LOC_TYPE_REG (1 << 1) --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) \ -- ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) --# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) --# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) --# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_FP)) -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) - - static inline int - dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -@@ -139,15 +147,15 @@ dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -- 0, c->as_arg)) < 0) -+ 0, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0, -- c->as_arg); -+ c->as_arg); - } - - static inline int -@@ -162,15 +170,15 @@ dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- &val, 1, c->as_arg); -+ &val, 1, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -- 1, c->as_arg)) < 0) -+ 1, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, -- 1, c->as_arg); -+ 1, c->as_arg); - } - - static inline int -@@ -187,10 +195,10 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - } - - static inline int -@@ -207,57 +215,63 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - } - - #endif /* !UNW_LOCAL_ONLY */ - --#define tdep_needs_initialization UNW_OBJ(needs_initialization) --#define tdep_init UNW_OBJ(init) -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init UNW_OBJ(init) - /* Platforms that support UNW_INFO_FORMAT_TABLE need to define - tdep_search_unwind_table. */ --#define tdep_search_unwind_table dwarf_search_unwind_table --#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) --#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) --#define tdep_access_reg UNW_OBJ(access_reg) --#define tdep_access_fpreg UNW_OBJ(access_fpreg) --#define tdep_fetch_proc_info_post UNW_OBJ(fetch_proc_info_post) -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame(c,rs) do {} while(0) -+#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) - - #ifdef UNW_LOCAL_ONLY --# define tdep_find_proc_info(c,ip,n) \ -- dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(c,pi) \ -- dwarf_put_unwind_info((c)->as, (pi), (c)->as_arg) -+# define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) - #else --# define tdep_find_proc_info(c,ip,n) \ -- (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(c,pi) \ -- (*(c)->as->acc.put_unwind_info)((c)->as, (pi), (c)->as_arg) -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) - #endif --#define tdep_fetch_proc_info_post(c, ip, need_unwind_info) 0 - --#define tdep_get_as(c) ((c)->dwarf.as) --#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) --#define tdep_get_ip(c) ((c)->dwarf.ip) --#define tdep_big_endian(as) 1 -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_big_endian(as) 1 - --extern int tdep_needs_initialization; -+extern int tdep_init_done; - - extern void tdep_init (void); - extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t *di, unw_proc_info_t *pi, -- int need_unwind_info, void *arg); -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); - extern void *tdep_uc_addr (ucontext_t *uc, int reg); - extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff); -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); - extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -- unw_word_t *valp, int write); -+ unw_word_t *valp, int write); - extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -- unw_fpreg_t *valp, int write); -+ unw_fpreg_t *valp, int write); - - #endif /* HPPA_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-ia64/jmpbuf.h b/frysk-imports/libunwind/include/tdep-ia64/jmpbuf.h -index faa1f34..d642af2 100644 ---- a/frysk-imports/libunwind/include/tdep-ia64/jmpbuf.h -+++ b/frysk-imports/libunwind/include/tdep-ia64/jmpbuf.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -25,8 +25,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* Use glibc's jump-buffer indices; NPTL peeks at SP and BSP: */ - --#define JB_SP 0 --#define JB_RP 8 --#define JB_BSP 17 --#define JB_MASK_SAVED 70 --#define JB_MASK 71 -+#define JB_SP 0 -+#define JB_RP 8 -+#define JB_BSP 17 -+#define JB_MASK_SAVED 70 -+#define JB_MASK 71 -diff --git a/frysk-imports/libunwind/include/tdep-ia64/libunwind_i.h b/frysk-imports/libunwind/include/tdep-ia64/libunwind_i.h -index b851a03..7e57c7b 100644 ---- a/frysk-imports/libunwind/include/tdep-ia64/libunwind_i.h -+++ b/frysk-imports/libunwind/include/tdep-ia64/libunwind_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -32,6 +32,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "elf64.h" - #include "mempool.h" - -+typedef struct -+ { -+ /* no ia64-specific fast trace */ -+ } -+unw_tdep_frame_t; -+ - enum ia64_pregnum - { - /* primary unat: */ -@@ -39,11 +45,11 @@ enum ia64_pregnum - IA64_REG_PRI_UNAT_MEM, - - /* memory stack (order matters: see build_script() */ -- IA64_REG_PSP, /* previous memory stack pointer */ -+ IA64_REG_PSP, /* previous memory stack pointer */ - /* register stack */ -- IA64_REG_BSP, /* register stack pointer */ -+ IA64_REG_BSP, /* register stack pointer */ - IA64_REG_BSPSTORE, -- IA64_REG_PFS, /* previous function state */ -+ IA64_REG_PFS, /* previous function state */ - IA64_REG_RNAT, - /* instruction pointer: */ - IA64_REG_IP, -@@ -77,19 +83,19 @@ ia64_loc_t; - - #include "script.h" - --#define ABI_UNKNOWN 0 --#define ABI_LINUX 1 --#define ABI_HPUX 2 --#define ABI_FREEBSD 3 --#define ABI_OPENVMS 4 --#define ABI_NSK 5 /* Tandem/HP Non-Stop Kernel */ --#define ABI_WINDOWS 6 -+#define ABI_UNKNOWN 0 -+#define ABI_LINUX 1 -+#define ABI_HPUX 2 -+#define ABI_FREEBSD 3 -+#define ABI_OPENVMS 4 -+#define ABI_NSK 5 /* Tandem/HP Non-Stop Kernel */ -+#define ABI_WINDOWS 6 - - struct unw_addr_space - { - struct unw_accessors acc; - int big_endian; -- int abi; /* abi < 0 => unknown, 0 => SysV, 1 => HP-UX, 2 => Windows */ -+ int abi; /* abi < 0 => unknown, 0 => SysV, 1 => HP-UX, 2 => Windows */ - unw_caching_policy_t caching_policy; - #ifdef HAVE_ATOMIC_OPS_H - AO_t cache_generation; -@@ -97,7 +103,7 @@ struct unw_addr_space - uint32_t cache_generation; - #endif - unw_word_t dyn_generation; -- unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ - #ifndef UNW_REMOTE_ONLY - unsigned long long shared_object_removals; - #endif -@@ -107,47 +113,47 @@ struct unw_addr_space - - /* Note: The ABI numbers in the ABI-markers (.unwabi directive) are - not the same as the above ABI numbers. */ --#define ABI_MARKER_OLD_LINUX_SIGTRAMP ((0 << 8) | 's') --#define ABI_MARKER_OLD_LINUX_INTERRUPT ((0 << 8) | 'i') --#define ABI_MARKER_HP_UX_SIGTRAMP ((1 << 8) | 1) --#define ABI_MARKER_LINUX_SIGTRAMP ((3 << 8) | 's') --#define ABI_MARKER_LINUX_INTERRUPT ((3 << 8) | 'i') -+#define ABI_MARKER_OLD_LINUX_SIGTRAMP ((0 << 8) | 's') -+#define ABI_MARKER_OLD_LINUX_INTERRUPT ((0 << 8) | 'i') -+#define ABI_MARKER_HP_UX_SIGTRAMP ((1 << 8) | 1) -+#define ABI_MARKER_LINUX_SIGTRAMP ((3 << 8) | 's') -+#define ABI_MARKER_LINUX_INTERRUPT ((3 << 8) | 'i') - - struct cursor - { -- void *as_arg; /* argument to address-space callbacks */ -- unw_addr_space_t as; /* reference to per-address-space info */ -+ void *as_arg; /* argument to address-space callbacks */ -+ unw_addr_space_t as; /* reference to per-address-space info */ - - /* IP, CFM, and predicate cache (these are always equal to the - values stored in ip_loc, cfm_loc, and pr_loc, - respectively). */ -- unw_word_t ip; /* instruction pointer value */ -- unw_word_t cfm; /* current frame mask */ -- unw_word_t pr; /* current predicate values */ -+ unw_word_t ip; /* instruction pointer value */ -+ unw_word_t cfm; /* current frame mask */ -+ unw_word_t pr; /* current predicate values */ - - /* current frame info: */ -- unw_word_t bsp; /* backing store pointer value */ -- unw_word_t sp; /* stack pointer value */ -- unw_word_t psp; /* previous sp value */ -- ia64_loc_t cfm_loc; /* cfm save location (or NULL) */ -- ia64_loc_t ec_loc; /* ar.ec save location (usually cfm_loc) */ -+ unw_word_t bsp; /* backing store pointer value */ -+ unw_word_t sp; /* stack pointer value */ -+ unw_word_t psp; /* previous sp value */ -+ ia64_loc_t cfm_loc; /* cfm save location (or NULL) */ -+ ia64_loc_t ec_loc; /* ar.ec save location (usually cfm_loc) */ - ia64_loc_t loc[IA64_NUM_PREGS]; - -- unw_word_t eh_args[4]; /* exception handler arguments */ -- unw_word_t sigcontext_addr; /* address of sigcontext or 0 */ -- unw_word_t sigcontext_off; /* sigcontext-offset relative to signal sp */ -+ unw_word_t eh_args[4]; /* exception handler arguments */ -+ unw_word_t sigcontext_addr; /* address of sigcontext or 0 */ -+ unw_word_t sigcontext_off; /* sigcontext-offset relative to signal sp */ - - short hint; - short prev_script; - -- uint8_t nat_bitnr[4]; /* NaT bit numbers for r4-r7 */ -- uint16_t abi_marker; /* abi_marker for current frame (if any) */ -- uint16_t last_abi_marker; /* last abi_marker encountered so far */ -+ uint8_t nat_bitnr[4]; /* NaT bit numbers for r4-r7 */ -+ uint16_t abi_marker; /* abi_marker for current frame (if any) */ -+ uint16_t last_abi_marker; /* last abi_marker encountered so far */ - uint8_t eh_valid_mask; - -- unsigned int pi_valid :1; /* is proc_info valid? */ -+ unsigned int pi_valid :1; /* is proc_info valid? */ - unsigned int pi_is_dynamic :1; /* proc_info found via dynamic proc info? */ -- unw_proc_info_t pi; /* info about current procedure */ -+ unw_proc_info_t pi; /* info about current procedure */ - - /* In case of stack-discontiguities, such as those introduced by - signal-delivery on an alternate signal-stack (see -@@ -165,22 +171,22 @@ struct cursor - register may not have gotten spilled until much later, when a - possibly different rbs-area might have been in effect - already. */ -- uint8_t rbs_curr; /* index of curr. rbs-area (contains c->bsp) */ -- uint8_t rbs_left_edge; /* index of inner-most valid rbs-area */ -+ uint8_t rbs_curr; /* index of curr. rbs-area (contains c->bsp) */ -+ uint8_t rbs_left_edge; /* index of inner-most valid rbs-area */ - struct rbs_area - { -- unw_word_t end; -- unw_word_t size; -- ia64_loc_t rnat_loc; -+ unw_word_t end; -+ unw_word_t size; -+ ia64_loc_t rnat_loc; - } -- rbs_area[96 + 2]; /* 96 stacked regs + 1 extra stack on each side... */ -+ rbs_area[96 + 2]; /* 96 stacked regs + 1 extra stack on each side... */ - }; - - struct ia64_global_unwind_state - { -- pthread_mutex_t lock; /* global data lock */ -+ pthread_mutex_t lock; /* global data lock */ - -- volatile char needs_initialization; -+ volatile char init_done; - - /* Table of registers that prologues can save (and order in which - they're saved). */ -@@ -194,9 +200,9 @@ struct ia64_global_unwind_state - */ - struct - { -- unw_word_t r0; /* r0 is byte-order neutral */ -- unw_fpreg_t f0; /* f0 is byte-order neutral */ -- unw_fpreg_t f1_le, f1_be; /* f1 is byte-order dependent */ -+ unw_word_t r0; /* r0 is byte-order neutral */ -+ unw_fpreg_t f0; /* f0 is byte-order neutral */ -+ unw_fpreg_t f1_le, f1_be; /* f1 is byte-order dependent */ - } - read_only; - unw_fpreg_t nat_val_le, nat_val_be; -@@ -210,53 +216,64 @@ struct ia64_global_unwind_state - # endif - }; - --#define tdep_needs_initialization unw.needs_initialization --#define tdep_init UNW_OBJ(init) -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done unw.init_done -+#define tdep_init UNW_OBJ(init) - /* Platforms that support UNW_INFO_FORMAT_TABLE need to define - tdep_search_unwind_table. */ --#define tdep_search_unwind_table unw_search_ia64_unwind_table --#define tdep_find_proc_info UNW_OBJ(find_proc_info) --#define tdep_uc_addr UNW_OBJ(uc_addr) --#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) --#define tdep_access_reg UNW_OBJ(access_reg) --#define tdep_access_fpreg UNW_OBJ(access_fpreg) --#define tdep_get_as(c) ((c)->as) --#define tdep_get_as_arg(c) ((c)->as_arg) --#define tdep_get_ip(c) ((c)->ip) --#define tdep_big_endian(as) ((c)->as->big_endian != 0) -+#define tdep_search_unwind_table unw_search_ia64_unwind_table -+#define tdep_find_unwind_table ia64_find_unwind_table -+#define tdep_find_proc_info UNW_OBJ(find_proc_info) -+#define tdep_uc_addr UNW_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame(c,rs) do {} while(0) -+#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) -+#define tdep_get_as(c) ((c)->as) -+#define tdep_get_as_arg(c) ((c)->as_arg) -+#define tdep_get_ip(c) ((c)->ip) -+#define tdep_big_endian(as) ((c)->as->big_endian != 0) - - #ifndef UNW_LOCAL_ONLY --# define tdep_put_unwind_info UNW_OBJ(put_unwind_info) -+# define tdep_put_unwind_info UNW_OBJ(put_unwind_info) - #endif - - /* This can't be an UNW_ARCH_OBJ() because we need separate - unw.initialized flags for the local-only and generic versions of - the library. Also, if we wanted to have a single, shared global - data structure, we couldn't declare "unw" as HIDDEN/PROTECTED. */ --#define unw UNW_OBJ(data) -+#define unw UNW_OBJ(data) - - extern void tdep_init (void); -+extern int tdep_find_unwind_table (struct elf_dyn_info *edi, -+ unw_addr_space_t as, char *path, -+ unw_word_t segbase, unw_word_t mapoff, -+ unw_word_t ip); - extern int tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, int need_unwind_info, -- void *arg); --#define tdep_fetch_proc_info_post(c, ip, need_unwind_info) 0 -+ unw_proc_info_t *pi, int need_unwind_info, -+ void *arg); - extern void tdep_put_unwind_info (unw_addr_space_t as, -- unw_proc_info_t *pi, void *arg); -+ unw_proc_info_t *pi, void *arg); - extern void *tdep_uc_addr (ucontext_t *uc, unw_regnum_t regnum, -- uint8_t *nat_bitnr); -+ uint8_t *nat_bitnr); - extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff); -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); - extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -- unw_word_t *valp, int write); -+ unw_word_t *valp, int write); - extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -- unw_fpreg_t *valp, int write); -+ unw_fpreg_t *valp, int write); - - extern struct ia64_global_unwind_state unw; - - /* In user-level, we have no reasonable way of determining the base of - an arbitrary backing-store. We default to half the - address-space. */ --#define rbs_get_base(c,bspstore,rbs_basep) \ -- (*(rbs_basep) = (bspstore) - (((unw_word_t) 1) << 63), 0) -+#define rbs_get_base(c,bspstore,rbs_basep) \ -+ (*(rbs_basep) = (bspstore) - (((unw_word_t) 1) << 63), 0) - - #endif /* IA64_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-ia64/rse.h b/frysk-imports/libunwind/include/tdep-ia64/rse.h -index c5fe4b5..ee521a5 100644 ---- a/frysk-imports/libunwind/include/tdep-ia64/rse.h -+++ b/frysk-imports/libunwind/include/tdep-ia64/rse.h -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 1998, 1999, 2002, 2003, 2005 Hewlett-Packard Co -- * David Mosberger-Tang -+ * David Mosberger-Tang - * - * Register stack engine related helper functions. This file may be - * used in applications, so be careful about the name-space and give -@@ -15,7 +15,7 @@ - static inline uint64_t - rse_slot_num (uint64_t addr) - { -- return (addr >> 3) & 0x3f; -+ return (addr >> 3) & 0x3f; - } - - /* -@@ -24,7 +24,7 @@ rse_slot_num (uint64_t addr) - static inline uint64_t - rse_is_rnat_slot (uint64_t addr) - { -- return rse_slot_num (addr) == 0x3f; -+ return rse_slot_num (addr) == 0x3f; - } - - /* -@@ -34,7 +34,7 @@ rse_is_rnat_slot (uint64_t addr) - static inline uint64_t - rse_rnat_addr (uint64_t slot_addr) - { -- return slot_addr | (0x3f << 3); -+ return slot_addr | (0x3f << 3); - } - - /* -@@ -45,9 +45,9 @@ rse_rnat_addr (uint64_t slot_addr) - static inline uint64_t - rse_num_regs (uint64_t bspstore, uint64_t bsp) - { -- uint64_t slots = (bsp - bspstore) >> 3; -+ uint64_t slots = (bsp - bspstore) >> 3; - -- return slots - (rse_slot_num(bspstore) + slots)/0x40; -+ return slots - (rse_slot_num(bspstore) + slots)/0x40; - } - - /* -@@ -57,11 +57,11 @@ rse_num_regs (uint64_t bspstore, uint64_t bsp) - static inline uint64_t - rse_skip_regs (uint64_t addr, long num_regs) - { -- long delta = rse_slot_num(addr) + num_regs; -+ long delta = rse_slot_num(addr) + num_regs; - -- if (num_regs < 0) -- delta -= 0x3e; -- return addr + ((num_regs + delta/0x3f) << 3); -+ if (num_regs < 0) -+ delta -= 0x3e; -+ return addr + ((num_regs + delta/0x3f) << 3); - } - - #endif /* RSE_H */ -diff --git a/frysk-imports/libunwind/include/tdep-ia64/script.h b/frysk-imports/libunwind/include/tdep-ia64/script.h -index 48a9fe5..fe3360b 100644 ---- a/frysk-imports/libunwind/include/tdep-ia64/script.h -+++ b/frysk-imports/libunwind/include/tdep-ia64/script.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -23,17 +23,17 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#define IA64_LOG_UNW_CACHE_SIZE 7 --#define IA64_UNW_CACHE_SIZE (1 << IA64_LOG_UNW_CACHE_SIZE) -+#define IA64_LOG_UNW_CACHE_SIZE 7 -+#define IA64_UNW_CACHE_SIZE (1 << IA64_LOG_UNW_CACHE_SIZE) - --#define IA64_LOG_UNW_HASH_SIZE (IA64_LOG_UNW_CACHE_SIZE + 1) --#define IA64_UNW_HASH_SIZE (1 << IA64_LOG_UNW_HASH_SIZE) -+#define IA64_LOG_UNW_HASH_SIZE (IA64_LOG_UNW_CACHE_SIZE + 1) -+#define IA64_UNW_HASH_SIZE (1 << IA64_LOG_UNW_HASH_SIZE) - - typedef unsigned char unw_hash_index_t; - - struct ia64_script_insn - { -- unsigned int opc; /* see enum ia64_script_insn_opcode */ -+ unsigned int opc; /* see enum ia64_script_insn_opcode */ - unsigned int dst; - unw_word_t val; - }; -@@ -41,18 +41,18 @@ struct ia64_script_insn - /* Updating each preserved register may result in one script - instruction each. At the end of the script, psp gets popped, - accounting for one more instruction. */ --#define IA64_MAX_SCRIPT_LEN (IA64_NUM_PREGS + 1) -+#define IA64_MAX_SCRIPT_LEN (IA64_NUM_PREGS + 1) - - struct ia64_script - { -- unw_word_t ip; /* ip this script is for */ -- unw_word_t pr_mask; /* mask of predicates script depends on */ -- unw_word_t pr_val; /* predicate values this script is for */ -- unw_proc_info_t pi; /* info about underlying procedure */ -- unsigned short lru_chain; /* used for least-recently-used chain */ -- unsigned short coll_chain; /* used for hash collisions */ -- unsigned short hint; /* hint for next script to try (or -1) */ -- unsigned short count; /* number of instructions in script */ -+ unw_word_t ip; /* ip this script is for */ -+ unw_word_t pr_mask; /* mask of predicates script depends on */ -+ unw_word_t pr_val; /* predicate values this script is for */ -+ unw_proc_info_t pi; /* info about underlying procedure */ -+ unsigned short lru_chain; /* used for least-recently-used chain */ -+ unsigned short coll_chain; /* used for hash collisions */ -+ unsigned short hint; /* hint for next script to try (or -1) */ -+ unsigned short count; /* number of instructions in script */ - unsigned short abi_marker; - struct ia64_script_insn insn[IA64_MAX_SCRIPT_LEN]; - }; -@@ -60,26 +60,26 @@ struct ia64_script - struct ia64_script_cache - { - #ifdef HAVE_ATOMIC_OPS_H -- AO_TS_t busy; /* is the script-cache busy? */ -+ AO_TS_t busy; /* is the script-cache busy? */ - #else - pthread_mutex_t lock; - #endif -- unsigned short lru_head; /* index of lead-recently used script */ -- unsigned short lru_tail; /* index of most-recently used script */ -+ unsigned short lru_head; /* index of lead-recently used script */ -+ unsigned short lru_tail; /* index of most-recently used script */ - - /* hash table that maps instruction pointer to script index: */ - unsigned short hash[IA64_UNW_HASH_SIZE]; - -- uint32_t generation; /* generation number */ -+ uint32_t generation; /* generation number */ - - /* script cache: */ - struct ia64_script buckets[IA64_UNW_CACHE_SIZE]; - }; - --#define ia64_cache_proc_info UNW_OBJ(cache_proc_info) --#define ia64_get_cached_proc_info UNW_OBJ(get_cached_proc_info) -+#define ia64_cache_proc_info UNW_OBJ(cache_proc_info) -+#define ia64_get_cached_proc_info UNW_OBJ(get_cached_proc_info) - --struct cursor; /* forward declaration */ -+struct cursor; /* forward declaration */ - - extern int ia64_cache_proc_info (struct cursor *c); - extern int ia64_get_cached_proc_info (struct cursor *c); -diff --git a/frysk-imports/libunwind/include/tdep-mips/dwarf-config.h b/frysk-imports/libunwind/include/tdep-mips/dwarf-config.h -index 250746f..8006d0b 100644 ---- a/frysk-imports/libunwind/include/tdep-mips/dwarf-config.h -+++ b/frysk-imports/libunwind/include/tdep-mips/dwarf-config.h -@@ -1,5 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala - - This file is part of libunwind. - -@@ -27,26 +28,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* This is FIRST_PSEUDO_REGISTER in GCC, since DWARF_FRAME_REGISTERS is not - explicitly defined. */ --#define DWARF_NUM_PRESERVED_REGS 188 -+#define DWARF_NUM_PRESERVED_REGS 188 - --/* FIXME: Probably unnecessary on MIPS. See mips/Gglobal.c. */ --#define DWARF_REGNUM_MAP_LENGTH 32 -+#define dwarf_to_unw_regnum(reg) (((reg) < 32) ? (reg) : 0) - - /* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ --#define dwarf_is_big_endian(addr_space) ((addr_space)->big_endian) -+#define dwarf_is_big_endian(addr_space) ((addr_space)->big_endian) - - /* Return the size of an address, for DWARF purposes. */ - #define dwarf_addr_size(addr_space) ((addr_space)->addr_size) - - /* Convert a pointer to a dwarf_cursor structure to a pointer to - unw_cursor_t. */ --#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) - - typedef struct dwarf_loc - { - unw_word_t val; - #ifndef UNW_LOCAL_ONLY -- unw_word_t type; /* see DWARF_LOC_TYPE_* macros. */ -+ unw_word_t type; /* see DWARF_LOC_TYPE_* macros. */ - #endif - } - dwarf_loc_t; -diff --git a/frysk-imports/libunwind/include/tdep-mips/jmpbuf.h b/frysk-imports/libunwind/include/tdep-mips/jmpbuf.h -index 1adb2bc..c099f92 100644 ---- a/frysk-imports/libunwind/include/tdep-mips/jmpbuf.h -+++ b/frysk-imports/libunwind/include/tdep-mips/jmpbuf.h -@@ -26,7 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* FIXME for MIPS! */ - --#define JB_SP 4 --#define JB_RP 5 --#define JB_MASK_SAVED 6 --#define JB_MASK 7 -+#define JB_SP 4 -+#define JB_RP 5 -+#define JB_MASK_SAVED 6 -+#define JB_MASK 7 -diff --git a/frysk-imports/libunwind/include/tdep-mips/libunwind_i.h b/frysk-imports/libunwind/include/tdep-mips/libunwind_i.h -index c2f756a..d11894d 100644 ---- a/frysk-imports/libunwind/include/tdep-mips/libunwind_i.h -+++ b/frysk-imports/libunwind/include/tdep-mips/libunwind_i.h -@@ -39,6 +39,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "mempool.h" - #include "dwarf.h" - -+typedef struct -+ { -+ /* no mips-specific fast trace */ -+ } -+unw_tdep_frame_t; -+ - struct unw_addr_space - { - struct unw_accessors acc; -@@ -53,21 +59,21 @@ struct unw_addr_space - #else - uint32_t cache_generation; - #endif -- unw_word_t dyn_generation; /* see dyn-common.h */ -- unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ - struct dwarf_rs_cache global_cache; - struct unw_debug_frame_list *debug_frames; - }; - --#define tdep_big_endian(as) ((as)->big_endian) -+#define tdep_big_endian(as) ((as)->big_endian) - - struct cursor - { -- struct dwarf_cursor dwarf; /* must be first */ -+ struct dwarf_cursor dwarf; /* must be first */ - unw_word_t sigcontext_addr; - }; - --#define DWARF_GET_LOC(l) ((l).val) -+#define DWARF_GET_LOC(l) ((l).val) - - #ifndef UNW_REMOTE_ONLY - # if _MIPS_SIM == _ABIN32 -@@ -78,15 +84,15 @@ typedef long mips_reg_t; - #endif - - #ifdef UNW_LOCAL_ONLY --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) --# define DWARF_IS_REG_LOC(l) 0 --# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) (intptr_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) (intptr_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+# define DWARF_IS_REG_LOC(l) 0 -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) (intptr_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) (intptr_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) - - /* FIXME: Implement these for the MIPS FPU. */ - static inline int -@@ -126,18 +132,18 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - } - - #else /* !UNW_LOCAL_ONLY */ --# define DWARF_LOC_TYPE_FP (1 << 0) --# define DWARF_LOC_TYPE_REG (1 << 1) --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) \ -- ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) --# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) --# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) --# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_FP)) -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) - - static inline int - read_s32 (struct dwarf_cursor *c, unw_word_t addr, unw_word_t *val) -@@ -190,15 +196,15 @@ dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -- 0, c->as_arg)) < 0) -+ 0, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0, -- c->as_arg); -+ c->as_arg); - } - - static inline int -@@ -213,15 +219,15 @@ dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- &val, 1, c->as_arg); -+ &val, 1, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -- 1, c->as_arg)) < 0) -+ 1, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, -- 1, c->as_arg); -+ 1, c->as_arg); - } - - static inline int -@@ -238,12 +244,12 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - else if (c->as->abi == UNW_MIPS_ABI_O32) - return read_s32 (c, DWARF_GET_LOC (loc), val); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - } - - static inline int -@@ -260,56 +266,64 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - else if (c->as->abi == UNW_MIPS_ABI_O32) - return write_s32 (c, DWARF_GET_LOC (loc), &val); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - } - - #endif /* !UNW_LOCAL_ONLY */ - --#define tdep_needs_initialization UNW_OBJ(needs_initialization) --#define tdep_init UNW_OBJ(init) -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init UNW_OBJ(init) - /* Platforms that support UNW_INFO_FORMAT_TABLE need to define - tdep_search_unwind_table. */ --#define tdep_search_unwind_table dwarf_search_unwind_table --#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) --#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) --#define tdep_access_reg UNW_OBJ(access_reg) --#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame(c,rs) do {} while(0) -+#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) - - #ifdef UNW_LOCAL_ONLY --# define tdep_find_proc_info(c,ip,n) \ -- dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- dwarf_put_unwind_info((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) - #else --# define tdep_find_proc_info(c,ip,n) \ -- (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) - #endif - --#define tdep_get_as(c) ((c)->dwarf.as) --#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) --#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) - --extern int tdep_needs_initialization; -+extern int tdep_init_done; - - extern void tdep_init (void); - extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t *di, unw_proc_info_t *pi, -- int need_unwind_info, void *arg); -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); - extern void *tdep_uc_addr (ucontext_t *uc, int reg); - extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff); -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); - extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -- unw_word_t *valp, int write); -+ unw_word_t *valp, int write); - extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -- unw_fpreg_t *valp, int write); -+ unw_fpreg_t *valp, int write); - - #endif /* MIPS_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-ppc32/dwarf-config.h b/frysk-imports/libunwind/include/tdep-ppc32/dwarf-config.h -index e2676a8..bf6886b 100644 ---- a/frysk-imports/libunwind/include/tdep-ppc32/dwarf-config.h -+++ b/frysk-imports/libunwind/include/tdep-ppc32/dwarf-config.h -@@ -33,22 +33,22 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #define dwarf_config_h - - /* For PPC64, 48 GPRs + 33 FPRs + 33 AltiVec + 1 SPE */ --#define DWARF_NUM_PRESERVED_REGS 115 -+#define DWARF_NUM_PRESERVED_REGS 115 - --#define DWARF_REGNUM_MAP_LENGTH 115 -+#define DWARF_REGNUM_MAP_LENGTH 115 - - /* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ - #define dwarf_is_big_endian(addr_space) 1 - - /* Convert a pointer to a dwarf_cursor structure to a pointer to - unw_cursor_t. */ --#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) - - typedef struct dwarf_loc - { - unw_word_t val; - #ifndef UNW_LOCAL_ONLY -- unw_word_t type; /* see X86_LOC_TYPE_* macros. */ -+ unw_word_t type; /* see X86_LOC_TYPE_* macros. */ - #endif - } - dwarf_loc_t; -diff --git a/frysk-imports/libunwind/include/tdep-ppc32/jmpbuf.h b/frysk-imports/libunwind/include/tdep-ppc32/jmpbuf.h -index 3780d5b..861e94d 100644 ---- a/frysk-imports/libunwind/include/tdep-ppc32/jmpbuf.h -+++ b/frysk-imports/libunwind/include/tdep-ppc32/jmpbuf.h -@@ -31,7 +31,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* Use glibc's jump-buffer indices; NPTL peeks at SP: */ - --#define JB_SP 6 --#define JB_RP 7 --#define JB_MASK_SAVED 8 --#define JB_MASK 9 -+#define JB_SP 6 -+#define JB_RP 7 -+#define JB_MASK_SAVED 8 -+#define JB_MASK 9 -diff --git a/frysk-imports/libunwind/include/tdep-ppc32/libunwind_i.h b/frysk-imports/libunwind/include/tdep-ppc32/libunwind_i.h -index d8e500e..cc113c5 100644 ---- a/frysk-imports/libunwind/include/tdep-ppc32/libunwind_i.h -+++ b/frysk-imports/libunwind/include/tdep-ppc32/libunwind_i.h -@@ -42,6 +42,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "mempool.h" - #include "dwarf.h" - -+typedef struct -+ { -+ /* no ppc32-specific fast trace */ -+ } -+unw_tdep_frame_t; -+ - struct unw_addr_space - { - struct unw_accessors acc; -@@ -51,8 +57,8 @@ struct unw_addr_space - #else - uint32_t cache_generation; - #endif -- unw_word_t dyn_generation; /* see dyn-common.h */ -- unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ - struct dwarf_rs_cache global_cache; - struct unw_debug_frame_list *debug_frames; - int validate; -@@ -60,53 +66,53 @@ struct unw_addr_space - - struct cursor - { -- struct dwarf_cursor dwarf; /* must be first */ -+ struct dwarf_cursor dwarf; /* must be first */ - - /* Format of sigcontext structure and address at which it is - stored: */ - enum - { -- PPC_SCF_NONE, /* no signal frame encountered */ -- PPC_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */ -+ PPC_SCF_NONE, /* no signal frame encountered */ -+ PPC_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */ - } - sigcontext_format; - unw_word_t sigcontext_addr; - }; - --#define DWARF_GET_LOC(l) ((l).val) -+#define DWARF_GET_LOC(l) ((l).val) - - #ifdef UNW_LOCAL_ONLY --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) --# define DWARF_IS_REG_LOC(l) 0 --# define DWARF_IS_FP_LOC(l) 0 --# define DWARF_IS_V_LOC(l) 0 --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_VREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+# define DWARF_IS_REG_LOC(l) 0 -+# define DWARF_IS_FP_LOC(l) 0 -+# define DWARF_IS_V_LOC(l) 0 -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_VREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) - #else /* !UNW_LOCAL_ONLY */ - --# define DWARF_LOC_TYPE_FP (1 << 0) --# define DWARF_LOC_TYPE_REG (1 << 1) --# define DWARF_LOC_TYPE_V (1 << 2) --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) \ -- ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) --# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) --# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) --# define DWARF_IS_V_LOC(l) (((l).type & DWARF_LOC_TYPE_V) != 0) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) --# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_FP)) --# define DWARF_VREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_V)) -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_LOC_TYPE_V (1 << 2) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_IS_V_LOC(l) (((l).type & DWARF_LOC_TYPE_V) != 0) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) -+# define DWARF_VREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_V)) - - #endif /* !UNW_LOCAL_ONLY */ - -@@ -125,12 +131,12 @@ dwarf_getvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t * val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = DWARF_GET_LOC (loc); - - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, valp, -- 0, c->as_arg)) < 0) -+ 0, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 8, valp + 1, 0, c->as_arg); -@@ -151,11 +157,11 @@ dwarf_putvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- &val, 1, c->as_arg); -+ &val, 1, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, valp, -- 1, c->as_arg)) < 0) -+ 1, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 8, valp + 1, 1, c->as_arg); -@@ -175,7 +181,7 @@ dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t * val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = DWARF_GET_LOC (loc); - return (*c->as->acc.access_mem) (c->as, addr + 0, valp, 0, c->as_arg); -@@ -196,7 +202,7 @@ dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- &val, 1, c->as_arg); -+ &val, 1, c->as_arg); - - addr = DWARF_GET_LOC (loc); - -@@ -218,10 +224,10 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t * val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - } - - static inline int -@@ -239,63 +245,68 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - } - -- -- --#define tdep_needs_initialization UNW_OBJ(needs_initialization) --#define tdep_init UNW_OBJ(init) -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init UNW_OBJ(init) - /* Platforms that support UNW_INFO_FORMAT_TABLE need to define - tdep_search_unwind_table. */ --#define tdep_search_unwind_table dwarf_search_unwind_table --#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) --#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) --#define tdep_access_reg UNW_OBJ(access_reg) --#define tdep_access_fpreg UNW_OBJ(access_fpreg) --#define tdep_fetch_proc_info_post UNW_OBJ(fetch_proc_info_post) --#define tdep_get_func_addr UNW_OBJ(get_func_addr) -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame(c,rs) do {} while(0) -+#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) -+#define tdep_get_func_addr UNW_OBJ(get_func_addr) - - #ifdef UNW_LOCAL_ONLY --# define tdep_find_proc_info(c,ip,n) \ -- dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- dwarf_put_unwind_info((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) - #else --# define tdep_find_proc_info(c,ip,n) \ -- (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) - #endif - - extern int tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip, -- int need_unwind_info); -+ int need_unwind_info); - --#define tdep_get_as(c) ((c)->dwarf.as) --#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) --#define tdep_get_ip(c) ((c)->dwarf.ip) --#define tdep_big_endian(as) 1 -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_big_endian(as) 1 - --extern int tdep_needs_initialization; -+extern int tdep_init_done; - - extern void tdep_init (void); - extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t * di, -- unw_proc_info_t * pi, -- int need_unwind_info, void *arg); -+ unw_dyn_info_t * di, -+ unw_proc_info_t * pi, -+ int need_unwind_info, void *arg); - extern void *tdep_uc_addr (ucontext_t * uc, int reg); - extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff); -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); - extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -- unw_word_t * valp, int write); -+ unw_word_t * valp, int write); - extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -- unw_fpreg_t * valp, int write); -+ unw_fpreg_t * valp, int write); - extern int tdep_get_func_addr (unw_addr_space_t as, unw_word_t addr, -- unw_word_t *entry_point); -+ unw_word_t *entry_point); - - #endif /* PPC64_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-ppc64/dwarf-config.h b/frysk-imports/libunwind/include/tdep-ppc64/dwarf-config.h -index e2676a8..6d8ef0a 100644 ---- a/frysk-imports/libunwind/include/tdep-ppc64/dwarf-config.h -+++ b/frysk-imports/libunwind/include/tdep-ppc64/dwarf-config.h -@@ -33,22 +33,22 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #define dwarf_config_h - - /* For PPC64, 48 GPRs + 33 FPRs + 33 AltiVec + 1 SPE */ --#define DWARF_NUM_PRESERVED_REGS 115 -+#define DWARF_NUM_PRESERVED_REGS 115 - --#define DWARF_REGNUM_MAP_LENGTH 115 -+#define DWARF_REGNUM_MAP_LENGTH 115 - - /* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ --#define dwarf_is_big_endian(addr_space) 1 -+#define dwarf_is_big_endian(addr_space) ((addr_space)->big_endian) - - /* Convert a pointer to a dwarf_cursor structure to a pointer to - unw_cursor_t. */ --#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) - - typedef struct dwarf_loc - { - unw_word_t val; - #ifndef UNW_LOCAL_ONLY -- unw_word_t type; /* see X86_LOC_TYPE_* macros. */ -+ unw_word_t type; /* see X86_LOC_TYPE_* macros. */ - #endif - } - dwarf_loc_t; -diff --git a/frysk-imports/libunwind/include/tdep-ppc64/jmpbuf.h b/frysk-imports/libunwind/include/tdep-ppc64/jmpbuf.h -index 3780d5b..861e94d 100644 ---- a/frysk-imports/libunwind/include/tdep-ppc64/jmpbuf.h -+++ b/frysk-imports/libunwind/include/tdep-ppc64/jmpbuf.h -@@ -31,7 +31,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* Use glibc's jump-buffer indices; NPTL peeks at SP: */ - --#define JB_SP 6 --#define JB_RP 7 --#define JB_MASK_SAVED 8 --#define JB_MASK 9 -+#define JB_SP 6 -+#define JB_RP 7 -+#define JB_MASK_SAVED 8 -+#define JB_MASK 9 -diff --git a/frysk-imports/libunwind/include/tdep-ppc64/libunwind_i.h b/frysk-imports/libunwind/include/tdep-ppc64/libunwind_i.h -index e19eca3..5a5bddb 100644 ---- a/frysk-imports/libunwind/include/tdep-ppc64/libunwind_i.h -+++ b/frysk-imports/libunwind/include/tdep-ppc64/libunwind_i.h -@@ -42,17 +42,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "mempool.h" - #include "dwarf.h" - -+typedef struct -+ { -+ /* no ppc64-specific fast trace */ -+ } -+unw_tdep_frame_t; -+ - struct unw_addr_space - { - struct unw_accessors acc; -+ int big_endian; -+ ppc64_abi_t abi; - unw_caching_policy_t caching_policy; - #ifdef HAVE_ATOMIC_OPS_H - AO_t cache_generation; - #else - uint32_t cache_generation; - #endif -- unw_word_t dyn_generation; /* see dyn-common.h */ -- unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ - struct dwarf_rs_cache global_cache; - struct unw_debug_frame_list *debug_frames; - int validate; -@@ -60,55 +68,106 @@ struct unw_addr_space - - struct cursor - { -- struct dwarf_cursor dwarf; /* must be first */ -+ struct dwarf_cursor dwarf; /* must be first */ - - /* Format of sigcontext structure and address at which it is - stored: */ - enum - { -- PPC_SCF_NONE, /* no signal frame encountered */ -- PPC_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */ -+ PPC_SCF_NONE, /* no signal frame encountered */ -+ PPC_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */ - } - sigcontext_format; - unw_word_t sigcontext_addr; - }; - --#define DWARF_GET_LOC(l) ((l).val) -+#define DWARF_GET_LOC(l) ((l).val) - - #ifdef UNW_LOCAL_ONLY --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) --# define DWARF_IS_REG_LOC(l) 0 --# define DWARF_IS_FP_LOC(l) 0 --# define DWARF_IS_V_LOC(l) 0 --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_VREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --#else /* !UNW_LOCAL_ONLY */ -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+# define DWARF_IS_REG_LOC(l) 0 -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_VREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) - --# define DWARF_LOC_TYPE_FP (1 << 0) --# define DWARF_LOC_TYPE_REG (1 << 1) --# define DWARF_LOC_TYPE_V (1 << 2) --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) \ -- ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) --# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) --# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) --# define DWARF_IS_V_LOC(l) (((l).type & DWARF_LOC_TYPE_V) != 0) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) --# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_FP)) --# define DWARF_VREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_V)) -+static inline int -+dwarf_getvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t * val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *val = *(unw_fpreg_t *) DWARF_GET_LOC (loc); -+ return 0; -+} - --#endif /* !UNW_LOCAL_ONLY */ -+static inline int -+dwarf_putvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *(unw_fpreg_t *) DWARF_GET_LOC (loc) = val; -+ return 0; -+} -+ -+static inline int -+dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *val = *(unw_fpreg_t *) DWARF_GET_LOC (loc); -+ return 0; -+} -+ -+static inline int -+dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *(unw_fpreg_t *) DWARF_GET_LOC (loc) = val; -+ return 0; -+} -+ -+static inline int -+dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *val = *(unw_word_t *) DWARF_GET_LOC (loc); -+ return 0; -+} -+ -+static inline int -+dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *(unw_word_t *) DWARF_GET_LOC (loc) = val; -+ return 0; -+} -+ -+#else /* !UNW_LOCAL_ONLY */ -+ -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_LOC_TYPE_V (1 << 2) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_IS_V_LOC(l) (((l).type & DWARF_LOC_TYPE_V) != 0) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) -+# define DWARF_VREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_V)) - - static inline int - dwarf_getvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t * val) -@@ -125,12 +184,12 @@ dwarf_getvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t * val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = DWARF_GET_LOC (loc); - - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, valp, -- 0, c->as_arg)) < 0) -+ 0, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 8, valp + 1, 0, c->as_arg); -@@ -151,11 +210,11 @@ dwarf_putvr (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- &val, 1, c->as_arg); -+ &val, 1, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, valp, -- 1, c->as_arg)) < 0) -+ 1, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 8, valp + 1, 1, c->as_arg); -@@ -175,7 +234,7 @@ dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t * val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = DWARF_GET_LOC (loc); - return (*c->as->acc.access_mem) (c->as, addr + 0, valp, 0, c->as_arg); -@@ -196,7 +255,7 @@ dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- &val, 1, c->as_arg); -+ &val, 1, c->as_arg); - - addr = DWARF_GET_LOC (loc); - -@@ -218,10 +277,10 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t * val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - } - - static inline int -@@ -239,63 +298,70 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - } - -+#endif /* !UNW_LOCAL_ONLY */ - -- --#define tdep_needs_initialization UNW_OBJ(needs_initialization) --#define tdep_init UNW_OBJ(init) -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init UNW_OBJ(init) - /* Platforms that support UNW_INFO_FORMAT_TABLE need to define - tdep_search_unwind_table. */ --#define tdep_search_unwind_table dwarf_search_unwind_table --#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) --#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) --#define tdep_access_reg UNW_OBJ(access_reg) --#define tdep_access_fpreg UNW_OBJ(access_fpreg) --#define tdep_fetch_proc_info_post UNW_OBJ(fetch_proc_info_post) --#define tdep_get_func_addr UNW_OBJ(get_func_addr) -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame(c,rs) do {} while(0) -+#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) -+#define tdep_get_func_addr UNW_OBJ(get_func_addr) - - #ifdef UNW_LOCAL_ONLY --# define tdep_find_proc_info(c,ip,n) \ -- dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- dwarf_put_unwind_info((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) - #else --# define tdep_find_proc_info(c,ip,n) \ -- (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) - #endif - - extern int tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip, -- int need_unwind_info); -+ int need_unwind_info); - --#define tdep_get_as(c) ((c)->dwarf.as) --#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) --#define tdep_get_ip(c) ((c)->dwarf.ip) --#define tdep_big_endian(as) 1 -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_big_endian(as) ((as)->big_endian) - --extern int tdep_needs_initialization; -+extern int tdep_init_done; - - extern void tdep_init (void); - extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t * di, -- unw_proc_info_t * pi, -- int need_unwind_info, void *arg); -+ unw_dyn_info_t * di, -+ unw_proc_info_t * pi, -+ int need_unwind_info, void *arg); - extern void *tdep_uc_addr (ucontext_t * uc, int reg); - extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff); -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); - extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -- unw_word_t * valp, int write); -+ unw_word_t * valp, int write); - extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -- unw_fpreg_t * valp, int write); -+ unw_fpreg_t * valp, int write); - extern int tdep_get_func_addr (unw_addr_space_t as, unw_word_t addr, -- unw_word_t *entry_point); -+ unw_word_t *entry_point); - - #endif /* PPC64_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-sh/dwarf-config.h b/frysk-imports/libunwind/include/tdep-sh/dwarf-config.h -new file mode 100644 -index 0000000..2f76f5b ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-sh/dwarf-config.h -@@ -0,0 +1,49 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef dwarf_config_h -+#define dwarf_config_h -+ -+#define DWARF_NUM_PRESERVED_REGS 18 -+ -+#define dwarf_to_unw_regnum(reg) (((reg) <= UNW_SH_PR) ? (reg) : 0) -+ -+/* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ -+#define dwarf_is_big_endian(addr_space) ((addr_space)->big_endian) -+ -+/* Convert a pointer to a dwarf_cursor structure to a pointer to -+ unw_cursor_t. */ -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+ -+typedef struct dwarf_loc -+ { -+ unw_word_t val; -+#ifndef UNW_LOCAL_ONLY -+ unw_word_t type; /* see DWARF_LOC_TYPE_* macros. */ -+#endif -+ } -+dwarf_loc_t; -+ -+#endif /* dwarf_config_h */ -diff --git a/frysk-imports/libunwind/include/tdep-sh/jmpbuf.h b/frysk-imports/libunwind/include/tdep-sh/jmpbuf.h -new file mode 100644 -index 0000000..8b44b5b ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-sh/jmpbuf.h -@@ -0,0 +1,48 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+/* Use glibc's jump-buffer indices; NPTL peeks at SP: */ -+ -+/* SH4 glibc jump buffer contents: -+ * 0. r8 -+ * 1. r9 -+ * 2. r10 -+ * 3. r11 -+ * 4. r12 -+ * 5. r13 -+ * 6. r14 -+ * 7. r15 -+ * 8. pr/pc -+ * 9. gbr -+ * 10. fpscr -+ * 11. fr12 -+ * 12. fr13 -+ * 13. fr14 -+ * 14. fr15 -+ */ -+ -+#define JB_SP 7 -+#define JB_RP 8 -+#define JB_MASK_SAVED 15 -+#define JB_MASK 16 -diff --git a/frysk-imports/libunwind/include/tdep-sh/libunwind_i.h b/frysk-imports/libunwind/include/tdep-sh/libunwind_i.h -new file mode 100644 -index 0000000..7bbb29b ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-sh/libunwind_i.h -@@ -0,0 +1,278 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef SH_LIBUNWIND_I_H -+#define SH_LIBUNWIND_I_H -+ -+/* Target-dependent definitions that are internal to libunwind but need -+ to be shared with target-independent code. */ -+ -+#include -+#include -+ -+#include "elf32.h" -+#include "mempool.h" -+#include "dwarf.h" -+ -+typedef struct -+ { -+ /* no sh-specific fast trace */ -+ } -+unw_tdep_frame_t; -+ -+struct unw_addr_space -+ { -+ struct unw_accessors acc; -+ int big_endian; -+ unw_caching_policy_t caching_policy; -+#ifdef HAVE_ATOMIC_OPS_H -+ AO_t cache_generation; -+#else -+ uint32_t cache_generation; -+#endif -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ struct dwarf_rs_cache global_cache; -+ struct unw_debug_frame_list *debug_frames; -+ }; -+ -+struct cursor -+ { -+ struct dwarf_cursor dwarf; /* must be first */ -+ enum -+ { -+ SH_SCF_NONE, /* no signal frame */ -+ SH_SCF_LINUX_SIGFRAME, /* non-RT signal frame */ -+ SH_SCF_LINUX_RT_SIGFRAME, /* RT signal frame */ -+ } -+ sigcontext_format; -+ unw_word_t sigcontext_addr; -+ unw_word_t sigcontext_sp; -+ unw_word_t sigcontext_pc; -+ }; -+ -+#define DWARF_GET_LOC(l) ((l).val) -+ -+#ifdef UNW_LOCAL_ONLY -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+# define DWARF_IS_REG_LOC(l) 0 -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+ -+static inline int -+dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *val = *(unw_fpreg_t *) DWARF_GET_LOC (loc); -+ return 0; -+} -+ -+static inline int -+dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *(unw_fpreg_t *) DWARF_GET_LOC (loc) = val; -+ return 0; -+} -+ -+static inline int -+dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *val = *(unw_word_t *) DWARF_GET_LOC (loc); -+ return 0; -+} -+ -+static inline int -+dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ *(unw_word_t *) DWARF_GET_LOC (loc) = val; -+ return 0; -+} -+ -+#else /* !UNW_LOCAL_ONLY */ -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) -+ -+static inline int -+dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -+{ -+ char *valp = (char *) &val; -+ unw_word_t addr; -+ int ret; -+ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -+ val, 0, c->as_arg); -+ -+ addr = DWARF_GET_LOC (loc); -+ if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -+ 0, c->as_arg)) < 0) -+ return ret; -+ -+ return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0, -+ c->as_arg); -+} -+ -+static inline int -+dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) -+{ -+ char *valp = (char *) &val; -+ unw_word_t addr; -+ int ret; -+ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -+ &val, 1, c->as_arg); -+ -+ addr = DWARF_GET_LOC (loc); -+ if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -+ 1, c->as_arg)) < 0) -+ return ret; -+ -+ return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, -+ 1, c->as_arg); -+} -+ -+static inline int -+dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) -+{ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ /* If a code-generator were to save a value of type unw_word_t in a -+ floating-point register, we would have to support this case. I -+ suppose it could happen with MMX registers, but does it really -+ happen? */ -+ assert (!DWARF_IS_FP_LOC (loc)); -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -+ 0, c->as_arg); -+ else -+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -+ 0, c->as_arg); -+} -+ -+static inline int -+dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) -+{ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ /* If a code-generator were to save a value of type unw_word_t in a -+ floating-point register, we would have to support this case. I -+ suppose it could happen with MMX registers, but does it really -+ happen? */ -+ assert (!DWARF_IS_FP_LOC (loc)); -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -+ 1, c->as_arg); -+ else -+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -+ 1, c->as_arg); -+} -+ -+#endif /* !UNW_LOCAL_ONLY */ -+ -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init UNW_OBJ(init) -+/* Platforms that support UNW_INFO_FORMAT_TABLE need to define -+ tdep_search_unwind_table. */ -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame(c,rs) do {} while(0) -+#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) -+ -+#ifdef UNW_LOCAL_ONLY -+# define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) -+#else -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+#endif -+ -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_big_endian(as) ((as)->big_endian) -+ -+extern int tdep_init_done; -+ -+extern void tdep_init (void); -+extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); -+extern void *tdep_uc_addr (unw_tdep_context_t *uc, int reg); -+extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); -+extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -+ unw_word_t *valp, int write); -+extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -+ unw_fpreg_t *valp, int write); -+ -+#endif /* SH_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-tilegx/dwarf-config.h b/frysk-imports/libunwind/include/tdep-tilegx/dwarf-config.h -new file mode 100644 -index 0000000..93bc6aa ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-tilegx/dwarf-config.h -@@ -0,0 +1,50 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef dwarf_config_h -+#define dwarf_config_h -+ -+/* This is FIRST_PSEUDO_REGISTER in GCC, since DWARF_FRAME_REGISTERS is not -+ explicitly defined. */ -+#define DWARF_NUM_PRESERVED_REGS 188 -+ -+#define DWARF_REGNUM_MAP_LENGTH (56 + 2) -+ -+/* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ -+#define dwarf_is_big_endian(addr_space) ((addr_space)->big_endian) -+ -+/* Convert a pointer to a dwarf_cursor structure to a pointer to -+ unw_cursor_t. */ -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+ -+typedef struct dwarf_loc -+{ -+ unw_word_t val; -+#ifndef UNW_LOCAL_ONLY -+ unw_word_t type; /* see DWARF_LOC_TYPE_* macros. */ -+#endif -+} dwarf_loc_t; -+ -+#endif /* dwarf_config_h */ -diff --git a/frysk-imports/libunwind/include/tdep-tilegx/jmpbuf.h b/frysk-imports/libunwind/include/tdep-tilegx/jmpbuf.h -new file mode 100644 -index 0000000..3afe9e4 ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-tilegx/jmpbuf.h -@@ -0,0 +1,33 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+/* Use glibc's jump-buffer indices; NPTL peeks at SP: */ -+ -+/* FIXME for Tilegx! */ -+ -+#define JB_SP 4 -+#define JB_RP 5 -+#define JB_MASK_SAVED 6 -+#define JB_MASK 7 -diff --git a/frysk-imports/libunwind/include/tdep-tilegx/libunwind_i.h b/frysk-imports/libunwind/include/tdep-tilegx/libunwind_i.h -new file mode 100644 -index 0000000..9a4ec6a ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep-tilegx/libunwind_i.h -@@ -0,0 +1,265 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef TILEGX_LIBUNWIND_I_H -+#define TILEGX_LIBUNWIND_I_H -+ -+/* Target-dependent definitions that are internal to libunwind but need -+ to be shared with target-independent code. */ -+ -+#include -+#include -+ -+# include "elf64.h" -+#include "mempool.h" -+#include "dwarf.h" -+ -+#ifdef HAVE___THREAD -+# undef HAVE___THREAD -+#endif -+ -+typedef struct -+{ -+ /* no Tilegx-specific fast trace */ -+} unw_tdep_frame_t; -+ -+struct unw_addr_space -+{ -+ struct unw_accessors acc; -+ -+ int big_endian; -+ tilegx_abi_t abi; -+ unsigned int addr_size; -+ -+ unw_caching_policy_t caching_policy; -+#ifdef HAVE_ATOMIC_OPS_H -+ AO_t cache_generation; -+#else -+ uint32_t cache_generation; -+#endif -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ struct dwarf_rs_cache global_cache; -+ struct unw_debug_frame_list *debug_frames; -+}; -+ -+#define tdep_big_endian(as) ((as)->big_endian) -+ -+struct cursor -+{ -+ struct dwarf_cursor dwarf; /* must be first */ -+ unw_word_t sigcontext_addr; -+ unw_word_t sigcontext_sp; -+ unw_word_t sigcontext_pc; -+}; -+ -+#define DWARF_GET_LOC(l) ((l).val) -+ -+#ifndef UNW_REMOTE_ONLY -+typedef long tilegx_reg_t; -+#endif -+ -+#ifdef UNW_LOCAL_ONLY -+#define DWARF_NULL_LOC DWARF_LOC (0, 0) -+#define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+#define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+#define DWARF_IS_REG_LOC(l) 0 -+#define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) (intptr_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+#define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+#define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) (intptr_t) \ -+ tdep_uc_addr((c)->as_arg, (r)), 0)) -+ -+/* Tilegx has no FP. */ -+static inline int -+dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -+{ -+ Debug (1, "Tielgx has no fp!\n"); -+ abort(); -+ return 0; -+} -+ -+static inline int -+dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) -+{ -+ Debug (1, "Tielgx has no fp!\n"); -+ abort(); -+ return 0; -+} -+ -+static inline int -+dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ -+ *val = *(tilegx_reg_t *) (intptr_t) DWARF_GET_LOC (loc); -+ return 0; -+} -+ -+static inline int -+dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) -+{ -+ if (!DWARF_GET_LOC (loc)) -+ return -1; -+ -+ *(tilegx_reg_t *) (intptr_t) DWARF_GET_LOC (loc) = val; -+ return 0; -+} -+ -+#else /* !UNW_LOCAL_ONLY */ -+#define DWARF_LOC_TYPE_FP (1 << 0) -+#define DWARF_LOC_TYPE_REG (1 << 1) -+#define DWARF_NULL_LOC DWARF_LOC (0, 0) -+#define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+#define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+#define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+#define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+#define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+#define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+#define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) -+ -+/* TILEGX has no fp. */ -+static inline int -+dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -+{ -+ Debug (1, "Tielgx has no fp!\n"); -+ abort(); -+ return 0; -+} -+ -+static inline int -+dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) -+{ -+ Debug (1, "Tielgx has no fp!\n"); -+ abort(); -+ return 0; -+} -+ -+static inline int -+dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) -+{ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ /* If a code-generator were to save a value of type unw_word_t in a -+ floating-point register, we would have to support this case. I -+ suppose it could happen with MMX registers, but does it really -+ happen? */ -+ assert (!DWARF_IS_FP_LOC (loc)); -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -+ 0, c->as_arg); -+ -+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -+ 0, c->as_arg); -+} -+ -+static inline int -+dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) -+{ -+ if (DWARF_IS_NULL_LOC (loc)) -+ return -UNW_EBADREG; -+ -+ /* If a code-generator were to save a value of type unw_word_t in a -+ floating-point register, we would have to support this case. I -+ suppose it could happen with MMX registers, but does it really -+ happen? */ -+ assert (!DWARF_IS_FP_LOC (loc)); -+ -+ if (DWARF_IS_REG_LOC (loc)) -+ return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -+ 1, c->as_arg); -+ -+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -+ 1, c->as_arg); -+} -+ -+#endif /* !UNW_LOCAL_ONLY */ -+ -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_needs_initialization UNW_OBJ(needs_initialization) -+#define tdep_init UNW_OBJ(init) -+/* Platforms that support UNW_INFO_FORMAT_TABLE need to define -+ tdep_search_unwind_table. */ -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame(c,rs) do {} while(0) -+#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) -+ -+#ifdef UNW_LOCAL_ONLY -+#define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+#define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) -+#else -+#define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+#define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+#endif -+ -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+ -+extern int tdep_init_done; -+ -+extern void tdep_init (void); -+extern int tdep_search_unwind_table (unw_addr_space_t as, -+ unw_word_t ip, -+ unw_dyn_info_t *di, -+ unw_proc_info_t *pi, -+ int need_unwind_info, -+ void *arg); -+extern void *tdep_uc_addr (ucontext_t *uc, int reg); -+extern int tdep_get_elf_image (struct elf_image *ei, -+ pid_t pid, unw_word_t ip, -+ unsigned long *segbase, -+ unsigned long *mapoff, -+ char *path, size_t pathlen); -+extern int tdep_access_reg (struct cursor *c, -+ unw_regnum_t reg, -+ unw_word_t *valp, -+ int write); -+extern int tdep_access_fpreg (struct cursor *c, -+ unw_regnum_t reg, -+ unw_fpreg_t *valp, -+ int write); -+ -+#endif /* TILEGX_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-x86/dwarf-config.h b/frysk-imports/libunwind/include/tdep-x86/dwarf-config.h -index 898ab79..f76f9c1 100644 ---- a/frysk-imports/libunwind/include/tdep-x86/dwarf-config.h -+++ b/frysk-imports/libunwind/include/tdep-x86/dwarf-config.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -29,22 +29,22 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - /* This matches the value used by GCC (see - gcc/config/i386.h:DWARF_FRAME_REGISTERS), which leaves plenty of - room for expansion. */ --#define DWARF_NUM_PRESERVED_REGS 17 -+#define DWARF_NUM_PRESERVED_REGS 17 - --#define DWARF_REGNUM_MAP_LENGTH 19 -+#define DWARF_REGNUM_MAP_LENGTH 19 - - /* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ --#define dwarf_is_big_endian(addr_space) 0 -+#define dwarf_is_big_endian(addr_space) 0 - - /* Convert a pointer to a dwarf_cursor structure to a pointer to - unw_cursor_t. */ --#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) - - typedef struct dwarf_loc - { - unw_word_t val; - #ifndef UNW_LOCAL_ONLY -- unw_word_t type; /* see X86_LOC_TYPE_* macros. */ -+ unw_word_t type; /* see X86_LOC_TYPE_* macros. */ - #endif - } - dwarf_loc_t; -diff --git a/frysk-imports/libunwind/include/tdep-x86/jmpbuf.h b/frysk-imports/libunwind/include/tdep-x86/jmpbuf.h -index a0eb072..521dfa6 100644 ---- a/frysk-imports/libunwind/include/tdep-x86/jmpbuf.h -+++ b/frysk-imports/libunwind/include/tdep-x86/jmpbuf.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -25,7 +25,18 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* Use glibc's jump-buffer indices; NPTL peeks at SP: */ - --#define JB_SP 4 --#define JB_RP 5 --#define JB_MASK_SAVED 6 --#define JB_MASK 7 -+#if defined __linux__ -+ -+#define JB_SP 4 -+#define JB_RP 5 -+#define JB_MASK_SAVED 6 -+#define JB_MASK 7 -+ -+#elif defined __FreeBSD__ -+ -+#define JB_SP 2 -+#define JB_RP 0 -+#define JB_MASK_SAVED 11 -+#define JB_MASK 7 -+ -+#endif -diff --git a/frysk-imports/libunwind/include/tdep-x86/libunwind_i.h b/frysk-imports/libunwind/include/tdep-x86/libunwind_i.h -index 55cdb84..b1c8b98 100644 ---- a/frysk-imports/libunwind/include/tdep-x86/libunwind_i.h -+++ b/frysk-imports/libunwind/include/tdep-x86/libunwind_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -36,6 +36,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "mempool.h" - #include "dwarf.h" - -+typedef struct -+ { -+ /* no x86-specific fast trace */ -+ } -+unw_tdep_frame_t; -+ - struct unw_addr_space - { - struct unw_accessors acc; -@@ -45,40 +51,53 @@ struct unw_addr_space - #else - uint32_t cache_generation; - #endif -- unw_word_t dyn_generation; /* see dyn-common.h */ -- unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ - struct dwarf_rs_cache global_cache; - struct unw_debug_frame_list *debug_frames; - }; - - struct cursor - { -- struct dwarf_cursor dwarf; /* must be first */ -+ struct dwarf_cursor dwarf; /* must be first */ - - /* Format of sigcontext structure and address at which it is - stored: */ - enum - { -- X86_SCF_NONE, /* no signal frame encountered */ -- X86_SCF_LINUX_SIGFRAME, /* classic x86 sigcontext */ -- X86_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */ -+ X86_SCF_NONE, /* no signal frame encountered */ -+ X86_SCF_LINUX_SIGFRAME, /* Linux x86 sigcontext */ -+ X86_SCF_LINUX_RT_SIGFRAME, /* POSIX ucontext_t */ -+ X86_SCF_FREEBSD_SIGFRAME, /* FreeBSD x86 sigcontext */ -+ X86_SCF_FREEBSD_SIGFRAME4, /* FreeBSD 4.x x86 sigcontext */ -+ X86_SCF_FREEBSD_OSIGFRAME, /* FreeBSD pre-4.x x86 sigcontext */ -+ X86_SCF_FREEBSD_SYSCALL, /* FreeBSD x86 syscall */ - } - sigcontext_format; - unw_word_t sigcontext_addr; -+ int validate; -+ ucontext_t *uc; - }; - --#define DWARF_GET_LOC(l) ((l).val) -+static inline ucontext_t * -+dwarf_get_uc(const struct dwarf_cursor *cursor) -+{ -+ const struct cursor *c = (struct cursor *) cursor->as_arg; -+ return c->uc; -+} -+ -+#define DWARF_GET_LOC(l) ((l).val) - - #ifdef UNW_LOCAL_ONLY --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) --# define DWARF_IS_REG_LOC(l) 0 --# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) -+# define DWARF_IS_REG_LOC(l) 0 -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr(dwarf_get_uc(c), (r)), 0)) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ tdep_uc_addr(dwarf_get_uc(c), (r)), 0)) - - static inline int - dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -@@ -103,8 +122,8 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) - { - if (!DWARF_GET_LOC (loc)) - return -1; -- *val = *(unw_word_t *) DWARF_GET_LOC (loc); -- return 0; -+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -+ 0, c->as_arg); - } - - static inline int -@@ -112,23 +131,23 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - { - if (!DWARF_GET_LOC (loc)) - return -1; -- *(unw_word_t *) DWARF_GET_LOC (loc) = val; -- return 0; -+ return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -+ 1, c->as_arg); - } - - #else /* !UNW_LOCAL_ONLY */ --# define DWARF_LOC_TYPE_FP (1 << 0) --# define DWARF_LOC_TYPE_REG (1 << 1) --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) \ -- ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) --# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) --# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) --# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_FP)) -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) - - static inline int - dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) -@@ -142,15 +161,15 @@ dwarf_getfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -- 0, c->as_arg)) < 0) -+ 0, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, 0, -- c->as_arg); -+ c->as_arg); - } - - static inline int -@@ -165,15 +184,15 @@ dwarf_putfp (struct dwarf_cursor *c, dwarf_loc_t loc, unw_fpreg_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, DWARF_GET_LOC (loc), -- &val, 1, c->as_arg); -+ &val, 1, c->as_arg); - - addr = DWARF_GET_LOC (loc); - if ((ret = (*c->as->acc.access_mem) (c->as, addr + 0, (unw_word_t *) valp, -- 1, c->as_arg)) < 0) -+ 1, c->as_arg)) < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 4, (unw_word_t *) valp + 1, -- 1, c->as_arg); -+ 1, c->as_arg); - } - - static inline int -@@ -190,10 +209,10 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); - } - - static inline int -@@ -210,58 +229,63 @@ dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - } - - #endif /* !UNW_LOCAL_ONLY */ - --#define tdep_needs_initialization UNW_OBJ(needs_initialization) --#define tdep_init UNW_OBJ(init) -+#define tdep_getcontext_trace unw_getcontext -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init UNW_OBJ(init) - /* Platforms that support UNW_INFO_FORMAT_TABLE need to define - tdep_search_unwind_table. */ --#define tdep_search_unwind_table dwarf_search_unwind_table --#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) --#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) --#define tdep_access_reg UNW_OBJ(access_reg) --#define tdep_access_fpreg UNW_OBJ(access_fpreg) --#define tdep_fetch_proc_info_post UNW_OBJ(fetch_proc_info_post) -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#define tdep_fetch_frame(c,ip,n) do {} while(0) -+#define tdep_cache_frame(c,rs) do {} while(0) -+#define tdep_reuse_frame(c,rs) do {} while(0) -+#define tdep_stash_frame(c,rs) do {} while(0) -+#define tdep_trace(cur,addr,n) (-UNW_ENOINFO) - - #ifdef UNW_LOCAL_ONLY --# define tdep_find_proc_info(c,ip,n) \ -- dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- dwarf_put_unwind_info((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) - #else --# define tdep_find_proc_info(c,ip,n) \ -- (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) - #endif --extern int tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip, -- int need_unwind_info); - --#define tdep_get_as(c) ((c)->dwarf.as) --#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) --#define tdep_get_ip(c) ((c)->dwarf.ip) --#define tdep_big_endian(as) 0 -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_big_endian(as) 0 - --extern int tdep_needs_initialization; -+extern int tdep_init_done; - - extern void tdep_init (void); - extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t *di, unw_proc_info_t *pi, -- int need_unwind_info, void *arg); -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); - extern void *tdep_uc_addr (ucontext_t *uc, int reg); - extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff); -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); - extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -- unw_word_t *valp, int write); -+ unw_word_t *valp, int write); - extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -- unw_fpreg_t *valp, int write); -+ unw_fpreg_t *valp, int write); - - #endif /* X86_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep-x86_64/dwarf-config.h b/frysk-imports/libunwind/include/tdep-x86_64/dwarf-config.h -index 8023f36..ff77808 100644 ---- a/frysk-imports/libunwind/include/tdep-x86_64/dwarf-config.h -+++ b/frysk-imports/libunwind/include/tdep-x86_64/dwarf-config.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -32,23 +32,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #define dwarf_config_h - - /* XXX need to verify if this value is correct */ --#define DWARF_NUM_PRESERVED_REGS 17 -+#ifdef CONFIG_MSABI_SUPPORT -+#define DWARF_NUM_PRESERVED_REGS 33 -+#else -+#define DWARF_NUM_PRESERVED_REGS 17 -+#endif - --#define DWARF_REGNUM_MAP_LENGTH 17 -+#define DWARF_REGNUM_MAP_LENGTH DWARF_NUM_PRESERVED_REGS - - /* Return TRUE if the ADDR_SPACE uses big-endian byte-order. */ --#define dwarf_is_big_endian(addr_space) 0 -+#define dwarf_is_big_endian(addr_space) 0 - - /* Convert a pointer to a dwarf_cursor structure to a pointer to - unw_cursor_t. */ --#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) -+#define dwarf_to_cursor(c) ((unw_cursor_t *) (c)) - - typedef struct dwarf_loc - { - unw_word_t val; --#ifndef UNW_LOCAL_ONLY -- unw_word_t type; /* see X86_LOC_TYPE_* macros. */ --#endif -+ unw_word_t type; /* see X86_LOC_TYPE_* macros. */ - } - dwarf_loc_t; - -diff --git a/frysk-imports/libunwind/include/tdep-x86_64/jmpbuf.h b/frysk-imports/libunwind/include/tdep-x86_64/jmpbuf.h -index 9220068..d571966 100644 ---- a/frysk-imports/libunwind/include/tdep-x86_64/jmpbuf.h -+++ b/frysk-imports/libunwind/include/tdep-x86_64/jmpbuf.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -23,9 +23,21 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -+#if defined __linux__ -+ - /* Use glibc's jump-buffer indices; NPTL peeks at SP: */ - --#define JB_SP 6 --#define JB_RP 7 --#define JB_MASK_SAVED 8 --#define JB_MASK 9 -+#define JB_SP 6 -+#define JB_RP 7 -+#define JB_MASK_SAVED 8 -+#define JB_MASK 9 -+ -+#elif defined __FreeBSD__ -+ -+#define JB_SP 2 -+#define JB_RP 0 -+/* Pretend the ip cannot be 0 and mask is always saved */ -+#define JB_MASK_SAVED 0 -+#define JB_MASK 9 -+ -+#endif -diff --git a/frysk-imports/libunwind/include/tdep-x86_64/libunwind_i.h b/frysk-imports/libunwind/include/tdep-x86_64/libunwind_i.h -index 46bf2b4..d19c705 100644 ---- a/frysk-imports/libunwind/include/tdep-x86_64/libunwind_i.h -+++ b/frysk-imports/libunwind/include/tdep-x86_64/libunwind_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -38,6 +38,27 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "mempool.h" - #include "dwarf.h" - -+typedef enum -+ { -+ UNW_X86_64_FRAME_STANDARD = -2, /* regular rbp, rsp +/- offset */ -+ UNW_X86_64_FRAME_SIGRETURN = -1, /* special sigreturn frame */ -+ UNW_X86_64_FRAME_OTHER = 0, /* not cacheable (special or unrecognised) */ -+ UNW_X86_64_FRAME_GUESSED = 1 /* guessed it was regular, but not known */ -+ } -+unw_tdep_frame_type_t; -+ -+typedef struct -+ { -+ uint64_t virtual_address; -+ int64_t frame_type : 2; /* unw_tdep_frame_type_t classification */ -+ int64_t last_frame : 1; /* non-zero if last frame in chain */ -+ int64_t cfa_reg_rsp : 1; /* cfa dwarf base register is rsp vs. rbp */ -+ int64_t cfa_reg_offset : 30; /* cfa is at this offset from base register value */ -+ int64_t rbp_cfa_offset : 15; /* rbp saved at this offset from cfa (-1 = not saved) */ -+ int64_t rsp_cfa_offset : 15; /* rsp saved at this offset from cfa (-1 = not saved) */ -+ } -+unw_tdep_frame_t; -+ - struct unw_addr_space - { - struct unw_accessors acc; -@@ -47,54 +68,71 @@ struct unw_addr_space - #else - uint32_t cache_generation; - #endif -- unw_word_t dyn_generation; /* see dyn-common.h */ -- unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ -+ unw_word_t dyn_generation; /* see dyn-common.h */ -+ unw_word_t dyn_info_list_addr; /* (cached) dyn_info_list_addr */ - struct dwarf_rs_cache global_cache; - struct unw_debug_frame_list *debug_frames; -- int validate; - }; - - struct cursor - { -- struct dwarf_cursor dwarf; /* must be first */ -+ struct dwarf_cursor dwarf; /* must be first */ -+ -+ unw_tdep_frame_t frame_info; /* quick tracing assist info */ - - /* Format of sigcontext structure and address at which it is - stored: */ - enum - { -- X86_64_SCF_NONE, /* no signal frame encountered */ -- X86_64_SCF_LINUX_RT_SIGFRAME /* POSIX ucontext_t */ -+ X86_64_SCF_NONE, /* no signal frame encountered */ -+ X86_64_SCF_LINUX_RT_SIGFRAME, /* Linux ucontext_t */ -+ X86_64_SCF_FREEBSD_SIGFRAME, /* FreeBSD signal frame */ -+ X86_64_SCF_FREEBSD_SYSCALL, /* FreeBSD syscall */ - } - sigcontext_format; - unw_word_t sigcontext_addr; -+ int validate; -+ ucontext_t *uc; - }; - --#define DWARF_GET_LOC(l) ((l).val) -+static inline ucontext_t * -+dwarf_get_uc(const struct dwarf_cursor *cursor) -+{ -+ const struct cursor *c = (struct cursor *) cursor->as_arg; -+ return c->uc; -+} -+ -+#define DWARF_GET_LOC(l) ((l).val) -+# define DWARF_LOC_TYPE_MEM (0 << 0) -+# define DWARF_LOC_TYPE_FP (1 << 0) -+# define DWARF_LOC_TYPE_REG (1 << 1) -+# define DWARF_LOC_TYPE_VAL (1 << 2) -+ -+# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) -+# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) -+# define DWARF_IS_MEM_LOC(l) ((l).type == DWARF_LOC_TYPE_MEM) -+# define DWARF_IS_VAL_LOC(l) (((l).type & DWARF_LOC_TYPE_VAL) != 0) -+ -+# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) -+# define DWARF_VAL_LOC(c,v) DWARF_LOC ((v), DWARF_LOC_TYPE_VAL) -+# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), DWARF_LOC_TYPE_MEM) - - #ifdef UNW_LOCAL_ONLY --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r) }) --# define DWARF_IS_REG_LOC(l) 0 --# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -- tdep_uc_addr((c)->as_arg, (r)), 0)) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) (DWARF_GET_LOC (l) == 0) -+# define DWARF_REG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ x86_64_r_uc_addr(dwarf_get_uc(c), (r)), 0)) -+# define DWARF_FPREG_LOC(c,r) (DWARF_LOC((unw_word_t) \ -+ x86_64_r_uc_addr(dwarf_get_uc(c), (r)), 0)) -+ - #else /* !UNW_LOCAL_ONLY */ - --# define DWARF_LOC_TYPE_FP (1 << 0) --# define DWARF_LOC_TYPE_REG (1 << 1) --# define DWARF_NULL_LOC DWARF_LOC (0, 0) --# define DWARF_IS_NULL_LOC(l) \ -- ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) --# define DWARF_LOC(r, t) ((dwarf_loc_t) { .val = (r), .type = (t) }) --# define DWARF_IS_REG_LOC(l) (((l).type & DWARF_LOC_TYPE_REG) != 0) --# define DWARF_IS_FP_LOC(l) (((l).type & DWARF_LOC_TYPE_FP) != 0) --# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) --# define DWARF_MEM_LOC(c,m) DWARF_LOC ((m), 0) --# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -- | DWARF_LOC_TYPE_FP)) -+# define DWARF_NULL_LOC DWARF_LOC (0, 0) -+# define DWARF_IS_NULL_LOC(l) \ -+ ({ dwarf_loc_t _l = (l); _l.val == 0 && _l.type == 0; }) -+# define DWARF_REG_LOC(c,r) DWARF_LOC((r), DWARF_LOC_TYPE_REG) -+# define DWARF_FPREG_LOC(c,r) DWARF_LOC((r), (DWARF_LOC_TYPE_REG \ -+ | DWARF_LOC_TYPE_FP)) - - #endif /* !UNW_LOCAL_ONLY */ - -@@ -124,70 +162,101 @@ dwarf_get (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t *val) - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -- else -+ 0, c->as_arg); -+ if (DWARF_IS_MEM_LOC (loc)) - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), val, -- 0, c->as_arg); -+ 0, c->as_arg); -+ assert(DWARF_IS_VAL_LOC (loc)); -+ *val = DWARF_GET_LOC (loc); -+ return 0; - } - - static inline int - dwarf_put (struct dwarf_cursor *c, dwarf_loc_t loc, unw_word_t val) - { -+ assert(!DWARF_IS_VAL_LOC (loc)); -+ - if (DWARF_IS_NULL_LOC (loc)) - return -UNW_EBADREG; - - if (DWARF_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - else - return (*c->as->acc.access_mem) (c->as, DWARF_GET_LOC (loc), &val, -- 1, c->as_arg); -+ 1, c->as_arg); - } - --#define tdep_needs_initialization UNW_OBJ(needs_initialization) --#define tdep_init UNW_OBJ(init) -+#define tdep_getcontext_trace UNW_ARCH_OBJ(getcontext_trace) -+#define tdep_init_done UNW_OBJ(init_done) -+#define tdep_init_mem_validate UNW_OBJ(init_mem_validate) -+#define tdep_init UNW_OBJ(init) - /* Platforms that support UNW_INFO_FORMAT_TABLE need to define - tdep_search_unwind_table. */ --#define tdep_search_unwind_table dwarf_search_unwind_table --#define tdep_uc_addr UNW_ARCH_OBJ(uc_addr) --#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) --#define tdep_access_reg UNW_OBJ(access_reg) --#define tdep_access_fpreg UNW_OBJ(access_fpreg) --#define tdep_fetch_proc_info_post UNW_OBJ(fetch_proc_info_post) -+#define tdep_search_unwind_table dwarf_search_unwind_table -+#define tdep_find_unwind_table dwarf_find_unwind_table -+#define tdep_get_elf_image UNW_ARCH_OBJ(get_elf_image) -+#define tdep_access_reg UNW_OBJ(access_reg) -+#define tdep_access_fpreg UNW_OBJ(access_fpreg) -+#if __linux__ -+# define tdep_fetch_frame UNW_OBJ(fetch_frame) -+# define tdep_cache_frame UNW_OBJ(cache_frame) -+# define tdep_reuse_frame UNW_OBJ(reuse_frame) -+#else -+# define tdep_fetch_frame(c,ip,n) do {} while(0) -+# define tdep_cache_frame(c,rs) do {} while(0) -+# define tdep_reuse_frame(c,rs) do {} while(0) -+#endif -+#define tdep_stash_frame UNW_OBJ(stash_frame) -+#define tdep_trace UNW_OBJ(tdep_trace) -+#define x86_64_r_uc_addr UNW_OBJ(r_uc_addr) - - #ifdef UNW_LOCAL_ONLY --# define tdep_find_proc_info(c,ip,n) \ -- dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- dwarf_put_unwind_info((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ dwarf_find_proc_info((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ dwarf_put_unwind_info((as), (pi), (arg)) - #else --# define tdep_find_proc_info(c,ip,n) \ -- (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define tdep_put_unwind_info(as,pi,arg) \ -- (*(as)->acc.put_unwind_info)((as), (pi), (arg)) -+# define tdep_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define tdep_put_unwind_info(as,pi,arg) \ -+ (*(as)->acc.put_unwind_info)((as), (pi), (arg)) - #endif --extern int tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip, -- int need_unwind_info); - --#define tdep_get_as(c) ((c)->dwarf.as) --#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) --#define tdep_get_ip(c) ((c)->dwarf.ip) --#define tdep_big_endian(as) 0 -+#define tdep_get_as(c) ((c)->dwarf.as) -+#define tdep_get_as_arg(c) ((c)->dwarf.as_arg) -+#define tdep_get_ip(c) ((c)->dwarf.ip) -+#define tdep_big_endian(as) 0 - --extern int tdep_needs_initialization; -+extern int tdep_init_done; - - extern void tdep_init (void); -+extern void tdep_init_mem_validate (void); - extern int tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t *di, unw_proc_info_t *pi, -- int need_unwind_info, void *arg); --extern void *tdep_uc_addr (ucontext_t *uc, int reg); -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg); -+extern void *x86_64_r_uc_addr (ucontext_t *uc, int reg); - extern int tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff); -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen); - extern int tdep_access_reg (struct cursor *c, unw_regnum_t reg, -- unw_word_t *valp, int write); -+ unw_word_t *valp, int write); - extern int tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, -- unw_fpreg_t *valp, int write); -+ unw_fpreg_t *valp, int write); -+#if __linux__ -+extern void tdep_fetch_frame (struct dwarf_cursor *c, unw_word_t ip, -+ int need_unwind_info); -+extern void tdep_cache_frame (struct dwarf_cursor *c, -+ struct dwarf_reg_state *rs); -+extern void tdep_reuse_frame (struct dwarf_cursor *c, -+ struct dwarf_reg_state *rs); -+extern void tdep_stash_frame (struct dwarf_cursor *c, -+ struct dwarf_reg_state *rs); -+#endif -+ -+extern int tdep_getcontext_trace (unw_tdep_context_t *); -+extern int tdep_trace (unw_cursor_t *cursor, void **addresses, int *n); - - #endif /* X86_64_LIBUNWIND_I_H */ -diff --git a/frysk-imports/libunwind/include/tdep/dwarf-config.h b/frysk-imports/libunwind/include/tdep/dwarf-config.h -new file mode 100644 -index 0000000..c759a46 ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep/dwarf-config.h -@@ -0,0 +1,28 @@ -+/* Provide a real file - not a symlink - as it would cause multiarch conflicts -+ when multiple different arch releases are installed simultaneously. */ -+ -+#if defined __aarch64__ -+# include "tdep-aarch64/dwarf-config.h" -+#elif defined __arm__ -+# include "tdep-arm/dwarf-config.h" -+#elif defined __hppa__ -+# include "tdep-hppa/dwarf-config.h" -+#elif defined __ia64__ -+# include "tdep-ia64/dwarf-config.h" -+#elif defined __mips__ -+# include "tdep-mips/dwarf-config.h" -+#elif defined __powerpc__ && !defined __powerpc64__ -+# include "tdep-ppc32/dwarf-config.h" -+#elif defined __powerpc64__ -+# include "tdep-ppc64/dwarf-config.h" -+#elif defined __sh__ -+# include "tdep-sh/dwarf-config.h" -+#elif defined __i386__ -+# include "tdep-x86/dwarf-config.h" -+#elif defined __x86_64__ || defined __amd64__ -+# include "tdep-x86_64/dwarf-config.h" -+#elif defined __tilegx__ -+# include "tdep-tilegx/dwarf-config.h" -+#else -+# error "Unsupported arch" -+#endif -diff --git a/frysk-imports/libunwind/include/tdep/jmpbuf.h b/frysk-imports/libunwind/include/tdep/jmpbuf.h -new file mode 100644 -index 0000000..4eae183 ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep/jmpbuf.h -@@ -0,0 +1,30 @@ -+/* Provide a real file - not a symlink - as it would cause multiarch conflicts -+ when multiple different arch releases are installed simultaneously. */ -+ -+#ifndef UNW_REMOTE_ONLY -+ -+#if defined __aarch64__ -+# include "tdep-aarch64/jmpbuf.h" -+#if defined __arm__ -+# include "tdep-arm/jmpbuf.h" -+#elif defined __hppa__ -+# include "tdep-hppa/jmpbuf.h" -+#elif defined __ia64__ -+# include "tdep-ia64/jmpbuf.h" -+#elif defined __mips__ -+# include "tdep-mips/jmpbuf.h" -+#elif defined __powerpc__ && !defined __powerpc64__ -+# include "tdep-ppc32/jmpbuf.h" -+#elif defined __powerpc64__ -+# include "tdep-ppc64/jmpbuf.h" -+#elif defined __i386__ -+# include "tdep-x86/jmpbuf.h" -+#elif defined __x86_64__ -+# include "tdep-x86_64/jmpbuf.h" -+#elif defined __tilegx__ -+# include "tdep-tilegx/jmpbuf.h" -+#else -+# error "Unsupported arch" -+#endif -+ -+#endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/include/tdep/libunwind_i.h.in b/frysk-imports/libunwind/include/tdep/libunwind_i.h.in -new file mode 100644 -index 0000000..af05a7f ---- /dev/null -+++ b/frysk-imports/libunwind/include/tdep/libunwind_i.h.in -@@ -0,0 +1,37 @@ -+/* Provide a real file - not a symlink - as it would cause multiarch conflicts -+ when multiple different arch releases are installed simultaneously. */ -+ -+#ifndef UNW_REMOTE_ONLY -+ -+#if defined __aarch64__ -+# include "tdep-aarch64/libunwind_i.h" -+#elif defined __arm__ -+# include "tdep-arm/libunwind_i.h" -+#elif defined __hppa__ -+# include "tdep-hppa/libunwind_i.h" -+#elif defined __ia64__ -+# include "tdep-ia64/libunwind_i.h" -+#elif defined __mips__ -+# include "tdep-mips/libunwind_i.h" -+#elif defined __powerpc__ && !defined __powerpc64__ -+# include "tdep-ppc32/libunwind_i.h" -+#elif defined __powerpc64__ -+# include "tdep-ppc64/libunwind_i.h" -+#elif defined __sh__ -+# include "tdep-sh/libunwind_i.h" -+#elif defined __i386__ -+# include "tdep-x86/libunwind_i.h" -+#elif defined __x86_64__ -+# include "tdep-x86_64/libunwind_i.h" -+#elif defined __tilegx__ -+# include "tdep-tilegx/libunwind_i.h" -+#else -+# error "Unsupported arch" -+#endif -+ -+ -+#else /* UNW_REMOTE_ONLY */ -+ -+# include "tdep-@arch@/libunwind_i.h" -+ -+#endif /* UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/include/unwind.h b/frysk-imports/libunwind/include/unwind.h -index 1f94a0d..7cf128d 100644 ---- a/frysk-imports/libunwind/include/unwind.h -+++ b/frysk-imports/libunwind/include/unwind.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,13 +26,16 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef _UNWIND_H - #define _UNWIND_H - -+/* For uint64_t */ -+#include -+ - #ifdef __cplusplus - extern "C" { - #endif - - /* Minimal interface as per C++ ABI draft standard: - -- http://www.codesourcery.com/cxx-abi/abi-eh.html */ -+ http://www.codesourcery.com/cxx-abi/abi-eh.html */ - - typedef enum - { -@@ -50,44 +53,44 @@ _Unwind_Reason_Code; - - typedef int _Unwind_Action; - --#define _UA_SEARCH_PHASE 1 --#define _UA_CLEANUP_PHASE 2 --#define _UA_HANDLER_FRAME 4 --#define _UA_FORCE_UNWIND 8 -+#define _UA_SEARCH_PHASE 1 -+#define _UA_CLEANUP_PHASE 2 -+#define _UA_HANDLER_FRAME 4 -+#define _UA_FORCE_UNWIND 8 - --struct _Unwind_Context; /* opaque data-structure */ --struct _Unwind_Exception; /* forward-declaration */ -+struct _Unwind_Context; /* opaque data-structure */ -+struct _Unwind_Exception; /* forward-declaration */ - - typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code, -- struct _Unwind_Exception *); -+ struct _Unwind_Exception *); - - typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn) (int, _Unwind_Action, -- unsigned long, -- struct _Unwind_Exception *, -- struct _Unwind_Context *, -- void *); -+ uint64_t, -+ struct _Unwind_Exception *, -+ struct _Unwind_Context *, -+ void *); - - /* The C++ ABI requires exception_class, private_1, and private_2 to - be of type uint64 and the entire structure to be -- double-word-aligned, but that seems a bit overly IA-64-specific. -- Using "unsigned long" instead should give us the desired effect on -- IA-64, while being more general. */ -+ double-word-aligned. Please note that exception_class stays 64-bit -+ even on 32-bit machines for gcc compatibility. */ - struct _Unwind_Exception - { -- unsigned long exception_class; -+ uint64_t exception_class; - _Unwind_Exception_Cleanup_Fn exception_cleanup; - unsigned long private_1; - unsigned long private_2; -- }; -+ } __attribute__((__aligned__)); - - extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *); - extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *, -- _Unwind_Stop_Fn, void *); -+ _Unwind_Stop_Fn, void *); - extern void _Unwind_Resume (struct _Unwind_Exception *); - extern void _Unwind_DeleteException (struct _Unwind_Exception *); - extern unsigned long _Unwind_GetGR (struct _Unwind_Context *, int); - extern void _Unwind_SetGR (struct _Unwind_Context *, int, unsigned long); - extern unsigned long _Unwind_GetIP (struct _Unwind_Context *); -+extern unsigned long _Unwind_GetIPInfo (struct _Unwind_Context *, int *); - extern void _Unwind_SetIP (struct _Unwind_Context *, unsigned long); - extern unsigned long _Unwind_GetLanguageSpecificData (struct _Unwind_Context*); - extern unsigned long _Unwind_GetRegionStart (struct _Unwind_Context *); -@@ -97,17 +100,17 @@ extern unsigned long _Unwind_GetRegionStart (struct _Unwind_Context *); - /* Callback for _Unwind_Backtrace(). The backtrace stops immediately - if the callback returns any value other than _URC_NO_REASON. */ - typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn) (struct _Unwind_Context *, -- void *); -+ void *); - - /* See http://gcc.gnu.org/ml/gcc-patches/2001-09/msg00082.html for why - _UA_END_OF_STACK exists. */ --# define _UA_END_OF_STACK 16 -+# define _UA_END_OF_STACK 16 - - /* If the unwind was initiated due to a forced unwind, resume that - operation, else re-raise the exception. This is used by - __cxa_rethrow(). */ - extern _Unwind_Reason_Code -- _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *); -+ _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *); - - /* See http://gcc.gnu.org/ml/gcc-patches/2003-09/msg00154.html for why - _Unwind_GetBSP() exists. */ -diff --git a/frysk-imports/libunwind/include/x86/jmpbuf.h b/frysk-imports/libunwind/include/x86/jmpbuf.h -index a0eb072..94d5984 100644 ---- a/frysk-imports/libunwind/include/x86/jmpbuf.h -+++ b/frysk-imports/libunwind/include/x86/jmpbuf.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -25,7 +25,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* Use glibc's jump-buffer indices; NPTL peeks at SP: */ - --#define JB_SP 4 --#define JB_RP 5 --#define JB_MASK_SAVED 6 --#define JB_MASK 7 -+#define JB_SP 4 -+#define JB_RP 5 -+#define JB_MASK_SAVED 6 -+#define JB_MASK 7 -diff --git a/frysk-imports/libunwind/include/x86_64/jmpbuf.h b/frysk-imports/libunwind/include/x86_64/jmpbuf.h -deleted file mode 100644 -index 9220068..0000000 ---- a/frysk-imports/libunwind/include/x86_64/jmpbuf.h -+++ /dev/null -@@ -1,31 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --/* Use glibc's jump-buffer indices; NPTL peeks at SP: */ -- --#define JB_SP 6 --#define JB_RP 7 --#define JB_MASK_SAVED 8 --#define JB_MASK 9 -diff --git a/frysk-imports/libunwind/src/.gitignore b/frysk-imports/libunwind/src/.gitignore -deleted file mode 100644 -index 70845e0..0000000 ---- a/frysk-imports/libunwind/src/.gitignore -+++ /dev/null -@@ -1 +0,0 @@ --Makefile.in -diff --git a/frysk-imports/libunwind/src/Makefile.am b/frysk-imports/libunwind/src/Makefile.am -index 66a0aea..c187a9a 100644 ---- a/frysk-imports/libunwind/src/Makefile.am -+++ b/frysk-imports/libunwind/src/Makefile.am -@@ -1,49 +1,99 @@ --SOVERSION=7:0:0 # See comments at end of file. -+SOVERSION=8:1:0 # See comments at end of file. - SETJMP_SO_VERSION=0:0:0 -+COREDUMP_SO_VERSION=0:0:0 - # - # Don't link with start-files since we don't use any constructors/destructors: - # --COMMON_SO_LDFLAGS = -XCClinker -nostartfiles -+COMMON_SO_LDFLAGS = $(LDFLAGS_NOSTARTFILES) - --if REMOTE_ONLY --LIBRARIES_cdep = --lib_LTLIBRARIES_cdep = --lib_LTLIBRARIES_cdep_setjmp = --else --LIBRARIES_cdep = libunwind-ptrace.a --lib_LTLIBRARIES_cdep = libunwind.la --lib_LTLIBRARIES_cdep_setjmp = libunwind-setjmp.la -+lib_LIBRARIES = -+lib_LTLIBRARIES = -+if !REMOTE_ONLY -+lib_LTLIBRARIES += libunwind.la -+if BUILD_PTRACE -+lib_LTLIBRARIES += libunwind-ptrace.la -+endif -+if BUILD_COREDUMP -+lib_LTLIBRARIES += libunwind-coredump.la -+endif -+endif -+ -+noinst_HEADERS = -+noinst_LTLIBRARIES = -+ -+pkgconfigdir = $(libdir)/pkgconfig -+pkgconfig_DATA = libunwind-generic.pc -+ -+if !REMOTE_ONLY -+pkgconfig_DATA += unwind/libunwind.pc -+endif -+ -+if BUILD_PTRACE -+pkgconfig_DATA += ptrace/libunwind-ptrace.pc -+endif -+ -+if BUILD_SETJMP -+pkgconfig_DATA += setjmp/libunwind-setjmp.pc -+endif -+ -+if BUILD_COREDUMP -+pkgconfig_DATA += coredump/libunwind-coredump.pc - endif - - ### libunwind-ptrace: --libunwind_ptrace_a_SOURCES = \ -+libunwind_ptrace_la_SOURCES = \ - ptrace/_UPT_elf.c \ -- ptrace/_UPT_internal.h \ - ptrace/_UPT_accessors.c ptrace/_UPT_access_fpreg.c \ - ptrace/_UPT_access_mem.c ptrace/_UPT_access_reg.c \ - ptrace/_UPT_create.c ptrace/_UPT_destroy.c \ - ptrace/_UPT_find_proc_info.c ptrace/_UPT_get_dyn_info_list_addr.c \ - ptrace/_UPT_put_unwind_info.c ptrace/_UPT_get_proc_name.c \ - ptrace/_UPT_reg_offset.c ptrace/_UPT_resume.c -+noinst_HEADERS += ptrace/_UPT_internal.h -+ -+### libunwind-coredump: -+libunwind_coredump_la_SOURCES = \ -+ coredump/_UCD_accessors.c \ -+ coredump/_UCD_create.c \ -+ coredump/_UCD_destroy.c \ -+ coredump/_UCD_access_mem.c \ -+ coredump/_UCD_elf_map_image.c \ -+ coredump/_UCD_find_proc_info.c \ -+ coredump/_UCD_get_proc_name.c \ -+ \ -+ coredump/_UPT_elf.c \ -+ coredump/_UPT_access_fpreg.c \ -+ coredump/_UPT_get_dyn_info_list_addr.c \ -+ coredump/_UPT_put_unwind_info.c \ -+ coredump/_UPT_resume.c -+libunwind_coredump_la_LDFLAGS = $(COMMON_SO_LDFLAGS) \ -+ -version-info $(COREDUMP_SO_VERSION) -+libunwind_coredump_la_LIBADD = $(LIBLZMA) -+noinst_HEADERS += coredump/_UCD_internal.h coredump/_UCD_lib.h - - ### libunwind-setjmp: - libunwind_setjmp_la_LDFLAGS = $(COMMON_SO_LDFLAGS) \ - -version-info $(SETJMP_SO_VERSION) --libunwind_setjmp_la_LIBADD = libunwind-$(arch).la -lc --libunwind_setjmp_la_SOURCES_common = setjmp/setjmp_i.h \ -- setjmp/longjmp.c \ -+ -+if USE_ELF32 -+LIBUNWIND_ELF = libunwind-elf32.la -+endif -+if USE_ELF64 -+LIBUNWIND_ELF = libunwind-elf64.la -+endif -+if USE_ELFXX -+LIBUNWIND_ELF = libunwind-elfxx.la -+endif -+ -+libunwind_setjmp_la_LIBADD = $(LIBUNWIND_ELF) \ -+ libunwind-$(arch).la \ -+ libunwind.la -lc -+libunwind_setjmp_la_SOURCES = setjmp/longjmp.c \ - setjmp/siglongjmp.c --libunwind_setjmp_la_SOURCES_arm = arm/siglongjmp.S --libunwind_setjmp_la_SOURCES_ia64 = ia64/setjmp.S ia64/sigsetjmp.S \ -- ia64/longjmp.S ia64/siglongjmp.S --libunwind_setjmp_la_SOURCES_hppa = hppa/siglongjmp.S --libunwind_setjmp_la_SOURCES_mips = mips/siglongjmp.S --libunwind_setjmp_la_SOURCES_x86 = x86/longjmp.S x86/siglongjmp.S --libunwind_setjmp_la_SOURCES_x86_64 = x86_64/longjmp.S x86_64/siglongjmp.S --libunwind_setjmp_la_SOURCES_ppc64 = ppc/longjmp.S ppc/siglongjmp.S --libunwind_setjmp_la_SOURCES_ppc32 = ppc/longjmp.S ppc/siglongjmp.S -+noinst_HEADERS += setjmp/setjmp_i.h - - ### libunwind: -+libunwind_la_LIBADD = - - # List of arch-independent files needed by both local-only and generic - # libraries: -@@ -59,8 +109,10 @@ libunwind_la_SOURCES_generic = \ - mi/Gput_dynamic_unwind_info.c mi/Gdestroy_addr_space.c \ - mi/Gget_reg.c mi/Gset_reg.c \ - mi/Gget_fpreg.c mi/Gset_fpreg.c \ -- mi/Gset_caching_policy.c mi/Gget_unwind_table.c -+ mi/Gget_unwind_table.c \ -+ mi/Gset_caching_policy.c - -+if SUPPORT_CXX_EXCEPTIONS - libunwind_la_SOURCES_local_unwind = \ - unwind/Backtrace.c unwind/DeleteException.c \ - unwind/FindEnclosingFunction.c unwind/ForcedUnwind.c \ -@@ -68,7 +120,12 @@ libunwind_la_SOURCES_local_unwind = \ - unwind/GetGR.c unwind/GetIP.c unwind/GetLanguageSpecificData.c \ - unwind/GetRegionStart.c unwind/GetTextRelBase.c \ - unwind/RaiseException.c unwind/Resume.c \ -- unwind/Resume_or_Rethrow.c unwind/SetGR.c unwind/SetIP.c -+ unwind/Resume_or_Rethrow.c unwind/SetGR.c unwind/SetIP.c \ -+ unwind/GetIPInfo.c -+ -+# _ReadULEB()/_ReadSLEB() are needed for Intel C++ 8.0 compatibility -+libunwind_la_SOURCES_os_linux_local = mi/_ReadULEB.c mi/_ReadSLEB.c -+endif - - # List of arch-independent files needed by local-only library (libunwind): - libunwind_la_SOURCES_local_nounwind = \ -@@ -83,67 +140,101 @@ libunwind_la_SOURCES_local_nounwind = \ - mi/Lget_fpreg.c mi/Lset_fpreg.c \ - mi/Lset_caching_policy.c - --# On some platforms, defining _Unwind replacements really upsets --# exception-handling. Turn off those functions for those platforms. --if ARCH_ARM --libunwind_la_SOURCES_local = \ -- $(libunwind_la_SOURCES_local_nounwind) --else --if ARCH_MIPS --libunwind_la_SOURCES_local = \ -- $(libunwind_la_SOURCES_local_nounwind) --else - libunwind_la_SOURCES_local = \ - $(libunwind_la_SOURCES_local_nounwind) \ - $(libunwind_la_SOURCES_local_unwind) --endif # ARCH_MIPS --endif # ARCH_ARM - --libunwind_la_SOURCES_os_linux = os-linux.h os-linux.c -+noinst_HEADERS += os-linux.h -+libunwind_la_SOURCES_os_linux = os-linux.c - --# _ReadULEB()/_ReadSLEB() are needed for Intel C++ 8.0 compatibility --libunwind_la_SOURCES_os_linux_local = mi/_ReadULEB.c mi/_ReadSLEB.c - libunwind_la_SOURCES_os_hpux = os-hpux.c - --dwarf_SOURCES_common = \ -- dwarf/global.c -+libunwind_la_SOURCES_os_freebsd = os-freebsd.c -+ -+libunwind_la_SOURCES_os_qnx = os-qnx.c -+ -+libunwind_dwarf_common_la_SOURCES = dwarf/global.c -+ -+libunwind_dwarf_local_la_SOURCES = \ -+ dwarf/Lexpr.c dwarf/Lfde.c dwarf/Lparser.c dwarf/Lpe.c dwarf/Lstep.c \ -+ dwarf/Lfind_proc_info-lsb.c \ -+ dwarf/Lfind_unwind_table.c -+libunwind_dwarf_local_la_LIBADD = libunwind-dwarf-common.la - --dwarf_SOURCES_local = \ -- dwarf/Lexpr.c dwarf/Lfde.c dwarf/Lparser.c dwarf/Lpe.c dwarf/Lstep.c -+libunwind_dwarf_generic_la_SOURCES = \ -+ dwarf/Gexpr.c dwarf/Gfde.c dwarf/Gparser.c dwarf/Gpe.c dwarf/Gstep.c \ -+ dwarf/Gfind_proc_info-lsb.c \ -+ dwarf/Gfind_unwind_table.c -+libunwind_dwarf_generic_la_LIBADD = libunwind-dwarf-common.la - --dwarf_SOURCES_generic = \ -- dwarf/Gexpr.c dwarf/Gfde.c dwarf/Gparser.c dwarf/Gpe.c dwarf/Gstep.c -+if USE_DWARF -+ noinst_LTLIBRARIES += libunwind-dwarf-common.la libunwind-dwarf-generic.la -+if !REMOTE_ONLY -+ noinst_LTLIBRARIES += libunwind-dwarf-local.la -+endif -+ libunwind_la_LIBADD += libunwind-dwarf-local.la -+endif -+ -+noinst_HEADERS += elf32.h elf64.h elfxx.h -+ -+libunwind_elf32_la_SOURCES = elf32.c -+libunwind_elf64_la_SOURCES = elf64.c -+libunwind_elfxx_la_SOURCES = elfxx.c -+libunwind_elf32_la_LIBADD = $(LIBLZMA) -+libunwind_elf64_la_LIBADD = $(LIBLZMA) -+libunwind_elfxx_la_LIBADD = $(LIBLZMA) - --# The list of files that go info libunwind and libunwind-arm: -+noinst_LTLIBRARIES += $(LIBUNWIND_ELF) -+libunwind_la_LIBADD += $(LIBUNWIND_ELF) -+ -+# The list of files that go into libunwind and libunwind-aarch64: -+noinst_HEADERS += aarch64/init.h aarch64/offsets.h aarch64/unwind_i.h -+libunwind_la_SOURCES_aarch64_common = $(libunwind_la_SOURCES_common) \ -+ aarch64/is_fpreg.c aarch64/regname.c -+ -+# The list of files that go into libunwind: -+libunwind_la_SOURCES_aarch64 = $(libunwind_la_SOURCES_aarch64_common) \ -+ $(libunwind_la_SOURCES_local) \ -+ aarch64/Lcreate_addr_space.c aarch64/Lget_proc_info.c \ -+ aarch64/Lget_save_loc.c aarch64/Lglobal.c aarch64/Linit.c \ -+ aarch64/Linit_local.c aarch64/Linit_remote.c \ -+ aarch64/Lis_signal_frame.c aarch64/Lregs.c aarch64/Lresume.c \ -+ aarch64/Lstash_frame.c aarch64/Lstep.c aarch64/Ltrace.c \ -+ aarch64/getcontext.S -+ -+libunwind_aarch64_la_SOURCES_aarch64 = $(libunwind_la_SOURCES_aarch64_common) \ -+ $(libunwind_la_SOURCES_generic) \ -+ aarch64/Gcreate_addr_space.c aarch64/Gget_proc_info.c \ -+ aarch64/Gget_save_loc.c aarch64/Gglobal.c aarch64/Ginit.c \ -+ aarch64/Ginit_local.c aarch64/Ginit_remote.c \ -+ aarch64/Gis_signal_frame.c aarch64/Gregs.c aarch64/Gresume.c \ -+ aarch64/Gstash_frame.c aarch64/Gstep.c aarch64/Gtrace.c -+ -+# The list of files that go into libunwind and libunwind-arm: -+noinst_HEADERS += arm/init.h arm/offsets.h arm/unwind_i.h - libunwind_la_SOURCES_arm_common = $(libunwind_la_SOURCES_common) \ -- $(dwarf_SOURCES_common) \ -- elf32.c elf32.h \ -- arm/init.h arm/offsets.h arm/regs.h \ - arm/is_fpreg.c arm/regname.c - - # The list of files that go into libunwind: - libunwind_la_SOURCES_arm = $(libunwind_la_SOURCES_arm_common) \ - $(libunwind_la_SOURCES_local) \ - arm/getcontext.S \ -- $(dwarf_SOURCES_local) \ -- dwarf/Lfind_proc_info-lsb.c \ - arm/Lcreate_addr_space.c arm/Lget_proc_info.c arm/Lget_save_loc.c \ - arm/Lglobal.c arm/Linit.c arm/Linit_local.c arm/Linit_remote.c \ -- arm/Lis_signal_frame.c arm/Lregs.c arm/Lresume.c arm/Lstep.c -+ arm/Lis_signal_frame.c arm/Lregs.c arm/Lresume.c arm/Lstep.c \ -+ arm/Lex_tables.c arm/Lstash_frame.c arm/Ltrace.c - - libunwind_arm_la_SOURCES_arm = $(libunwind_la_SOURCES_arm_common) \ - $(libunwind_la_SOURCES_generic) \ -- $(dwarf_SOURCES_generic) \ -- dwarf/Gfind_proc_info-lsb.c \ - arm/Gcreate_addr_space.c arm/Gget_proc_info.c arm/Gget_save_loc.c \ - arm/Gglobal.c arm/Ginit.c arm/Ginit_local.c arm/Ginit_remote.c \ -- arm/Gis_signal_frame.c arm/Gregs.c arm/Gresume.c arm/Gstep.c -+ arm/Gis_signal_frame.c arm/Gregs.c arm/Gresume.c arm/Gstep.c \ -+ arm/Gex_tables.c arm/Gstash_frame.c arm/Gtrace.c - - # The list of files that go both into libunwind and libunwind-ia64: -+noinst_HEADERS += ia64/init.h ia64/offsets.h ia64/regs.h \ -+ ia64/ucontext_i.h ia64/unwind_decoder.h ia64/unwind_i.h - libunwind_la_SOURCES_ia64_common = $(libunwind_la_SOURCES_common) \ -- elf64.c elf64.h \ -- ia64/init.h ia64/offsets.h ia64/regs.h \ -- ia64/ucontext_i.h ia64/unwind_decoder.h ia64/unwind_i.h \ - ia64/regname.c - - # The list of files that go into libunwind: -@@ -156,7 +247,7 @@ libunwind_la_SOURCES_ia64 = $(libunwind_la_SOURCES_ia64_common) \ - ia64/Lglobal.c ia64/Linit.c ia64/Linit_local.c ia64/Linit_remote.c \ - ia64/Linstall_cursor.S ia64/Lis_signal_frame.c ia64/Lparser.c \ - ia64/Lrbs.c ia64/Lregs.c ia64/Lresume.c ia64/Lscript.c ia64/Lstep.c \ -- ia64/Ltables.c -+ ia64/Ltables.c ia64/Lfind_unwind_table.c - - # The list of files that go into libunwind-ia64: - libunwind_ia64_la_SOURCES_ia64 = $(libunwind_la_SOURCES_ia64_common) \ -@@ -165,21 +256,17 @@ libunwind_ia64_la_SOURCES_ia64 = $(libunwind_la_SOURCES_ia64_common) \ - ia64/Gglobal.c ia64/Ginit.c ia64/Ginit_local.c ia64/Ginit_remote.c \ - ia64/Ginstall_cursor.S ia64/Gis_signal_frame.c ia64/Gparser.c \ - ia64/Grbs.c ia64/Gregs.c ia64/Gresume.c ia64/Gscript.c ia64/Gstep.c \ -- ia64/Gtables.c -+ ia64/Gtables.c ia64/Gfind_unwind_table.c - - # The list of files that go both into libunwind and libunwind-hppa: -+noinst_HEADERS += hppa/init.h hppa/offsets.h hppa/unwind_i.h - libunwind_la_SOURCES_hppa_common = $(libunwind_la_SOURCES_common) \ -- $(dwarf_SOURCES_common) \ -- elf32.c elf32.h \ -- hppa/init.h hppa/offsets.h hppa/unwind_i.h \ - hppa/regname.c - - # The list of files that go into libunwind: - libunwind_la_SOURCES_hppa = $(libunwind_la_SOURCES_hppa_common) \ - $(libunwind_la_SOURCES_local) \ - hppa/getcontext.S hppa/setcontext.S \ -- $(dwarf_SOURCES_local) \ -- dwarf/Lfind_proc_info-lsb.c \ - hppa/Lcreate_addr_space.c hppa/Lget_save_loc.c hppa/Lglobal.c \ - hppa/Linit.c hppa/Linit_local.c hppa/Linit_remote.c \ - hppa/Lis_signal_frame.c hppa/Lget_proc_info.c hppa/Lregs.c \ -@@ -188,172 +275,195 @@ libunwind_la_SOURCES_hppa = $(libunwind_la_SOURCES_hppa_common) \ - # The list of files that go into libunwind-hppa: - libunwind_hppa_la_SOURCES_hppa = $(libunwind_la_SOURCES_hppa_common) \ - $(libunwind_la_SOURCES_generic) \ -- $(dwarf_SOURCES_generic) \ -- dwarf/Gfind_proc_info-lsb.c \ - hppa/Gcreate_addr_space.c hppa/Gget_save_loc.c hppa/Gglobal.c \ - hppa/Ginit.c hppa/Ginit_local.c hppa/Ginit_remote.c \ - hppa/Gis_signal_frame.c hppa/Gget_proc_info.c hppa/Gregs.c \ - hppa/Gresume.c hppa/Gstep.c - - # The list of files that go info libunwind and libunwind-mips: -+noinst_HEADERS += mips/init.h mips/offsets.h - libunwind_la_SOURCES_mips_common = $(libunwind_la_SOURCES_common) \ -- $(dwarf_SOURCES_common) \ -- elfxx.c \ -- mips/init.h mips/offsets.h mips/regs.h \ - mips/is_fpreg.c mips/regname.c - - # The list of files that go into libunwind: - libunwind_la_SOURCES_mips = $(libunwind_la_SOURCES_mips_common) \ - $(libunwind_la_SOURCES_local) \ - mips/getcontext.S \ -- $(dwarf_SOURCES_local) \ -- dwarf/Lfind_proc_info-lsb.c \ - mips/Lcreate_addr_space.c mips/Lget_proc_info.c mips/Lget_save_loc.c \ - mips/Lglobal.c mips/Linit.c mips/Linit_local.c mips/Linit_remote.c \ - mips/Lis_signal_frame.c mips/Lregs.c mips/Lresume.c mips/Lstep.c - - libunwind_mips_la_SOURCES_mips = $(libunwind_la_SOURCES_mips_common) \ - $(libunwind_la_SOURCES_generic) \ -- $(dwarf_SOURCES_generic) \ -- dwarf/Gfind_proc_info-lsb.c \ - mips/Gcreate_addr_space.c mips/Gget_proc_info.c mips/Gget_save_loc.c \ - mips/Gglobal.c mips/Ginit.c mips/Ginit_local.c mips/Ginit_remote.c \ - mips/Gis_signal_frame.c mips/Gregs.c mips/Gresume.c mips/Gstep.c - -+# The list of files that go info libunwind and libunwind-tilegx: -+noinst_HEADERS += tilegx/init.h tilegx/offsets.h -+libunwind_la_SOURCES_tilegx_common = $(libunwind_la_SOURCES_common) \ -+ tilegx/is_fpreg.c tilegx/regname.c -+ -+# The list of files that go into libunwind: -+libunwind_la_SOURCES_tilegx = $(libunwind_la_SOURCES_tilegx_common) \ -+ $(libunwind_la_SOURCES_local) \ -+ tilegx/getcontext.S \ -+ tilegx/Lcreate_addr_space.c tilegx/Lget_proc_info.c tilegx/Lget_save_loc.c \ -+ tilegx/Lglobal.c tilegx/Linit.c tilegx/Linit_local.c tilegx/Linit_remote.c \ -+ tilegx/Lis_signal_frame.c tilegx/Lregs.c tilegx/Lresume.c tilegx/Lstep.c -+ -+libunwind_tilegx_la_SOURCES_tilegx = $(libunwind_la_SOURCES_tilegx_common) \ -+ $(libunwind_la_SOURCES_generic) \ -+ tilegx/Gcreate_addr_space.c tilegx/Gget_proc_info.c tilegx/Gget_save_loc.c \ -+ tilegx/Gglobal.c tilegx/Ginit.c tilegx/Ginit_local.c tilegx/Ginit_remote.c \ -+ tilegx/Gis_signal_frame.c tilegx/Gregs.c tilegx/Gresume.c tilegx/Gstep.c -+ -+ - # The list of files that go both into libunwind and libunwind-x86: -+noinst_HEADERS += x86/init.h x86/offsets.h x86/unwind_i.h - libunwind_la_SOURCES_x86_common = $(libunwind_la_SOURCES_common) \ -- $(dwarf_SOURCES_common) \ -- elf32.c elf32.h \ -- x86/init.h x86/offsets.h x86/unwind_i.h \ - x86/is_fpreg.c x86/regname.c - - # The list of files that go into libunwind: - libunwind_la_SOURCES_x86 = $(libunwind_la_SOURCES_x86_common) \ -+ $(libunwind_la_SOURCES_x86_os_local) \ - $(libunwind_la_SOURCES_local) \ -- $(dwarf_SOURCES_local) \ -- dwarf/Lfind_proc_info-lsb.c \ - x86/Lcreate_addr_space.c x86/Lget_save_loc.c x86/Lglobal.c \ - x86/Linit.c x86/Linit_local.c x86/Linit_remote.c \ -- x86/Lis_signal_frame.c x86/Lget_proc_info.c x86/Lregs.c \ -- x86/Lresume.c x86/Lstep.c x86/Lfetch_proc_info_post.c -+ x86/Lget_proc_info.c x86/Lregs.c \ -+ x86/Lresume.c x86/Lstep.c - - # The list of files that go into libunwind-x86: - libunwind_x86_la_SOURCES_x86 = $(libunwind_la_SOURCES_x86_common) \ -+ $(libunwind_la_SOURCES_x86_os) \ - $(libunwind_la_SOURCES_generic) \ -- $(dwarf_SOURCES_generic) \ -- dwarf/Gfind_proc_info-lsb.c \ - x86/Gcreate_addr_space.c x86/Gget_save_loc.c x86/Gglobal.c \ - x86/Ginit.c x86/Ginit_local.c x86/Ginit_remote.c \ -- x86/Gis_signal_frame.c x86/Gget_proc_info.c x86/Gregs.c \ -- x86/Gresume.c x86/Gstep.c x86/Gfetch_proc_info_post.c -+ x86/Gget_proc_info.c x86/Gregs.c \ -+ x86/Gresume.c x86/Gstep.c - - # The list of files that go both into libunwind and libunwind-x86_64: -+noinst_HEADERS += x86_64/offsets.h \ -+ x86_64/init.h x86_64/unwind_i.h x86_64/ucontext_i.h - libunwind_la_SOURCES_x86_64_common = $(libunwind_la_SOURCES_common) \ -- $(dwarf_SOURCES_common) \ -- elf64.c elf64.h \ -- x86_64/init.h x86_64/unwind_i.h x86_64/ucontext_i.h \ -- x86_64/is_fpreg.c x86_64/regname.c x86_64/offsets.h -+ x86_64/is_fpreg.c x86_64/regname.c - - # The list of files that go into libunwind: - libunwind_la_SOURCES_x86_64 = $(libunwind_la_SOURCES_x86_64_common) \ -+ $(libunwind_la_SOURCES_x86_64_os_local) \ - $(libunwind_la_SOURCES_local) \ -- $(dwarf_SOURCES_local) \ -- dwarf/Lfind_proc_info-lsb.c \ -- x86_64/setcontext.S \ -+ x86_64/setcontext.S \ - x86_64/Lcreate_addr_space.c x86_64/Lget_save_loc.c x86_64/Lglobal.c \ - x86_64/Linit.c x86_64/Linit_local.c x86_64/Linit_remote.c \ -- x86_64/Lis_signal_frame.c x86_64/Lget_proc_info.c x86_64/Lregs.c \ -- x86_64/Lresume.c x86_64/Lstep.c x86_64/Lfetch_proc_info_post.c -+ x86_64/Lget_proc_info.c x86_64/Lregs.c x86_64/Lresume.c \ -+ x86_64/Lstash_frame.c x86_64/Lstep.c x86_64/Ltrace.c x86_64/getcontext.S - - # The list of files that go into libunwind-x86_64: - libunwind_x86_64_la_SOURCES_x86_64 = $(libunwind_la_SOURCES_x86_64_common) \ -+ $(libunwind_la_SOURCES_x86_64_os) \ - $(libunwind_la_SOURCES_generic) \ -- $(dwarf_SOURCES_generic) \ -- dwarf/Gfind_proc_info-lsb.c \ - x86_64/Gcreate_addr_space.c x86_64/Gget_save_loc.c x86_64/Gglobal.c \ - x86_64/Ginit.c x86_64/Ginit_local.c x86_64/Ginit_remote.c \ -- x86_64/Gis_signal_frame.c x86_64/Gget_proc_info.c x86_64/Gregs.c \ -- x86_64/Gresume.c x86_64/Gstep.c x86_64/Gfetch_proc_info_post.c -+ x86_64/Gget_proc_info.c x86_64/Gregs.c x86_64/Gresume.c \ -+ x86_64/Gstash_frame.c x86_64/Gstep.c x86_64/Gtrace.c - - # The list of local files that go to Power 64 and 32: --libunwind_la_SOURCES_ppc = ppc/Lcreate_addr_space.c \ -+libunwind_la_SOURCES_ppc = \ - ppc/Lget_proc_info.c ppc/Lget_save_loc.c ppc/Linit_local.c \ -- ppc/Linit_remote.c ppc/Lis_signal_frame.c \ -- ppc/Lfetch_proc_info_post.c -+ ppc/Linit_remote.c ppc/Lis_signal_frame.c - - # The list of generic files that go to Power 64 and 32: --libunwind_ppc_la_SOURCES_ppc_generic = ppc/Gcreate_addr_space.c \ -+libunwind_ppc_la_SOURCES_ppc_generic = \ - ppc/Gget_proc_info.c ppc/Gget_save_loc.c ppc/Ginit_local.c \ -- ppc/Ginit_remote.c ppc/Gis_signal_frame.c \ -- ppc/Gfetch_proc_info_post.c -+ ppc/Ginit_remote.c ppc/Gis_signal_frame.c - - # The list of files that go both into libunwind and libunwind-ppc32: -+noinst_HEADERS += ppc32/init.h ppc32/unwind_i.h ppc32/ucontext_i.h - libunwind_la_SOURCES_ppc32_common = $(libunwind_la_SOURCES_common) \ -- $(dwarf_SOURCES_common) \ -- elf32.c elf32.h \ -- ppc32/init.h ppc32/unwind_i.h ppc32/ucontext_i.h \ - ppc32/is_fpreg.c ppc32/regname.c ppc32/get_func_addr.c - - # The list of files that go into libunwind: - libunwind_la_SOURCES_ppc32 = $(libunwind_la_SOURCES_ppc32_common) \ - $(libunwind_la_SOURCES_local) \ -- $(dwarf_SOURCES_local) \ - $(libunwind_la_SOURCES_ppc) \ -- dwarf/Lfind_proc_info-lsb.c \ -+ ppc32/Lcreate_addr_space.c \ - ppc32/Lglobal.c ppc32/Linit.c \ - ppc32/Lregs.c ppc32/Lresume.c ppc32/Lstep.c - - # The list of files that go into libunwind-ppc32: - libunwind_ppc32_la_SOURCES_ppc32 = $(libunwind_la_SOURCES_ppc32_common) \ - $(libunwind_la_SOURCES_generic) \ -- $(dwarf_SOURCES_generic) \ - $(libunwind_ppc_la_SOURCES_ppc_generic) \ -- dwarf/Gfind_proc_info-lsb.c \ -+ ppc32/Gcreate_addr_space.c \ - ppc32/Gglobal.c ppc32/Ginit.c \ - ppc32/Gregs.c ppc32/Gresume.c ppc32/Gstep.c - - # The list of files that go both into libunwind and libunwind-ppc64: -+noinst_HEADERS += ppc64/init.h ppc64/unwind_i.h ppc64/ucontext_i.h - libunwind_la_SOURCES_ppc64_common = $(libunwind_la_SOURCES_common) \ -- $(dwarf_SOURCES_common) \ -- elf64.c elf64.h \ -- ppc64/init.h ppc64/unwind_i.h ppc64/ucontext_i.h \ - ppc64/is_fpreg.c ppc64/regname.c ppc64/get_func_addr.c - - # The list of files that go into libunwind: - libunwind_la_SOURCES_ppc64 = $(libunwind_la_SOURCES_ppc64_common) \ - $(libunwind_la_SOURCES_local) \ -- $(dwarf_SOURCES_local) \ - $(libunwind_la_SOURCES_ppc) \ -- dwarf/Lfind_proc_info-lsb.c \ -+ ppc64/Lcreate_addr_space.c \ - ppc64/Lglobal.c ppc64/Linit.c \ - ppc64/Lregs.c ppc64/Lresume.c ppc64/Lstep.c - - # The list of files that go into libunwind-ppc64: - libunwind_ppc64_la_SOURCES_ppc64 = $(libunwind_la_SOURCES_ppc64_common) \ - $(libunwind_la_SOURCES_generic) \ -- $(dwarf_SOURCES_generic) \ - $(libunwind_ppc_la_SOURCES_ppc_generic) \ -- dwarf/Gfind_proc_info-lsb.c \ -+ ppc64/Gcreate_addr_space.c \ - ppc64/Gglobal.c ppc64/Ginit.c \ - ppc64/Gregs.c ppc64/Gresume.c ppc64/Gstep.c - -+# The list of files that go into libunwind and libunwind-sh: -+noinst_HEADERS += sh/init.h sh/offsets.h sh/unwind_i.h -+libunwind_la_SOURCES_sh_common = $(libunwind_la_SOURCES_common) \ -+ sh/is_fpreg.c sh/regname.c -+ -+# The list of files that go into libunwind: -+libunwind_la_SOURCES_sh = $(libunwind_la_SOURCES_sh_common) \ -+ $(libunwind_la_SOURCES_local) \ -+ sh/Lcreate_addr_space.c sh/Lget_proc_info.c sh/Lget_save_loc.c \ -+ sh/Lglobal.c sh/Linit.c sh/Linit_local.c sh/Linit_remote.c \ -+ sh/Lis_signal_frame.c sh/Lregs.c sh/Lresume.c sh/Lstep.c -+ -+libunwind_sh_la_SOURCES_sh = $(libunwind_la_SOURCES_sh_common) \ -+ $(libunwind_la_SOURCES_generic) \ -+ sh/Gcreate_addr_space.c sh/Gget_proc_info.c sh/Gget_save_loc.c \ -+ sh/Gglobal.c sh/Ginit.c sh/Ginit_local.c sh/Ginit_remote.c \ -+ sh/Gis_signal_frame.c sh/Gregs.c sh/Gresume.c sh/Gstep.c -+ - if REMOTE_ONLY - install-exec-hook: - # Nothing to do here.... - else - # - # This is not ideal, but I know of no other way to install an --# alias for a library. -+# alias for a library. For the shared version, we have to do -+# a file check before creating the link, because it isn't going -+# to be there if the user configured with --disable-shared. - # - install-exec-hook: -- $(LN_S) -f libunwind-$(arch).a $(DESTDIR)$(libdir)/libunwind-generic.a -- $(LN_S) -f libunwind-$(arch).so \ -- $(DESTDIR)$(libdir)/libunwind-generic.so -+ cd $(DESTDIR)$(libdir) && $(LN_S) -f libunwind-$(arch).a libunwind-generic.a -+ if test -f $(DESTDIR)$(libdir)/libunwind-$(arch).so; then \ -+ cd $(DESTDIR)$(libdir) && $(LN_S) -f libunwind-$(arch).so \ -+ libunwind-generic.so; \ -+ fi - endif - - if OS_LINUX -- libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_linux) -- libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_linux_local) -+ libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_linux) -+ libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_linux_local) -+ libunwind_la_SOURCES_x86_os = x86/Gos-linux.c -+ libunwind_x86_la_SOURCES_os = x86/getcontext-linux.S -+ libunwind_la_SOURCES_x86_os_local = x86/Los-linux.c -+ libunwind_la_SOURCES_x86_64_os = x86_64/Gos-linux.c -+ libunwind_la_SOURCES_x86_64_os_local = x86_64/Los-linux.c -+ libunwind_coredump_la_SOURCES += coredump/_UCD_access_reg_linux.c - endif - - if OS_HPUX -@@ -361,110 +471,181 @@ if OS_HPUX - libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_hpux_local) - endif - -+if OS_FREEBSD -+ libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_freebsd) -+ libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_freebsd_local) -+ libunwind_la_SOURCES_x86_os = x86/Gos-freebsd.c -+ libunwind_x86_la_SOURCES_os = x86/getcontext-freebsd.S -+ libunwind_la_SOURCES_x86_os_local = x86/Los-freebsd.c -+ libunwind_la_SOURCES_x86_64_os = x86_64/Gos-freebsd.c -+ libunwind_la_SOURCES_x86_64_os_local = x86_64/Los-freebsd.c -+ libunwind_coredump_la_SOURCES += coredump/_UCD_access_reg_freebsd.c -+endif -+ -+if OS_QNX -+ libunwind_la_SOURCES_os = $(libunwind_la_SOURCES_os_qnx) -+ libunwind_la_SOURCES_os_local = $(libunwind_la_SOURCES_os_qnx_local) -+endif -+ -+if ARCH_AARCH64 -+ lib_LTLIBRARIES += libunwind-aarch64.la -+ libunwind_la_SOURCES = $(libunwind_la_SOURCES_aarch64) -+ libunwind_aarch64_la_SOURCES = $(libunwind_aarch64_la_SOURCES_aarch64) -+ libunwind_aarch64_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_aarch64_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_aarch64_la_LIBADD += libunwind-elf64.la -+if !REMOTE_ONLY -+ libunwind_aarch64_la_LIBADD += libunwind.la -lc -+endif -+ libunwind_setjmp_la_SOURCES += aarch64/siglongjmp.S -+else - if ARCH_ARM -- lib_LTLIBRARIES_arch = libunwind-arm.la -+ lib_LTLIBRARIES += libunwind-arm.la - libunwind_la_SOURCES = $(libunwind_la_SOURCES_arm) - libunwind_arm_la_SOURCES = $(libunwind_arm_la_SOURCES_arm) - libunwind_arm_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_arm_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_arm_la_LIBADD += libunwind-elf32.la - if !REMOTE_ONLY -- libunwind_arm_la_LIBADD = libunwind.la -lc -+ libunwind_arm_la_LIBADD += libunwind.la -lc - endif -- libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_arm) -+ libunwind_setjmp_la_SOURCES += arm/siglongjmp.S - else - if ARCH_IA64 -- ia64_mk_Gcursor_i_SOURCES = ia64/mk_Gcursor_i.c -- ia64_mk_Lcursor_i_SOURCES = ia64/mk_Lcursor_i.c -- noinst_PROGRAMS = ia64/mk_Gcursor_i ia64/mk_Lcursor_i - BUILT_SOURCES = Gcursor_i.h Lcursor_i.h --Gcursor_i.h: ia64/mk_Gcursor_i -- ia64/mk_Gcursor_i > $@ --Lcursor_i.h: ia64/mk_Lcursor_i -- ia64/mk_Lcursor_i > $@ -- lib_LTLIBRARIES_arch = libunwind-ia64.la -+mk_Gcursor_i.s: $(srcdir)/ia64/mk_Gcursor_i.c -+ $(COMPILE) -S "$(srcdir)/ia64/mk_Gcursor_i.c" -o mk_Gcursor_i.s -+mk_Lcursor_i.s: $(srcdir)/ia64/mk_Lcursor_i.c -+ $(COMPILE) -S "$(srcdir)/ia64/mk_Lcursor_i.c" -o mk_Lcursor_i.s -+Gcursor_i.h: mk_Gcursor_i.s -+ "$(srcdir)/ia64/mk_cursor_i" mk_Gcursor_i.s > Gcursor_i.h -+Lcursor_i.h: mk_Lcursor_i.s -+ "$(srcdir)/ia64/mk_cursor_i" mk_Lcursor_i.s > Lcursor_i.h -+ -+ lib_LTLIBRARIES += libunwind-ia64.la - libunwind_la_SOURCES = $(libunwind_la_SOURCES_ia64) - libunwind_ia64_la_SOURCES = $(libunwind_ia64_la_SOURCES_ia64) - libunwind_ia64_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_ia64_la_LIBADD = libunwind-elf64.la - if !REMOTE_ONLY -- libunwind_ia64_la_LIBADD = libunwind.la -lc -+ libunwind_ia64_la_LIBADD += libunwind.la -lc - endif -- libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_ia64) -+ libunwind_setjmp_la_SOURCES += ia64/setjmp.S ia64/sigsetjmp.S \ -+ ia64/longjmp.S ia64/siglongjmp.S - else - if ARCH_HPPA -- lib_LTLIBRARIES_arch = libunwind-hppa.la -+ lib_LTLIBRARIES += libunwind-hppa.la - libunwind_la_SOURCES = $(libunwind_la_SOURCES_hppa) - libunwind_hppa_la_SOURCES = $(libunwind_hppa_la_SOURCES_hppa) - libunwind_hppa_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_hppa_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_hppa_la_LIBADD += libunwind-elf32.la - if !REMOTE_ONLY -- libunwind_hppa_la_LIBADD = libunwind.la -lc -+ libunwind_hppa_la_LIBADD += libunwind.la -lc - endif -- libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_hppa) -+ libunwind_setjmp_la_SOURCES += hppa/siglongjmp.S - else - if ARCH_MIPS -- lib_LTLIBRARIES_arch = libunwind-mips.la -+ lib_LTLIBRARIES += libunwind-mips.la - libunwind_la_SOURCES = $(libunwind_la_SOURCES_mips) - libunwind_mips_la_SOURCES = $(libunwind_mips_la_SOURCES_mips) - libunwind_mips_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_mips_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_mips_la_LIBADD += libunwind-elfxx.la - if !REMOTE_ONLY -- libunwind_mips_la_LIBADD = libunwind.la -lc -+ libunwind_mips_la_LIBADD += libunwind.la -lc - endif -- libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_mips) -+ libunwind_setjmp_la_SOURCES += mips/siglongjmp.S -+else -+if ARCH_TILEGX -+ lib_LTLIBRARIES += libunwind-tilegx.la -+ libunwind_la_SOURCES = $(libunwind_la_SOURCES_tilegx) -+ libunwind_tilegx_la_SOURCES = $(libunwind_tilegx_la_SOURCES_tilegx) -+ libunwind_tilegx_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_tilegx_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_tilegx_la_LIBADD += libunwind-elfxx.la -+if !REMOTE_ONLY -+ libunwind_tilegx_la_LIBADD += libunwind.la -lc -+endif -+ libunwind_setjmp_la_SOURCES += tilegx/siglongjmp.S - else - if ARCH_X86 -- lib_LTLIBRARIES_arch = libunwind-x86.la -- libunwind_la_SOURCES = $(libunwind_la_SOURCES_x86) -+ lib_LTLIBRARIES += libunwind-x86.la -+ libunwind_la_SOURCES = $(libunwind_la_SOURCES_x86) $(libunwind_x86_la_SOURCES_os) - libunwind_x86_la_SOURCES = $(libunwind_x86_la_SOURCES_x86) - libunwind_x86_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_x86_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_x86_la_LIBADD += libunwind-elf32.la - if !REMOTE_ONLY -- libunwind_x86_la_LIBADD = libunwind.la -lc -+ libunwind_x86_la_LIBADD += libunwind.la -lc - endif -- libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_x86) -+ libunwind_setjmp_la_SOURCES += x86/longjmp.S x86/siglongjmp.S - else - if ARCH_X86_64 -- lib_LTLIBRARIES_arch = libunwind-x86_64.la -+ lib_LTLIBRARIES += libunwind-x86_64.la - libunwind_la_SOURCES = $(libunwind_la_SOURCES_x86_64) - libunwind_x86_64_la_SOURCES = $(libunwind_x86_64_la_SOURCES_x86_64) - libunwind_x86_64_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_x86_64_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_x86_64_la_LIBADD += libunwind-elf64.la - if !REMOTE_ONLY -- libunwind_x86_64_la_LIBADD = libunwind.la -lc -+ libunwind_x86_64_la_LIBADD += libunwind.la -lc - endif -- libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_x86_64) -+ libunwind_setjmp_la_SOURCES += x86_64/longjmp.S x86_64/siglongjmp.S - else - if ARCH_PPC32 -- lib_LTLIBRARIES_arch = libunwind-ppc32.la -+ lib_LTLIBRARIES += libunwind-ppc32.la - libunwind_la_SOURCES = $(libunwind_la_SOURCES_ppc32) - libunwind_ppc32_la_SOURCES = $(libunwind_ppc32_la_SOURCES_ppc32) - libunwind_ppc32_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_ppc32_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_ppc32_la_LIBADD += libunwind-elf32.la - if !REMOTE_ONLY -- libunwind_ppc32_la_LIBADD = libunwind.la -lc -+ libunwind_ppc32_la_LIBADD += libunwind.la -lc - endif -- libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_ppc32) -+ libunwind_setjmp_la_SOURCES += ppc/longjmp.S ppc/siglongjmp.S - else - if ARCH_PPC64 -- lib_LTLIBRARIES_arch = libunwind-ppc64.la -+ lib_LTLIBRARIES += libunwind-ppc64.la - libunwind_la_SOURCES = $(libunwind_la_SOURCES_ppc64) - libunwind_ppc64_la_SOURCES = $(libunwind_ppc64_la_SOURCES_ppc64) - libunwind_ppc64_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_ppc64_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_ppc64_la_LIBADD += libunwind-elf64.la - if !REMOTE_ONLY -- libunwind_ppc64_la_LIBADD = libunwind.la -lc -+ libunwind_ppc64_la_LIBADD += libunwind.la -lc - endif -- libunwind_setjmp_la_SOURCES = $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_ppc64) -+ libunwind_setjmp_la_SOURCES += ppc/longjmp.S ppc/siglongjmp.S -+else -+if ARCH_SH -+ lib_LTLIBRARIES += libunwind-sh.la -+ libunwind_la_SOURCES = $(libunwind_la_SOURCES_sh) -+ libunwind_sh_la_SOURCES = $(libunwind_sh_la_SOURCES_sh) -+ libunwind_sh_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -version-info $(SOVERSION) -+ libunwind_sh_la_LIBADD = libunwind-dwarf-generic.la -+ libunwind_sh_la_LIBADD += libunwind-elf32.la -+if !REMOTE_ONLY -+ libunwind_sh_la_LIBADD += libunwind.la -lc -+endif -+ libunwind_setjmp_la_SOURCES += sh/siglongjmp.S - -+endif # ARCH_SH - endif # ARCH_PPC64 - endif # ARCH_PPC32 - endif # ARCH_X86_64 - endif # ARCH_X86 -+endif # ARCH_TILEGX - endif # ARCH_MIPS - endif # ARCH_HPPA - endif # ARCH_IA64 - endif # ARCH_ARM -+endif # ARCH_AARCH64 -+ -+# libunwind-setjmp depends on libunwind-$(arch). Therefore must be added -+# at the end. -+if BUILD_SETJMP -+lib_LTLIBRARIES += libunwind-setjmp.la -+endif - - # - # Don't link with standard libraries, because those may mention -@@ -472,43 +653,37 @@ endif # ARCH_ARM - # - libunwind_la_LDFLAGS = $(COMMON_SO_LDFLAGS) -XCClinker -nostdlib \ - $(LDFLAGS_STATIC_LIBCXA) -version-info $(SOVERSION) --libunwind_la_LIBADD = -lc $(LIBCRTS) -- --lib_LIBRARIES = $(LIBRARIES_cdep) --lib_LTLIBRARIES = $(lib_LTLIBRARIES_cdep) $(lib_LTLIBRARIES_arch) \ -- $(lib_LTLIBRARIES_cdep_setjmp) -+libunwind_la_LIBADD += -lc $(LIBCRTS) -+libunwind_la_LIBADD += $(LIBLZMA) - - AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/include/tdep-$(arch) -I. - AM_CCASFLAGS = $(AM_CPPFLAGS) -+noinst_HEADERS += unwind/unwind-internal.h - --EXTRA_DIST = elfxx.h elfxx.c unwind/unwind-internal.h \ -+EXTRA_DIST = $(libunwind_la_SOURCES_aarch64) \ - $(libunwind_la_SOURCES_arm) \ - $(libunwind_la_SOURCES_hppa) \ - $(libunwind_la_SOURCES_ia64) \ - $(libunwind_la_SOURCES_mips) \ -+ $(libunwind_la_SOURCES_sh) \ - $(libunwind_la_SOURCES_x86) \ -+ $(libunwind_la_SOURCES_os_freebsd) \ - $(libunwind_la_SOURCES_os_linux) \ - $(libunwind_la_SOURCES_os_hpux) \ -+ $(libunwind_la_SOURCES_os_qnx) \ - $(libunwind_la_SOURCES_common) \ - $(libunwind_la_SOURCES_local) \ - $(libunwind_la_SOURCES_generic) \ -+ $(libunwind_aarch64_la_SOURCES_aarch64) \ - $(libunwind_arm_la_SOURCES_arm) \ - $(libunwind_hppa_la_SOURCES_hppa) \ - $(libunwind_ia64_la_SOURCES_ia64) \ - $(libunwind_mips_la_SOURCES_mips) \ -+ $(libunwind_sh_la_SOURCES_sh) \ - $(libunwind_x86_la_SOURCES_x86) \ -- $(libunwind_x86_64_la_SOURCES_x86_64) \ -- $(libunwind_ptrace_a_SOURCES) \ -- $(libunwind_setjmp_la_SOURCES_common) \ -- $(libunwind_setjmp_la_SOURCES_arm) \ -- $(libunwind_setjmp_la_SOURCES_hppa) \ -- $(libunwind_setjmp_la_SOURCES_ia64) \ -- $(libunwind_setjmp_la_SOURCES_mips) \ -- $(libunwind_setjmp_la_SOURCES_x86) \ -- $(libunwind_setjmp_la_SOURCES_x86_64) \ -- $(libunwind_setjmp_la_SOURCES_ppc32) \ -- $(libunwind_setjmp_la_SOURCES_ppc64) -+ $(libunwind_x86_64_la_SOURCES_x86_64) - -+MAINTAINERCLEANFILES = Makefile.in - - # The -version-info flag accepts an argument of the form - # `current[:revision[:age]]'. So, passing `-version-info 3:12:1' sets -diff --git a/frysk-imports/libunwind/src/aarch64/Gcreate_addr_space.c b/frysk-imports/libunwind/src/aarch64/Gcreate_addr_space.c -new file mode 100644 -index 0000000..b0f2b04 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gcreate_addr_space.c -@@ -0,0 +1,60 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+ -+#include "unwind_i.h" -+ -+PROTECTED unw_addr_space_t -+unw_create_addr_space (unw_accessors_t *a, int byte_order) -+{ -+#ifdef UNW_LOCAL_ONLY -+ return NULL; -+#else -+ unw_addr_space_t as; -+ -+ /* AArch64 supports little-endian and big-endian. */ -+ if (byte_order != 0 && byte_order != __LITTLE_ENDIAN -+ && byte_order != __BIG_ENDIAN) -+ return NULL; -+ -+ as = malloc (sizeof (*as)); -+ if (!as) -+ return NULL; -+ -+ memset (as, 0, sizeof (*as)); -+ -+ as->acc = *a; -+ -+ /* Default to little-endian for AArch64. */ -+ if (byte_order == 0 || byte_order == __LITTLE_ENDIAN) -+ as->big_endian = 0; -+ else -+ as->big_endian = 1; -+ -+ return as; -+#endif -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gget_proc_info.c b/frysk-imports/libunwind/src/aarch64/Gget_proc_info.c -new file mode 100644 -index 0000000..de9199f ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gget_proc_info.c -@@ -0,0 +1,39 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ ret = dwarf_make_proc_info (&c->dwarf); -+ if (ret < 0) -+ return ret; -+ -+ *pi = c->dwarf.pi; -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gget_save_loc.c b/frysk-imports/libunwind/src/aarch64/Gget_save_loc.c -new file mode 100644 -index 0000000..5ccf5cf ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gget_save_loc.c -@@ -0,0 +1,100 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ dwarf_loc_t loc; -+ -+ switch (reg) -+ { -+ case UNW_AARCH64_X0: -+ case UNW_AARCH64_X1: -+ case UNW_AARCH64_X2: -+ case UNW_AARCH64_X3: -+ case UNW_AARCH64_X4: -+ case UNW_AARCH64_X5: -+ case UNW_AARCH64_X6: -+ case UNW_AARCH64_X7: -+ case UNW_AARCH64_X8: -+ case UNW_AARCH64_X9: -+ case UNW_AARCH64_X10: -+ case UNW_AARCH64_X11: -+ case UNW_AARCH64_X12: -+ case UNW_AARCH64_X13: -+ case UNW_AARCH64_X14: -+ case UNW_AARCH64_X15: -+ case UNW_AARCH64_X16: -+ case UNW_AARCH64_X17: -+ case UNW_AARCH64_X18: -+ case UNW_AARCH64_X19: -+ case UNW_AARCH64_X20: -+ case UNW_AARCH64_X21: -+ case UNW_AARCH64_X22: -+ case UNW_AARCH64_X23: -+ case UNW_AARCH64_X24: -+ case UNW_AARCH64_X25: -+ case UNW_AARCH64_X26: -+ case UNW_AARCH64_X27: -+ case UNW_AARCH64_X28: -+ case UNW_AARCH64_X29: -+ case UNW_AARCH64_X30: -+ case UNW_AARCH64_SP: -+ case UNW_AARCH64_PC: -+ case UNW_AARCH64_PSTATE: -+ loc = c->dwarf.loc[reg]; -+ break; -+ -+ default: -+ loc = DWARF_NULL_LOC; /* default to "not saved" */ -+ break; -+ } -+ -+ memset (sloc, 0, sizeof (*sloc)); -+ -+ if (DWARF_IS_NULL_LOC (loc)) -+ { -+ sloc->type = UNW_SLT_NONE; -+ return 0; -+ } -+ -+#if !defined(UNW_LOCAL_ONLY) -+ if (DWARF_IS_REG_LOC (loc)) -+ { -+ sloc->type = UNW_SLT_REG; -+ sloc->u.regnum = DWARF_GET_LOC (loc); -+ } -+ else -+#endif -+ { -+ sloc->type = UNW_SLT_MEMORY; -+ sloc->u.addr = DWARF_GET_LOC (loc); -+ } -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gglobal.c b/frysk-imports/libunwind/src/aarch64/Gglobal.c -new file mode 100644 -index 0000000..72e36b2 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gglobal.c -@@ -0,0 +1,57 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "dwarf_i.h" -+ -+HIDDEN define_lock (aarch64_lock); -+HIDDEN int tdep_init_done; -+ -+HIDDEN void -+tdep_init (void) -+{ -+ intrmask_t saved_mask; -+ -+ sigfillset (&unwi_full_mask); -+ -+ lock_acquire (&aarch64_lock, saved_mask); -+ { -+ if (tdep_init_done) -+ /* another thread else beat us to it... */ -+ goto out; -+ -+ mi_init (); -+ -+ dwarf_init (); -+ -+#ifndef UNW_REMOTE_ONLY -+ aarch64_local_addr_space_init (); -+#endif -+ tdep_init_done = 1; /* signal that we're initialized... */ -+ } -+ out: -+ lock_release (&aarch64_lock, saved_mask); -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Ginit.c b/frysk-imports/libunwind/src/aarch64/Ginit.c -new file mode 100644 -index 0000000..b9181ef ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Ginit.c -@@ -0,0 +1,188 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+ -+#include "unwind_i.h" -+ -+#ifdef UNW_REMOTE_ONLY -+ -+/* unw_local_addr_space is a NULL pointer in this case. */ -+PROTECTED unw_addr_space_t unw_local_addr_space; -+ -+#else /* !UNW_REMOTE_ONLY */ -+ -+static struct unw_addr_space local_addr_space; -+ -+PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; -+ -+static inline void * -+uc_addr (ucontext_t *uc, int reg) -+{ -+ if (reg >= UNW_AARCH64_X0 && reg <= UNW_AARCH64_V31) -+ return &uc->uc_mcontext.regs[reg]; -+ else -+ return NULL; -+} -+ -+# ifdef UNW_LOCAL_ONLY -+ -+HIDDEN void * -+tdep_uc_addr (ucontext_t *uc, int reg) -+{ -+ return uc_addr (uc, reg); -+} -+ -+# endif /* UNW_LOCAL_ONLY */ -+ -+HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -+ -+/* XXX fix me: there is currently no way to locate the dyn-info list -+ by a remote unwinder. On ia64, this is done via a special -+ unwind-table entry. Perhaps something similar can be done with -+ DWARF2 unwind info. */ -+ -+static void -+put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) -+{ -+ /* it's a no-op */ -+} -+ -+static int -+get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -+ void *arg) -+{ -+ *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+ return 0; -+} -+ -+static int -+access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -+ void *arg) -+{ -+ if (write) -+ { -+ Debug (16, "mem[%lx] <- %lx\n", addr, *val); -+ *(unw_word_t *) addr = *val; -+ } -+ else -+ { -+ *val = *(unw_word_t *) addr; -+ Debug (16, "mem[%lx] -> %lx\n", addr, *val); -+ } -+ return 0; -+} -+ -+static int -+access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -+ void *arg) -+{ -+ unw_word_t *addr; -+ ucontext_t *uc = arg; -+ -+ if (unw_is_fpreg (reg)) -+ goto badreg; -+ -+ if (!(addr = uc_addr (uc, reg))) -+ goto badreg; -+ -+ if (write) -+ { -+ *(unw_word_t *) addr = *val; -+ Debug (12, "%s <- %lx\n", unw_regname (reg), *val); -+ } -+ else -+ { -+ *val = *(unw_word_t *) addr; -+ Debug (12, "%s -> %lx\n", unw_regname (reg), *val); -+ } -+ return 0; -+ -+ badreg: -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+} -+ -+static int -+access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -+ int write, void *arg) -+{ -+ ucontext_t *uc = arg; -+ unw_fpreg_t *addr; -+ -+ if (!unw_is_fpreg (reg)) -+ goto badreg; -+ -+ if (!(addr = uc_addr (uc, reg))) -+ goto badreg; -+ -+ if (write) -+ { -+ Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ *(unw_fpreg_t *) addr = *val; -+ } -+ else -+ { -+ *val = *(unw_fpreg_t *) addr; -+ Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ } -+ return 0; -+ -+ badreg: -+ Debug (1, "bad register number %u\n", reg); -+ /* attempt to access a non-preserved register */ -+ return -UNW_EBADREG; -+} -+ -+static int -+get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) -+{ -+ return _Uelf64_get_proc_name (as, getpid (), ip, buf, buf_len, offp); -+} -+ -+HIDDEN void -+aarch64_local_addr_space_init (void) -+{ -+ memset (&local_addr_space, 0, sizeof (local_addr_space)); -+ local_addr_space.caching_policy = UNW_CACHE_GLOBAL; -+ local_addr_space.acc.find_proc_info = dwarf_find_proc_info; -+ local_addr_space.acc.put_unwind_info = put_unwind_info; -+ local_addr_space.acc.get_dyn_info_list_addr = get_dyn_info_list_addr; -+ local_addr_space.acc.access_mem = access_mem; -+ local_addr_space.acc.access_reg = access_reg; -+ local_addr_space.acc.access_fpreg = access_fpreg; -+ local_addr_space.acc.resume = aarch64_local_resume; -+ local_addr_space.acc.get_proc_name = get_static_proc_name; -+ local_addr_space.big_endian = (__BYTE_ORDER == __BIG_ENDIAN); -+ unw_flush_cache (&local_addr_space, 0, 0); -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/aarch64/Ginit_local.c b/frysk-imports/libunwind/src/aarch64/Ginit_local.c -new file mode 100644 -index 0000000..dee6fd3 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Ginit_local.c -@@ -0,0 +1,55 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2011-2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "init.h" -+ -+#ifdef UNW_REMOTE_ONLY -+ -+PROTECTED int -+unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) -+{ -+ return -UNW_EINVAL; -+} -+ -+#else /* !UNW_REMOTE_ONLY */ -+ -+PROTECTED int -+unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ if (!tdep_init_done) -+ tdep_init (); -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ c->dwarf.as = unw_local_addr_space; -+ c->dwarf.as_arg = uc; -+ -+ return common_init (c, 1); -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/aarch64/Ginit_remote.c b/frysk-imports/libunwind/src/aarch64/Ginit_remote.c -new file mode 100644 -index 0000000..f284e99 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Ginit_remote.c -@@ -0,0 +1,45 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "init.h" -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) -+{ -+#ifdef UNW_LOCAL_ONLY -+ return -UNW_EINVAL; -+#else /* !UNW_LOCAL_ONLY */ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ if (!tdep_init_done) -+ tdep_init (); -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ c->dwarf.as = as; -+ c->dwarf.as_arg = as_arg; -+ return common_init (c, 0); -+#endif /* !UNW_LOCAL_ONLY */ -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gis_signal_frame.c b/frysk-imports/libunwind/src/aarch64/Gis_signal_frame.c -new file mode 100644 -index 0000000..53e32de ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gis_signal_frame.c -@@ -0,0 +1,64 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+/* The restorer stub will always have the form: -+ -+ d2801168 movz x8, #0x8b -+ d4000001 svc #0x0 -+*/ -+ -+PROTECTED int -+unw_is_signal_frame (unw_cursor_t *cursor) -+{ -+#ifdef __linux__ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t w0, ip; -+ unw_addr_space_t as; -+ unw_accessors_t *a; -+ void *arg; -+ int ret; -+ -+ as = c->dwarf.as; -+ a = unw_get_accessors (as); -+ arg = c->dwarf.as_arg; -+ -+ ip = c->dwarf.ip; -+ -+ ret = (*a->access_mem) (as, ip, &w0, 0, arg); -+ if (ret < 0) -+ return ret; -+ -+ /* FIXME: distinguish 32bit insn vs 64bit registers. */ -+ if (w0 != 0xd4000001d2801168) -+ return 0; -+ -+ return 1; -+ -+#else -+ return -UNW_ENOINFO; -+#endif -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gregs.c b/frysk-imports/libunwind/src/aarch64/Gregs.c -new file mode 100644 -index 0000000..6288275 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gregs.c -@@ -0,0 +1,113 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+HIDDEN int -+tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -+ int write) -+{ -+ dwarf_loc_t loc = DWARF_NULL_LOC; -+ unsigned int mask; -+ -+ switch (reg) -+ { -+ case UNW_AARCH64_X0: -+ case UNW_AARCH64_X1: -+ case UNW_AARCH64_X2: -+ case UNW_AARCH64_X3: -+ mask = 1 << reg; -+ if (write) -+ { -+ c->dwarf.eh_args[reg] = *valp; -+ c->dwarf.eh_valid_mask |= mask; -+ return 0; -+ } -+ else if ((c->dwarf.eh_valid_mask & mask) != 0) -+ { -+ *valp = c->dwarf.eh_args[reg]; -+ return 0; -+ } -+ else -+ loc = c->dwarf.loc[reg]; -+ break; -+ -+ case UNW_AARCH64_X4: -+ case UNW_AARCH64_X5: -+ case UNW_AARCH64_X6: -+ case UNW_AARCH64_X7: -+ case UNW_AARCH64_X8: -+ case UNW_AARCH64_X9: -+ case UNW_AARCH64_X10: -+ case UNW_AARCH64_X11: -+ case UNW_AARCH64_X12: -+ case UNW_AARCH64_X13: -+ case UNW_AARCH64_X14: -+ case UNW_AARCH64_X15: -+ case UNW_AARCH64_X16: -+ case UNW_AARCH64_X17: -+ case UNW_AARCH64_X18: -+ case UNW_AARCH64_X19: -+ case UNW_AARCH64_X20: -+ case UNW_AARCH64_X21: -+ case UNW_AARCH64_X22: -+ case UNW_AARCH64_X23: -+ case UNW_AARCH64_X24: -+ case UNW_AARCH64_X25: -+ case UNW_AARCH64_X26: -+ case UNW_AARCH64_X27: -+ case UNW_AARCH64_X28: -+ case UNW_AARCH64_X29: -+ case UNW_AARCH64_X30: -+ case UNW_AARCH64_PC: -+ case UNW_AARCH64_PSTATE: -+ loc = c->dwarf.loc[reg]; -+ break; -+ -+ case UNW_AARCH64_SP: -+ if (write) -+ return -UNW_EREADONLYREG; -+ *valp = c->dwarf.cfa; -+ return 0; -+ -+ default: -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+ } -+ -+ if (write) -+ return dwarf_put (&c->dwarf, loc, *valp); -+ else -+ return dwarf_get (&c->dwarf, loc, valp); -+} -+ -+HIDDEN int -+tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -+ int write) -+{ -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gresume.c b/frysk-imports/libunwind/src/aarch64/Gresume.c -new file mode 100644 -index 0000000..d9acfa7 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gresume.c -@@ -0,0 +1,185 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2011-2013 Linaro Limited -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+ -+#ifndef UNW_REMOTE_ONLY -+ -+HIDDEN inline int -+aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) -+{ -+#ifdef __linux__ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_tdep_context_t *uc = c->dwarf.as_arg; -+ -+ if (c->sigcontext_format == AARCH64_SCF_NONE) -+ { -+ /* Since there are no signals involved here we restore EH and non scratch -+ registers only. */ -+ unsigned long regs[15]; -+ regs[0] = uc->uc_mcontext.regs[0]; -+ regs[1] = uc->uc_mcontext.regs[1]; -+ regs[2] = uc->uc_mcontext.regs[2]; -+ regs[3] = uc->uc_mcontext.regs[3]; -+ regs[4] = uc->uc_mcontext.regs[19]; -+ regs[5] = uc->uc_mcontext.regs[20]; -+ regs[6] = uc->uc_mcontext.regs[21]; -+ regs[7] = uc->uc_mcontext.regs[22]; -+ regs[8] = uc->uc_mcontext.regs[23]; -+ regs[9] = uc->uc_mcontext.regs[24]; -+ regs[10] = uc->uc_mcontext.regs[25]; -+ regs[11] = uc->uc_mcontext.regs[26]; -+ regs[12] = uc->uc_mcontext.regs[27]; -+ regs[13] = uc->uc_mcontext.regs[28]; -+ regs[14] = uc->uc_mcontext.regs[30]; /* LR */ -+ unsigned long sp = uc->uc_mcontext.sp; -+ -+ struct regs_overlay { -+ char x[sizeof(regs)]; -+ }; -+ -+ asm volatile ( -+ "mov x4, %0\n" -+ "mov x5, %1\n" -+ "ldp x0, x1, [x4]\n" -+ "ldp x2, x3, [x4,16]\n" -+ "ldp x19, x20, [x4,32]\n" -+ "ldp x21, x22, [x4,48]\n" -+ "ldp x23, x24, [x4,64]\n" -+ "ldp x25, x26, [x4,80]\n" -+ "ldp x27, x28, [x4,96]\n" -+ "ldr x30, [x4,112]\n" -+ "mov sp, x5\n" -+ "ret \n" -+ : -+ : "r" (regs), -+ "r" (sp), -+ "m" (*(struct regs_overlay *)regs) -+ ); -+ } -+ else -+ { -+ struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; -+ -+ if (c->dwarf.eh_valid_mask & 0x1) sc->regs[0] = c->dwarf.eh_args[0]; -+ if (c->dwarf.eh_valid_mask & 0x2) sc->regs[1] = c->dwarf.eh_args[1]; -+ if (c->dwarf.eh_valid_mask & 0x4) sc->regs[2] = c->dwarf.eh_args[2]; -+ if (c->dwarf.eh_valid_mask & 0x8) sc->regs[3] = c->dwarf.eh_args[3]; -+ -+ sc->regs[4] = uc->uc_mcontext.regs[4]; -+ sc->regs[5] = uc->uc_mcontext.regs[5]; -+ sc->regs[6] = uc->uc_mcontext.regs[6]; -+ sc->regs[7] = uc->uc_mcontext.regs[7]; -+ sc->regs[8] = uc->uc_mcontext.regs[8]; -+ sc->regs[9] = uc->uc_mcontext.regs[9]; -+ sc->regs[10] = uc->uc_mcontext.regs[10]; -+ sc->regs[11] = uc->uc_mcontext.regs[11]; -+ sc->regs[12] = uc->uc_mcontext.regs[12]; -+ sc->regs[13] = uc->uc_mcontext.regs[13]; -+ sc->regs[14] = uc->uc_mcontext.regs[14]; -+ sc->regs[15] = uc->uc_mcontext.regs[15]; -+ sc->regs[16] = uc->uc_mcontext.regs[16]; -+ sc->regs[17] = uc->uc_mcontext.regs[17]; -+ sc->regs[18] = uc->uc_mcontext.regs[18]; -+ sc->regs[19] = uc->uc_mcontext.regs[19]; -+ sc->regs[20] = uc->uc_mcontext.regs[20]; -+ sc->regs[21] = uc->uc_mcontext.regs[21]; -+ sc->regs[22] = uc->uc_mcontext.regs[22]; -+ sc->regs[23] = uc->uc_mcontext.regs[23]; -+ sc->regs[24] = uc->uc_mcontext.regs[24]; -+ sc->regs[25] = uc->uc_mcontext.regs[25]; -+ sc->regs[26] = uc->uc_mcontext.regs[26]; -+ sc->regs[27] = uc->uc_mcontext.regs[27]; -+ sc->regs[28] = uc->uc_mcontext.regs[28]; -+ sc->regs[29] = uc->uc_mcontext.regs[29]; -+ sc->regs[30] = uc->uc_mcontext.regs[30]; -+ sc->sp = uc->uc_mcontext.sp; -+ sc->pc = uc->uc_mcontext.pc; -+ sc->pstate = uc->uc_mcontext.pstate; -+ -+ asm volatile ( -+ "mov sp, %0\n" -+ "ret %1\n" -+ : : "r" (c->sigcontext_sp), "r" (c->sigcontext_pc) -+ ); -+ } -+ unreachable(); -+#else -+ printf ("%s: implement me\n", __FUNCTION__); -+#endif -+ return -UNW_EINVAL; -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -+ -+static inline void -+establish_machine_state (struct cursor *c) -+{ -+ unw_addr_space_t as = c->dwarf.as; -+ void *arg = c->dwarf.as_arg; -+ unw_fpreg_t fpval; -+ unw_word_t val; -+ int reg; -+ -+ Debug (8, "copying out cursor state\n"); -+ -+ for (reg = 0; reg <= UNW_AARCH64_PSTATE; ++reg) -+ { -+ Debug (16, "copying %s %d\n", unw_regname (reg), reg); -+ if (unw_is_fpreg (reg)) -+ { -+ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -+ as->acc.access_fpreg (as, reg, &fpval, 1, arg); -+ } -+ else -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ as->acc.access_reg (as, reg, &val, 1, arg); -+ } -+ } -+} -+ -+PROTECTED int -+unw_resume (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ if (!c->dwarf.ip) -+ { -+ /* This can happen easily when the frame-chain gets truncated -+ due to bad or missing unwind-info. */ -+ Debug (1, "refusing to resume execution at address 0\n"); -+ return -UNW_EINVAL; -+ } -+ -+ establish_machine_state (c); -+ -+ return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -+ c->dwarf.as_arg); -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gstash_frame.c b/frysk-imports/libunwind/src/aarch64/Gstash_frame.c -new file mode 100644 -index 0000000..9c1a54d ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gstash_frame.c -@@ -0,0 +1,89 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010, 2011 by FERMI NATIONAL ACCELERATOR LABORATORY -+ Copyright (C) 2014 CERN and Aalto University -+ Contributed by Filip Nyback -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+HIDDEN void -+tdep_stash_frame (struct dwarf_cursor *d, struct dwarf_reg_state *rs) -+{ -+ struct cursor *c = (struct cursor *) dwarf_to_cursor (d); -+ unw_tdep_frame_t *f = &c->frame_info; -+ -+ Debug (4, "ip=0x%lx cfa=0x%lx type %d cfa [where=%d val=%ld] cfaoff=%ld" -+ " ra=0x%lx fp [where=%d val=%ld @0x%lx] lr [where=%d val=%ld @0x%lx] " -+ "sp [where=%d val=%ld @0x%lx]\n", -+ d->ip, d->cfa, f->frame_type, -+ rs->reg[DWARF_CFA_REG_COLUMN].where, -+ rs->reg[DWARF_CFA_REG_COLUMN].val, -+ rs->reg[DWARF_CFA_OFF_COLUMN].val, -+ DWARF_GET_LOC(d->loc[d->ret_addr_column]), -+ rs->reg[FP].where, rs->reg[FP].val, DWARF_GET_LOC(d->loc[FP]), -+ rs->reg[LR].where, rs->reg[LR].val, DWARF_GET_LOC(d->loc[LR]), -+ rs->reg[SP].where, rs->reg[SP].val, DWARF_GET_LOC(d->loc[SP])); -+ -+ /* A standard frame is defined as: -+ - CFA is register-relative offset off FP or SP; -+ - Return address is saved in LR; -+ - FP is unsaved or saved at CFA+offset, offset != -1; -+ - LR is unsaved or saved at CFA+offset, offset != -1; -+ - SP is unsaved or saved at CFA+offset, offset != -1. */ -+ if (f->frame_type == UNW_AARCH64_FRAME_OTHER -+ && (rs->reg[DWARF_CFA_REG_COLUMN].where == DWARF_WHERE_REG) -+ && (rs->reg[DWARF_CFA_REG_COLUMN].val == FP -+ || rs->reg[DWARF_CFA_REG_COLUMN].val == SP) -+ && labs(rs->reg[DWARF_CFA_OFF_COLUMN].val) < (1 << 29) -+ && d->ret_addr_column == LR -+ && (rs->reg[FP].where == DWARF_WHERE_UNDEF -+ || rs->reg[FP].where == DWARF_WHERE_SAME -+ || (rs->reg[FP].where == DWARF_WHERE_CFAREL -+ && labs(rs->reg[FP].val) < (1 << 29) -+ && rs->reg[FP].val+1 != 0)) -+ && (rs->reg[LR].where == DWARF_WHERE_UNDEF -+ || rs->reg[LR].where == DWARF_WHERE_SAME -+ || (rs->reg[LR].where == DWARF_WHERE_CFAREL -+ && labs(rs->reg[LR].val) < (1 << 29) -+ && rs->reg[LR].val+1 != 0)) -+ && (rs->reg[SP].where == DWARF_WHERE_UNDEF -+ || rs->reg[SP].where == DWARF_WHERE_SAME -+ || (rs->reg[SP].where == DWARF_WHERE_CFAREL -+ && labs(rs->reg[SP].val) < (1 << 29) -+ && rs->reg[SP].val+1 != 0))) -+ { -+ /* Save information for a standard frame. */ -+ f->frame_type = UNW_AARCH64_FRAME_STANDARD; -+ f->cfa_reg_sp = (rs->reg[DWARF_CFA_REG_COLUMN].val == SP); -+ f->cfa_reg_offset = rs->reg[DWARF_CFA_OFF_COLUMN].val; -+ if (rs->reg[FP].where == DWARF_WHERE_CFAREL) -+ f->fp_cfa_offset = rs->reg[FP].val; -+ if (rs->reg[LR].where == DWARF_WHERE_CFAREL) -+ f->lr_cfa_offset = rs->reg[LR].val; -+ if (rs->reg[SP].where == DWARF_WHERE_CFAREL) -+ f->sp_cfa_offset = rs->reg[SP].val; -+ Debug (4, " standard frame\n"); -+ } -+ else -+ Debug (4, " unusual frame\n"); -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gstep.c b/frysk-imports/libunwind/src/aarch64/Gstep.c -new file mode 100644 -index 0000000..0c35f98 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gstep.c -@@ -0,0 +1,131 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2011-2013 Linaro Limited -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+ -+PROTECTED int -+unw_handle_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ unw_word_t sc_addr, sp, sp_addr = c->dwarf.cfa; -+ struct dwarf_loc sp_loc = DWARF_LOC (sp_addr, 0); -+ -+ if ((ret = dwarf_get (&c->dwarf, sp_loc, &sp)) < 0) -+ return -UNW_EUNSPEC; -+ -+ ret = unw_is_signal_frame (cursor); -+ Debug(1, "unw_is_signal_frame()=%d\n", ret); -+ -+ /* Save the SP and PC to be able to return execution at this point -+ later in time (unw_resume). */ -+ c->sigcontext_sp = c->dwarf.cfa; -+ c->sigcontext_pc = c->dwarf.ip; -+ -+ if (ret) -+ { -+ c->sigcontext_format = AARCH64_SCF_LINUX_RT_SIGFRAME; -+ sc_addr = sp_addr + sizeof (siginfo_t) + LINUX_UC_MCONTEXT_OFF; -+ } -+ else -+ return -UNW_EUNSPEC; -+ -+ c->sigcontext_addr = sc_addr; -+ c->frame_info.frame_type = UNW_AARCH64_FRAME_SIGRETURN; -+ c->frame_info.cfa_reg_offset = sc_addr - sp_addr; -+ -+ /* Update the dwarf cursor. -+ Set the location of the registers to the corresponding addresses of the -+ uc_mcontext / sigcontext structure contents. */ -+ c->dwarf.loc[UNW_AARCH64_X0] = DWARF_LOC (sc_addr + LINUX_SC_X0_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X1] = DWARF_LOC (sc_addr + LINUX_SC_X1_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X2] = DWARF_LOC (sc_addr + LINUX_SC_X2_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X3] = DWARF_LOC (sc_addr + LINUX_SC_X3_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X4] = DWARF_LOC (sc_addr + LINUX_SC_X4_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X5] = DWARF_LOC (sc_addr + LINUX_SC_X5_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X6] = DWARF_LOC (sc_addr + LINUX_SC_X6_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X7] = DWARF_LOC (sc_addr + LINUX_SC_X7_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X8] = DWARF_LOC (sc_addr + LINUX_SC_X8_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X9] = DWARF_LOC (sc_addr + LINUX_SC_X9_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X10] = DWARF_LOC (sc_addr + LINUX_SC_X10_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X11] = DWARF_LOC (sc_addr + LINUX_SC_X11_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X12] = DWARF_LOC (sc_addr + LINUX_SC_X12_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X13] = DWARF_LOC (sc_addr + LINUX_SC_X13_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X14] = DWARF_LOC (sc_addr + LINUX_SC_X14_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X15] = DWARF_LOC (sc_addr + LINUX_SC_X15_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X16] = DWARF_LOC (sc_addr + LINUX_SC_X16_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X17] = DWARF_LOC (sc_addr + LINUX_SC_X17_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X18] = DWARF_LOC (sc_addr + LINUX_SC_X18_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X19] = DWARF_LOC (sc_addr + LINUX_SC_X19_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X20] = DWARF_LOC (sc_addr + LINUX_SC_X20_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X21] = DWARF_LOC (sc_addr + LINUX_SC_X21_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X22] = DWARF_LOC (sc_addr + LINUX_SC_X22_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X23] = DWARF_LOC (sc_addr + LINUX_SC_X23_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X24] = DWARF_LOC (sc_addr + LINUX_SC_X24_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X25] = DWARF_LOC (sc_addr + LINUX_SC_X25_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X26] = DWARF_LOC (sc_addr + LINUX_SC_X26_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X27] = DWARF_LOC (sc_addr + LINUX_SC_X27_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X28] = DWARF_LOC (sc_addr + LINUX_SC_X28_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X29] = DWARF_LOC (sc_addr + LINUX_SC_X29_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_X30] = DWARF_LOC (sc_addr + LINUX_SC_X30_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_SP] = DWARF_LOC (sc_addr + LINUX_SC_SP_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_PC] = DWARF_LOC (sc_addr + LINUX_SC_PC_OFF, 0); -+ c->dwarf.loc[UNW_AARCH64_PSTATE] = DWARF_LOC (sc_addr + LINUX_SC_PSTATE_OFF, 0); -+ -+ /* Set SP/CFA and PC/IP. */ -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_AARCH64_SP], &c->dwarf.cfa); -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_AARCH64_PC], &c->dwarf.ip); -+ -+ c->dwarf.pi_valid = 0; -+ -+ return 1; -+} -+ -+PROTECTED int -+unw_step (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ Debug (1, "(cursor=%p, ip=0x%016lx, cfa=0x%016lx))\n", -+ c, c->dwarf.ip, c->dwarf.cfa); -+ -+ /* Check if this is a signal frame. */ -+ if (unw_is_signal_frame (cursor)) -+ return unw_handle_signal_frame (cursor); -+ -+ ret = dwarf_step (&c->dwarf); -+ Debug(1, "dwarf_step()=%d\n", ret); -+ -+ if (unlikely (ret == -UNW_ESTOPUNWIND)) -+ return ret; -+ -+ if (unlikely (ret < 0)) -+ return 0; -+ -+ return (c->dwarf.ip == 0) ? 0 : 1; -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Gtrace.c b/frysk-imports/libunwind/src/aarch64/Gtrace.c -new file mode 100644 -index 0000000..c67faf0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Gtrace.c -@@ -0,0 +1,548 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010, 2011 by FERMI NATIONAL ACCELERATOR LABORATORY -+ Copyright (C) 2014 CERN and Aalto University -+ Contributed by Filip Nyback -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+#include -+#include -+ -+#pragma weak pthread_once -+#pragma weak pthread_key_create -+#pragma weak pthread_getspecific -+#pragma weak pthread_setspecific -+ -+/* Initial hash table size. Table expands by 2 bits (times four). */ -+#define HASH_MIN_BITS 14 -+ -+typedef struct -+{ -+ unw_tdep_frame_t *frames; -+ size_t log_size; -+ size_t used; -+ size_t dtor_count; /* Counts how many times our destructor has already -+ been called. */ -+} unw_trace_cache_t; -+ -+static const unw_tdep_frame_t empty_frame = { 0, UNW_AARCH64_FRAME_OTHER, -1, -1, 0, -1, -1, -1 }; -+static define_lock (trace_init_lock); -+static pthread_once_t trace_cache_once = PTHREAD_ONCE_INIT; -+static sig_atomic_t trace_cache_once_happen; -+static pthread_key_t trace_cache_key; -+static struct mempool trace_cache_pool; -+static __thread unw_trace_cache_t *tls_cache; -+static __thread int tls_cache_destroyed; -+ -+/* Free memory for a thread's trace cache. */ -+static void -+trace_cache_free (void *arg) -+{ -+ unw_trace_cache_t *cache = arg; -+ if (++cache->dtor_count < PTHREAD_DESTRUCTOR_ITERATIONS) -+ { -+ /* Not yet our turn to get destroyed. Re-install ourselves into the key. */ -+ pthread_setspecific(trace_cache_key, cache); -+ Debug(5, "delayed freeing cache %p (%zx to go)\n", cache, -+ PTHREAD_DESTRUCTOR_ITERATIONS - cache->dtor_count); -+ return; -+ } -+ tls_cache_destroyed = 1; -+ tls_cache = NULL; -+ munmap (cache->frames, (1u << cache->log_size) * sizeof(unw_tdep_frame_t)); -+ mempool_free (&trace_cache_pool, cache); -+ Debug(5, "freed cache %p\n", cache); -+} -+ -+/* Initialise frame tracing for threaded use. */ -+static void -+trace_cache_init_once (void) -+{ -+ pthread_key_create (&trace_cache_key, &trace_cache_free); -+ mempool_init (&trace_cache_pool, sizeof (unw_trace_cache_t), 0); -+ trace_cache_once_happen = 1; -+} -+ -+static unw_tdep_frame_t * -+trace_cache_buckets (size_t n) -+{ -+ unw_tdep_frame_t *frames; -+ size_t i; -+ -+ GET_MEMORY(frames, n * sizeof (unw_tdep_frame_t)); -+ if (likely(frames != NULL)) -+ for (i = 0; i < n; ++i) -+ frames[i] = empty_frame; -+ -+ return frames; -+} -+ -+/* Allocate and initialise hash table for frame cache lookups. -+ Returns the cache initialised with (1u << HASH_LOW_BITS) hash -+ buckets, or NULL if there was a memory allocation problem. */ -+static unw_trace_cache_t * -+trace_cache_create (void) -+{ -+ unw_trace_cache_t *cache; -+ -+ if (tls_cache_destroyed) -+ { -+ /* The current thread is in the process of exiting. Don't recreate -+ cache, as we wouldn't have another chance to free it. */ -+ Debug(5, "refusing to reallocate cache: " -+ "thread-locals are being deallocated\n"); -+ return NULL; -+ } -+ -+ if (! (cache = mempool_alloc(&trace_cache_pool))) -+ { -+ Debug(5, "failed to allocate cache\n"); -+ return NULL; -+ } -+ -+ if (! (cache->frames = trace_cache_buckets(1u << HASH_MIN_BITS))) -+ { -+ Debug(5, "failed to allocate buckets\n"); -+ mempool_free(&trace_cache_pool, cache); -+ return NULL; -+ } -+ -+ cache->log_size = HASH_MIN_BITS; -+ cache->used = 0; -+ cache->dtor_count = 0; -+ tls_cache_destroyed = 0; /* Paranoia: should already be 0. */ -+ Debug(5, "allocated cache %p\n", cache); -+ return cache; -+} -+ -+/* Expand the hash table in the frame cache if possible. This always -+ quadruples the hash size, and clears all previous frame entries. */ -+static int -+trace_cache_expand (unw_trace_cache_t *cache) -+{ -+ size_t old_size = (1u << cache->log_size); -+ size_t new_log_size = cache->log_size + 2; -+ unw_tdep_frame_t *new_frames = trace_cache_buckets (1u << new_log_size); -+ -+ if (unlikely(! new_frames)) -+ { -+ Debug(5, "failed to expand cache to 2^%lu buckets\n", new_log_size); -+ return -UNW_ENOMEM; -+ } -+ -+ Debug(5, "expanded cache from 2^%lu to 2^%lu buckets\n", cache->log_size, new_log_size); -+ munmap(cache->frames, old_size * sizeof(unw_tdep_frame_t)); -+ cache->frames = new_frames; -+ cache->log_size = new_log_size; -+ cache->used = 0; -+ return 0; -+} -+ -+static unw_trace_cache_t * -+trace_cache_get_unthreaded (void) -+{ -+ unw_trace_cache_t *cache; -+ intrmask_t saved_mask; -+ static unw_trace_cache_t *global_cache = NULL; -+ lock_acquire (&trace_init_lock, saved_mask); -+ if (! global_cache) -+ { -+ mempool_init (&trace_cache_pool, sizeof (unw_trace_cache_t), 0); -+ global_cache = trace_cache_create (); -+ } -+ cache = global_cache; -+ lock_release (&trace_init_lock, saved_mask); -+ Debug(5, "using cache %p\n", cache); -+ return cache; -+} -+ -+/* Get the frame cache for the current thread. Create it if there is none. */ -+static unw_trace_cache_t * -+trace_cache_get (void) -+{ -+ unw_trace_cache_t *cache; -+ if (likely (pthread_once != NULL)) -+ { -+ pthread_once(&trace_cache_once, &trace_cache_init_once); -+ if (!trace_cache_once_happen) -+ { -+ return trace_cache_get_unthreaded(); -+ } -+ if (! (cache = tls_cache)) -+ { -+ cache = trace_cache_create(); -+ pthread_setspecific(trace_cache_key, cache); -+ tls_cache = cache; -+ } -+ Debug(5, "using cache %p\n", cache); -+ return cache; -+ } -+ else -+ { -+ return trace_cache_get_unthreaded(); -+ } -+} -+ -+/* Initialise frame properties for address cache slot F at address -+ PC using current CFA, FP and SP values. Modifies CURSOR to -+ that location, performs one unw_step(), and fills F with what -+ was discovered about the location. Returns F. -+ -+ FIXME: This probably should tell DWARF handling to never evaluate -+ or use registers other than FP, SP and PC in case there is -+ highly unusual unwind info which uses these creatively. */ -+static unw_tdep_frame_t * -+trace_init_addr (unw_tdep_frame_t *f, -+ unw_cursor_t *cursor, -+ unw_word_t cfa, -+ unw_word_t pc, -+ unw_word_t fp, -+ unw_word_t sp) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ struct dwarf_cursor *d = &c->dwarf; -+ int ret = -UNW_EINVAL; -+ -+ /* Initialise frame properties: unknown, not last. */ -+ f->virtual_address = pc; -+ f->frame_type = UNW_AARCH64_FRAME_OTHER; -+ f->last_frame = 0; -+ f->cfa_reg_sp = -1; -+ f->cfa_reg_offset = 0; -+ f->fp_cfa_offset = -1; -+ f->lr_cfa_offset = -1; -+ f->sp_cfa_offset = -1; -+ -+ /* Reinitialise cursor to this instruction - but undo next/prev PC -+ adjustment because unw_step will redo it - and force PC, FP and -+ SP into register locations (=~ ucontext we keep), then set -+ their desired values. Then perform the step. */ -+ d->ip = pc + d->use_prev_instr; -+ d->cfa = cfa; -+ d->loc[UNW_AARCH64_X29] = DWARF_REG_LOC (d, UNW_AARCH64_X29); -+ d->loc[UNW_AARCH64_SP] = DWARF_REG_LOC (d, UNW_AARCH64_SP); -+ d->loc[UNW_AARCH64_PC] = DWARF_REG_LOC (d, UNW_AARCH64_PC); -+ c->frame_info = *f; -+ -+ if (likely(dwarf_put (d, d->loc[UNW_AARCH64_X29], fp) >= 0) -+ && likely(dwarf_put (d, d->loc[UNW_AARCH64_SP], sp) >= 0) -+ && likely(dwarf_put (d, d->loc[UNW_AARCH64_PC], pc) >= 0) -+ && likely((ret = unw_step (cursor)) >= 0)) -+ *f = c->frame_info; -+ -+ /* If unw_step() stopped voluntarily, remember that, even if it -+ otherwise could not determine anything useful. This avoids -+ failing trace if we hit frames without unwind info, which is -+ common for the outermost frame (CRT stuff) on many systems. -+ This avoids failing trace in very common circumstances; failing -+ to unw_step() loop wouldn't produce any better result. */ -+ if (ret == 0) -+ f->last_frame = -1; -+ -+ Debug (3, "frame va %lx type %d last %d cfa %s+%d fp @ cfa%+d lr @ cfa%+d sp @ cfa%+d\n", -+ f->virtual_address, f->frame_type, f->last_frame, -+ f->cfa_reg_sp ? "sp" : "fp", f->cfa_reg_offset, -+ f->fp_cfa_offset, f->lr_cfa_offset, f->sp_cfa_offset); -+ -+ return f; -+} -+ -+/* Look up and if necessary fill in frame attributes for address PC -+ in CACHE using current CFA, FP and SP values. Uses CURSOR to -+ perform any unwind steps necessary to fill the cache. Returns the -+ frame cache slot which describes RIP. */ -+static unw_tdep_frame_t * -+trace_lookup (unw_cursor_t *cursor, -+ unw_trace_cache_t *cache, -+ unw_word_t cfa, -+ unw_word_t pc, -+ unw_word_t fp, -+ unw_word_t sp) -+{ -+ /* First look up for previously cached information using cache as -+ linear probing hash table with probe step of 1. Majority of -+ lookups should be completed within few steps, but it is very -+ important the hash table does not fill up, or performance falls -+ off the cliff. */ -+ uint64_t i, addr; -+ uint64_t cache_size = 1u << cache->log_size; -+ uint64_t slot = ((pc * 0x9e3779b97f4a7c16) >> 43) & (cache_size-1); -+ unw_tdep_frame_t *frame; -+ -+ for (i = 0; i < 16; ++i) -+ { -+ frame = &cache->frames[slot]; -+ addr = frame->virtual_address; -+ -+ /* Return if we found the address. */ -+ if (likely(addr == pc)) -+ { -+ Debug (4, "found address after %ld steps\n", i); -+ return frame; -+ } -+ -+ /* If slot is empty, reuse it. */ -+ if (likely(! addr)) -+ break; -+ -+ /* Linear probe to next slot candidate, step = 1. */ -+ if (++slot >= cache_size) -+ slot -= cache_size; -+ } -+ -+ /* If we collided after 16 steps, or if the hash is more than half -+ full, force the hash to expand. Fill the selected slot, whether -+ it's free or collides. Note that hash expansion drops previous -+ contents; further lookups will refill the hash. */ -+ Debug (4, "updating slot %lu after %ld steps, replacing 0x%lx\n", slot, i, addr); -+ if (unlikely(addr || cache->used >= cache_size / 2)) -+ { -+ if (unlikely(trace_cache_expand (cache) < 0)) -+ return NULL; -+ -+ cache_size = 1u << cache->log_size; -+ slot = ((pc * 0x9e3779b97f4a7c16) >> 43) & (cache_size-1); -+ frame = &cache->frames[slot]; -+ addr = frame->virtual_address; -+ } -+ -+ if (! addr) -+ ++cache->used; -+ -+ return trace_init_addr (frame, cursor, cfa, pc, fp, sp); -+} -+ -+/* Fast stack backtrace for AArch64. -+ -+ This is used by backtrace() implementation to accelerate frequent -+ queries for current stack, without any desire to unwind. It fills -+ BUFFER with the call tree from CURSOR upwards for at most SIZE -+ stack levels. The first frame, backtrace itself, is omitted. When -+ called, SIZE should give the maximum number of entries that can be -+ stored into BUFFER. Uses an internal thread-specific cache to -+ accelerate queries. -+ -+ The caller should fall back to a unw_step() loop if this function -+ fails by returning -UNW_ESTOPUNWIND, meaning the routine hit a -+ stack frame that is too complex to be traced in the fast path. -+ -+ This function is tuned for clients which only need to walk the -+ stack to get the call tree as fast as possible but without any -+ other details, for example profilers sampling the stack thousands -+ to millions of times per second. The routine handles the most -+ common AArch64 ABI stack layouts: CFA is FP or SP plus/minus -+ constant offset, return address is in LR, and FP, LR and SP are -+ either unchanged or saved on stack at constant offset from the CFA; -+ the signal return frame; and frames without unwind info provided -+ they are at the outermost (final) frame or can conservatively be -+ assumed to be frame-pointer based. -+ -+ Any other stack layout will cause the routine to give up. There -+ are only a handful of relatively rarely used functions which do -+ not have a stack in the standard form: vfork, longjmp, setcontext -+ and _dl_runtime_profile on common linux systems for example. -+ -+ On success BUFFER and *SIZE reflect the trace progress up to *SIZE -+ stack levels or the outermost frame, which ever is less. It may -+ stop short of outermost frame if unw_step() loop would also do so, -+ e.g. if there is no more unwind information; this is not reported -+ as an error. -+ -+ The function returns a negative value for errors, -UNW_ESTOPUNWIND -+ if tracing stopped because of an unusual frame unwind info. The -+ BUFFER and *SIZE reflect tracing progress up to the error frame. -+ -+ Callers of this function would normally look like this: -+ -+ unw_cursor_t cur; -+ unw_context_t ctx; -+ void addrs[128]; -+ int depth = 128; -+ int ret; -+ -+ unw_getcontext(&ctx); -+ unw_init_local(&cur, &ctx); -+ if ((ret = unw_tdep_trace(&cur, addrs, &depth)) < 0) -+ { -+ depth = 0; -+ unw_getcontext(&ctx); -+ unw_init_local(&cur, &ctx); -+ while ((ret = unw_step(&cur)) > 0 && depth < 128) -+ { -+ unw_word_t ip; -+ unw_get_reg(&cur, UNW_REG_IP, &ip); -+ addresses[depth++] = (void *) ip; -+ } -+ } -+*/ -+HIDDEN int -+tdep_trace (unw_cursor_t *cursor, void **buffer, int *size) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ struct dwarf_cursor *d = &c->dwarf; -+ unw_trace_cache_t *cache; -+ unw_word_t fp, sp, pc, cfa, lr; -+ int maxdepth = 0; -+ int depth = 0; -+ int ret; -+ -+ /* Check input parametres. */ -+ if (unlikely(! cursor || ! buffer || ! size || (maxdepth = *size) <= 0)) -+ return -UNW_EINVAL; -+ -+ Debug (1, "begin ip 0x%lx cfa 0x%lx\n", d->ip, d->cfa); -+ -+ /* Tell core dwarf routines to call back to us. */ -+ d->stash_frames = 1; -+ -+ /* Determine initial register values. These are direct access safe -+ because we know they come from the initial machine context. */ -+ pc = d->ip; -+ sp = cfa = d->cfa; -+ ACCESS_MEM_FAST(ret, 0, d, DWARF_GET_LOC(d->loc[UNW_AARCH64_X29]), fp); -+ assert(ret == 0); -+ lr = 0; -+ -+ /* Get frame cache. */ -+ if (unlikely(! (cache = trace_cache_get()))) -+ { -+ Debug (1, "returning %d, cannot get trace cache\n", -UNW_ENOMEM); -+ *size = 0; -+ d->stash_frames = 0; -+ return -UNW_ENOMEM; -+ } -+ -+ /* Trace the stack upwards, starting from current RIP. Adjust -+ the RIP address for previous/next instruction as the main -+ unwinding logic would also do. We undo this before calling -+ back into unw_step(). */ -+ while (depth < maxdepth) -+ { -+ pc -= d->use_prev_instr; -+ Debug (2, "depth %d cfa 0x%lx pc 0x%lx sp 0x%lx fp 0x%lx\n", -+ depth, cfa, pc, sp, fp); -+ -+ /* See if we have this address cached. If not, evaluate enough of -+ the dwarf unwind information to fill the cache line data, or to -+ decide this frame cannot be handled in fast trace mode. We -+ cache negative results too to prevent unnecessary dwarf parsing -+ for common failures. */ -+ unw_tdep_frame_t *f = trace_lookup (cursor, cache, cfa, pc, fp, sp); -+ -+ /* If we don't have information for this frame, give up. */ -+ if (unlikely(! f)) -+ { -+ ret = -UNW_ENOINFO; -+ break; -+ } -+ -+ Debug (3, "frame va %lx type %d last %d cfa %s+%d fp @ cfa%+d lr @ cfa%+d sp @ cfa%+d\n", -+ f->virtual_address, f->frame_type, f->last_frame, -+ f->cfa_reg_sp ? "sp" : "fp", f->cfa_reg_offset, -+ f->fp_cfa_offset, f->lr_cfa_offset, f->sp_cfa_offset); -+ -+ assert (f->virtual_address == pc); -+ -+ /* Stop if this was the last frame. In particular don't evaluate -+ new register values as it may not be safe - we don't normally -+ run with full validation on, and do not want to - and there's -+ enough bad unwind info floating around that we need to trust -+ what unw_step() previously said, in potentially bogus frames. */ -+ if (f->last_frame) -+ break; -+ -+ /* Evaluate CFA and registers for the next frame. */ -+ switch (f->frame_type) -+ { -+ case UNW_AARCH64_FRAME_GUESSED: -+ /* Fall thru to standard processing after forcing validation. */ -+ c->validate = 1; -+ -+ case UNW_AARCH64_FRAME_STANDARD: -+ /* Advance standard traceable frame. */ -+ cfa = (f->cfa_reg_sp ? sp : fp) + f->cfa_reg_offset; -+ if (likely(f->lr_cfa_offset != -1)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + f->lr_cfa_offset, pc); -+ else if (lr != 0) -+ { -+ /* Use the saved link register as the new pc. */ -+ pc = lr; -+ lr = 0; -+ } -+ if (likely(ret >= 0) && likely(f->fp_cfa_offset != -1)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + f->fp_cfa_offset, fp); -+ -+ /* Don't bother reading SP from DWARF, CFA becomes new SP. */ -+ sp = cfa; -+ -+ /* Next frame needs to back up for unwind info lookup. */ -+ d->use_prev_instr = 1; -+ break; -+ -+ case UNW_AARCH64_FRAME_SIGRETURN: -+ cfa = cfa + f->cfa_reg_offset; /* cfa now points to ucontext_t. */ -+ -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_PC_OFF, pc); -+ if (likely(ret >= 0)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_X29_OFF, fp); -+ if (likely(ret >= 0)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_SP_OFF, sp); -+ /* Save the link register here in case we end up in a function that -+ doesn't save the link register in the prologue, e.g. kill. */ -+ if (likely(ret >= 0)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_X30_OFF, lr); -+ -+ /* Resume stack at signal restoration point. The stack is not -+ necessarily continuous here, especially with sigaltstack(). */ -+ cfa = sp; -+ -+ /* Next frame should not back up. */ -+ d->use_prev_instr = 0; -+ break; -+ -+ default: -+ /* We cannot trace through this frame, give up and tell the -+ caller we had to stop. Data collected so far may still be -+ useful to the caller, so let it know how far we got. */ -+ ret = -UNW_ESTOPUNWIND; -+ break; -+ } -+ -+ Debug (4, "new cfa 0x%lx pc 0x%lx sp 0x%lx fp 0x%lx\n", -+ cfa, pc, sp, fp); -+ -+ /* If we failed or ended up somewhere bogus, stop. */ -+ if (unlikely(ret < 0 || pc < 0x4000)) -+ break; -+ -+ /* Record this address in stack trace. We skipped the first address. */ -+ buffer[depth++] = (void *) (pc - d->use_prev_instr); -+ } -+ -+#if UNW_DEBUG -+ Debug (1, "returning %d, depth %d\n", ret, depth); -+#endif -+ *size = depth; -+ return ret; -+} -diff --git a/frysk-imports/libunwind/src/aarch64/Lcreate_addr_space.c b/frysk-imports/libunwind/src/aarch64/Lcreate_addr_space.c -new file mode 100644 -index 0000000..0f2dc6b ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lcreate_addr_space.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gcreate_addr_space.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Lget_proc_info.c b/frysk-imports/libunwind/src/aarch64/Lget_proc_info.c -new file mode 100644 -index 0000000..69028b0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lget_proc_info.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gget_proc_info.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Lget_save_loc.c b/frysk-imports/libunwind/src/aarch64/Lget_save_loc.c -new file mode 100644 -index 0000000..9ea048a ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lget_save_loc.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gget_save_loc.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Lglobal.c b/frysk-imports/libunwind/src/aarch64/Lglobal.c -new file mode 100644 -index 0000000..6d7b489 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lglobal.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gglobal.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Linit.c b/frysk-imports/libunwind/src/aarch64/Linit.c -new file mode 100644 -index 0000000..e9abfdd ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Linit.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Linit_local.c b/frysk-imports/libunwind/src/aarch64/Linit_local.c -new file mode 100644 -index 0000000..68a1687 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Linit_local.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit_local.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Linit_remote.c b/frysk-imports/libunwind/src/aarch64/Linit_remote.c -new file mode 100644 -index 0000000..58cb04a ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Linit_remote.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit_remote.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Lis_signal_frame.c b/frysk-imports/libunwind/src/aarch64/Lis_signal_frame.c -new file mode 100644 -index 0000000..b9a7c4f ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lis_signal_frame.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gis_signal_frame.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Lregs.c b/frysk-imports/libunwind/src/aarch64/Lregs.c -new file mode 100644 -index 0000000..2c9c75c ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lregs.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gregs.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Lresume.c b/frysk-imports/libunwind/src/aarch64/Lresume.c -new file mode 100644 -index 0000000..41a8cf0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lresume.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gresume.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Lstash_frame.c b/frysk-imports/libunwind/src/aarch64/Lstash_frame.c -new file mode 100644 -index 0000000..7758780 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lstash_frame.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gstash_frame.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Lstep.c b/frysk-imports/libunwind/src/aarch64/Lstep.c -new file mode 100644 -index 0000000..c1ac3c7 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Lstep.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gstep.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/Ltrace.c b/frysk-imports/libunwind/src/aarch64/Ltrace.c -new file mode 100644 -index 0000000..fcd3f23 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/Ltrace.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gtrace.c" -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/gen-offsets.c b/frysk-imports/libunwind/src/aarch64/gen-offsets.c -new file mode 100644 -index 0000000..eadc237 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/gen-offsets.c -@@ -0,0 +1,68 @@ -+#include -+#include -+#include -+#include -+ -+#define UC(N,X) \ -+ printf ("#define LINUX_UC_" N "_OFF\t0x%X\n", offsetof (ucontext_t, X)) -+ -+#define SC(N,X) \ -+ printf ("#define LINUX_SC_" N "_OFF\t0x%X\n", offsetof (struct sigcontext, X)) -+ -+int -+main (void) -+{ -+ printf ( -+"/* Linux-specific definitions: */\n\n" -+ -+"/* Define various structure offsets to simplify cross-compilation. */\n\n" -+ -+"/* Offsets for AArch64 Linux \"ucontext_t\": */\n\n"); -+ -+ UC ("FLAGS", uc_flags); -+ UC ("LINK", uc_link); -+ UC ("STACK", uc_stack); -+ UC ("MCONTEXT", uc_mcontext); -+ UC ("SIGMASK", uc_sigmask); -+ -+ printf ("\n/* Offsets for AArch64 Linux \"struct sigcontext\": */\n\n"); -+ -+ SC ("R0", regs[0]); -+ SC ("R1", regs[1]); -+ SC ("R2", regs[2]); -+ SC ("R3", regs[3]); -+ SC ("R4", regs[4]); -+ SC ("R5", regs[5]); -+ SC ("R6", regs[6]); -+ SC ("R7", regs[7]); -+ SC ("R8", regs[8]); -+ SC ("R9", regs[9]); -+ SC ("R10", regs[10]); -+ SC ("R11", regs[11]); -+ SC ("R12", regs[12]); -+ SC ("R13", regs[13]); -+ SC ("R14", regs[14]); -+ SC ("R15", regs[15]); -+ SC ("R16", regs[16]); -+ SC ("R17", regs[17]); -+ SC ("R18", regs[18]); -+ SC ("R19", regs[19]); -+ SC ("R20", regs[20]); -+ SC ("R21", regs[21]); -+ SC ("R22", regs[22]); -+ SC ("R23", regs[23]); -+ SC ("R24", regs[24]); -+ SC ("R25", regs[25]); -+ SC ("R26", regs[26]); -+ SC ("R27", regs[27]); -+ SC ("R28", regs[28]); -+ SC ("R29", regs[29]); -+ SC ("R30", regs[30]); -+ SC ("R31", regs[31]); -+ -+ SC ("PC", pc); -+ SC ("SP", sp); -+ SC ("Fault", fault_address); -+ SC ("state", pstate); -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/aarch64/getcontext.S b/frysk-imports/libunwind/src/aarch64/getcontext.S -new file mode 100644 -index 0000000..25ed5b6 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/getcontext.S -@@ -0,0 +1,52 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 Google, Inc -+ Contributed by Paul Pluzhnikov -+ Copyright (C) 2010 Konstantin Belousov -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "offsets.h" -+ -+/* int _Uaarch64_getcontext_trace (unw_tdep_context_t *ucp) -+ -+ Saves limited machine context in UCP necessary for fast trace. If fast trace -+ fails, caller will have to get the full context. -+*/ -+ -+ .global _Uaarch64_getcontext_trace -+ .hidden _Uaarch64_getcontext_trace -+ .type _Uaarch64_getcontext_trace, @function -+_Uaarch64_getcontext_trace: -+ .cfi_startproc -+ -+ /* Save only FP, SP, PC - exclude this call. */ -+ str x29, [x0, #(LINUX_UC_MCONTEXT_OFF + LINUX_SC_X29_OFF)] -+ mov x9, sp -+ str x9, [x0, #(LINUX_UC_MCONTEXT_OFF + LINUX_SC_SP_OFF)] -+ str x30, [x0, #(LINUX_UC_MCONTEXT_OFF + LINUX_SC_PC_OFF)] -+ -+ ret -+ .cfi_endproc -+ .size _Uaarch64_getcontext_trace, . - _Uaarch64_getcontext_trace -+ -+ /* We do not need executable stack. */ -+ .section .note.GNU-stack,"",@progbits -diff --git a/frysk-imports/libunwind/src/aarch64/init.h b/frysk-imports/libunwind/src/aarch64/init.h -new file mode 100644 -index 0000000..0cedc1a ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/init.h -@@ -0,0 +1,127 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+static inline int -+common_init (struct cursor *c, unsigned use_prev_instr) -+{ -+ int ret, i; -+ -+ c->dwarf.loc[UNW_AARCH64_X0] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X0); -+ c->dwarf.loc[UNW_AARCH64_X1] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X1); -+ c->dwarf.loc[UNW_AARCH64_X2] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X2); -+ c->dwarf.loc[UNW_AARCH64_X3] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X3); -+ c->dwarf.loc[UNW_AARCH64_X4] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X4); -+ c->dwarf.loc[UNW_AARCH64_X5] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X5); -+ c->dwarf.loc[UNW_AARCH64_X6] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X6); -+ c->dwarf.loc[UNW_AARCH64_X7] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X7); -+ c->dwarf.loc[UNW_AARCH64_X8] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X8); -+ c->dwarf.loc[UNW_AARCH64_X9] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X9); -+ c->dwarf.loc[UNW_AARCH64_X10] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X10); -+ c->dwarf.loc[UNW_AARCH64_X11] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X11); -+ c->dwarf.loc[UNW_AARCH64_X12] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X12); -+ c->dwarf.loc[UNW_AARCH64_X13] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X13); -+ c->dwarf.loc[UNW_AARCH64_X14] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X14); -+ c->dwarf.loc[UNW_AARCH64_X15] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X15); -+ c->dwarf.loc[UNW_AARCH64_X16] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X16); -+ c->dwarf.loc[UNW_AARCH64_X17] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X17); -+ c->dwarf.loc[UNW_AARCH64_X18] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X18); -+ c->dwarf.loc[UNW_AARCH64_X19] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X19); -+ c->dwarf.loc[UNW_AARCH64_X20] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X20); -+ c->dwarf.loc[UNW_AARCH64_X21] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X21); -+ c->dwarf.loc[UNW_AARCH64_X22] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X22); -+ c->dwarf.loc[UNW_AARCH64_X23] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X23); -+ c->dwarf.loc[UNW_AARCH64_X24] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X24); -+ c->dwarf.loc[UNW_AARCH64_X25] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X25); -+ c->dwarf.loc[UNW_AARCH64_X26] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X26); -+ c->dwarf.loc[UNW_AARCH64_X27] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X27); -+ c->dwarf.loc[UNW_AARCH64_X28] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X28); -+ c->dwarf.loc[UNW_AARCH64_X29] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X29); -+ c->dwarf.loc[UNW_AARCH64_X30] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_X30); -+ c->dwarf.loc[UNW_AARCH64_SP] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_SP); -+ c->dwarf.loc[UNW_AARCH64_PC] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_PC); -+ c->dwarf.loc[UNW_AARCH64_PSTATE] = DWARF_REG_LOC (&c->dwarf, -+ UNW_AARCH64_PSTATE); -+ c->dwarf.loc[UNW_AARCH64_V0] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V0); -+ c->dwarf.loc[UNW_AARCH64_V1] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V1); -+ c->dwarf.loc[UNW_AARCH64_V2] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V2); -+ c->dwarf.loc[UNW_AARCH64_V3] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V3); -+ c->dwarf.loc[UNW_AARCH64_V4] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V4); -+ c->dwarf.loc[UNW_AARCH64_V5] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V5); -+ c->dwarf.loc[UNW_AARCH64_V6] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V6); -+ c->dwarf.loc[UNW_AARCH64_V7] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V7); -+ c->dwarf.loc[UNW_AARCH64_V8] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V8); -+ c->dwarf.loc[UNW_AARCH64_V9] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V9); -+ c->dwarf.loc[UNW_AARCH64_V10] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V10); -+ c->dwarf.loc[UNW_AARCH64_V11] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V11); -+ c->dwarf.loc[UNW_AARCH64_V12] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V12); -+ c->dwarf.loc[UNW_AARCH64_V13] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V13); -+ c->dwarf.loc[UNW_AARCH64_V14] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V14); -+ c->dwarf.loc[UNW_AARCH64_V15] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V15); -+ c->dwarf.loc[UNW_AARCH64_V16] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V16); -+ c->dwarf.loc[UNW_AARCH64_V17] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V17); -+ c->dwarf.loc[UNW_AARCH64_V18] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V18); -+ c->dwarf.loc[UNW_AARCH64_V19] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V19); -+ c->dwarf.loc[UNW_AARCH64_V20] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V20); -+ c->dwarf.loc[UNW_AARCH64_V21] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V21); -+ c->dwarf.loc[UNW_AARCH64_V22] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V22); -+ c->dwarf.loc[UNW_AARCH64_V23] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V23); -+ c->dwarf.loc[UNW_AARCH64_V24] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V24); -+ c->dwarf.loc[UNW_AARCH64_V25] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V25); -+ c->dwarf.loc[UNW_AARCH64_V26] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V26); -+ c->dwarf.loc[UNW_AARCH64_V27] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V27); -+ c->dwarf.loc[UNW_AARCH64_V28] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V28); -+ c->dwarf.loc[UNW_AARCH64_V29] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V29); -+ c->dwarf.loc[UNW_AARCH64_V30] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V30); -+ c->dwarf.loc[UNW_AARCH64_V31] = DWARF_REG_LOC (&c->dwarf, UNW_AARCH64_V31); -+ -+ for (i = UNW_AARCH64_PSTATE + 1; i < UNW_AARCH64_V0; ++i) -+ c->dwarf.loc[i] = DWARF_NULL_LOC; -+ -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_AARCH64_PC], &c->dwarf.ip); -+ if (ret < 0) -+ return ret; -+ -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_AARCH64_SP], &c->dwarf.cfa); -+ if (ret < 0) -+ return ret; -+ -+ c->sigcontext_format = AARCH64_SCF_NONE; -+ c->sigcontext_addr = 0; -+ c->sigcontext_sp = 0; -+ c->sigcontext_pc = 0; -+ -+ c->dwarf.args_size = 0; -+ c->dwarf.ret_addr_column = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; -+ c->dwarf.pi_valid = 0; -+ c->dwarf.pi_is_dynamic = 0; -+ c->dwarf.hint = 0; -+ c->dwarf.prev_rs = 0; -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/aarch64/is_fpreg.c b/frysk-imports/libunwind/src/aarch64/is_fpreg.c -new file mode 100644 -index 0000000..7c32693 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/is_fpreg.c -@@ -0,0 +1,32 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "libunwind_i.h" -+ -+PROTECTED int -+unw_is_fpreg (int regnum) -+{ -+ return (regnum >= UNW_AARCH64_V0 && regnum <= UNW_AARCH64_V31); -+} -diff --git a/frysk-imports/libunwind/src/aarch64/offsets.h b/frysk-imports/libunwind/src/aarch64/offsets.h -new file mode 100644 -index 0000000..e78251d ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/offsets.h -@@ -0,0 +1,49 @@ -+/* Linux-specific definitions: */ -+ -+/* Define various structure offsets to simplify cross-compilation. */ -+ -+/* Offsets for AArch64 Linux "ucontext_t": */ -+ -+#define LINUX_UC_FLAGS_OFF 0x0 -+#define LINUX_UC_LINK_OFF 0x8 -+#define LINUX_UC_STACK_OFF 0x10 -+#define LINUX_UC_SIGMASK_OFF 0x28 -+#define LINUX_UC_MCONTEXT_OFF 0xb0 -+ -+/* Offsets for AArch64 Linux "struct sigcontext": */ -+ -+#define LINUX_SC_FAULTADDRESS_OFF 0x00 -+#define LINUX_SC_X0_OFF 0x008 -+#define LINUX_SC_X1_OFF 0x010 -+#define LINUX_SC_X2_OFF 0x018 -+#define LINUX_SC_X3_OFF 0x020 -+#define LINUX_SC_X4_OFF 0x028 -+#define LINUX_SC_X5_OFF 0x030 -+#define LINUX_SC_X6_OFF 0x038 -+#define LINUX_SC_X7_OFF 0x040 -+#define LINUX_SC_X8_OFF 0x048 -+#define LINUX_SC_X9_OFF 0x050 -+#define LINUX_SC_X10_OFF 0x058 -+#define LINUX_SC_X11_OFF 0x060 -+#define LINUX_SC_X12_OFF 0x068 -+#define LINUX_SC_X13_OFF 0x070 -+#define LINUX_SC_X14_OFF 0x078 -+#define LINUX_SC_X15_OFF 0x080 -+#define LINUX_SC_X16_OFF 0x088 -+#define LINUX_SC_X17_OFF 0x090 -+#define LINUX_SC_X18_OFF 0x098 -+#define LINUX_SC_X19_OFF 0x0a0 -+#define LINUX_SC_X20_OFF 0x0a8 -+#define LINUX_SC_X21_OFF 0x0b0 -+#define LINUX_SC_X22_OFF 0x0b8 -+#define LINUX_SC_X23_OFF 0x0c0 -+#define LINUX_SC_X24_OFF 0x0c8 -+#define LINUX_SC_X25_OFF 0x0d0 -+#define LINUX_SC_X26_OFF 0x0d8 -+#define LINUX_SC_X27_OFF 0x0e0 -+#define LINUX_SC_X28_OFF 0x0e8 -+#define LINUX_SC_X29_OFF 0x0f0 -+#define LINUX_SC_X30_OFF 0x0f8 -+#define LINUX_SC_SP_OFF 0x100 -+#define LINUX_SC_PC_OFF 0x108 -+#define LINUX_SC_PSTATE_OFF 0x110 -diff --git a/frysk-imports/libunwind/src/aarch64/regname.c b/frysk-imports/libunwind/src/aarch64/regname.c -new file mode 100644 -index 0000000..8c97342 ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/regname.c -@@ -0,0 +1,106 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+static const char *const regname[] = -+ { -+ [UNW_AARCH64_X0] = "x0", -+ [UNW_AARCH64_X1] = "x1", -+ [UNW_AARCH64_X2] = "x2", -+ [UNW_AARCH64_X3] = "x3", -+ [UNW_AARCH64_X4] = "x4", -+ [UNW_AARCH64_X5] = "x5", -+ [UNW_AARCH64_X6] = "x6", -+ [UNW_AARCH64_X7] = "x7", -+ [UNW_AARCH64_X8] = "x8", -+ [UNW_AARCH64_X9] = "x9", -+ [UNW_AARCH64_X10] = "x10", -+ [UNW_AARCH64_X11] = "x11", -+ [UNW_AARCH64_X12] = "x12", -+ [UNW_AARCH64_X13] = "x13", -+ [UNW_AARCH64_X14] = "x14", -+ [UNW_AARCH64_X15] = "x15", -+ [UNW_AARCH64_X16] = "ip0", -+ [UNW_AARCH64_X17] = "ip1", -+ [UNW_AARCH64_X18] = "x18", -+ [UNW_AARCH64_X19] = "x19", -+ [UNW_AARCH64_X20] = "x20", -+ [UNW_AARCH64_X21] = "x21", -+ [UNW_AARCH64_X22] = "x22", -+ [UNW_AARCH64_X23] = "x23", -+ [UNW_AARCH64_X24] = "x24", -+ [UNW_AARCH64_X25] = "x25", -+ [UNW_AARCH64_X26] = "x26", -+ [UNW_AARCH64_X27] = "x27", -+ [UNW_AARCH64_X28] = "x28", -+ [UNW_AARCH64_X29] = "fp", -+ [UNW_AARCH64_X30] = "lr", -+ [UNW_AARCH64_SP] = "sp", -+ [UNW_AARCH64_PC] = "pc", -+ [UNW_AARCH64_V0] = "v0", -+ [UNW_AARCH64_V1] = "v1", -+ [UNW_AARCH64_V2] = "v2", -+ [UNW_AARCH64_V3] = "v3", -+ [UNW_AARCH64_V4] = "v4", -+ [UNW_AARCH64_V5] = "v5", -+ [UNW_AARCH64_V6] = "v6", -+ [UNW_AARCH64_V7] = "v7", -+ [UNW_AARCH64_V8] = "v8", -+ [UNW_AARCH64_V9] = "v9", -+ [UNW_AARCH64_V10] = "v10", -+ [UNW_AARCH64_V11] = "v11", -+ [UNW_AARCH64_V12] = "v12", -+ [UNW_AARCH64_V13] = "v13", -+ [UNW_AARCH64_V14] = "v14", -+ [UNW_AARCH64_V15] = "v15", -+ [UNW_AARCH64_V16] = "v16", -+ [UNW_AARCH64_V17] = "v17", -+ [UNW_AARCH64_V18] = "v18", -+ [UNW_AARCH64_V19] = "v19", -+ [UNW_AARCH64_V20] = "v20", -+ [UNW_AARCH64_V21] = "v21", -+ [UNW_AARCH64_V22] = "v22", -+ [UNW_AARCH64_V23] = "v23", -+ [UNW_AARCH64_V24] = "v24", -+ [UNW_AARCH64_V25] = "v25", -+ [UNW_AARCH64_V26] = "v26", -+ [UNW_AARCH64_V27] = "v27", -+ [UNW_AARCH64_V28] = "v28", -+ [UNW_AARCH64_V29] = "v29", -+ [UNW_AARCH64_V30] = "v30", -+ [UNW_AARCH64_V31] = "v31", -+ [UNW_AARCH64_FPSR] = "fpsr", -+ [UNW_AARCH64_FPCR] = "fpcr", -+ }; -+ -+PROTECTED const char * -+unw_regname (unw_regnum_t reg) -+{ -+ if (reg < (unw_regnum_t) ARRAY_SIZE (regname) && regname[reg] != NULL) -+ return regname[reg]; -+ else -+ return "???"; -+} -diff --git a/frysk-imports/libunwind/src/aarch64/siglongjmp.S b/frysk-imports/libunwind/src/aarch64/siglongjmp.S -new file mode 100644 -index 0000000..9985c4b ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/siglongjmp.S -@@ -0,0 +1,12 @@ -+ /* Dummy implementation for now. */ -+ -+ .global _UI_siglongjmp_cont -+ .global _UI_longjmp_cont -+ -+_UI_siglongjmp_cont: -+_UI_longjmp_cont: -+ ret -+#ifdef __linux__ -+ /* We do not need executable stack. */ -+ .section .note.GNU-stack,"",%progbits -+#endif -diff --git a/frysk-imports/libunwind/src/aarch64/unwind_i.h b/frysk-imports/libunwind/src/aarch64/unwind_i.h -new file mode 100644 -index 0000000..79b342c ---- /dev/null -+++ b/frysk-imports/libunwind/src/aarch64/unwind_i.h -@@ -0,0 +1,62 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2013 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef unwind_i_h -+#define unwind_i_h -+ -+#include -+ -+#include -+ -+#include "libunwind_i.h" -+ -+/* DWARF column numbers for AArch64: */ -+#define X29 29 -+#define FP 29 -+#define X30 30 -+#define LR 30 -+#define SP 31 -+ -+#define aarch64_lock UNW_OBJ(lock) -+#define aarch64_local_resume UNW_OBJ(local_resume) -+#define aarch64_local_addr_space_init UNW_OBJ(local_addr_space_init) -+ -+extern void aarch64_local_addr_space_init (void); -+extern int aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -+ void *arg); -+ -+/* By-pass calls to access_mem() when known to be safe. */ -+#ifdef UNW_LOCAL_ONLY -+# undef ACCESS_MEM_FAST -+# define ACCESS_MEM_FAST(ret,validate,cur,addr,to) \ -+ do { \ -+ if (unlikely(validate)) \ -+ (ret) = dwarf_get ((cur), DWARF_MEM_LOC ((cur), (addr)), &(to)); \ -+ else \ -+ (ret) = 0, (to) = *(unw_word_t *)(addr); \ -+ } while (0) -+#endif -+ -+#endif /* unwind_i_h */ -diff --git a/frysk-imports/libunwind/src/arm/Gcreate_addr_space.c b/frysk-imports/libunwind/src/arm/Gcreate_addr_space.c -index c3e1360..4d59a20 100644 ---- a/frysk-imports/libunwind/src/arm/Gcreate_addr_space.c -+++ b/frysk-imports/libunwind/src/arm/Gcreate_addr_space.c -@@ -32,8 +32,16 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - #ifdef UNW_LOCAL_ONLY - return NULL; - #else -- unw_addr_space_t as = malloc (sizeof (*as)); -+ unw_addr_space_t as; - -+ /* -+ * ARM supports little-endian and big-endian. -+ */ -+ if (byte_order != 0 && byte_order != __LITTLE_ENDIAN -+ && byte_order != __BIG_ENDIAN) -+ return NULL; -+ -+ as = malloc (sizeof (*as)); - if (!as) - return NULL; - -@@ -41,13 +49,6 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - - as->acc = *a; - -- /* -- * ARM supports little-endian and big-endian. -- */ -- if (byte_order != 0 && byte_order != __LITTLE_ENDIAN -- && byte_order != __BIG_ENDIAN) -- return NULL; -- - /* Default to little-endian for ARM. */ - if (byte_order == 0 || byte_order == __LITTLE_ENDIAN) - as->big_endian = 0; -diff --git a/frysk-imports/libunwind/src/arm/Gex_tables.c b/frysk-imports/libunwind/src/arm/Gex_tables.c -new file mode 100644 -index 0000000..34706cf ---- /dev/null -+++ b/frysk-imports/libunwind/src/arm/Gex_tables.c -@@ -0,0 +1,569 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright 2011 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+/* This file contains functionality for parsing and interpreting the ARM -+specific unwind information. Documentation about the exception handling -+ABI for the ARM architecture can be found at: -+http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf -+*/ -+ -+#include "libunwind_i.h" -+ -+#define ARM_EXBUF_START(x) (((x) >> 4) & 0x0f) -+#define ARM_EXBUF_COUNT(x) ((x) & 0x0f) -+#define ARM_EXBUF_END(x) (ARM_EXBUF_START(x) + ARM_EXBUF_COUNT(x)) -+ -+#define ARM_EXIDX_CANT_UNWIND 0x00000001 -+#define ARM_EXIDX_COMPACT 0x80000000 -+ -+#define ARM_EXTBL_OP_FINISH 0xb0 -+ -+enum arm_exbuf_cmd_flags { -+ ARM_EXIDX_VFP_SHIFT_16 = 1 << 16, -+ ARM_EXIDX_VFP_DOUBLE = 1 << 17, -+}; -+ -+struct arm_cb_data -+ { -+ /* in: */ -+ unw_word_t ip; /* instruction-pointer we're looking for */ -+ unw_proc_info_t *pi; /* proc-info pointer */ -+ /* out: */ -+ unw_dyn_info_t di; /* info about the ARM exidx segment */ -+ }; -+ -+static inline uint32_t CONST_ATTR -+prel31_read (uint32_t prel31) -+{ -+ return ((int32_t)prel31 << 1) >> 1; -+} -+ -+static inline int -+prel31_to_addr (unw_addr_space_t as, void *arg, unw_word_t prel31, -+ unw_word_t *val) -+{ -+ unw_word_t offset; -+ -+ if ((*as->acc.access_mem)(as, prel31, &offset, 0, arg) < 0) -+ return -UNW_EINVAL; -+ -+ offset = ((long)offset << 1) >> 1; -+ *val = prel31 + offset; -+ -+ return 0; -+} -+ -+/** -+ * Applies the given command onto the new state to the given dwarf_cursor. -+ */ -+HIDDEN int -+arm_exidx_apply_cmd (struct arm_exbuf_data *edata, struct dwarf_cursor *c) -+{ -+ int ret = 0; -+ unsigned i; -+ -+ switch (edata->cmd) -+ { -+ case ARM_EXIDX_CMD_FINISH: -+ /* Set LR to PC if not set already. */ -+ if (DWARF_IS_NULL_LOC (c->loc[UNW_ARM_R15])) -+ c->loc[UNW_ARM_R15] = c->loc[UNW_ARM_R14]; -+ /* Set IP. */ -+ dwarf_get (c, c->loc[UNW_ARM_R15], &c->ip); -+ break; -+ case ARM_EXIDX_CMD_DATA_PUSH: -+ Debug (2, "vsp = vsp - %d\n", edata->data); -+ c->cfa -= edata->data; -+ break; -+ case ARM_EXIDX_CMD_DATA_POP: -+ Debug (2, "vsp = vsp + %d\n", edata->data); -+ c->cfa += edata->data; -+ break; -+ case ARM_EXIDX_CMD_REG_POP: -+ for (i = 0; i < 16; i++) -+ if (edata->data & (1 << i)) -+ { -+ Debug (2, "pop {r%d}\n", i); -+ c->loc[UNW_ARM_R0 + i] = DWARF_LOC (c->cfa, 0); -+ c->cfa += 4; -+ } -+ /* Set cfa in case the SP got popped. */ -+ if (edata->data & (1 << 13)) -+ dwarf_get (c, c->loc[UNW_ARM_R13], &c->cfa); -+ break; -+ case ARM_EXIDX_CMD_REG_TO_SP: -+ assert (edata->data < 16); -+ Debug (2, "vsp = r%d\n", edata->data); -+ c->loc[UNW_ARM_R13] = c->loc[UNW_ARM_R0 + edata->data]; -+ dwarf_get (c, c->loc[UNW_ARM_R13], &c->cfa); -+ break; -+ case ARM_EXIDX_CMD_VFP_POP: -+ /* Skip VFP registers, but be sure to adjust stack */ -+ for (i = ARM_EXBUF_START (edata->data); i <= ARM_EXBUF_END (edata->data); -+ i++) -+ c->cfa += 8; -+ if (!(edata->data & ARM_EXIDX_VFP_DOUBLE)) -+ c->cfa += 4; -+ break; -+ case ARM_EXIDX_CMD_WREG_POP: -+ for (i = ARM_EXBUF_START (edata->data); i <= ARM_EXBUF_END (edata->data); -+ i++) -+ c->cfa += 8; -+ break; -+ case ARM_EXIDX_CMD_WCGR_POP: -+ for (i = 0; i < 4; i++) -+ if (edata->data & (1 << i)) -+ c->cfa += 4; -+ break; -+ case ARM_EXIDX_CMD_REFUSED: -+ case ARM_EXIDX_CMD_RESERVED: -+ ret = -1; -+ break; -+ } -+ return ret; -+} -+ -+/** -+ * Decodes the given unwind instructions into arm_exbuf_data and calls -+ * arm_exidx_apply_cmd that applies the command onto the dwarf_cursor. -+ */ -+HIDDEN int -+arm_exidx_decode (const uint8_t *buf, uint8_t len, struct dwarf_cursor *c) -+{ -+#define READ_OP() *buf++ -+ const uint8_t *end = buf + len; -+ int ret; -+ struct arm_exbuf_data edata; -+ -+ assert(buf != NULL); -+ assert(len > 0); -+ -+ while (buf < end) -+ { -+ uint8_t op = READ_OP (); -+ if ((op & 0xc0) == 0x00) -+ { -+ edata.cmd = ARM_EXIDX_CMD_DATA_POP; -+ edata.data = (((int)op & 0x3f) << 2) + 4; -+ } -+ else if ((op & 0xc0) == 0x40) -+ { -+ edata.cmd = ARM_EXIDX_CMD_DATA_PUSH; -+ edata.data = (((int)op & 0x3f) << 2) + 4; -+ } -+ else if ((op & 0xf0) == 0x80) -+ { -+ uint8_t op2 = READ_OP (); -+ if (op == 0x80 && op2 == 0x00) -+ edata.cmd = ARM_EXIDX_CMD_REFUSED; -+ else -+ { -+ edata.cmd = ARM_EXIDX_CMD_REG_POP; -+ edata.data = ((op & 0xf) << 8) | op2; -+ edata.data = edata.data << 4; -+ } -+ } -+ else if ((op & 0xf0) == 0x90) -+ { -+ if (op == 0x9d || op == 0x9f) -+ edata.cmd = ARM_EXIDX_CMD_RESERVED; -+ else -+ { -+ edata.cmd = ARM_EXIDX_CMD_REG_TO_SP; -+ edata.data = op & 0x0f; -+ } -+ } -+ else if ((op & 0xf0) == 0xa0) -+ { -+ unsigned end = (op & 0x07); -+ edata.data = (1 << (end + 1)) - 1; -+ edata.data = edata.data << 4; -+ if (op & 0x08) -+ edata.data |= 1 << 14; -+ edata.cmd = ARM_EXIDX_CMD_REG_POP; -+ } -+ else if (op == ARM_EXTBL_OP_FINISH) -+ { -+ edata.cmd = ARM_EXIDX_CMD_FINISH; -+ buf = end; -+ } -+ else if (op == 0xb1) -+ { -+ uint8_t op2 = READ_OP (); -+ if (op2 == 0 || (op2 & 0xf0)) -+ edata.cmd = ARM_EXIDX_CMD_RESERVED; -+ else -+ { -+ edata.cmd = ARM_EXIDX_CMD_REG_POP; -+ edata.data = op2 & 0x0f; -+ } -+ } -+ else if (op == 0xb2) -+ { -+ uint32_t offset = 0; -+ uint8_t byte, shift = 0; -+ do -+ { -+ byte = READ_OP (); -+ offset |= (byte & 0x7f) << shift; -+ shift += 7; -+ } -+ while (byte & 0x80); -+ edata.data = offset * 4 + 0x204; -+ edata.cmd = ARM_EXIDX_CMD_DATA_POP; -+ } -+ else if (op == 0xb3 || op == 0xc8 || op == 0xc9) -+ { -+ edata.cmd = ARM_EXIDX_CMD_VFP_POP; -+ edata.data = READ_OP (); -+ if (op == 0xc8) -+ edata.data |= ARM_EXIDX_VFP_SHIFT_16; -+ if (op != 0xb3) -+ edata.data |= ARM_EXIDX_VFP_DOUBLE; -+ } -+ else if ((op & 0xf8) == 0xb8 || (op & 0xf8) == 0xd0) -+ { -+ edata.cmd = ARM_EXIDX_CMD_VFP_POP; -+ edata.data = 0x80 | (op & 0x07); -+ if ((op & 0xf8) == 0xd0) -+ edata.data |= ARM_EXIDX_VFP_DOUBLE; -+ } -+ else if (op >= 0xc0 && op <= 0xc5) -+ { -+ edata.cmd = ARM_EXIDX_CMD_WREG_POP; -+ edata.data = 0xa0 | (op & 0x07); -+ } -+ else if (op == 0xc6) -+ { -+ edata.cmd = ARM_EXIDX_CMD_WREG_POP; -+ edata.data = READ_OP (); -+ } -+ else if (op == 0xc7) -+ { -+ uint8_t op2 = READ_OP (); -+ if (op2 == 0 || (op2 & 0xf0)) -+ edata.cmd = ARM_EXIDX_CMD_RESERVED; -+ else -+ { -+ edata.cmd = ARM_EXIDX_CMD_WCGR_POP; -+ edata.data = op2 & 0x0f; -+ } -+ } -+ else -+ edata.cmd = ARM_EXIDX_CMD_RESERVED; -+ -+ ret = arm_exidx_apply_cmd (&edata, c); -+ if (ret < 0) -+ return ret; -+ } -+ return 0; -+} -+ -+/** -+ * Reads the entry from the given cursor and extracts the unwind instructions -+ * into buf. Returns the number of the extracted unwind insns or -+ * -UNW_ESTOPUNWIND if the special bit pattern ARM_EXIDX_CANT_UNWIND (0x1) was -+ * found. -+ */ -+HIDDEN int -+arm_exidx_extract (struct dwarf_cursor *c, uint8_t *buf) -+{ -+ int nbuf = 0; -+ unw_word_t entry = (unw_word_t) c->pi.unwind_info; -+ unw_word_t addr; -+ uint32_t data; -+ -+ /* An ARM unwind entry consists of a prel31 offset to the start of a -+ function followed by 31bits of data: -+ * if set to 0x1: the function cannot be unwound (EXIDX_CANTUNWIND) -+ * if bit 31 is one: this is a table entry itself (ARM_EXIDX_COMPACT) -+ * if bit 31 is zero: this is a prel31 offset of the start of the -+ table entry for this function */ -+ if (prel31_to_addr(c->as, c->as_arg, entry, &addr) < 0) -+ return -UNW_EINVAL; -+ -+ if ((*c->as->acc.access_mem)(c->as, entry + 4, &data, 0, c->as_arg) < 0) -+ return -UNW_EINVAL; -+ -+ if (data == ARM_EXIDX_CANT_UNWIND) -+ { -+ Debug (2, "0x1 [can't unwind]\n"); -+ nbuf = -UNW_ESTOPUNWIND; -+ } -+ else if (data & ARM_EXIDX_COMPACT) -+ { -+ Debug (2, "%p compact model %d [%8.8x]\n", (void *)addr, -+ (data >> 24) & 0x7f, data); -+ buf[nbuf++] = data >> 16; -+ buf[nbuf++] = data >> 8; -+ buf[nbuf++] = data; -+ } -+ else -+ { -+ unw_word_t extbl_data; -+ unsigned int n_table_words = 0; -+ -+ if (prel31_to_addr(c->as, c->as_arg, entry + 4, &extbl_data) < 0) -+ return -UNW_EINVAL; -+ -+ if ((*c->as->acc.access_mem)(c->as, extbl_data, &data, 0, c->as_arg) < 0) -+ return -UNW_EINVAL; -+ -+ if (data & ARM_EXIDX_COMPACT) -+ { -+ int pers = (data >> 24) & 0x0f; -+ Debug (2, "%p compact model %d [%8.8x]\n", (void *)addr, pers, data); -+ if (pers == 1 || pers == 2) -+ { -+ n_table_words = (data >> 16) & 0xff; -+ extbl_data += 4; -+ } -+ else -+ buf[nbuf++] = data >> 16; -+ buf[nbuf++] = data >> 8; -+ buf[nbuf++] = data; -+ } -+ else -+ { -+ unw_word_t pers; -+ if (prel31_to_addr (c->as, c->as_arg, extbl_data, &pers) < 0) -+ return -UNW_EINVAL; -+ Debug (2, "%p Personality routine: %8p\n", (void *)addr, -+ (void *)pers); -+ if ((*c->as->acc.access_mem)(c->as, extbl_data + 4, &data, 0, -+ c->as_arg) < 0) -+ return -UNW_EINVAL; -+ n_table_words = data >> 24; -+ buf[nbuf++] = data >> 16; -+ buf[nbuf++] = data >> 8; -+ buf[nbuf++] = data; -+ extbl_data += 8; -+ } -+ assert (n_table_words <= 5); -+ unsigned j; -+ for (j = 0; j < n_table_words; j++) -+ { -+ if ((*c->as->acc.access_mem)(c->as, extbl_data, &data, 0, -+ c->as_arg) < 0) -+ return -UNW_EINVAL; -+ extbl_data += 4; -+ buf[nbuf++] = data >> 24; -+ buf[nbuf++] = data >> 16; -+ buf[nbuf++] = data >> 8; -+ buf[nbuf++] = data >> 0; -+ } -+ } -+ -+ if (nbuf > 0 && buf[nbuf - 1] != ARM_EXTBL_OP_FINISH) -+ buf[nbuf++] = ARM_EXTBL_OP_FINISH; -+ -+ return nbuf; -+} -+ -+PROTECTED int -+tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg) -+{ -+ if (UNW_TRY_METHOD (UNW_ARM_METHOD_EXIDX) -+ && di->format == UNW_INFO_FORMAT_ARM_EXIDX) -+ { -+ /* The .ARM.exidx section contains a sorted list of key-value pairs - -+ the unwind entries. The 'key' is a prel31 offset to the start of a -+ function. We binary search this section in order to find the -+ appropriate unwind entry. */ -+ unw_word_t first = di->u.rti.table_data; -+ unw_word_t last = di->u.rti.table_data + di->u.rti.table_len - 8; -+ unw_word_t entry, val; -+ -+ if (prel31_to_addr (as, arg, first, &val) < 0 || ip < val) -+ return -UNW_ENOINFO; -+ -+ if (prel31_to_addr (as, arg, last, &val) < 0) -+ return -UNW_EINVAL; -+ -+ if (ip >= val) -+ { -+ entry = last; -+ -+ if (prel31_to_addr (as, arg, last, &pi->start_ip) < 0) -+ return -UNW_EINVAL; -+ -+ pi->end_ip = di->end_ip -1; -+ } -+ else -+ { -+ while (first < last - 8) -+ { -+ entry = first + (((last - first) / 8 + 1) >> 1) * 8; -+ -+ if (prel31_to_addr (as, arg, entry, &val) < 0) -+ return -UNW_EINVAL; -+ -+ if (ip < val) -+ last = entry; -+ else -+ first = entry; -+ } -+ -+ entry = first; -+ -+ if (prel31_to_addr (as, arg, entry, &pi->start_ip) < 0) -+ return -UNW_EINVAL; -+ -+ if (prel31_to_addr (as, arg, entry + 8, &pi->end_ip) < 0) -+ return -UNW_EINVAL; -+ -+ pi->end_ip--; -+ } -+ -+ if (need_unwind_info) -+ { -+ pi->unwind_info_size = 8; -+ pi->unwind_info = (void *) entry; -+ pi->format = UNW_INFO_FORMAT_ARM_EXIDX; -+ } -+ return 0; -+ } -+ else if (UNW_TRY_METHOD(UNW_ARM_METHOD_DWARF) -+ && di->format != UNW_INFO_FORMAT_ARM_EXIDX) -+ return dwarf_search_unwind_table (as, ip, di, pi, need_unwind_info, arg); -+ -+ return -UNW_ENOINFO; -+} -+ -+#ifndef UNW_REMOTE_ONLY -+/** -+ * Callback to dl_iterate_phdr to find infos about the ARM exidx segment. -+ */ -+static int -+arm_phdr_cb (struct dl_phdr_info *info, size_t size, void *data) -+{ -+ struct arm_cb_data *cb_data = data; -+ const Elf_W(Phdr) *p_text = NULL; -+ const Elf_W(Phdr) *p_arm_exidx = NULL; -+ const Elf_W(Phdr) *phdr = info->dlpi_phdr; -+ long n; -+ -+ for (n = info->dlpi_phnum; --n >= 0; phdr++) -+ { -+ switch (phdr->p_type) -+ { -+ case PT_LOAD: -+ if (cb_data->ip >= phdr->p_vaddr + info->dlpi_addr && -+ cb_data->ip < phdr->p_vaddr + info->dlpi_addr + phdr->p_memsz) -+ p_text = phdr; -+ break; -+ -+ case PT_ARM_EXIDX: -+ p_arm_exidx = phdr; -+ break; -+ -+ default: -+ break; -+ } -+ } -+ -+ if (p_text && p_arm_exidx) -+ { -+ cb_data->di.format = UNW_INFO_FORMAT_ARM_EXIDX; -+ cb_data->di.start_ip = p_text->p_vaddr + info->dlpi_addr; -+ cb_data->di.end_ip = cb_data->di.start_ip + p_text->p_memsz; -+ cb_data->di.u.rti.name_ptr = (unw_word_t) info->dlpi_name; -+ cb_data->di.u.rti.table_data = p_arm_exidx->p_vaddr + info->dlpi_addr; -+ cb_data->di.u.rti.table_len = p_arm_exidx->p_memsz; -+ return 1; -+ } -+ -+ return 0; -+} -+ -+HIDDEN int -+arm_find_proc_info (unw_addr_space_t as, unw_word_t ip, -+ unw_proc_info_t *pi, int need_unwind_info, void *arg) -+{ -+ int ret = -1; -+ intrmask_t saved_mask; -+ -+ Debug (14, "looking for IP=0x%lx\n", (long) ip); -+ -+ if (UNW_TRY_METHOD(UNW_ARM_METHOD_DWARF)) -+ { -+ struct dwarf_callback_data cb_data; -+ -+ memset (&cb_data, 0, sizeof (cb_data)); -+ cb_data.ip = ip; -+ cb_data.pi = pi; -+ cb_data.need_unwind_info = need_unwind_info; -+ cb_data.di.format = -1; -+ cb_data.di_debug.format = -1; -+ -+ SIGPROCMASK (SIG_SETMASK, &unwi_full_mask, &saved_mask); -+ ret = dl_iterate_phdr (dwarf_callback, &cb_data); -+ SIGPROCMASK (SIG_SETMASK, &saved_mask, NULL); -+ -+ if (cb_data.single_fde) -+ /* already got the result in *pi */ -+ return 0; -+ -+ if (cb_data.di_debug.format != -1) -+ ret = tdep_search_unwind_table (as, ip, &cb_data.di_debug, pi, -+ need_unwind_info, arg); -+ else -+ ret = -UNW_ENOINFO; -+ } -+ -+ if (ret < 0 && UNW_TRY_METHOD (UNW_ARM_METHOD_EXIDX)) -+ { -+ struct arm_cb_data cb_data; -+ -+ memset (&cb_data, 0, sizeof (cb_data)); -+ cb_data.ip = ip; -+ cb_data.pi = pi; -+ cb_data.di.format = -1; -+ -+ SIGPROCMASK (SIG_SETMASK, &unwi_full_mask, &saved_mask); -+ ret = dl_iterate_phdr (arm_phdr_cb, &cb_data); -+ SIGPROCMASK (SIG_SETMASK, &saved_mask, NULL); -+ -+ if (cb_data.di.format != -1) -+ ret = tdep_search_unwind_table (as, ip, &cb_data.di, pi, -+ need_unwind_info, arg); -+ else -+ ret = -UNW_ENOINFO; -+ } -+ -+ if (ret < 0) -+ Debug (14, "IP=0x%lx not found\n", (long) ip); -+ -+ return ret; -+} -+ -+HIDDEN void -+arm_put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) -+{ -+ /* it's a no-op */ -+} -+#endif /* !UNW_REMOTE_ONLY */ -+ -diff --git a/frysk-imports/libunwind/src/arm/Gget_save_loc.c b/frysk-imports/libunwind/src/arm/Gget_save_loc.c -index ba7bf17..63b711d 100644 ---- a/frysk-imports/libunwind/src/arm/Gget_save_loc.c -+++ b/frysk-imports/libunwind/src/arm/Gget_save_loc.c -@@ -30,7 +30,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - struct cursor *c = (struct cursor *) cursor; - dwarf_loc_t loc; - -- loc = DWARF_NULL_LOC; /* default to "not saved" */ -+ loc = DWARF_NULL_LOC; /* default to "not saved" */ - - switch (reg) - { -@@ -57,7 +57,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - break; - } - -- memset (sloc, 0, sizeof (sloc)); -+ memset (sloc, 0, sizeof (*sloc)); - - if (DWARF_IS_NULL_LOC (loc)) - { -diff --git a/frysk-imports/libunwind/src/arm/Gglobal.c b/frysk-imports/libunwind/src/arm/Gglobal.c -index 4037432..7b93fbd 100644 ---- a/frysk-imports/libunwind/src/arm/Gglobal.c -+++ b/frysk-imports/libunwind/src/arm/Gglobal.c -@@ -22,20 +22,14 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#include - #include "unwind_i.h" - #include "dwarf_i.h" - --HIDDEN pthread_mutex_t arm_lock = PTHREAD_MUTEX_INITIALIZER; --HIDDEN int tdep_needs_initialization = 1; -+HIDDEN define_lock (arm_lock); -+HIDDEN int tdep_init_done; - --/* FIXME: I'm pretty sure we don't need this at all for ARM, but "generic" -- code (include/dwarf_i.h) seems to expect it to be here at present. */ -- --HIDDEN uint8_t dwarf_to_unw_regnum_map[16] = -- { -- R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15 -- }; -+/* Unwinding methods to use. See UNW_METHOD_ enums */ -+HIDDEN int unwi_unwind_method = UNW_ARM_METHOD_ALL; - - HIDDEN void - tdep_init (void) -@@ -44,13 +38,19 @@ tdep_init (void) - - sigfillset (&unwi_full_mask); - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- mutex_lock (&arm_lock); -+ lock_acquire (&arm_lock, saved_mask); - { -- if (!tdep_needs_initialization) -+ if (tdep_init_done) - /* another thread else beat us to it... */ - goto out; - -+ /* read ARM unwind method setting */ -+ const char* str = getenv ("UNW_ARM_UNWIND_METHOD"); -+ if (str) -+ { -+ unwi_unwind_method = atoi (str); -+ } -+ - mi_init (); - - dwarf_init (); -@@ -58,9 +58,8 @@ tdep_init (void) - #ifndef UNW_REMOTE_ONLY - arm_local_addr_space_init (); - #endif -- tdep_needs_initialization = 0; /* signal that we're initialized... */ -+ tdep_init_done = 1; /* signal that we're initialized... */ - } - out: -- mutex_unlock (&arm_lock); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ lock_release (&arm_lock, saved_mask); - } -diff --git a/frysk-imports/libunwind/src/arm/Ginit.c b/frysk-imports/libunwind/src/arm/Ginit.c -index c45a8ef..1ed3dbf 100644 ---- a/frysk-imports/libunwind/src/arm/Ginit.c -+++ b/frysk-imports/libunwind/src/arm/Ginit.c -@@ -39,39 +39,18 @@ static struct unw_addr_space local_addr_space; - PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; - - static inline void * --uc_addr (ucontext_t *uc, int reg) -+uc_addr (unw_tdep_context_t *uc, int reg) - { -- void *addr; -- -- switch (reg) -- { -- case UNW_ARM_R0: addr = &uc->uc_mcontext.arm_r0; break; -- case UNW_ARM_R1: addr = &uc->uc_mcontext.arm_r1; break; -- case UNW_ARM_R2: addr = &uc->uc_mcontext.arm_r2; break; -- case UNW_ARM_R3: addr = &uc->uc_mcontext.arm_r3; break; -- case UNW_ARM_R4: addr = &uc->uc_mcontext.arm_r4; break; -- case UNW_ARM_R5: addr = &uc->uc_mcontext.arm_r5; break; -- case UNW_ARM_R6: addr = &uc->uc_mcontext.arm_r6; break; -- case UNW_ARM_R7: addr = &uc->uc_mcontext.arm_r7; break; -- case UNW_ARM_R8: addr = &uc->uc_mcontext.arm_r8; break; -- case UNW_ARM_R9: addr = &uc->uc_mcontext.arm_r9; break; -- case UNW_ARM_R10: addr = &uc->uc_mcontext.arm_r10; break; -- case UNW_ARM_R11: addr = &uc->uc_mcontext.arm_fp; break; -- case UNW_ARM_R12: addr = &uc->uc_mcontext.arm_ip; break; -- case UNW_ARM_R13: addr = &uc->uc_mcontext.arm_sp; break; -- case UNW_ARM_R14: addr = &uc->uc_mcontext.arm_lr; break; -- case UNW_ARM_R15: addr = &uc->uc_mcontext.arm_pc; break; -- -- default: -- addr = NULL; -- } -- return addr; -+ if (reg >= UNW_ARM_R0 && reg < UNW_ARM_R0 + 16) -+ return &uc->regs[reg - UNW_ARM_R0]; -+ else -+ return NULL; - } - - # ifdef UNW_LOCAL_ONLY - - HIDDEN void * --tdep_uc_addr (ucontext_t *uc, int reg) -+tdep_uc_addr (unw_tdep_context_t *uc, int reg) - { - return uc_addr (uc, reg); - } -@@ -85,23 +64,67 @@ HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - unwind-table entry. Perhaps something similar can be done with - DWARF2 unwind info. */ - --static void --put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) -+static int -+get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -+ void *arg) - { -- /* it's a no-op */ -+ *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+ return 0; - } - -+#define PAGE_SIZE 4096 -+#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1)) -+ -+/* Cache of already validated addresses */ -+#define NLGA 4 -+static unw_word_t last_good_addr[NLGA]; -+static int lga_victim; -+ - static int --get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -- void *arg) -+validate_mem (unw_word_t addr) - { -- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+ int i, victim; -+ size_t len; -+ -+ if (PAGE_START(addr + sizeof (unw_word_t) - 1) == PAGE_START(addr)) -+ len = PAGE_SIZE; -+ else -+ len = PAGE_SIZE * 2; -+ -+ addr = PAGE_START(addr); -+ -+ if (addr == 0) -+ return -1; -+ -+ for (i = 0; i < NLGA; i++) -+ { -+ if (last_good_addr[i] && (addr == last_good_addr[i])) -+ return 0; -+ } -+ -+ if (msync ((void *) addr, len, MS_ASYNC) == -1) -+ return -1; -+ -+ victim = lga_victim; -+ for (i = 0; i < NLGA; i++) { -+ if (!last_good_addr[victim]) { -+ last_good_addr[victim++] = addr; -+ return 0; -+ } -+ victim = (victim + 1) % NLGA; -+ } -+ -+ /* All slots full. Evict the victim. */ -+ last_good_addr[victim] = addr; -+ victim = (victim + 1) % NLGA; -+ lga_victim = victim; -+ - return 0; - } - - static int - access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - if (write) - { -@@ -110,6 +133,11 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - } - else - { -+ /* validate address */ -+ const struct cursor *c = (const struct cursor *) arg; -+ if (c && validate_mem(addr)) -+ return -1; -+ - *val = *(unw_word_t *) addr; - Debug (16, "mem[%x] -> %x\n", addr, *val); - } -@@ -118,10 +146,10 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - unw_word_t *addr; -- ucontext_t *uc = arg; -+ unw_tdep_context_t *uc = arg; - - if (unw_is_fpreg (reg)) - goto badreg; -@@ -149,9 +177,9 @@ Debug (16, "reg = %s\n", unw_regname (reg)); - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { -- ucontext_t *uc = arg; -+ unw_tdep_context_t *uc = arg; - unw_fpreg_t *addr; - - if (!unw_is_fpreg (reg)) -@@ -163,14 +191,14 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - if (write) - { - Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), -- ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); - *(unw_fpreg_t *) addr = *val; - } - else - { - *val = *(unw_fpreg_t *) addr; - Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), -- ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); - } - return 0; - -@@ -182,8 +210,8 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - - static int - get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, -- void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) - { - return _Uelf32_get_proc_name (as, getpid (), ip, buf, buf_len, offp); - } -@@ -193,13 +221,13 @@ arm_local_addr_space_init (void) - { - memset (&local_addr_space, 0, sizeof (local_addr_space)); - local_addr_space.caching_policy = UNW_CACHE_GLOBAL; -- local_addr_space.acc.find_proc_info = dwarf_find_proc_info; -- local_addr_space.acc.put_unwind_info = put_unwind_info; -+ local_addr_space.acc.find_proc_info = arm_find_proc_info; -+ local_addr_space.acc.put_unwind_info = arm_put_unwind_info; - local_addr_space.acc.get_dyn_info_list_addr = get_dyn_info_list_addr; - local_addr_space.acc.access_mem = access_mem; - local_addr_space.acc.access_reg = access_reg; - local_addr_space.acc.access_fpreg = access_fpreg; -- local_addr_space.acc.resume = 0; /* arm_local_resume? FIXME! */ -+ local_addr_space.acc.resume = arm_local_resume; - local_addr_space.acc.get_proc_name = get_static_proc_name; - unw_flush_cache (&local_addr_space, 0, 0); - } -diff --git a/frysk-imports/libunwind/src/arm/Ginit_local.c b/frysk-imports/libunwind/src/arm/Ginit_local.c -index 7b2881e..e1cc30c 100644 ---- a/frysk-imports/libunwind/src/arm/Ginit_local.c -+++ b/frysk-imports/libunwind/src/arm/Ginit_local.c -@@ -1,5 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2008 CodeSourcery -+ Copyright 2011 Linaro Limited - - This file is part of libunwind. - -@@ -28,7 +29,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifdef UNW_REMOTE_ONLY - - PROTECTED int --unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) -+unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) - { - return -UNW_EINVAL; - } -@@ -36,18 +37,19 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) - #else /* !UNW_REMOTE_ONLY */ - - PROTECTED int --unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) -+unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) - { - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = unw_local_addr_space; - c->dwarf.as_arg = uc; -- return common_init (c); -+ -+ return common_init (c, 1); - } - - #endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/arm/Ginit_remote.c b/frysk-imports/libunwind/src/arm/Ginit_remote.c -index 3baf3f6..f284e99 100644 ---- a/frysk-imports/libunwind/src/arm/Ginit_remote.c -+++ b/frysk-imports/libunwind/src/arm/Ginit_remote.c -@@ -33,13 +33,13 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) - #else /* !UNW_LOCAL_ONLY */ - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = as; - c->dwarf.as_arg = as_arg; -- return common_init (c); -+ return common_init (c, 0); - #endif /* !UNW_LOCAL_ONLY */ - } -diff --git a/frysk-imports/libunwind/src/arm/Gis_signal_frame.c b/frysk-imports/libunwind/src/arm/Gis_signal_frame.c -index 77548d5..e8efe7f 100644 ---- a/frysk-imports/libunwind/src/arm/Gis_signal_frame.c -+++ b/frysk-imports/libunwind/src/arm/Gis_signal_frame.c -@@ -1,5 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2008 CodeSourcery -+ Copyright 2011 Linaro Limited - - This file is part of libunwind. - -@@ -25,11 +26,62 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - #include "unwind_i.h" - --/* FIXME for ARM. */ -+#ifdef __linux__ -+#define ARM_NR_sigreturn 119 -+#define ARM_NR_rt_sigreturn 173 -+#define ARM_NR_OABI_SYSCALL_BASE 0x900000 - -+/* ARM EABI sigreturn (the syscall number is loaded into r7) */ -+#define MOV_R7_SIGRETURN (0xe3a07000UL | ARM_NR_sigreturn) -+#define MOV_R7_RT_SIGRETURN (0xe3a07000UL | ARM_NR_rt_sigreturn) -+ -+/* ARM OABI sigreturn (using SWI) */ -+#define ARM_SIGRETURN \ -+ (0xef000000UL | ARM_NR_sigreturn | ARM_NR_OABI_SYSCALL_BASE) -+#define ARM_RT_SIGRETURN \ -+ (0xef000000UL | ARM_NR_rt_sigreturn | ARM_NR_OABI_SYSCALL_BASE) -+ -+/* Thumb sigreturn (two insns, syscall number is loaded into r7) */ -+#define THUMB_SIGRETURN (0xdf00UL << 16 | 0x2700 | ARM_NR_sigreturn) -+#define THUMB_RT_SIGRETURN (0xdf00UL << 16 | 0x2700 | ARM_NR_rt_sigreturn) -+#endif /* __linux__ */ -+ -+/* Returns 1 in case of a non-RT signal frame and 2 in case of a RT signal -+ frame. */ - PROTECTED int - unw_is_signal_frame (unw_cursor_t *cursor) - { -+#ifdef __linux__ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t w0, ip; -+ unw_addr_space_t as; -+ unw_accessors_t *a; -+ void *arg; -+ int ret; -+ -+ as = c->dwarf.as; -+ a = unw_get_accessors (as); -+ arg = c->dwarf.as_arg; -+ -+ ip = c->dwarf.ip; -+ -+ if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0) -+ return ret; -+ -+ /* Return 1 if the IP points to a non-RT sigreturn sequence. */ -+ if (w0 == MOV_R7_SIGRETURN || w0 == ARM_SIGRETURN || w0 == THUMB_SIGRETURN) -+ return 1; -+ /* Return 2 if the IP points to a RT sigreturn sequence. */ -+ else if (w0 == MOV_R7_RT_SIGRETURN || w0 == ARM_RT_SIGRETURN -+ || w0 == THUMB_RT_SIGRETURN) -+ return 2; -+ -+ return 0; -+#elif defined(__QNX__) -+ /* Not supported yet */ -+ return 0; -+#else - printf ("%s: implement me\n", __FUNCTION__); - return -UNW_ENOINFO; -+#endif - } -diff --git a/frysk-imports/libunwind/src/arm/Gregs.c b/frysk-imports/libunwind/src/arm/Gregs.c -index 1546f58..688771f 100644 ---- a/frysk-imports/libunwind/src/arm/Gregs.c -+++ b/frysk-imports/libunwind/src/arm/Gregs.c -@@ -26,7 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN int - tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -- int write) -+ int write) - { - dwarf_loc_t loc = DWARF_NULL_LOC; - -@@ -45,12 +45,12 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - case UNW_ARM_R10: - case UNW_ARM_R11: - case UNW_ARM_R12: -- case UNW_ARM_R13: - case UNW_ARM_R14: - case UNW_ARM_R15: - loc = c->dwarf.loc[reg - UNW_ARM_R0]; - break; - -+ case UNW_ARM_R13: - case UNW_ARM_CFA: - if (write) - return -UNW_EREADONLYREG; -@@ -74,7 +74,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - HIDDEN int - tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -- int write) -+ int write) - { - Debug (1, "bad register number %u\n", reg); - return -UNW_EBADREG; -diff --git a/frysk-imports/libunwind/src/arm/Gresume.c b/frysk-imports/libunwind/src/arm/Gresume.c -index 4db1738..9fe264e 100644 ---- a/frysk-imports/libunwind/src/arm/Gresume.c -+++ b/frysk-imports/libunwind/src/arm/Gresume.c -@@ -1,5 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2008 CodeSourcery -+ Copyright 2011 Linaro Limited -+ Copyright (C) 2012 Tommi Rantala - - This file is part of libunwind. - -@@ -22,24 +24,131 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --/* FIXME for ARM. */ -- --#include -- - #include "unwind_i.h" -+#include "offsets.h" - - #ifndef UNW_REMOTE_ONLY - - HIDDEN inline int - arm_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - { -+#ifdef __linux__ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_tdep_context_t *uc = c->dwarf.as_arg; -+ -+ if (c->sigcontext_format == ARM_SCF_NONE) -+ { -+ /* Since there are no signals involved here we restore the non scratch -+ registers only. */ -+ unsigned long regs[10]; -+ regs[0] = uc->regs[4]; -+ regs[1] = uc->regs[5]; -+ regs[2] = uc->regs[6]; -+ regs[3] = uc->regs[7]; -+ regs[4] = uc->regs[8]; -+ regs[5] = uc->regs[9]; -+ regs[6] = uc->regs[10]; -+ regs[7] = uc->regs[11]; /* FP */ -+ regs[8] = uc->regs[13]; /* SP */ -+ regs[9] = uc->regs[14]; /* LR */ -+ -+ struct regs_overlay { -+ char x[sizeof(regs)]; -+ }; -+ -+ asm __volatile__ ( -+ "ldmia %0, {r4-r12, lr}\n" -+ "mov sp, r12\n" -+ "bx lr\n" -+ : : "r" (regs), -+ "m" (*(struct regs_overlay *)regs) -+ ); -+ } -+ else -+ { -+ /* In case a signal frame is involved, we're using its trampoline which -+ calls sigreturn. */ -+ struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; -+ sc->arm_r0 = uc->regs[0]; -+ sc->arm_r1 = uc->regs[1]; -+ sc->arm_r2 = uc->regs[2]; -+ sc->arm_r3 = uc->regs[3]; -+ sc->arm_r4 = uc->regs[4]; -+ sc->arm_r5 = uc->regs[5]; -+ sc->arm_r6 = uc->regs[6]; -+ sc->arm_r7 = uc->regs[7]; -+ sc->arm_r8 = uc->regs[8]; -+ sc->arm_r9 = uc->regs[9]; -+ sc->arm_r10 = uc->regs[10]; -+ sc->arm_fp = uc->regs[11]; /* FP */ -+ sc->arm_ip = uc->regs[12]; /* IP */ -+ sc->arm_sp = uc->regs[13]; /* SP */ -+ sc->arm_lr = uc->regs[14]; /* LR */ -+ sc->arm_pc = uc->regs[15]; /* PC */ -+ /* clear the ITSTATE bits. */ -+ sc->arm_cpsr &= 0xf9ff03ffUL; -+ -+ /* Set the SP and the PC in order to continue execution at the modified -+ trampoline which restores the signal mask and the registers. */ -+ asm __volatile__ ( -+ "mov sp, %0\n" -+ "bx %1\n" -+ : : "r" (c->sigcontext_sp), "r" (c->sigcontext_pc) -+ ); -+ } -+ unreachable(); -+#else -+ printf ("%s: implement me\n", __FUNCTION__); -+#endif - return -UNW_EINVAL; - } - - #endif /* !UNW_REMOTE_ONLY */ - -+static inline void -+establish_machine_state (struct cursor *c) -+{ -+ unw_addr_space_t as = c->dwarf.as; -+ void *arg = c->dwarf.as_arg; -+ unw_fpreg_t fpval; -+ unw_word_t val; -+ int reg; -+ -+ Debug (8, "copying out cursor state\n"); -+ -+ for (reg = 0; reg <= UNW_REG_LAST; ++reg) -+ { -+ Debug (16, "copying %s %d\n", unw_regname (reg), reg); -+ if (unw_is_fpreg (reg)) -+ { -+ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -+ as->acc.access_fpreg (as, reg, &fpval, 1, arg); -+ } -+ else -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ as->acc.access_reg (as, reg, &val, 1, arg); -+ } -+ } -+} -+ - PROTECTED int - unw_resume (unw_cursor_t *cursor) - { -- return -UNW_EINVAL; -+ struct cursor *c = (struct cursor *) cursor; -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ if (!c->dwarf.ip) -+ { -+ /* This can happen easily when the frame-chain gets truncated -+ due to bad or missing unwind-info. */ -+ Debug (1, "refusing to resume execution at address 0\n"); -+ return -UNW_EINVAL; -+ } -+ -+ establish_machine_state (c); -+ -+ return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -+ c->dwarf.as_arg); - } -diff --git a/frysk-imports/libunwind/src/arm/Gstash_frame.c b/frysk-imports/libunwind/src/arm/Gstash_frame.c -new file mode 100644 -index 0000000..2cce409 ---- /dev/null -+++ b/frysk-imports/libunwind/src/arm/Gstash_frame.c -@@ -0,0 +1,90 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010, 2011 by FERMI NATIONAL ACCELERATOR LABORATORY -+ Copyright (C) 2014 CERN and Aalto University -+ Contributed by Filip Nyback -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+HIDDEN void -+tdep_stash_frame (struct dwarf_cursor *d, struct dwarf_reg_state *rs) -+{ -+ struct cursor *c = (struct cursor *) dwarf_to_cursor (d); -+ unw_tdep_frame_t *f = &c->frame_info; -+ -+ Debug (4, "ip=0x%x cfa=0x%x type %d cfa [where=%d val=%d] cfaoff=%d" -+ " ra=0x%x r7 [where=%d val=%d @0x%x] lr [where=%d val=%d @0x%x] " -+ "sp [where=%d val=%d @0x%x]\n", -+ d->ip, d->cfa, f->frame_type, -+ rs->reg[DWARF_CFA_REG_COLUMN].where, -+ rs->reg[DWARF_CFA_REG_COLUMN].val, -+ rs->reg[DWARF_CFA_OFF_COLUMN].val, -+ DWARF_GET_LOC(d->loc[d->ret_addr_column]), -+ rs->reg[R7].where, rs->reg[R7].val, DWARF_GET_LOC(d->loc[R7]), -+ rs->reg[LR].where, rs->reg[LR].val, DWARF_GET_LOC(d->loc[LR]), -+ rs->reg[SP].where, rs->reg[SP].val, DWARF_GET_LOC(d->loc[SP])); -+ -+ /* A standard frame is defined as: -+ - CFA is register-relative offset off R7 or SP; -+ - Return address is saved in LR; -+ - R7 is unsaved or saved at CFA+offset, offset != -1; -+ - LR is unsaved or saved at CFA+offset, offset != -1; -+ - SP is unsaved or saved at CFA+offset, offset != -1. */ -+ if (f->frame_type == UNW_ARM_FRAME_OTHER -+ && (rs->reg[DWARF_CFA_REG_COLUMN].where == DWARF_WHERE_REG) -+ && (rs->reg[DWARF_CFA_REG_COLUMN].val == R7 -+ || rs->reg[DWARF_CFA_REG_COLUMN].val == SP) -+ && labs(rs->reg[DWARF_CFA_OFF_COLUMN].val) < (1 << 29) -+ && d->ret_addr_column == LR -+ && (rs->reg[R7].where == DWARF_WHERE_UNDEF -+ || rs->reg[R7].where == DWARF_WHERE_SAME -+ || (rs->reg[R7].where == DWARF_WHERE_CFAREL -+ && labs(rs->reg[R7].val) < (1 << 29) -+ && rs->reg[R7].val+1 != 0)) -+ && (rs->reg[LR].where == DWARF_WHERE_UNDEF -+ || rs->reg[LR].where == DWARF_WHERE_SAME -+ || (rs->reg[LR].where == DWARF_WHERE_CFAREL -+ && labs(rs->reg[LR].val) < (1 << 29) -+ && rs->reg[LR].val+1 != 0)) -+ && (rs->reg[SP].where == DWARF_WHERE_UNDEF -+ || rs->reg[SP].where == DWARF_WHERE_SAME -+ || (rs->reg[SP].where == DWARF_WHERE_CFAREL -+ && labs(rs->reg[SP].val) < (1 << 29) -+ && rs->reg[SP].val+1 != 0))) -+ { -+ /* Save information for a standard frame. */ -+ f->frame_type = UNW_ARM_FRAME_STANDARD; -+ f->cfa_reg_sp = (rs->reg[DWARF_CFA_REG_COLUMN].val == SP); -+ f->cfa_reg_offset = rs->reg[DWARF_CFA_OFF_COLUMN].val; -+ if (rs->reg[R7].where == DWARF_WHERE_CFAREL) -+ f->r7_cfa_offset = rs->reg[R7].val; -+ if (rs->reg[LR].where == DWARF_WHERE_CFAREL) -+ f->lr_cfa_offset = rs->reg[LR].val; -+ if (rs->reg[SP].where == DWARF_WHERE_CFAREL) -+ f->sp_cfa_offset = rs->reg[SP].val; -+ Debug (4, " standard frame\n"); -+ } -+ else -+ Debug (4, " unusual frame\n"); -+} -+ -diff --git a/frysk-imports/libunwind/src/arm/Gstep.c b/frysk-imports/libunwind/src/arm/Gstep.c -index eff1fde..79f2dd2 100644 ---- a/frysk-imports/libunwind/src/arm/Gstep.c -+++ b/frysk-imports/libunwind/src/arm/Gstep.c -@@ -1,5 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2008 CodeSourcery -+ Copyright 2011 Linaro Limited -+ Copyright (C) 2012 Tommi Rantala - - This file is part of libunwind. - -@@ -24,25 +26,247 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "unwind_i.h" - #include "offsets.h" -+#include "ex_tables.h" -+ -+#include -+ -+#define arm_exidx_step UNW_OBJ(arm_exidx_step) -+ -+static inline int -+arm_exidx_step (struct cursor *c) -+{ -+ unw_word_t old_ip, old_cfa; -+ uint8_t buf[32]; -+ int ret; -+ -+ old_ip = c->dwarf.ip; -+ old_cfa = c->dwarf.cfa; -+ -+ /* mark PC unsaved */ -+ c->dwarf.loc[UNW_ARM_R15] = DWARF_NULL_LOC; -+ -+ if ((ret = tdep_find_proc_info (&c->dwarf, c->dwarf.ip, 1)) < 0) -+ return ret; -+ -+ if (c->dwarf.pi.format != UNW_INFO_FORMAT_ARM_EXIDX) -+ return -UNW_ENOINFO; -+ -+ ret = arm_exidx_extract (&c->dwarf, buf); -+ if (ret == -UNW_ESTOPUNWIND) -+ return 0; -+ else if (ret < 0) -+ return ret; -+ -+ ret = arm_exidx_decode (buf, ret, &c->dwarf); -+ if (ret < 0) -+ return ret; -+ -+ if (c->dwarf.ip == old_ip && c->dwarf.cfa == old_cfa) -+ { -+ Dprintf ("%s: ip and cfa unchanged; stopping here (ip=0x%lx)\n", -+ __FUNCTION__, (long) c->dwarf.ip); -+ return -UNW_EBADFRAME; -+ } -+ -+ c->dwarf.pi_valid = 0; -+ -+ return (c->dwarf.ip == 0) ? 0 : 1; -+} - - PROTECTED int --unw_step (unw_cursor_t *cursor) -+unw_handle_signal_frame (unw_cursor_t *cursor) - { - struct cursor *c = (struct cursor *) cursor; - int ret; -+ unw_word_t sc_addr, sp, sp_addr = c->dwarf.cfa; -+ struct dwarf_loc sp_loc = DWARF_LOC (sp_addr, 0); -+ -+ if ((ret = dwarf_get (&c->dwarf, sp_loc, &sp)) < 0) -+ return -UNW_EUNSPEC; -+ -+ /* Obtain signal frame type (non-RT or RT). */ -+ ret = unw_is_signal_frame (cursor); -+ -+ /* Save the SP and PC to be able to return execution at this point -+ later in time (unw_resume). */ -+ c->sigcontext_sp = c->dwarf.cfa; -+ c->sigcontext_pc = c->dwarf.ip; -+ -+ /* Since kernel version 2.6.18 the non-RT signal frame starts with a -+ ucontext while the RT signal frame starts with a siginfo, followed -+ by a sigframe whose first element is an ucontext. -+ Prior 2.6.18 the non-RT signal frame starts with a sigcontext while -+ the RT signal frame starts with two pointers followed by a siginfo -+ and an ucontext. The first pointer points to the start of the siginfo -+ structure and the second one to the ucontext structure. */ -+ -+ if (ret == 1) -+ { -+ /* Handle non-RT signal frames. Check if the first word on the stack -+ is the magic number. */ -+ if (sp == 0x5ac3c35a) -+ { -+ c->sigcontext_format = ARM_SCF_LINUX_SIGFRAME; -+ sc_addr = sp_addr + LINUX_UC_MCONTEXT_OFF; -+ } -+ else -+ { -+ c->sigcontext_format = ARM_SCF_LINUX_OLD_SIGFRAME; -+ sc_addr = sp_addr; -+ } -+ } -+ else if (ret == 2) -+ { -+ /* Handle RT signal frames. Check if the first word on the stack is a -+ pointer to the siginfo structure. */ -+ if (sp == sp_addr + 8) -+ { -+ c->sigcontext_format = ARM_SCF_LINUX_OLD_RT_SIGFRAME; -+ sc_addr = sp_addr + 8 + sizeof (siginfo_t) + LINUX_UC_MCONTEXT_OFF; -+ } -+ else -+ { -+ c->sigcontext_format = ARM_SCF_LINUX_RT_SIGFRAME; -+ sc_addr = sp_addr + sizeof (siginfo_t) + LINUX_UC_MCONTEXT_OFF; -+ } -+ } -+ else -+ return -UNW_EUNSPEC; -+ -+ c->sigcontext_addr = sc_addr; -+ c->frame_info.frame_type = UNW_ARM_FRAME_SIGRETURN; -+ c->frame_info.cfa_reg_offset = sc_addr - sp_addr; -+ -+ /* Update the dwarf cursor. -+ Set the location of the registers to the corresponding addresses of the -+ uc_mcontext / sigcontext structure contents. */ -+ c->dwarf.loc[UNW_ARM_R0] = DWARF_LOC (sc_addr + LINUX_SC_R0_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R1] = DWARF_LOC (sc_addr + LINUX_SC_R1_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R2] = DWARF_LOC (sc_addr + LINUX_SC_R2_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R3] = DWARF_LOC (sc_addr + LINUX_SC_R3_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R4] = DWARF_LOC (sc_addr + LINUX_SC_R4_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R5] = DWARF_LOC (sc_addr + LINUX_SC_R5_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R6] = DWARF_LOC (sc_addr + LINUX_SC_R6_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R7] = DWARF_LOC (sc_addr + LINUX_SC_R7_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R8] = DWARF_LOC (sc_addr + LINUX_SC_R8_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R9] = DWARF_LOC (sc_addr + LINUX_SC_R9_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R10] = DWARF_LOC (sc_addr + LINUX_SC_R10_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R11] = DWARF_LOC (sc_addr + LINUX_SC_FP_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R12] = DWARF_LOC (sc_addr + LINUX_SC_IP_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R13] = DWARF_LOC (sc_addr + LINUX_SC_SP_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R14] = DWARF_LOC (sc_addr + LINUX_SC_LR_OFF, 0); -+ c->dwarf.loc[UNW_ARM_R15] = DWARF_LOC (sc_addr + LINUX_SC_PC_OFF, 0); -+ -+ /* Set SP/CFA and PC/IP. */ -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_ARM_R13], &c->dwarf.cfa); -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_ARM_R15], &c->dwarf.ip); -+ -+ c->dwarf.pi_valid = 0; -+ -+ return 1; -+} -+ -+PROTECTED int -+unw_step (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret = -UNW_EUNSPEC; - - Debug (1, "(cursor=%p)\n", c); - -- /* Try DWARF-based unwinding... this is the only method likely to work for -- ARM. */ -- ret = dwarf_step (&c->dwarf); -+ /* Check if this is a signal frame. */ -+ if (unw_is_signal_frame (cursor)) -+ return unw_handle_signal_frame (cursor); - -- if (unlikely (ret == -UNW_ESTOPUNWIND)) -- return ret; -+#ifdef CONFIG_DEBUG_FRAME -+ /* First, try DWARF-based unwinding. */ -+ if (UNW_TRY_METHOD(UNW_ARM_METHOD_DWARF)) -+ { -+ ret = dwarf_step (&c->dwarf); -+ Debug(1, "dwarf_step()=%d\n", ret); - -- /* Dwarf unwinding didn't work, stop. */ -- if (unlikely (ret < 0)) -- return 0; -+ if (likely (ret > 0)) -+ return 1; -+ else if (unlikely (ret == -UNW_ESTOPUNWIND)) -+ return ret; - -- return (c->dwarf.ip == 0) ? 0 : 1; -+ if (ret < 0 && ret != -UNW_ENOINFO) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ } -+#endif /* CONFIG_DEBUG_FRAME */ -+ -+ /* Next, try extbl-based unwinding. */ -+ if (UNW_TRY_METHOD (UNW_ARM_METHOD_EXIDX)) -+ { -+ ret = arm_exidx_step (c); -+ if (ret > 0) -+ return 1; -+ if (ret == -UNW_ESTOPUNWIND || ret == 0) -+ return ret; -+ } -+ -+ /* Fall back on APCS frame parsing. -+ Note: This won't work in case the ARM EABI is used. */ -+ if (unlikely (ret < 0)) -+ { -+ if (UNW_TRY_METHOD(UNW_ARM_METHOD_FRAME)) -+ { -+ ret = UNW_ESUCCESS; -+ /* DWARF unwinding failed, try to follow APCS/optimized APCS frame chain */ -+ unw_word_t instr, i; -+ Debug (13, "dwarf_step() failed (ret=%d), trying frame-chain\n", ret); -+ dwarf_loc_t ip_loc, fp_loc; -+ unw_word_t frame; -+ /* Mark all registers unsaved, since we don't know where -+ they are saved (if at all), except for the EBP and -+ EIP. */ -+ if (dwarf_get(&c->dwarf, c->dwarf.loc[UNW_ARM_R11], &frame) < 0) -+ { -+ return 0; -+ } -+ for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) { -+ c->dwarf.loc[i] = DWARF_NULL_LOC; -+ } -+ if (frame) -+ { -+ if (dwarf_get(&c->dwarf, DWARF_LOC(frame, 0), &instr) < 0) -+ { -+ return 0; -+ } -+ instr -= 8; -+ if (dwarf_get(&c->dwarf, DWARF_LOC(instr, 0), &instr) < 0) -+ { -+ return 0; -+ } -+ if ((instr & 0xFFFFD800) == 0xE92DD800) -+ { -+ /* Standard APCS frame. */ -+ ip_loc = DWARF_LOC(frame - 4, 0); -+ fp_loc = DWARF_LOC(frame - 12, 0); -+ } -+ else -+ { -+ /* Codesourcery optimized normal frame. */ -+ ip_loc = DWARF_LOC(frame, 0); -+ fp_loc = DWARF_LOC(frame - 4, 0); -+ } -+ if (dwarf_get(&c->dwarf, ip_loc, &c->dwarf.ip) < 0) -+ { -+ return 0; -+ } -+ c->dwarf.loc[UNW_ARM_R12] = ip_loc; -+ c->dwarf.loc[UNW_ARM_R11] = fp_loc; -+ c->dwarf.pi_valid = 0; -+ Debug(15, "ip=%lx\n", c->dwarf.ip); -+ } -+ else -+ { -+ ret = -UNW_ENOINFO; -+ } -+ } -+ } -+ return ret == -UNW_ENOINFO ? 0 : 1; - } -diff --git a/frysk-imports/libunwind/src/arm/Gtrace.c b/frysk-imports/libunwind/src/arm/Gtrace.c -new file mode 100644 -index 0000000..135563a ---- /dev/null -+++ b/frysk-imports/libunwind/src/arm/Gtrace.c -@@ -0,0 +1,550 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010, 2011 by FERMI NATIONAL ACCELERATOR LABORATORY -+ Copyright (C) 2014 CERN and Aalto University -+ Contributed by Filip Nyback -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+#include -+#include -+ -+#pragma weak pthread_once -+#pragma weak pthread_key_create -+#pragma weak pthread_getspecific -+#pragma weak pthread_setspecific -+ -+/* Initial hash table size. Table expands by 2 bits (times four). */ -+#define HASH_MIN_BITS 14 -+ -+typedef struct -+{ -+ unw_tdep_frame_t *frames; -+ size_t log_size; -+ size_t used; -+ size_t dtor_count; /* Counts how many times our destructor has already -+ been called. */ -+} unw_trace_cache_t; -+ -+static const unw_tdep_frame_t empty_frame = { 0, UNW_ARM_FRAME_OTHER, -1, -1, 0, -1, -1, -1 }; -+static define_lock (trace_init_lock); -+static pthread_once_t trace_cache_once = PTHREAD_ONCE_INIT; -+static sig_atomic_t trace_cache_once_happen; -+static pthread_key_t trace_cache_key; -+static struct mempool trace_cache_pool; -+static __thread unw_trace_cache_t *tls_cache; -+static __thread int tls_cache_destroyed; -+ -+/* Free memory for a thread's trace cache. */ -+static void -+trace_cache_free (void *arg) -+{ -+ unw_trace_cache_t *cache = arg; -+ if (++cache->dtor_count < PTHREAD_DESTRUCTOR_ITERATIONS) -+ { -+ /* Not yet our turn to get destroyed. Re-install ourselves into the key. */ -+ pthread_setspecific(trace_cache_key, cache); -+ Debug(5, "delayed freeing cache %p (%zx to go)\n", cache, -+ PTHREAD_DESTRUCTOR_ITERATIONS - cache->dtor_count); -+ return; -+ } -+ tls_cache_destroyed = 1; -+ tls_cache = NULL; -+ munmap (cache->frames, (1u << cache->log_size) * sizeof(unw_tdep_frame_t)); -+ mempool_free (&trace_cache_pool, cache); -+ Debug(5, "freed cache %p\n", cache); -+} -+ -+/* Initialise frame tracing for threaded use. */ -+static void -+trace_cache_init_once (void) -+{ -+ pthread_key_create (&trace_cache_key, &trace_cache_free); -+ mempool_init (&trace_cache_pool, sizeof (unw_trace_cache_t), 0); -+ trace_cache_once_happen = 1; -+} -+ -+static unw_tdep_frame_t * -+trace_cache_buckets (size_t n) -+{ -+ unw_tdep_frame_t *frames; -+ size_t i; -+ -+ GET_MEMORY(frames, n * sizeof (unw_tdep_frame_t)); -+ if (likely(frames != NULL)) -+ for (i = 0; i < n; ++i) -+ frames[i] = empty_frame; -+ -+ return frames; -+} -+ -+/* Allocate and initialise hash table for frame cache lookups. -+ Returns the cache initialised with (1u << HASH_LOW_BITS) hash -+ buckets, or NULL if there was a memory allocation problem. */ -+static unw_trace_cache_t * -+trace_cache_create (void) -+{ -+ unw_trace_cache_t *cache; -+ -+ if (tls_cache_destroyed) -+ { -+ /* The current thread is in the process of exiting. Don't recreate -+ cache, as we wouldn't have another chance to free it. */ -+ Debug(5, "refusing to reallocate cache: " -+ "thread-locals are being deallocated\n"); -+ return NULL; -+ } -+ -+ if (! (cache = mempool_alloc(&trace_cache_pool))) -+ { -+ Debug(5, "failed to allocate cache\n"); -+ return NULL; -+ } -+ -+ if (! (cache->frames = trace_cache_buckets(1u << HASH_MIN_BITS))) -+ { -+ Debug(5, "failed to allocate buckets\n"); -+ mempool_free(&trace_cache_pool, cache); -+ return NULL; -+ } -+ -+ cache->log_size = HASH_MIN_BITS; -+ cache->used = 0; -+ cache->dtor_count = 0; -+ tls_cache_destroyed = 0; /* Paranoia: should already be 0. */ -+ Debug(5, "allocated cache %p\n", cache); -+ return cache; -+} -+ -+/* Expand the hash table in the frame cache if possible. This always -+ quadruples the hash size, and clears all previous frame entries. */ -+static int -+trace_cache_expand (unw_trace_cache_t *cache) -+{ -+ size_t old_size = (1u << cache->log_size); -+ size_t new_log_size = cache->log_size + 2; -+ unw_tdep_frame_t *new_frames = trace_cache_buckets (1u << new_log_size); -+ -+ if (unlikely(! new_frames)) -+ { -+ Debug(5, "failed to expand cache to 2^%u buckets\n", new_log_size); -+ return -UNW_ENOMEM; -+ } -+ -+ Debug(5, "expanded cache from 2^%u to 2^%u buckets\n", cache->log_size, -+ new_log_size); -+ munmap(cache->frames, old_size * sizeof(unw_tdep_frame_t)); -+ cache->frames = new_frames; -+ cache->log_size = new_log_size; -+ cache->used = 0; -+ return 0; -+} -+ -+static unw_trace_cache_t * -+trace_cache_get_unthreaded (void) -+{ -+ unw_trace_cache_t *cache; -+ intrmask_t saved_mask; -+ static unw_trace_cache_t *global_cache = NULL; -+ lock_acquire (&trace_init_lock, saved_mask); -+ if (! global_cache) -+ { -+ mempool_init (&trace_cache_pool, sizeof (unw_trace_cache_t), 0); -+ global_cache = trace_cache_create (); -+ } -+ cache = global_cache; -+ lock_release (&trace_init_lock, saved_mask); -+ Debug(5, "using cache %p\n", cache); -+ return cache; -+} -+ -+/* Get the frame cache for the current thread. Create it if there is none. */ -+static unw_trace_cache_t * -+trace_cache_get (void) -+{ -+ unw_trace_cache_t *cache; -+ if (likely (pthread_once != NULL)) -+ { -+ pthread_once(&trace_cache_once, &trace_cache_init_once); -+ if (!trace_cache_once_happen) -+ { -+ return trace_cache_get_unthreaded(); -+ } -+ if (! (cache = tls_cache)) -+ { -+ cache = trace_cache_create(); -+ pthread_setspecific(trace_cache_key, cache); -+ tls_cache = cache; -+ } -+ Debug(5, "using cache %p\n", cache); -+ return cache; -+ } -+ else -+ { -+ return trace_cache_get_unthreaded(); -+ } -+} -+ -+/* Initialise frame properties for address cache slot F at address -+ PC using current CFA, R7 and SP values. Modifies CURSOR to -+ that location, performs one unw_step(), and fills F with what -+ was discovered about the location. Returns F. -+ -+ FIXME: This probably should tell DWARF handling to never evaluate -+ or use registers other than R7, SP and PC in case there is -+ highly unusual unwind info which uses these creatively. */ -+static unw_tdep_frame_t * -+trace_init_addr (unw_tdep_frame_t *f, -+ unw_cursor_t *cursor, -+ unw_word_t cfa, -+ unw_word_t pc, -+ unw_word_t r7, -+ unw_word_t sp) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ struct dwarf_cursor *d = &c->dwarf; -+ int ret = -UNW_EINVAL; -+ -+ /* Initialise frame properties: unknown, not last. */ -+ f->virtual_address = pc; -+ f->frame_type = UNW_ARM_FRAME_OTHER; -+ f->last_frame = 0; -+ f->cfa_reg_sp = -1; -+ f->cfa_reg_offset = 0; -+ f->r7_cfa_offset = -1; -+ f->lr_cfa_offset = -1; -+ f->sp_cfa_offset = -1; -+ -+ /* Reinitialise cursor to this instruction - but undo next/prev RIP -+ adjustment because unw_step will redo it - and force PC, R7 and -+ SP into register locations (=~ ucontext we keep), then set -+ their desired values. Then perform the step. */ -+ d->ip = pc + d->use_prev_instr; -+ d->cfa = cfa; -+ d->loc[UNW_ARM_R7] = DWARF_REG_LOC (d, UNW_ARM_R7); -+ d->loc[UNW_ARM_R13] = DWARF_REG_LOC (d, UNW_ARM_R13); -+ d->loc[UNW_ARM_R15] = DWARF_REG_LOC (d, UNW_ARM_R15); -+ c->frame_info = *f; -+ -+ if (likely(dwarf_put (d, d->loc[UNW_ARM_R7], r7) >= 0) -+ && likely(dwarf_put (d, d->loc[UNW_ARM_R13], sp) >= 0) -+ && likely(dwarf_put (d, d->loc[UNW_ARM_R15], pc) >= 0) -+ && likely((ret = unw_step (cursor)) >= 0)) -+ *f = c->frame_info; -+ -+ /* If unw_step() stopped voluntarily, remember that, even if it -+ otherwise could not determine anything useful. This avoids -+ failing trace if we hit frames without unwind info, which is -+ common for the outermost frame (CRT stuff) on many systems. -+ This avoids failing trace in very common circumstances; failing -+ to unw_step() loop wouldn't produce any better result. */ -+ if (ret == 0) -+ f->last_frame = -1; -+ -+ Debug (3, "frame va %x type %d last %d cfa %s+%d r7 @ cfa%+d lr @ cfa%+d sp @ cfa%+d\n", -+ f->virtual_address, f->frame_type, f->last_frame, -+ f->cfa_reg_sp ? "sp" : "r7", f->cfa_reg_offset, -+ f->r7_cfa_offset, f->lr_cfa_offset, f->sp_cfa_offset); -+ -+ return f; -+} -+ -+/* Look up and if necessary fill in frame attributes for address PC -+ in CACHE using current CFA, R7 and SP values. Uses CURSOR to -+ perform any unwind steps necessary to fill the cache. Returns the -+ frame cache slot which describes RIP. */ -+static unw_tdep_frame_t * -+trace_lookup (unw_cursor_t *cursor, -+ unw_trace_cache_t *cache, -+ unw_word_t cfa, -+ unw_word_t pc, -+ unw_word_t r7, -+ unw_word_t sp) -+{ -+ /* First look up for previously cached information using cache as -+ linear probing hash table with probe step of 1. Majority of -+ lookups should be completed within few steps, but it is very -+ important the hash table does not fill up, or performance falls -+ off the cliff. */ -+ uint32_t i, addr; -+ uint32_t cache_size = 1u << cache->log_size; -+ uint32_t slot = ((pc * 0x9e3779b9) >> 11) & (cache_size-1); -+ unw_tdep_frame_t *frame; -+ -+ for (i = 0; i < 16; ++i) -+ { -+ frame = &cache->frames[slot]; -+ addr = frame->virtual_address; -+ -+ /* Return if we found the address. */ -+ if (likely(addr == pc)) -+ { -+ Debug (4, "found address after %d steps\n", i); -+ return frame; -+ } -+ -+ /* If slot is empty, reuse it. */ -+ if (likely(! addr)) -+ break; -+ -+ /* Linear probe to next slot candidate, step = 1. */ -+ if (++slot >= cache_size) -+ slot -= cache_size; -+ } -+ -+ /* If we collided after 16 steps, or if the hash is more than half -+ full, force the hash to expand. Fill the selected slot, whether -+ it's free or collides. Note that hash expansion drops previous -+ contents; further lookups will refill the hash. */ -+ Debug (4, "updating slot %u after %d steps, replacing 0x%x\n", slot, i, addr); -+ if (unlikely(addr || cache->used >= cache_size / 2)) -+ { -+ if (unlikely(trace_cache_expand (cache) < 0)) -+ return NULL; -+ -+ cache_size = 1u << cache->log_size; -+ slot = ((pc * 0x9e3779b9) >> 11) & (cache_size-1); -+ frame = &cache->frames[slot]; -+ addr = frame->virtual_address; -+ } -+ -+ if (! addr) -+ ++cache->used; -+ -+ return trace_init_addr (frame, cursor, cfa, pc, r7, sp); -+} -+ -+/* Fast stack backtrace for ARM. -+ -+ This is used by backtrace() implementation to accelerate frequent -+ queries for current stack, without any desire to unwind. It fills -+ BUFFER with the call tree from CURSOR upwards for at most SIZE -+ stack levels. The first frame, backtrace itself, is omitted. When -+ called, SIZE should give the maximum number of entries that can be -+ stored into BUFFER. Uses an internal thread-specific cache to -+ accelerate queries. -+ -+ The caller should fall back to a unw_step() loop if this function -+ fails by returning -UNW_ESTOPUNWIND, meaning the routine hit a -+ stack frame that is too complex to be traced in the fast path. -+ -+ This function is tuned for clients which only need to walk the -+ stack to get the call tree as fast as possible but without any -+ other details, for example profilers sampling the stack thousands -+ to millions of times per second. The routine handles the most -+ common ARM ABI stack layouts: CFA is R7 or SP plus/minus -+ constant offset, return address is in LR, and R7, LR and SP are -+ either unchanged or saved on stack at constant offset from the CFA; -+ the signal return frame; and frames without unwind info provided -+ they are at the outermost (final) frame or can conservatively be -+ assumed to be frame-pointer based. -+ -+ Any other stack layout will cause the routine to give up. There -+ are only a handful of relatively rarely used functions which do -+ not have a stack in the standard form: vfork, longjmp, setcontext -+ and _dl_runtime_profile on common linux systems for example. -+ -+ On success BUFFER and *SIZE reflect the trace progress up to *SIZE -+ stack levels or the outermost frame, which ever is less. It may -+ stop short of outermost frame if unw_step() loop would also do so, -+ e.g. if there is no more unwind information; this is not reported -+ as an error. -+ -+ The function returns a negative value for errors, -UNW_ESTOPUNWIND -+ if tracing stopped because of an unusual frame unwind info. The -+ BUFFER and *SIZE reflect tracing progress up to the error frame. -+ -+ Callers of this function would normally look like this: -+ -+ unw_cursor_t cur; -+ unw_context_t ctx; -+ void addrs[128]; -+ int depth = 128; -+ int ret; -+ -+ unw_getcontext(&ctx); -+ unw_init_local(&cur, &ctx); -+ if ((ret = unw_tdep_trace(&cur, addrs, &depth)) < 0) -+ { -+ depth = 0; -+ unw_getcontext(&ctx); -+ unw_init_local(&cur, &ctx); -+ while ((ret = unw_step(&cur)) > 0 && depth < 128) -+ { -+ unw_word_t ip; -+ unw_get_reg(&cur, UNW_REG_IP, &ip); -+ addresses[depth++] = (void *) ip; -+ } -+ } -+*/ -+HIDDEN int -+tdep_trace (unw_cursor_t *cursor, void **buffer, int *size) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ struct dwarf_cursor *d = &c->dwarf; -+ unw_trace_cache_t *cache; -+ unw_word_t sp, pc, cfa, r7, lr; -+ int maxdepth = 0; -+ int depth = 0; -+ int ret; -+ -+ /* Check input parametres. */ -+ if (unlikely(! cursor || ! buffer || ! size || (maxdepth = *size) <= 0)) -+ return -UNW_EINVAL; -+ -+ Debug (1, "begin ip 0x%x cfa 0x%x\n", d->ip, d->cfa); -+ -+ /* Tell core dwarf routines to call back to us. */ -+ d->stash_frames = 1; -+ -+ /* Determine initial register values. These are direct access safe -+ because we know they come from the initial machine context. */ -+ pc = d->ip; -+ sp = cfa = d->cfa; -+ ACCESS_MEM_FAST(ret, 0, d, DWARF_GET_LOC(d->loc[UNW_ARM_R7]), r7); -+ assert(ret == 0); -+ lr = 0; -+ -+ /* Get frame cache. */ -+ if (unlikely(! (cache = trace_cache_get()))) -+ { -+ Debug (1, "returning %d, cannot get trace cache\n", -UNW_ENOMEM); -+ *size = 0; -+ d->stash_frames = 0; -+ return -UNW_ENOMEM; -+ } -+ -+ /* Trace the stack upwards, starting from current PC. Adjust -+ the PC address for previous/next instruction as the main -+ unwinding logic would also do. We undo this before calling -+ back into unw_step(). */ -+ while (depth < maxdepth) -+ { -+ pc -= d->use_prev_instr; -+ Debug (2, "depth %d cfa 0x%x pc 0x%x sp 0x%x r7 0x%x\n", -+ depth, cfa, pc, sp, r7); -+ -+ /* See if we have this address cached. If not, evaluate enough of -+ the dwarf unwind information to fill the cache line data, or to -+ decide this frame cannot be handled in fast trace mode. We -+ cache negative results too to prevent unnecessary dwarf parsing -+ for common failures. */ -+ unw_tdep_frame_t *f = trace_lookup (cursor, cache, cfa, pc, r7, sp); -+ -+ /* If we don't have information for this frame, give up. */ -+ if (unlikely(! f)) -+ { -+ ret = -UNW_ENOINFO; -+ break; -+ } -+ -+ Debug (3, "frame va %x type %d last %d cfa %s+%d r7 @ cfa%+d lr @ cfa%+d sp @ cfa%+d\n", -+ f->virtual_address, f->frame_type, f->last_frame, -+ f->cfa_reg_sp ? "sp" : "r7", f->cfa_reg_offset, -+ f->r7_cfa_offset, f->lr_cfa_offset, f->sp_cfa_offset); -+ -+ assert (f->virtual_address == pc); -+ -+ /* Stop if this was the last frame. In particular don't evaluate -+ new register values as it may not be safe - we don't normally -+ run with full validation on, and do not want to - and there's -+ enough bad unwind info floating around that we need to trust -+ what unw_step() previously said, in potentially bogus frames. */ -+ if (f->last_frame) -+ break; -+ -+ /* Evaluate CFA and registers for the next frame. */ -+ switch (f->frame_type) -+ { -+ case UNW_ARM_FRAME_GUESSED: -+ /* Fall thru to standard processing after forcing validation. */ -+ c->validate = 1; -+ -+ case UNW_ARM_FRAME_STANDARD: -+ /* Advance standard traceable frame. */ -+ cfa = (f->cfa_reg_sp ? sp : r7) + f->cfa_reg_offset; -+ if (likely(f->lr_cfa_offset != -1)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + f->lr_cfa_offset, pc); -+ else if (lr != 0) -+ { -+ /* Use the saved link register as the new pc. */ -+ pc = lr; -+ lr = 0; -+ } -+ if (likely(ret >= 0) && likely(f->r7_cfa_offset != -1)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + f->r7_cfa_offset, r7); -+ -+ /* Don't bother reading SP from DWARF, CFA becomes new SP. */ -+ sp = cfa; -+ -+ /* Next frame needs to back up for unwind info lookup. */ -+ d->use_prev_instr = 1; -+ break; -+ -+ case UNW_ARM_FRAME_SIGRETURN: -+ cfa = cfa + f->cfa_reg_offset; /* cfa now points to ucontext_t. */ -+ -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_PC_OFF, pc); -+ if (likely(ret >= 0)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_R7_OFF, r7); -+ if (likely(ret >= 0)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_SP_OFF, sp); -+ /* Save the link register here in case we end up in a function that -+ doesn't save the link register in the prologue, e.g. kill. */ -+ if (likely(ret >= 0)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + LINUX_SC_LR_OFF, lr); -+ -+ /* Resume stack at signal restoration point. The stack is not -+ necessarily continuous here, especially with sigaltstack(). */ -+ cfa = sp; -+ -+ /* Next frame should not back up. */ -+ d->use_prev_instr = 0; -+ break; -+ -+ default: -+ /* We cannot trace through this frame, give up and tell the -+ caller we had to stop. Data collected so far may still be -+ useful to the caller, so let it know how far we got. */ -+ ret = -UNW_ESTOPUNWIND; -+ break; -+ } -+ -+ Debug (4, "new cfa 0x%x pc 0x%x sp 0x%x r7 0x%x\n", -+ cfa, pc, sp, r7); -+ -+ /* If we failed or ended up somewhere bogus, stop. */ -+ if (unlikely(ret < 0 || pc < 0x4000)) -+ break; -+ -+ /* Record this address in stack trace. We skipped the first address. */ -+ buffer[depth++] = (void *) (pc - d->use_prev_instr); -+ } -+ -+#if UNW_DEBUG -+ Debug (1, "returning %d, depth %d\n", ret, depth); -+#endif -+ *size = depth; -+ return ret; -+} -+ -diff --git a/frysk-imports/libunwind/src/arm/Lex_tables.c b/frysk-imports/libunwind/src/arm/Lex_tables.c -new file mode 100644 -index 0000000..4a4f925 ---- /dev/null -+++ b/frysk-imports/libunwind/src/arm/Lex_tables.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gex_tables.c" -+#endif -diff --git a/frysk-imports/libunwind/src/arm/Lstash_frame.c b/frysk-imports/libunwind/src/arm/Lstash_frame.c -new file mode 100644 -index 0000000..7758780 ---- /dev/null -+++ b/frysk-imports/libunwind/src/arm/Lstash_frame.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gstash_frame.c" -+#endif -diff --git a/frysk-imports/libunwind/src/arm/Ltrace.c b/frysk-imports/libunwind/src/arm/Ltrace.c -new file mode 100644 -index 0000000..24b7b3c ---- /dev/null -+++ b/frysk-imports/libunwind/src/arm/Ltrace.c -@@ -0,0 +1,6 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gtrace.c" -+#endif -+ -diff --git a/frysk-imports/libunwind/src/arm/getcontext.S b/frysk-imports/libunwind/src/arm/getcontext.S -index 3b9abda..c52992b 100644 ---- a/frysk-imports/libunwind/src/arm/getcontext.S -+++ b/frysk-imports/libunwind/src/arm/getcontext.S -@@ -50,3 +50,7 @@ _Uarm_getcontext: - str r1, [r0, #15 * 4] - ldmfd sp!, {r0, r1} - bx lr -+#ifdef __linux__ -+ /* We do not need executable stack. */ -+ .section .note.GNU-stack,"",%progbits -+#endif -diff --git a/frysk-imports/libunwind/src/arm/init.h b/frysk-imports/libunwind/src/arm/init.h -index 5b3f927..6379d8e 100644 ---- a/frysk-imports/libunwind/src/arm/init.h -+++ b/frysk-imports/libunwind/src/arm/init.h -@@ -25,43 +25,50 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - - static inline int --common_init (struct cursor *c) -+common_init (struct cursor *c, unsigned use_prev_instr) - { - int ret, i; - -- c->dwarf.loc[R0] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R0); -- c->dwarf.loc[R1] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R1); -- c->dwarf.loc[R2] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R2); -- c->dwarf.loc[R3] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R3); -- c->dwarf.loc[R4] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R4); -- c->dwarf.loc[R5] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R5); -- c->dwarf.loc[R6] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R6); -- c->dwarf.loc[R7] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R7); -- c->dwarf.loc[R8] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R8); -- c->dwarf.loc[R9] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R9); -- c->dwarf.loc[R10] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R10); -- c->dwarf.loc[R11] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R11); -- c->dwarf.loc[R12] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R12); -- c->dwarf.loc[R13] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R13); -- c->dwarf.loc[R14] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R14); -- c->dwarf.loc[R15] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R15); -- for (i = R15 + 1; i < DWARF_NUM_PRESERVED_REGS; ++i) -+ c->dwarf.loc[UNW_ARM_R0] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R0); -+ c->dwarf.loc[UNW_ARM_R1] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R1); -+ c->dwarf.loc[UNW_ARM_R2] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R2); -+ c->dwarf.loc[UNW_ARM_R3] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R3); -+ c->dwarf.loc[UNW_ARM_R4] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R4); -+ c->dwarf.loc[UNW_ARM_R5] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R5); -+ c->dwarf.loc[UNW_ARM_R6] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R6); -+ c->dwarf.loc[UNW_ARM_R7] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R7); -+ c->dwarf.loc[UNW_ARM_R8] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R8); -+ c->dwarf.loc[UNW_ARM_R9] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R9); -+ c->dwarf.loc[UNW_ARM_R10] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R10); -+ c->dwarf.loc[UNW_ARM_R11] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R11); -+ c->dwarf.loc[UNW_ARM_R12] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R12); -+ c->dwarf.loc[UNW_ARM_R13] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R13); -+ c->dwarf.loc[UNW_ARM_R14] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R14); -+ c->dwarf.loc[UNW_ARM_R15] = DWARF_REG_LOC (&c->dwarf, UNW_ARM_R15); -+ for (i = UNW_ARM_R15 + 1; i < DWARF_NUM_PRESERVED_REGS; ++i) - c->dwarf.loc[i] = DWARF_NULL_LOC; - -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[R15], &c->dwarf.ip); -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_ARM_R15], &c->dwarf.ip); - if (ret < 0) - return ret; - - /* FIXME: correct for ARM? */ - ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_ARM_R13), -- &c->dwarf.cfa); -+ &c->dwarf.cfa); - if (ret < 0) - return ret; - -+ c->sigcontext_format = ARM_SCF_NONE; -+ c->sigcontext_addr = 0; -+ c->sigcontext_sp = 0; -+ c->sigcontext_pc = 0; -+ - /* FIXME: Initialisation for other registers. */ - - c->dwarf.args_size = 0; - c->dwarf.ret_addr_column = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; - c->dwarf.pi_valid = 0; - c->dwarf.pi_is_dynamic = 0; - c->dwarf.hint = 0; -diff --git a/frysk-imports/libunwind/src/arm/is_fpreg.c b/frysk-imports/libunwind/src/arm/is_fpreg.c -index d8b17ae..3b36a03 100644 ---- a/frysk-imports/libunwind/src/arm/is_fpreg.c -+++ b/frysk-imports/libunwind/src/arm/is_fpreg.c -@@ -31,9 +31,9 @@ PROTECTED int - unw_is_fpreg (int regnum) - { - return ((regnum >= UNW_ARM_S0 && regnum <= UNW_ARM_S31) -- || (regnum >= UNW_ARM_F0 && regnum <= UNW_ARM_F7) -- || (regnum >= UNW_ARM_wCGR0 && regnum <= UNW_ARM_wCGR7) -- || (regnum >= UNW_ARM_wR0 && regnum <= UNW_ARM_wR15) -- || (regnum >= UNW_ARM_wC0 && regnum <= UNW_ARM_wC7) -- || (regnum >= UNW_ARM_D0 && regnum <= UNW_ARM_D31)); -+ || (regnum >= UNW_ARM_F0 && regnum <= UNW_ARM_F7) -+ || (regnum >= UNW_ARM_wCGR0 && regnum <= UNW_ARM_wCGR7) -+ || (regnum >= UNW_ARM_wR0 && regnum <= UNW_ARM_wR15) -+ || (regnum >= UNW_ARM_wC0 && regnum <= UNW_ARM_wC7) -+ || (regnum >= UNW_ARM_D0 && regnum <= UNW_ARM_D31)); - } -diff --git a/frysk-imports/libunwind/src/arm/offsets.h b/frysk-imports/libunwind/src/arm/offsets.h -index 0593685..a63847b 100644 ---- a/frysk-imports/libunwind/src/arm/offsets.h -+++ b/frysk-imports/libunwind/src/arm/offsets.h -@@ -4,33 +4,33 @@ - - /* Offsets for ARM Linux "ucontext_t": */ - --#define LINUX_UC_FLAGS_OFF 0x00 --#define LINUX_UC_LINK_OFF 0x04 --#define LINUX_UC_STACK_OFF 0x08 --#define LINUX_UC_MCONTEXT_OFF 0x14 --#define LINUX_UC_SIGMASK_OFF 0x68 --#define LINUX_UC_REGSPACE_OFF 0xE8 -+#define LINUX_UC_FLAGS_OFF 0x00 -+#define LINUX_UC_LINK_OFF 0x04 -+#define LINUX_UC_STACK_OFF 0x08 -+#define LINUX_UC_MCONTEXT_OFF 0x14 -+#define LINUX_UC_SIGMASK_OFF 0x68 -+#define LINUX_UC_REGSPACE_OFF 0xE8 - - /* Offsets for ARM Linux "struct sigcontext": */ - --#define LINUX_SC_TRAPNO_OFF 0x00 --#define LINUX_SC_ERRORCODE_OFF 0x04 --#define LINUX_SC_OLDMASK_OFF 0x08 --#define LINUX_SC_R0_OFF 0x0C --#define LINUX_SC_R1_OFF 0x10 --#define LINUX_SC_R2_OFF 0x14 --#define LINUX_SC_R3_OFF 0x18 --#define LINUX_SC_R4_OFF 0x1C --#define LINUX_SC_R5_OFF 0x20 --#define LINUX_SC_R6_OFF 0x24 --#define LINUX_SC_R7_OFF 0x28 --#define LINUX_SC_R8_OFF 0x2C --#define LINUX_SC_R9_OFF 0x30 --#define LINUX_SC_R10_OFF 0x34 --#define LINUX_SC_FP_OFF 0x38 --#define LINUX_SC_IP_OFF 0x3C --#define LINUX_SC_SP_OFF 0x40 --#define LINUX_SC_LR_OFF 0x44 --#define LINUX_SC_PC_OFF 0x48 --#define LINUX_SC_CPSR_OFF 0x4C --#define LINUX_SC_FAULTADDR_OFF 0x50 -+#define LINUX_SC_TRAPNO_OFF 0x00 -+#define LINUX_SC_ERRORCODE_OFF 0x04 -+#define LINUX_SC_OLDMASK_OFF 0x08 -+#define LINUX_SC_R0_OFF 0x0C -+#define LINUX_SC_R1_OFF 0x10 -+#define LINUX_SC_R2_OFF 0x14 -+#define LINUX_SC_R3_OFF 0x18 -+#define LINUX_SC_R4_OFF 0x1C -+#define LINUX_SC_R5_OFF 0x20 -+#define LINUX_SC_R6_OFF 0x24 -+#define LINUX_SC_R7_OFF 0x28 -+#define LINUX_SC_R8_OFF 0x2C -+#define LINUX_SC_R9_OFF 0x30 -+#define LINUX_SC_R10_OFF 0x34 -+#define LINUX_SC_FP_OFF 0x38 -+#define LINUX_SC_IP_OFF 0x3C -+#define LINUX_SC_SP_OFF 0x40 -+#define LINUX_SC_LR_OFF 0x44 -+#define LINUX_SC_PC_OFF 0x48 -+#define LINUX_SC_CPSR_OFF 0x4C -+#define LINUX_SC_FAULTADDR_OFF 0x50 -diff --git a/frysk-imports/libunwind/src/arm/siglongjmp.S b/frysk-imports/libunwind/src/arm/siglongjmp.S -index 87f939e..4df0736 100644 ---- a/frysk-imports/libunwind/src/arm/siglongjmp.S -+++ b/frysk-imports/libunwind/src/arm/siglongjmp.S -@@ -6,3 +6,7 @@ - _UI_siglongjmp_cont: - _UI_longjmp_cont: - bx lr -+#ifdef __linux__ -+ /* We do not need executable stack. */ -+ .section .note.GNU-stack,"",%progbits -+#endif -diff --git a/frysk-imports/libunwind/src/arm/unwind_i.h b/frysk-imports/libunwind/src/arm/unwind_i.h -index f0949fa..4dabf21 100644 ---- a/frysk-imports/libunwind/src/arm/unwind_i.h -+++ b/frysk-imports/libunwind/src/arm/unwind_i.h -@@ -25,15 +25,35 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef unwind_i_h - #define unwind_i_h - --#include - #include - - #include - - #include "libunwind_i.h" - --#define arm_local_addr_space_init UNW_OBJ(local_addr_space_init) -+/* DWARF column numbers for ARM: */ -+#define R7 7 -+#define SP 13 -+#define LR 14 -+#define PC 15 -+ -+#define arm_lock UNW_OBJ(lock) -+#define arm_local_resume UNW_OBJ(local_resume) -+#define arm_local_addr_space_init UNW_OBJ(local_addr_space_init) - - extern void arm_local_addr_space_init (void); -+extern int arm_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -+ void *arg); -+/* By-pass calls to access_mem() when known to be safe. */ -+#ifdef UNW_LOCAL_ONLY -+# undef ACCESS_MEM_FAST -+# define ACCESS_MEM_FAST(ret,validate,cur,addr,to) \ -+ do { \ -+ if (unlikely(validate)) \ -+ (ret) = dwarf_get ((cur), DWARF_MEM_LOC ((cur), (addr)), &(to)); \ -+ else \ -+ (ret) = 0, (to) = *(unw_word_t *)(addr); \ -+ } while (0) -+#endif - - #endif /* unwind_i_h */ -diff --git a/frysk-imports/libunwind/src/coredump/README b/frysk-imports/libunwind/src/coredump/README -new file mode 100644 -index 0000000..204493c ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/README -@@ -0,0 +1,8 @@ -+This code is based on "unwinding via ptrace" code from ptrace/ -+directory. -+ -+Files with names starting with _UCD_ are substantially changed -+from their ptrace/_UPT_... progenitors. -+ -+Files which still have _UPT_... names are either verbiatim copies -+from ptrace/, or unimplemented stubs. -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_access_mem.c b/frysk-imports/libunwind/src/coredump/_UCD_access_mem.c -new file mode 100644 -index 0000000..1fdbd12 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_access_mem.c -@@ -0,0 +1,98 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+int -+_UCD_access_mem(unw_addr_space_t as, unw_word_t addr, unw_word_t *val, -+ int write, void *arg) -+{ -+ if (write) -+ { -+ Debug(0, "write is not supported\n"); -+ return -UNW_EINVAL; -+ } -+ -+ struct UCD_info *ui = arg; -+ -+ unw_word_t addr_last = addr + sizeof(*val)-1; -+ coredump_phdr_t *phdr; -+ unsigned i; -+ for (i = 0; i < ui->phdrs_count; i++) -+ { -+ phdr = &ui->phdrs[i]; -+ if (phdr->p_vaddr <= addr && addr_last < phdr->p_vaddr + phdr->p_memsz) -+ { -+ goto found; -+ } -+ } -+ Debug(1, "addr 0x%llx is unmapped\n", (unsigned long long)addr); -+ return -UNW_EINVAL; -+ -+ found: ; -+ -+ const char *filename UNUSED; -+ off_t fileofs; -+ int fd; -+ if (addr_last >= phdr->p_vaddr + phdr->p_filesz) -+ { -+ /* This part of mapped address space is not present in coredump file */ -+ /* Do we have it in the backup file? */ -+ if (phdr->backing_fd < 0) -+ { -+ Debug(1, "access to not-present data in phdr[%d]: addr:0x%llx\n", -+ i, (unsigned long long)addr -+ ); -+ return -UNW_EINVAL; -+ } -+ filename = phdr->backing_filename; -+ fileofs = addr - phdr->p_vaddr; -+ fd = phdr->backing_fd; -+ goto read; -+ } -+ -+ filename = ui->coredump_filename; -+ fileofs = phdr->p_offset + (addr - phdr->p_vaddr); -+ fd = ui->coredump_fd; -+ read: -+ if (lseek(fd, fileofs, SEEK_SET) != fileofs) -+ goto read_error; -+ if (read(fd, val, sizeof(*val)) != sizeof(*val)) -+ goto read_error; -+ -+ Debug(1, "0x%llx <- [addr:0x%llx fileofs:0x%llx]\n", -+ (unsigned long long)(*val), -+ (unsigned long long)addr, -+ (unsigned long long)fileofs -+ ); -+ return 0; -+ -+ read_error: -+ Debug(1, "access out of file: addr:0x%llx fileofs:%llx file:'%s'\n", -+ (unsigned long long)addr, -+ (unsigned long long)fileofs, -+ filename -+ ); -+ return -UNW_EINVAL; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_access_reg_freebsd.c b/frysk-imports/libunwind/src/coredump/_UCD_access_reg_freebsd.c -new file mode 100644 -index 0000000..585b7e2 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_access_reg_freebsd.c -@@ -0,0 +1,118 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_lib.h" -+ -+#include "_UCD_internal.h" -+ -+int -+_UCD_access_reg (unw_addr_space_t as, -+ unw_regnum_t regnum, unw_word_t *valp, -+ int write, void *arg) -+{ -+ if (write) -+ { -+ Debug(0, "write is not supported\n"); -+ return -UNW_EINVAL; -+ } -+ -+ struct UCD_info *ui = arg; -+ -+#if defined(UNW_TARGET_X86) -+ switch (regnum) { -+ case UNW_X86_EAX: -+ *valp = ui->prstatus->pr_reg.r_eax; -+ break; -+ case UNW_X86_EDX: -+ *valp = ui->prstatus->pr_reg.r_edx; -+ break; -+ case UNW_X86_ECX: -+ *valp = ui->prstatus->pr_reg.r_ecx; -+ break; -+ case UNW_X86_EBX: -+ *valp = ui->prstatus->pr_reg.r_ebx; -+ break; -+ case UNW_X86_ESI: -+ *valp = ui->prstatus->pr_reg.r_esi; -+ break; -+ case UNW_X86_EDI: -+ *valp = ui->prstatus->pr_reg.r_edi; -+ break; -+ case UNW_X86_EBP: -+ *valp = ui->prstatus->pr_reg.r_ebp; -+ break; -+ case UNW_X86_ESP: -+ *valp = ui->prstatus->pr_reg.r_esp; -+ break; -+ case UNW_X86_EIP: -+ *valp = ui->prstatus->pr_reg.r_eip; -+ break; -+ case UNW_X86_EFLAGS: -+ *valp = ui->prstatus->pr_reg.r_eflags; -+ break; -+ case UNW_X86_TRAPNO: -+ *valp = ui->prstatus->pr_reg.r_trapno; -+ break; -+ default: -+ Debug(0, "bad regnum:%d\n", regnum); -+ return -UNW_EINVAL; -+ }; -+#elif defined(UNW_TARGET_X86_64) -+ switch (regnum) { -+ case UNW_X86_64_RAX: -+ *valp = ui->prstatus->pr_reg.r_rax; -+ break; -+ case UNW_X86_64_RDX: -+ *valp = ui->prstatus->pr_reg.r_rdx; -+ break; -+ case UNW_X86_64_RCX: -+ *valp = ui->prstatus->pr_reg.r_rcx; -+ break; -+ case UNW_X86_64_RBX: -+ *valp = ui->prstatus->pr_reg.r_rbx; -+ break; -+ case UNW_X86_64_RSI: -+ *valp = ui->prstatus->pr_reg.r_rsi; -+ break; -+ case UNW_X86_64_RDI: -+ *valp = ui->prstatus->pr_reg.r_rdi; -+ break; -+ case UNW_X86_64_RBP: -+ *valp = ui->prstatus->pr_reg.r_rbp; -+ break; -+ case UNW_X86_64_RSP: -+ *valp = ui->prstatus->pr_reg.r_rsp; -+ break; -+ case UNW_X86_64_RIP: -+ *valp = ui->prstatus->pr_reg.r_rip; -+ break; -+ default: -+ Debug(0, "bad regnum:%d\n", regnum); -+ return -UNW_EINVAL; -+ }; -+#else -+#error Port me -+#endif -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_access_reg_linux.c b/frysk-imports/libunwind/src/coredump/_UCD_access_reg_linux.c -new file mode 100644 -index 0000000..4b5994f ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_access_reg_linux.c -@@ -0,0 +1,143 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_lib.h" -+ -+#include "_UCD_internal.h" -+ -+int -+_UCD_access_reg (unw_addr_space_t as, -+ unw_regnum_t regnum, unw_word_t *valp, -+ int write, void *arg) -+{ -+ struct UCD_info *ui = arg; -+ -+ if (write) -+ { -+ Debug(0, "write is not supported\n"); -+ return -UNW_EINVAL; -+ } -+ -+#if defined(UNW_TARGET_AARCH64) -+ if (regnum < 0 || regnum >= UNW_AARCH64_FPCR) -+ goto badreg; -+#elif defined(UNW_TARGET_ARM) -+ if (regnum < 0 || regnum >= 16) -+ goto badreg; -+#elif defined(UNW_TARGET_SH) -+ if (regnum < 0 || regnum > UNW_SH_PR) -+ goto badreg; -+#elif defined(UNW_TARGET_TILEGX) -+ if (regnum < 0 || regnum > UNW_TILEGX_CFA) -+ goto badreg; -+#else -+#if defined(UNW_TARGET_MIPS) -+ static const uint8_t remap_regs[] = -+ { -+ [UNW_MIPS_R0] = EF_REG0, -+ [UNW_MIPS_R1] = EF_REG1, -+ [UNW_MIPS_R2] = EF_REG2, -+ [UNW_MIPS_R3] = EF_REG3, -+ [UNW_MIPS_R4] = EF_REG4, -+ [UNW_MIPS_R5] = EF_REG5, -+ [UNW_MIPS_R6] = EF_REG6, -+ [UNW_MIPS_R7] = EF_REG7, -+ [UNW_MIPS_R8] = EF_REG8, -+ [UNW_MIPS_R9] = EF_REG9, -+ [UNW_MIPS_R10] = EF_REG10, -+ [UNW_MIPS_R11] = EF_REG11, -+ [UNW_MIPS_R12] = EF_REG12, -+ [UNW_MIPS_R13] = EF_REG13, -+ [UNW_MIPS_R14] = EF_REG14, -+ [UNW_MIPS_R15] = EF_REG15, -+ [UNW_MIPS_R16] = EF_REG16, -+ [UNW_MIPS_R17] = EF_REG17, -+ [UNW_MIPS_R18] = EF_REG18, -+ [UNW_MIPS_R19] = EF_REG19, -+ [UNW_MIPS_R20] = EF_REG20, -+ [UNW_MIPS_R21] = EF_REG21, -+ [UNW_MIPS_R22] = EF_REG22, -+ [UNW_MIPS_R23] = EF_REG23, -+ [UNW_MIPS_R24] = EF_REG24, -+ [UNW_MIPS_R25] = EF_REG25, -+ [UNW_MIPS_R28] = EF_REG28, -+ [UNW_MIPS_R29] = EF_REG29, -+ [UNW_MIPS_R30] = EF_REG30, -+ [UNW_MIPS_R31] = EF_REG31, -+ [UNW_MIPS_PC] = EF_CP0_EPC, -+ }; -+#elif defined(UNW_TARGET_X86) -+ static const uint8_t remap_regs[] = -+ { -+ /* names from libunwind-x86.h */ -+ [UNW_X86_EAX] = offsetof(struct user_regs_struct, eax) / sizeof(long), -+ [UNW_X86_EDX] = offsetof(struct user_regs_struct, edx) / sizeof(long), -+ [UNW_X86_ECX] = offsetof(struct user_regs_struct, ecx) / sizeof(long), -+ [UNW_X86_EBX] = offsetof(struct user_regs_struct, ebx) / sizeof(long), -+ [UNW_X86_ESI] = offsetof(struct user_regs_struct, esi) / sizeof(long), -+ [UNW_X86_EDI] = offsetof(struct user_regs_struct, edi) / sizeof(long), -+ [UNW_X86_EBP] = offsetof(struct user_regs_struct, ebp) / sizeof(long), -+ [UNW_X86_ESP] = offsetof(struct user_regs_struct, esp) / sizeof(long), -+ [UNW_X86_EIP] = offsetof(struct user_regs_struct, eip) / sizeof(long), -+ [UNW_X86_EFLAGS] = offsetof(struct user_regs_struct, eflags) / sizeof(long), -+ [UNW_X86_TRAPNO] = offsetof(struct user_regs_struct, orig_eax) / sizeof(long), -+ }; -+#elif defined(UNW_TARGET_X86_64) -+ static const int8_t remap_regs[] = -+ { -+ [UNW_X86_64_RAX] = offsetof(struct user_regs_struct, rax) / sizeof(long), -+ [UNW_X86_64_RDX] = offsetof(struct user_regs_struct, rdx) / sizeof(long), -+ [UNW_X86_64_RCX] = offsetof(struct user_regs_struct, rcx) / sizeof(long), -+ [UNW_X86_64_RBX] = offsetof(struct user_regs_struct, rbx) / sizeof(long), -+ [UNW_X86_64_RSI] = offsetof(struct user_regs_struct, rsi) / sizeof(long), -+ [UNW_X86_64_RDI] = offsetof(struct user_regs_struct, rdi) / sizeof(long), -+ [UNW_X86_64_RBP] = offsetof(struct user_regs_struct, rbp) / sizeof(long), -+ [UNW_X86_64_RSP] = offsetof(struct user_regs_struct, rsp) / sizeof(long), -+ [UNW_X86_64_RIP] = offsetof(struct user_regs_struct, rip) / sizeof(long), -+ }; -+#else -+#error Port me -+#endif -+ -+ if (regnum < 0 || regnum >= (unw_regnum_t)ARRAY_SIZE(remap_regs)) -+ goto badreg; -+ -+ regnum = remap_regs[regnum]; -+#endif -+ -+ /* pr_reg is a long[] array, but it contains struct user_regs_struct's -+ * image. -+ */ -+ Debug(1, "pr_reg[%d]:%ld (0x%lx)\n", regnum, -+ (long)ui->prstatus->pr_reg[regnum], -+ (long)ui->prstatus->pr_reg[regnum] -+ ); -+ *valp = ui->prstatus->pr_reg[regnum]; -+ -+ return 0; -+ -+badreg: -+ Debug(0, "bad regnum:%d\n", regnum); -+ return -UNW_EINVAL; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_accessors.c b/frysk-imports/libunwind/src/coredump/_UCD_accessors.c -new file mode 100644 -index 0000000..f081180 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_accessors.c -@@ -0,0 +1,36 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_internal.h" -+ -+PROTECTED unw_accessors_t _UCD_accessors = -+ { -+ .find_proc_info = _UCD_find_proc_info, -+ .put_unwind_info = _UCD_put_unwind_info, -+ .get_dyn_info_list_addr = _UCD_get_dyn_info_list_addr, -+ .access_mem = _UCD_access_mem, -+ .access_reg = _UCD_access_reg, -+ .access_fpreg = _UCD_access_fpreg, -+ .resume = _UCD_resume, -+ .get_proc_name = _UCD_get_proc_name -+ }; -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_create.c b/frysk-imports/libunwind/src/coredump/_UCD_create.c -new file mode 100644 -index 0000000..f22664b ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_create.c -@@ -0,0 +1,417 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifdef HAVE_CONFIG_H -+# include "config.h" -+#endif -+ -+/* Endian detection */ -+#include -+#if defined(HAVE_BYTESWAP_H) -+#include -+#endif -+#if defined(HAVE_ENDIAN_H) -+# include -+#elif defined(HAVE_SYS_ENDIAN_H) -+# include -+#endif -+#if defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN -+# define WE_ARE_BIG_ENDIAN 1 -+# define WE_ARE_LITTLE_ENDIAN 0 -+#elif defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN -+# define WE_ARE_BIG_ENDIAN 0 -+# define WE_ARE_LITTLE_ENDIAN 1 -+#elif defined(_BYTE_ORDER) && _BYTE_ORDER == _BIG_ENDIAN -+# define WE_ARE_BIG_ENDIAN 1 -+# define WE_ARE_LITTLE_ENDIAN 0 -+#elif defined(_BYTE_ORDER) && _BYTE_ORDER == _LITTLE_ENDIAN -+# define WE_ARE_BIG_ENDIAN 0 -+# define WE_ARE_LITTLE_ENDIAN 1 -+#elif defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN -+# define WE_ARE_BIG_ENDIAN 1 -+# define WE_ARE_LITTLE_ENDIAN 0 -+#elif defined(BYTE_ORDER) && BYTE_ORDER == LITTLE_ENDIAN -+# define WE_ARE_BIG_ENDIAN 0 -+# define WE_ARE_LITTLE_ENDIAN 1 -+#elif defined(__386__) -+# define WE_ARE_BIG_ENDIAN 0 -+# define WE_ARE_LITTLE_ENDIAN 1 -+#else -+# error "Can't determine endianness" -+#endif -+ -+#include -+#include /* struct elf_prstatus */ -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+#define NOTE_DATA(_hdr) STRUCT_MEMBER_P((_hdr), sizeof (Elf32_Nhdr) + UNW_ALIGN((_hdr)->n_namesz, 4)) -+#define NOTE_SIZE(_hdr) (sizeof (Elf32_Nhdr) + UNW_ALIGN((_hdr)->n_namesz, 4) + (_hdr)->n_descsz) -+#define NOTE_NEXT(_hdr) STRUCT_MEMBER_P((_hdr), NOTE_SIZE(_hdr)) -+#define NOTE_FITS_IN(_hdr, _size) ((_size) >= sizeof (Elf32_Nhdr) && (_size) >= NOTE_SIZE (_hdr)) -+#define NOTE_FITS(_hdr, _end) NOTE_FITS_IN((_hdr), (unsigned long)((char *)(_end) - (char *)(_hdr))) -+ -+struct UCD_info * -+_UCD_create(const char *filename) -+{ -+ union -+ { -+ Elf32_Ehdr h32; -+ Elf64_Ehdr h64; -+ } elf_header; -+#define elf_header32 elf_header.h32 -+#define elf_header64 elf_header.h64 -+ bool _64bits; -+ -+ struct UCD_info *ui = memset(malloc(sizeof(*ui)), 0, sizeof(*ui)); -+ ui->edi.di_cache.format = -1; -+ ui->edi.di_debug.format = -1; -+#if UNW_TARGET_IA64 -+ ui->edi.ktab.format = -1; -+#endif -+ -+ int fd = ui->coredump_fd = open(filename, O_RDONLY); -+ if (fd < 0) -+ goto err; -+ ui->coredump_filename = strdup(filename); -+ -+ /* No sane ELF32 file is going to be smaller then ELF64 _header_, -+ * so let's just read 64-bit sized one. -+ */ -+ if (read(fd, &elf_header64, sizeof(elf_header64)) != sizeof(elf_header64)) -+ { -+ Debug(0, "'%s' is not an ELF file\n", filename); -+ goto err; -+ } -+ -+ if (memcmp(&elf_header32, ELFMAG, SELFMAG) != 0) -+ { -+ Debug(0, "'%s' is not an ELF file\n", filename); -+ goto err; -+ } -+ -+ if (elf_header32.e_ident[EI_CLASS] != ELFCLASS32 -+ && elf_header32.e_ident[EI_CLASS] != ELFCLASS64) -+ { -+ Debug(0, "'%s' is not a 32/64 bit ELF file\n", filename); -+ goto err; -+ } -+ -+ if (WE_ARE_LITTLE_ENDIAN != (elf_header32.e_ident[EI_DATA] == ELFDATA2LSB)) -+ { -+ Debug(0, "'%s' is endian-incompatible\n", filename); -+ goto err; -+ } -+ -+ _64bits = (elf_header32.e_ident[EI_CLASS] == ELFCLASS64); -+ if (_64bits && sizeof(elf_header64.e_entry) > sizeof(off_t)) -+ { -+ Debug(0, "Can't process '%s': 64-bit file " -+ "while only %ld bits are supported", -+ filename, 8L * sizeof(off_t)); -+ goto err; -+ } -+ -+ /* paranoia check */ -+ if (_64bits -+ ? 0 /* todo: (elf_header64.e_ehsize != NN || elf_header64.e_phentsize != NN) */ -+ : (elf_header32.e_ehsize != 52 || elf_header32.e_phentsize != 32) -+ ) -+ { -+ Debug(0, "'%s' has wrong e_ehsize or e_phentsize\n", filename); -+ goto err; -+ } -+ -+ off_t ofs = (_64bits ? elf_header64.e_phoff : elf_header32.e_phoff); -+ if (lseek(fd, ofs, SEEK_SET) != ofs) -+ { -+ Debug(0, "Can't read phdrs from '%s'\n", filename); -+ goto err; -+ } -+ unsigned size = ui->phdrs_count = (_64bits ? elf_header64.e_phnum : elf_header32.e_phnum); -+ coredump_phdr_t *phdrs = ui->phdrs = memset(malloc(size * sizeof(phdrs[0])), 0, size * sizeof(phdrs[0])); -+ if (_64bits) -+ { -+ coredump_phdr_t *cur = phdrs; -+ unsigned i = 0; -+ while (i < size) -+ { -+ Elf64_Phdr hdr64; -+ if (read(fd, &hdr64, sizeof(hdr64)) != sizeof(hdr64)) -+ { -+ Debug(0, "Can't read phdrs from '%s'\n", filename); -+ goto err; -+ } -+ cur->p_type = hdr64.p_type ; -+ cur->p_flags = hdr64.p_flags ; -+ cur->p_offset = hdr64.p_offset; -+ cur->p_vaddr = hdr64.p_vaddr ; -+ /*cur->p_paddr = hdr32.p_paddr ; always 0 */ -+//TODO: check that and abort if it isn't? -+ cur->p_filesz = hdr64.p_filesz; -+ cur->p_memsz = hdr64.p_memsz ; -+ cur->p_align = hdr64.p_align ; -+ /* cur->backing_filename = NULL; - done by memset */ -+ cur->backing_fd = -1; -+ cur->backing_filesize = hdr64.p_filesz; -+ i++; -+ cur++; -+ } -+ } else { -+ coredump_phdr_t *cur = phdrs; -+ unsigned i = 0; -+ while (i < size) -+ { -+ Elf32_Phdr hdr32; -+ if (read(fd, &hdr32, sizeof(hdr32)) != sizeof(hdr32)) -+ { -+ Debug(0, "Can't read phdrs from '%s'\n", filename); -+ goto err; -+ } -+ cur->p_type = hdr32.p_type ; -+ cur->p_flags = hdr32.p_flags ; -+ cur->p_offset = hdr32.p_offset; -+ cur->p_vaddr = hdr32.p_vaddr ; -+ /*cur->p_paddr = hdr32.p_paddr ; always 0 */ -+ cur->p_filesz = hdr32.p_filesz; -+ cur->p_memsz = hdr32.p_memsz ; -+ cur->p_align = hdr32.p_align ; -+ /* cur->backing_filename = NULL; - done by memset */ -+ cur->backing_fd = -1; -+ cur->backing_filesize = hdr32.p_memsz; -+ i++; -+ cur++; -+ } -+ } -+ -+ unsigned i = 0; -+ coredump_phdr_t *cur = phdrs; -+ while (i < size) -+ { -+ Debug(2, "phdr[%03d]: type:%d", i, cur->p_type); -+ if (cur->p_type == PT_NOTE) -+ { -+ Elf32_Nhdr *note_hdr, *note_end; -+ unsigned n_threads; -+ -+ ui->note_phdr = malloc(cur->p_filesz); -+ if (lseek(fd, cur->p_offset, SEEK_SET) != (off_t)cur->p_offset -+ || (uoff_t)read(fd, ui->note_phdr, cur->p_filesz) != cur->p_filesz) -+ { -+ Debug(0, "Can't read PT_NOTE from '%s'\n", filename); -+ goto err; -+ } -+ -+ note_end = STRUCT_MEMBER_P (ui->note_phdr, cur->p_filesz); -+ -+ /* Count number of threads */ -+ n_threads = 0; -+ note_hdr = (Elf32_Nhdr *)ui->note_phdr; -+ while (NOTE_FITS (note_hdr, note_end)) -+ { -+ if (note_hdr->n_type == NT_PRSTATUS) -+ n_threads++; -+ -+ note_hdr = NOTE_NEXT (note_hdr); -+ } -+ -+ ui->n_threads = n_threads; -+ ui->threads = malloc(sizeof (void *) * n_threads); -+ -+ n_threads = 0; -+ note_hdr = (Elf32_Nhdr *)ui->note_phdr; -+ while (NOTE_FITS (note_hdr, note_end)) -+ { -+ if (note_hdr->n_type == NT_PRSTATUS) -+ ui->threads[n_threads++] = NOTE_DATA (note_hdr); -+ -+ note_hdr = NOTE_NEXT (note_hdr); -+ } -+ } -+ if (cur->p_type == PT_LOAD) -+ { -+ Debug(2, " ofs:%08llx va:%08llx filesize:%08llx memsize:%08llx flg:%x", -+ (unsigned long long) cur->p_offset, -+ (unsigned long long) cur->p_vaddr, -+ (unsigned long long) cur->p_filesz, -+ (unsigned long long) cur->p_memsz, -+ cur->p_flags -+ ); -+ if (cur->p_filesz < cur->p_memsz) -+ Debug(2, " partial"); -+ if (cur->p_flags & PF_X) -+ Debug(2, " executable"); -+ } -+ Debug(2, "\n"); -+ i++; -+ cur++; -+ } -+ -+ if (ui->n_threads == 0) -+ { -+ Debug(0, "No NT_PRSTATUS note found in '%s'\n", filename); -+ goto err; -+ } -+ -+ ui->prstatus = ui->threads[0]; -+ -+ return ui; -+ -+ err: -+ _UCD_destroy(ui); -+ return NULL; -+} -+ -+int _UCD_get_num_threads(struct UCD_info *ui) -+{ -+ return ui->n_threads; -+} -+ -+void _UCD_select_thread(struct UCD_info *ui, int n) -+{ -+ if (n >= 0 && n < ui->n_threads) -+ ui->prstatus = ui->threads[n]; -+} -+ -+pid_t _UCD_get_pid(struct UCD_info *ui) -+{ -+ return ui->prstatus->pr_pid; -+} -+ -+int _UCD_get_cursig(struct UCD_info *ui) -+{ -+ return ui->prstatus->pr_cursig; -+} -+ -+int _UCD_add_backing_file_at_segment(struct UCD_info *ui, int phdr_no, const char *filename) -+{ -+ if ((unsigned)phdr_no >= ui->phdrs_count) -+ { -+ Debug(0, "There is no segment %d in this coredump\n", phdr_no); -+ return -1; -+ } -+ -+ struct coredump_phdr *phdr = &ui->phdrs[phdr_no]; -+ if (phdr->backing_filename) -+ { -+ Debug(0, "Backing file already added to segment %d\n", phdr_no); -+ return -1; -+ } -+ -+ int fd = open(filename, O_RDONLY); -+ if (fd < 0) -+ { -+ Debug(0, "Can't open '%s'\n", filename); -+ return -1; -+ } -+ -+ phdr->backing_fd = fd; -+ phdr->backing_filename = strdup(filename); -+ -+ struct stat statbuf; -+ if (fstat(fd, &statbuf) != 0) -+ { -+ Debug(0, "Can't stat '%s'\n", filename); -+ goto err; -+ } -+ phdr->backing_filesize = (uoff_t)statbuf.st_size; -+ -+ if (phdr->p_flags != (PF_X | PF_R)) -+ Debug(1, "Note: phdr[%u] is not r-x: flags are 0x%x\n", phdr_no, phdr->p_flags); -+ -+ if (phdr->backing_filesize > phdr->p_memsz) -+ { -+ /* This is expected */ -+ Debug(2, "Note: phdr[%u] is %lld bytes, file is larger: %lld bytes\n", -+ phdr_no, -+ (unsigned long long)phdr->p_memsz, -+ (unsigned long long)phdr->backing_filesize -+ ); -+ } -+//TODO: else loudly complain? Maybe even fail? -+ -+ if (phdr->p_filesz != 0) -+ { -+//TODO: loop and compare in smaller blocks -+ char *core_buf = malloc(phdr->p_filesz); -+ char *file_buf = malloc(phdr->p_filesz); -+ if (lseek(ui->coredump_fd, phdr->p_offset, SEEK_SET) != (off_t)phdr->p_offset -+ || (uoff_t)read(ui->coredump_fd, core_buf, phdr->p_filesz) != phdr->p_filesz -+ ) -+ { -+ Debug(0, "Error reading from coredump file\n"); -+ err_read: -+ free(core_buf); -+ free(file_buf); -+ goto err; -+ } -+ if ((uoff_t)read(fd, file_buf, phdr->p_filesz) != phdr->p_filesz) -+ { -+ Debug(0, "Error reading from '%s'\n", filename); -+ goto err_read; -+ } -+ int r = memcmp(core_buf, file_buf, phdr->p_filesz); -+ free(core_buf); -+ free(file_buf); -+ if (r != 0) -+ { -+ Debug(1, "Note: phdr[%u] first %lld bytes in core dump and in file do not match\n", -+ phdr_no, (unsigned long long)phdr->p_filesz -+ ); -+ } else { -+ Debug(1, "Note: phdr[%u] first %lld bytes in core dump and in file match\n", -+ phdr_no, (unsigned long long)phdr->p_filesz -+ ); -+ } -+ } -+ -+ /* Success */ -+ return 0; -+ -+ err: -+ if (phdr->backing_fd >= 0) -+ { -+ close(phdr->backing_fd); -+ phdr->backing_fd = -1; -+ } -+ free(phdr->backing_filename); -+ phdr->backing_filename = NULL; -+ return -1; -+} -+ -+int _UCD_add_backing_file_at_vaddr(struct UCD_info *ui, -+ unsigned long vaddr, -+ const char *filename) -+{ -+ unsigned i; -+ for (i = 0; i < ui->phdrs_count; i++) -+ { -+ struct coredump_phdr *phdr = &ui->phdrs[i]; -+ if (phdr->p_vaddr != vaddr) -+ continue; -+ /* It seems to match. Add it. */ -+ return _UCD_add_backing_file_at_segment(ui, i, filename); -+ } -+ return -1; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_destroy.c b/frysk-imports/libunwind/src/coredump/_UCD_destroy.c -new file mode 100644 -index 0000000..5aff989 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_destroy.c -@@ -0,0 +1,50 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_internal.h" -+ -+void -+_UCD_destroy (struct UCD_info *ui) -+{ -+ if (!ui) -+ return; -+ -+ if (ui->coredump_fd >= 0) -+ close(ui->coredump_fd); -+ free(ui->coredump_filename); -+ -+ invalidate_edi (&ui->edi); -+ -+ unsigned i; -+ for (i = 0; i < ui->phdrs_count; i++) -+ { -+ struct coredump_phdr *phdr = &ui->phdrs[i]; -+ free(phdr->backing_filename); -+ if (phdr->backing_fd >= 0) -+ close(phdr->backing_fd); -+ } -+ -+ free(ui->note_phdr); -+ -+ free(ui); -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_elf_map_image.c b/frysk-imports/libunwind/src/coredump/_UCD_elf_map_image.c -new file mode 100644 -index 0000000..4b3db0b ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_elf_map_image.c -@@ -0,0 +1,98 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+static coredump_phdr_t * -+CD_elf_map_image(struct UCD_info *ui, coredump_phdr_t *phdr) -+{ -+ struct elf_image *ei = &ui->edi.ei; -+ -+ if (phdr->backing_fd < 0) -+ { -+ /* Note: coredump file contains only phdr->p_filesz bytes. -+ * We want to map bigger area (phdr->p_memsz bytes) to make sure -+ * these pages are allocated, but non-accessible. -+ */ -+ /* addr, length, prot, flags, fd, fd_offset */ -+ ei->image = mmap(NULL, phdr->p_memsz, PROT_READ, MAP_PRIVATE, ui->coredump_fd, phdr->p_offset); -+ if (ei->image == MAP_FAILED) -+ { -+ ei->image = NULL; -+ return NULL; -+ } -+ ei->size = phdr->p_filesz; -+ size_t remainder_len = phdr->p_memsz - phdr->p_filesz; -+ if (remainder_len > 0) -+ { -+ void *remainder_base = (char*) ei->image + phdr->p_filesz; -+ munmap(remainder_base, remainder_len); -+ } -+ } else { -+ /* We have a backing file for this segment. -+ * This file is always longer than phdr->p_memsz, -+ * and if phdr->p_filesz !=0, first phdr->p_filesz bytes in coredump -+ * are the same as first bytes in the file. (Thus no need to map coredump) -+ * We map the entire file: -+ * unwinding may need data which is past phdr->p_memsz bytes. -+ */ -+ /* addr, length, prot, flags, fd, fd_offset */ -+ ei->image = mmap(NULL, phdr->backing_filesize, PROT_READ, MAP_PRIVATE, phdr->backing_fd, 0); -+ if (ei->image == MAP_FAILED) -+ { -+ ei->image = NULL; -+ return NULL; -+ } -+ ei->size = phdr->backing_filesize; -+ } -+ -+ /* Check ELF header for sanity */ -+ if (!elf_w(valid_object)(ei)) -+ { -+ munmap(ei->image, ei->size); -+ ei->image = NULL; -+ ei->size = 0; -+ return NULL; -+ } -+ -+ return phdr; -+} -+ -+HIDDEN coredump_phdr_t * -+_UCD_get_elf_image(struct UCD_info *ui, unw_word_t ip) -+{ -+ unsigned i; -+ for (i = 0; i < ui->phdrs_count; i++) -+ { -+ coredump_phdr_t *phdr = &ui->phdrs[i]; -+ if (phdr->p_vaddr <= ip && ip < phdr->p_vaddr + phdr->p_memsz) -+ { -+ phdr = CD_elf_map_image(ui, phdr); -+ return phdr; -+ } -+ } -+ return NULL; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_find_proc_info.c b/frysk-imports/libunwind/src/coredump/_UCD_find_proc_info.c -new file mode 100644 -index 0000000..33b66c8 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_find_proc_info.c -@@ -0,0 +1,163 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+static int -+get_unwind_info(struct UCD_info *ui, unw_addr_space_t as, unw_word_t ip) -+{ -+ unsigned long segbase, mapoff; -+ -+#if UNW_TARGET_IA64 && defined(__linux) -+ if (!ui->edi.ktab.start_ip && _Uia64_get_kernel_table (&ui->edi.ktab) < 0) -+ return -UNW_ENOINFO; -+ -+ if (ui->edi.ktab.format != -1 && ip >= ui->edi.ktab.start_ip && ip < ui->edi.ktab.end_ip) -+ return 0; -+#endif -+ -+ if ((ui->edi.di_cache.format != -1 -+ && ip >= ui->edi.di_cache.start_ip && ip < ui->edi.di_cache.end_ip) -+#if UNW_TARGET_ARM -+ || (ui->edi.di_debug.format != -1 -+ && ip >= ui->edi.di_arm.start_ip && ip < ui->edi.di_arm.end_ip) -+#endif -+ || (ui->edi.di_debug.format != -1 -+ && ip >= ui->edi.di_debug.start_ip && ip < ui->edi.di_debug.end_ip)) -+ return 0; -+ -+ invalidate_edi (&ui->edi); -+ -+ /* Used to be tdep_get_elf_image() in ptrace unwinding code */ -+ coredump_phdr_t *phdr = _UCD_get_elf_image(ui, ip); -+ if (!phdr) -+ { -+ Debug(1, "returns error: _UCD_get_elf_image failed\n"); -+ return -UNW_ENOINFO; -+ } -+ /* segbase: where it is mapped in virtual memory */ -+ /* mapoff: offset in the file */ -+ segbase = phdr->p_vaddr; -+ /*mapoff = phdr->p_offset; WRONG! phdr->p_offset is the offset in COREDUMP file */ -+ mapoff = 0; -+///FIXME. text segment is USUALLY, not always, at offset 0 in the binary/.so file. -+// ensure that at initialization. -+ -+ /* Here, SEGBASE is the starting-address of the (mmap'ped) segment -+ which covers the IP we're looking for. */ -+ if (tdep_find_unwind_table(&ui->edi, as, phdr->backing_filename, segbase, mapoff, ip) < 0) -+ { -+ Debug(1, "returns error: tdep_find_unwind_table failed\n"); -+ return -UNW_ENOINFO; -+ } -+ -+ /* This can happen in corner cases where dynamically generated -+ code falls into the same page that contains the data-segment -+ and the page-offset of the code is within the first page of -+ the executable. */ -+ if (ui->edi.di_cache.format != -1 -+ && (ip < ui->edi.di_cache.start_ip || ip >= ui->edi.di_cache.end_ip)) -+ ui->edi.di_cache.format = -1; -+ -+ if (ui->edi.di_debug.format != -1 -+ && (ip < ui->edi.di_debug.start_ip || ip >= ui->edi.di_debug.end_ip)) -+ ui->edi.di_debug.format = -1; -+ -+ if (ui->edi.di_cache.format == -1 -+#if UNW_TARGET_ARM -+ && ui->edi.di_arm.format == -1 -+#endif -+ && ui->edi.di_debug.format == -1) -+ { -+ Debug(1, "returns error: all formats are -1\n"); -+ return -UNW_ENOINFO; -+ } -+ -+ Debug(1, "returns success\n"); -+ return 0; -+} -+ -+int -+_UCD_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg) -+{ -+ struct UCD_info *ui = arg; -+ -+ Debug(1, "entering\n"); -+ -+ int ret = -UNW_ENOINFO; -+ -+ if (get_unwind_info(ui, as, ip) < 0) { -+ Debug(1, "returns error: get_unwind_info failed\n"); -+ return -UNW_ENOINFO; -+ } -+ -+#if UNW_TARGET_IA64 -+ if (ui->edi.ktab.format != -1) -+ { -+ /* The kernel unwind table resides in local memory, so we have -+ to use the local address space to search it. Since -+ _UCD_put_unwind_info() has no easy way of detecting this -+ case, we simply make a copy of the unwind-info, so -+ _UCD_put_unwind_info() can always free() the unwind-info -+ without ill effects. */ -+ ret = tdep_search_unwind_table (unw_local_addr_space, ip, &ui->edi.ktab, pi, -+ need_unwind_info, arg); -+ if (ret >= 0) -+ { -+ if (!need_unwind_info) -+ pi->unwind_info = NULL; -+ else -+ { -+ void *mem = malloc (pi->unwind_info_size); -+ -+ if (!mem) -+ return -UNW_ENOMEM; -+ memcpy (mem, pi->unwind_info, pi->unwind_info_size); -+ pi->unwind_info = mem; -+ } -+ } -+ } -+#endif -+ -+ if (ret == -UNW_ENOINFO && ui->edi.di_cache.format != -1) -+ ret = tdep_search_unwind_table (as, ip, &ui->edi.di_cache, -+ pi, need_unwind_info, arg); -+ -+#if UNW_TARGET_ARM -+ if (ret == -UNW_ENOINFO && ui->edi.di_arm.format != -1) -+ ret = tdep_search_unwind_table (as, ip, &ui->edi.di_arm, pi, -+ need_unwind_info, arg); -+#endif -+ -+ if (ret == -UNW_ENOINFO && ui->edi.di_debug.format != -1) -+ ret = tdep_search_unwind_table (as, ip, &ui->edi.di_debug, pi, -+ need_unwind_info, arg); -+ -+ Debug(1, "returns %d\n", ret); -+ -+ return ret; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_get_proc_name.c b/frysk-imports/libunwind/src/coredump/_UCD_get_proc_name.c -new file mode 100644 -index 0000000..00096c4 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_get_proc_name.c -@@ -0,0 +1,70 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+ -+/* Find the ELF image that contains IP and return the "closest" -+ procedure name, if there is one. With some caching, this could be -+ sped up greatly, but until an application materializes that's -+ sensitive to the performance of this routine, why bother... */ -+static int -+elf_w (CD_get_proc_name) (struct UCD_info *ui, unw_addr_space_t as, unw_word_t ip, -+ char *buf, size_t buf_len, unw_word_t *offp) -+{ -+ unsigned long segbase, mapoff; -+ int ret; -+ -+ /* Used to be tdep_get_elf_image() in ptrace unwinding code */ -+ coredump_phdr_t *cphdr = _UCD_get_elf_image(ui, ip); -+ if (!cphdr) -+ { -+ Debug(1, "returns error: _UCD_get_elf_image failed\n"); -+ return -UNW_ENOINFO; -+ } -+ /* segbase: where it is mapped in virtual memory */ -+ /* mapoff: offset in the file */ -+ segbase = cphdr->p_vaddr; -+ /*mapoff = phdr->p_offset; WRONG! phdr->p_offset is the offset in COREDUMP file */ -+ mapoff = 0; -+ -+ ret = elf_w (get_proc_name_in_image) (as, &ui->edi.ei, segbase, mapoff, ip, buf, buf_len, offp); -+ -+ return ret; -+} -+ -+int -+_UCD_get_proc_name (unw_addr_space_t as, unw_word_t ip, -+ char *buf, size_t buf_len, unw_word_t *offp, void *arg) -+{ -+ struct UCD_info *ui = arg; -+ -+#if ELF_CLASS == ELFCLASS64 -+ return _Uelf64_CD_get_proc_name (ui, as, ip, buf, buf_len, offp); -+#elif ELF_CLASS == ELFCLASS32 -+ return _Uelf32_CD_get_proc_name (ui, as, ip, buf, buf_len, offp); -+#else -+ return -UNW_ENOINFO; -+#endif -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_internal.h b/frysk-imports/libunwind/src/coredump/_UCD_internal.h -new file mode 100644 -index 0000000..3c95a2a ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_internal.h -@@ -0,0 +1,105 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef _UCD_internal_h -+#define _UCD_internal_h -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#ifdef HAVE_SYS_TYPES_H -+#include -+#endif -+#ifdef HAVE_SYS_PROCFS_H -+#include /* struct elf_prstatus */ -+#endif -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include "libunwind_i.h" -+ -+ -+#if SIZEOF_OFF_T == 4 -+typedef uint32_t uoff_t; -+#elif SIZEOF_OFF_T == 8 -+typedef uint64_t uoff_t; -+#else -+# error Unknown size of off_t! -+#endif -+ -+ -+/* Similar to ELF phdrs. p_paddr element is absent, -+ * since it's always 0 in coredumps. -+ */ -+struct coredump_phdr -+ { -+ uint32_t p_type; -+ uint32_t p_flags; -+ uoff_t p_offset; -+ uoff_t p_vaddr; -+ uoff_t p_filesz; -+ uoff_t p_memsz; -+ uoff_t p_align; -+ /* Data for backing file. If backing_fd < 0, there is no file */ -+ uoff_t backing_filesize; -+ char *backing_filename; /* for error meesages only */ -+ int backing_fd; -+ }; -+ -+typedef struct coredump_phdr coredump_phdr_t; -+ -+#if defined(HAVE_STRUCT_ELF_PRSTATUS) -+#define PRSTATUS_STRUCT elf_prstatus -+#elif defined(HAVE_STRUCT_PRSTATUS) -+#define PRSTATUS_STRUCT prstatus -+#else -+#define PRSTATUS_STRUCT non_existent -+#endif -+ -+struct UCD_info -+ { -+ int big_endian; /* bool */ -+ int coredump_fd; -+ char *coredump_filename; /* for error meesages only */ -+ coredump_phdr_t *phdrs; /* array, allocated */ -+ unsigned phdrs_count; -+ void *note_phdr; /* allocated or NULL */ -+ struct PRSTATUS_STRUCT *prstatus; /* points inside note_phdr */ -+ int n_threads; -+ struct PRSTATUS_STRUCT **threads; -+ -+ struct elf_dyn_info edi; -+ }; -+ -+extern coredump_phdr_t * _UCD_get_elf_image(struct UCD_info *ui, unw_word_t ip); -+ -+#define STRUCT_MEMBER_P(struct_p, struct_offset) ((void *) ((char*) (struct_p) + (long) (struct_offset))) -+#define STRUCT_MEMBER(member_type, struct_p, struct_offset) (*(member_type*) STRUCT_MEMBER_P ((struct_p), (struct_offset))) -+ -+#endif -diff --git a/frysk-imports/libunwind/src/coredump/_UCD_lib.h b/frysk-imports/libunwind/src/coredump/_UCD_lib.h -new file mode 100644 -index 0000000..22be32e ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UCD_lib.h -@@ -0,0 +1,57 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef _UCD_lib_h -+#define _UCD_lib_h -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#endif -diff --git a/frysk-imports/libunwind/src/coredump/_UPT_access_fpreg.c b/frysk-imports/libunwind/src/coredump/_UPT_access_fpreg.c -new file mode 100644 -index 0000000..0b8b86a ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UPT_access_fpreg.c -@@ -0,0 +1,34 @@ -+/* libunwind - a platform-independent unwind library -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+int -+_UCD_access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -+ int write, void *arg) -+{ -+ print_error (__func__); -+ print_error (" not implemented\n"); -+ return -UNW_EINVAL; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UPT_elf.c b/frysk-imports/libunwind/src/coredump/_UPT_elf.c -new file mode 100644 -index 0000000..fb7b19a ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UPT_elf.c -@@ -0,0 +1,5 @@ -+/* We need to get a separate copy of the ELF-code into -+ libunwind-coredump since it cannot (and must not) have any ELF -+ dependencies on libunwind. */ -+#include "libunwind_i.h" /* get ELFCLASS defined */ -+#include "../elfxx.c" -diff --git a/frysk-imports/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c b/frysk-imports/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c -new file mode 100644 -index 0000000..0d11905 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UPT_get_dyn_info_list_addr.c -@@ -0,0 +1,108 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2003-2005 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+#if UNW_TARGET_IA64 && defined(__linux) -+# include "elf64.h" -+# include "os-linux.h" -+ -+static inline int -+get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, -+ int *countp) -+{ -+ unsigned long lo, hi, off; -+ struct UPT_info *ui = arg; -+ struct map_iterator mi; -+ char path[PATH_MAX]; -+ unw_dyn_info_t *di; -+ unw_word_t res; -+ int count = 0; -+ -+ maps_init (&mi, ui->pid); -+ while (maps_next (&mi, &lo, &hi, &off)) -+ { -+ if (off) -+ continue; -+ -+ invalidate_edi (&ui->edi); -+ -+ if (elf_map_image (&ui->ei, path) < 0) -+ /* ignore unmappable stuff like "/SYSV00001b58 (deleted)" */ -+ continue; -+ -+ Debug (16, "checking object %s\n", path); -+ -+ di = tdep_find_unwind_table (&ui->edi, as, path, lo, off); -+ if (di) -+ { -+ res = _Uia64_find_dyn_list (as, di, arg); -+ if (res && count++ == 0) -+ { -+ Debug (12, "dyn_info_list_addr = 0x%lx\n", (long) res); -+ *dil_addr = res; -+ } -+ } -+ } -+ maps_close (&mi); -+ *countp = count; -+ return 0; -+} -+ -+#else -+ -+static inline int -+get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, -+ int *countp) -+{ -+# warning Implement get_list_addr(), please. -+ *countp = 0; -+ return 0; -+} -+ -+#endif -+ -+int -+_UCD_get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, -+ void *arg) -+{ -+ int count, ret; -+ -+ Debug (12, "looking for dyn_info list\n"); -+ -+ if ((ret = get_list_addr (as, dil_addr, arg, &count)) < 0) -+ return ret; -+ -+ /* If multiple dynamic-info list addresses are found, we would have -+ to determine which was is the one actually in use (since the -+ dynamic name resolution algorithm will pick one "winner"). -+ Perhaps we'd have to track them all until we find one that's -+ non-empty. Hopefully, this case simply will never arise, since -+ only libunwind defines the dynamic info list head. */ -+ assert (count <= 1); -+ -+ return (count > 0) ? 0 : -UNW_ENOINFO; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UPT_put_unwind_info.c b/frysk-imports/libunwind/src/coredump/_UPT_put_unwind_info.c -new file mode 100644 -index 0000000..462e1d0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UPT_put_unwind_info.c -@@ -0,0 +1,36 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2003 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+void -+_UCD_put_unwind_info (unw_addr_space_t as, unw_proc_info_t *pi, void *arg) -+{ -+ if (!pi->unwind_info) -+ return; -+ free (pi->unwind_info); -+ pi->unwind_info = NULL; -+} -diff --git a/frysk-imports/libunwind/src/coredump/_UPT_resume.c b/frysk-imports/libunwind/src/coredump/_UPT_resume.c -new file mode 100644 -index 0000000..a729c90 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/_UPT_resume.c -@@ -0,0 +1,35 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2003 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "_UCD_lib.h" -+#include "_UCD_internal.h" -+ -+int -+_UCD_resume (unw_addr_space_t as, unw_cursor_t *c, void *arg) -+{ -+ print_error (__func__); -+ print_error (" not implemented\n"); -+ return -UNW_EINVAL; -+} -diff --git a/frysk-imports/libunwind/src/coredump/libunwind-coredump.pc.in b/frysk-imports/libunwind/src/coredump/libunwind-coredump.pc.in -new file mode 100644 -index 0000000..9cb62c0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/coredump/libunwind-coredump.pc.in -@@ -0,0 +1,11 @@ -+prefix=@prefix@ -+exec_prefix=@exec_prefix@ -+libdir=@libdir@ -+includedir=@includedir@ -+ -+Name: libunwind-coredump -+Description: libunwind coredump library -+Version: @VERSION@ -+Requires: libunwind-generic libunwind -+Libs: -L${libdir} -lunwind-coredump -+Cflags: -I${includedir} -diff --git a/frysk-imports/libunwind/src/dwarf/Gexpr.c b/frysk-imports/libunwind/src/dwarf/Gexpr.c -index 4a01215..b56bb31 100644 ---- a/frysk-imports/libunwind/src/dwarf/Gexpr.c -+++ b/frysk-imports/libunwind/src/dwarf/Gexpr.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -30,81 +30,81 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - that the stack could at least have a depth of up to 256 elements, - but the GCC unwinder restricts the depth to 64, which seems - reasonable so we use the same value here. */ --#define MAX_EXPR_STACK_SIZE 64 -+#define MAX_EXPR_STACK_SIZE 64 - --#define NUM_OPERANDS(signature) (((signature) >> 6) & 0x3) --#define OPND1_TYPE(signature) (((signature) >> 3) & 0x7) --#define OPND2_TYPE(signature) (((signature) >> 0) & 0x7) -+#define NUM_OPERANDS(signature) (((signature) >> 6) & 0x3) -+#define OPND1_TYPE(signature) (((signature) >> 3) & 0x7) -+#define OPND2_TYPE(signature) (((signature) >> 0) & 0x7) - - #define OPND_SIGNATURE(n, t1, t2) (((n) << 6) | ((t1) << 3) | ((t2) << 0)) --#define OPND1(t1) OPND_SIGNATURE(1, t1, 0) --#define OPND2(t1, t2) OPND_SIGNATURE(2, t1, t2) -- --#define VAL8 0x0 --#define VAL16 0x1 --#define VAL32 0x2 --#define VAL64 0x3 --#define ULEB128 0x4 --#define SLEB128 0x5 --#define OFFSET 0x6 /* 32-bit offset for 32-bit DWARF, 64-bit otherwise */ --#define ADDR 0x7 /* Machine address. */ -- --static uint8_t operands[256] = -+#define OPND1(t1) OPND_SIGNATURE(1, t1, 0) -+#define OPND2(t1, t2) OPND_SIGNATURE(2, t1, t2) -+ -+#define VAL8 0x0 -+#define VAL16 0x1 -+#define VAL32 0x2 -+#define VAL64 0x3 -+#define ULEB128 0x4 -+#define SLEB128 0x5 -+#define OFFSET 0x6 /* 32-bit offset for 32-bit DWARF, 64-bit otherwise */ -+#define ADDR 0x7 /* Machine address. */ -+ -+static const uint8_t operands[256] = - { -- [DW_OP_addr] = OPND1 (ADDR), -- [DW_OP_const1u] = OPND1 (VAL8), -- [DW_OP_const1s] = OPND1 (VAL8), -- [DW_OP_const2u] = OPND1 (VAL16), -- [DW_OP_const2s] = OPND1 (VAL16), -- [DW_OP_const4u] = OPND1 (VAL32), -- [DW_OP_const4s] = OPND1 (VAL32), -- [DW_OP_const8u] = OPND1 (VAL64), -- [DW_OP_const8s] = OPND1 (VAL64), -- [DW_OP_pick] = OPND1 (VAL8), -- [DW_OP_plus_uconst] = OPND1 (ULEB128), -- [DW_OP_skip] = OPND1 (VAL16), -- [DW_OP_bra] = OPND1 (VAL16), -- [DW_OP_breg0 + 0] = OPND1 (SLEB128), -- [DW_OP_breg0 + 1] = OPND1 (SLEB128), -- [DW_OP_breg0 + 2] = OPND1 (SLEB128), -- [DW_OP_breg0 + 3] = OPND1 (SLEB128), -- [DW_OP_breg0 + 4] = OPND1 (SLEB128), -- [DW_OP_breg0 + 5] = OPND1 (SLEB128), -- [DW_OP_breg0 + 6] = OPND1 (SLEB128), -- [DW_OP_breg0 + 7] = OPND1 (SLEB128), -- [DW_OP_breg0 + 8] = OPND1 (SLEB128), -- [DW_OP_breg0 + 9] = OPND1 (SLEB128), -- [DW_OP_breg0 + 10] = OPND1 (SLEB128), -- [DW_OP_breg0 + 11] = OPND1 (SLEB128), -- [DW_OP_breg0 + 12] = OPND1 (SLEB128), -- [DW_OP_breg0 + 13] = OPND1 (SLEB128), -- [DW_OP_breg0 + 14] = OPND1 (SLEB128), -- [DW_OP_breg0 + 15] = OPND1 (SLEB128), -- [DW_OP_breg0 + 16] = OPND1 (SLEB128), -- [DW_OP_breg0 + 17] = OPND1 (SLEB128), -- [DW_OP_breg0 + 18] = OPND1 (SLEB128), -- [DW_OP_breg0 + 19] = OPND1 (SLEB128), -- [DW_OP_breg0 + 20] = OPND1 (SLEB128), -- [DW_OP_breg0 + 21] = OPND1 (SLEB128), -- [DW_OP_breg0 + 22] = OPND1 (SLEB128), -- [DW_OP_breg0 + 23] = OPND1 (SLEB128), -- [DW_OP_breg0 + 24] = OPND1 (SLEB128), -- [DW_OP_breg0 + 25] = OPND1 (SLEB128), -- [DW_OP_breg0 + 26] = OPND1 (SLEB128), -- [DW_OP_breg0 + 27] = OPND1 (SLEB128), -- [DW_OP_breg0 + 28] = OPND1 (SLEB128), -- [DW_OP_breg0 + 29] = OPND1 (SLEB128), -- [DW_OP_breg0 + 30] = OPND1 (SLEB128), -- [DW_OP_breg0 + 31] = OPND1 (SLEB128), -- [DW_OP_regx] = OPND1 (ULEB128), -- [DW_OP_fbreg] = OPND1 (SLEB128), -- [DW_OP_bregx] = OPND2 (ULEB128, SLEB128), -- [DW_OP_piece] = OPND1 (ULEB128), -- [DW_OP_deref_size] = OPND1 (VAL8), -- [DW_OP_xderef_size] = OPND1 (VAL8), -- [DW_OP_call2] = OPND1 (VAL16), -- [DW_OP_call4] = OPND1 (VAL32), -- [DW_OP_call_ref] = OPND1 (OFFSET) -+ [DW_OP_addr] = OPND1 (ADDR), -+ [DW_OP_const1u] = OPND1 (VAL8), -+ [DW_OP_const1s] = OPND1 (VAL8), -+ [DW_OP_const2u] = OPND1 (VAL16), -+ [DW_OP_const2s] = OPND1 (VAL16), -+ [DW_OP_const4u] = OPND1 (VAL32), -+ [DW_OP_const4s] = OPND1 (VAL32), -+ [DW_OP_const8u] = OPND1 (VAL64), -+ [DW_OP_const8s] = OPND1 (VAL64), -+ [DW_OP_pick] = OPND1 (VAL8), -+ [DW_OP_plus_uconst] = OPND1 (ULEB128), -+ [DW_OP_skip] = OPND1 (VAL16), -+ [DW_OP_bra] = OPND1 (VAL16), -+ [DW_OP_breg0 + 0] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 1] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 2] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 3] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 4] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 5] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 6] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 7] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 8] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 9] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 10] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 11] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 12] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 13] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 14] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 15] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 16] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 17] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 18] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 19] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 20] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 21] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 22] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 23] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 24] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 25] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 26] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 27] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 28] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 29] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 30] = OPND1 (SLEB128), -+ [DW_OP_breg0 + 31] = OPND1 (SLEB128), -+ [DW_OP_regx] = OPND1 (ULEB128), -+ [DW_OP_fbreg] = OPND1 (SLEB128), -+ [DW_OP_bregx] = OPND2 (ULEB128, SLEB128), -+ [DW_OP_piece] = OPND1 (ULEB128), -+ [DW_OP_deref_size] = OPND1 (VAL8), -+ [DW_OP_xderef_size] = OPND1 (VAL8), -+ [DW_OP_call2] = OPND1 (VAL16), -+ [DW_OP_call4] = OPND1 (VAL32), -+ [DW_OP_call_ref] = OPND1 (OFFSET) - }; - - static inline unw_sword_t -@@ -122,7 +122,7 @@ sword (unw_addr_space_t as, unw_word_t val) - - static inline unw_word_t - read_operand (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, int operand_type, unw_word_t *val, void *arg) -+ unw_word_t *addr, int operand_type, unw_word_t *val, void *arg) - { - uint8_t u8; - uint16_t u16; -@@ -145,28 +145,28 @@ read_operand (unw_addr_space_t as, unw_accessors_t *a, - case VAL8: - ret = dwarf_readu8 (as, a, addr, &u8, arg); - if (ret < 0) -- return ret; -+ return ret; - *val = u8; - break; - - case VAL16: - ret = dwarf_readu16 (as, a, addr, &u16, arg); - if (ret < 0) -- return ret; -+ return ret; - *val = u16; - break; - - case VAL32: - ret = dwarf_readu32 (as, a, addr, &u32, arg); - if (ret < 0) -- return ret; -+ return ret; - *val = u32; - break; - - case VAL64: - ret = dwarf_readu64 (as, a, addr, &u64, arg); - if (ret < 0) -- return ret; -+ return ret; - *val = u64; - break; - -@@ -188,7 +188,7 @@ read_operand (unw_addr_space_t as, unw_accessors_t *a, - - HIDDEN int - dwarf_eval_expr (struct dwarf_cursor *c, unw_word_t *addr, unw_word_t len, -- unw_word_t *valp, int *is_register) -+ unw_word_t *valp, int *is_register) - { - unw_word_t operand1 = 0, operand2 = 0, tmp1, tmp2, tmp3, end_addr; - uint8_t opcode, operands_signature, u8; -@@ -201,33 +201,34 @@ dwarf_eval_expr (struct dwarf_cursor *c, unw_word_t *addr, unw_word_t len, - uint32_t u32; - uint64_t u64; - int ret; --# define pop() \ --({ \ -- if ((tos - 1) >= MAX_EXPR_STACK_SIZE) \ -- { \ -- Debug (1, "Stack underflow\n"); \ -- return -UNW_EINVAL; \ -- } \ -- stack[--tos]; \ -+# define pop() \ -+({ \ -+ if ((tos - 1) >= MAX_EXPR_STACK_SIZE) \ -+ { \ -+ Debug (1, "Stack underflow\n"); \ -+ return -UNW_EINVAL; \ -+ } \ -+ stack[--tos]; \ - }) --# define push(x) \ --do { \ -- if (tos >= MAX_EXPR_STACK_SIZE) \ -- { \ -- Debug (1, "Stack overflow\n"); \ -- return -UNW_EINVAL; \ -- } \ -- stack[tos++] = (x); \ -+# define push(x) \ -+do { \ -+ unw_word_t _x = (x); \ -+ if (tos >= MAX_EXPR_STACK_SIZE) \ -+ { \ -+ Debug (1, "Stack overflow\n"); \ -+ return -UNW_EINVAL; \ -+ } \ -+ stack[tos++] = _x; \ - } while (0) --# define pick(n) \ --({ \ -- unsigned int _index = tos - 1 - (n); \ -- if (_index >= MAX_EXPR_STACK_SIZE) \ -- { \ -- Debug (1, "Out-of-stack pick\n"); \ -- return -UNW_EINVAL; \ -- } \ -- stack[_index]; \ -+# define pick(n) \ -+({ \ -+ unsigned int _index = tos - 1 - (n); \ -+ if (_index >= MAX_EXPR_STACK_SIZE) \ -+ { \ -+ Debug (1, "Out-of-stack pick\n"); \ -+ return -UNW_EINVAL; \ -+ } \ -+ stack[_index]; \ - }) - - as = c->as; -@@ -237,409 +238,409 @@ do { \ - *is_register = 0; - - Debug (14, "len=%lu, pushing cfa=0x%lx\n", -- (unsigned long) len, (unsigned long) c->cfa); -+ (unsigned long) len, (unsigned long) c->cfa); - -- push (c->cfa); /* push current CFA as required by DWARF spec */ -+ push (c->cfa); /* push current CFA as required by DWARF spec */ - - while (*addr < end_addr) - { - if ((ret = dwarf_readu8 (as, a, addr, &opcode, arg)) < 0) -- return ret; -+ return ret; - - operands_signature = operands[opcode]; - - if (unlikely (NUM_OPERANDS (operands_signature) > 0)) -- { -- if ((ret = read_operand (as, a, addr, -- OPND1_TYPE (operands_signature), -- &operand1, arg)) < 0) -- return ret; -- if (NUM_OPERANDS (operands_signature > 1)) -- if ((ret = read_operand (as, a, addr, -- OPND2_TYPE (operands_signature), -- &operand2, arg)) < 0) -- return ret; -- } -+ { -+ if ((ret = read_operand (as, a, addr, -+ OPND1_TYPE (operands_signature), -+ &operand1, arg)) < 0) -+ return ret; -+ if (NUM_OPERANDS (operands_signature) > 1) -+ if ((ret = read_operand (as, a, addr, -+ OPND2_TYPE (operands_signature), -+ &operand2, arg)) < 0) -+ return ret; -+ } - - switch ((dwarf_expr_op_t) opcode) -- { -- case DW_OP_lit0: case DW_OP_lit1: case DW_OP_lit2: -- case DW_OP_lit3: case DW_OP_lit4: case DW_OP_lit5: -- case DW_OP_lit6: case DW_OP_lit7: case DW_OP_lit8: -- case DW_OP_lit9: case DW_OP_lit10: case DW_OP_lit11: -- case DW_OP_lit12: case DW_OP_lit13: case DW_OP_lit14: -- case DW_OP_lit15: case DW_OP_lit16: case DW_OP_lit17: -- case DW_OP_lit18: case DW_OP_lit19: case DW_OP_lit20: -- case DW_OP_lit21: case DW_OP_lit22: case DW_OP_lit23: -- case DW_OP_lit24: case DW_OP_lit25: case DW_OP_lit26: -- case DW_OP_lit27: case DW_OP_lit28: case DW_OP_lit29: -- case DW_OP_lit30: case DW_OP_lit31: -- Debug (15, "OP_lit(%d)\n", (int) opcode - DW_OP_lit0); -- push (opcode - DW_OP_lit0); -- break; -- -- case DW_OP_breg0: case DW_OP_breg1: case DW_OP_breg2: -- case DW_OP_breg3: case DW_OP_breg4: case DW_OP_breg5: -- case DW_OP_breg6: case DW_OP_breg7: case DW_OP_breg8: -- case DW_OP_breg9: case DW_OP_breg10: case DW_OP_breg11: -- case DW_OP_breg12: case DW_OP_breg13: case DW_OP_breg14: -- case DW_OP_breg15: case DW_OP_breg16: case DW_OP_breg17: -- case DW_OP_breg18: case DW_OP_breg19: case DW_OP_breg20: -- case DW_OP_breg21: case DW_OP_breg22: case DW_OP_breg23: -- case DW_OP_breg24: case DW_OP_breg25: case DW_OP_breg26: -- case DW_OP_breg27: case DW_OP_breg28: case DW_OP_breg29: -- case DW_OP_breg30: case DW_OP_breg31: -- Debug (15, "OP_breg(r%d,0x%lx)\n", -- (int) opcode - DW_OP_breg0, (unsigned long) operand1); -- if ((ret = unw_get_reg (dwarf_to_cursor (c), -- dwarf_to_unw_regnum (opcode - DW_OP_breg0), -- &tmp1)) < 0) -- return ret; -- push (tmp1 + operand1); -- break; -- -- case DW_OP_bregx: -- Debug (15, "OP_bregx(r%d,0x%lx)\n", -- (int) operand1, (unsigned long) operand2); -- if ((ret = unw_get_reg (dwarf_to_cursor (c), -- dwarf_to_unw_regnum (operand1), &tmp1)) < 0) -- return ret; -- push (tmp1 + operand2); -- break; -- -- case DW_OP_reg0: case DW_OP_reg1: case DW_OP_reg2: -- case DW_OP_reg3: case DW_OP_reg4: case DW_OP_reg5: -- case DW_OP_reg6: case DW_OP_reg7: case DW_OP_reg8: -- case DW_OP_reg9: case DW_OP_reg10: case DW_OP_reg11: -- case DW_OP_reg12: case DW_OP_reg13: case DW_OP_reg14: -- case DW_OP_reg15: case DW_OP_reg16: case DW_OP_reg17: -- case DW_OP_reg18: case DW_OP_reg19: case DW_OP_reg20: -- case DW_OP_reg21: case DW_OP_reg22: case DW_OP_reg23: -- case DW_OP_reg24: case DW_OP_reg25: case DW_OP_reg26: -- case DW_OP_reg27: case DW_OP_reg28: case DW_OP_reg29: -- case DW_OP_reg30: case DW_OP_reg31: -- Debug (15, "OP_reg(r%d)\n", (int) opcode - DW_OP_reg0); -- *valp = dwarf_to_unw_regnum (opcode - DW_OP_reg0); -- *is_register = 1; -- return 0; -- -- case DW_OP_regx: -- Debug (15, "OP_regx(r%d)\n", (int) operand1); -- *valp = dwarf_to_unw_regnum (operand1); -- *is_register = 1; -- return 0; -- -- case DW_OP_addr: -- case DW_OP_const1u: -- case DW_OP_const2u: -- case DW_OP_const4u: -- case DW_OP_const8u: -- case DW_OP_constu: -- case DW_OP_const8s: -- case DW_OP_consts: -- Debug (15, "OP_const(0x%lx)\n", (unsigned long) operand1); -- push (operand1); -- break; -- -- case DW_OP_const1s: -- if (operand1 & 0x80) -- operand1 |= ((unw_word_t) -1) << 8; -- Debug (15, "OP_const1s(%ld)\n", (long) operand1); -- push (operand1); -- break; -- -- case DW_OP_const2s: -- if (operand1 & 0x8000) -- operand1 |= ((unw_word_t) -1) << 16; -- Debug (15, "OP_const2s(%ld)\n", (long) operand1); -- push (operand1); -- break; -- -- case DW_OP_const4s: -- if (operand1 & 0x80000000) -- operand1 |= (((unw_word_t) -1) << 16) << 16; -- Debug (15, "OP_const4s(%ld)\n", (long) operand1); -- push (operand1); -- break; -- -- case DW_OP_deref: -- Debug (15, "OP_deref\n"); -- tmp1 = pop (); -- if ((ret = dwarf_readw (as, a, &tmp1, &tmp2, arg)) < 0) -- return ret; -- push (tmp2); -- break; -- -- case DW_OP_deref_size: -- Debug (15, "OP_deref_size(%d)\n", (int) operand1); -- tmp1 = pop (); -- switch (operand1) -- { -- default: -- Debug (1, "Unexpected DW_OP_deref_size size %d\n", -- (int) operand1); -- return -UNW_EINVAL; -- -- case 1: -- if ((ret = dwarf_readu8 (as, a, &tmp1, &u8, arg)) < 0) -- return ret; -- tmp2 = u8; -- break; -- -- case 2: -- if ((ret = dwarf_readu16 (as, a, &tmp1, &u16, arg)) < 0) -- return ret; -- tmp2 = u16; -- break; -- -- case 3: -- case 4: -- if ((ret = dwarf_readu32 (as, a, &tmp1, &u32, arg)) < 0) -- return ret; -- tmp2 = u32; -- if (operand1 == 3) -- { -- if (dwarf_is_big_endian (as)) -- tmp2 >>= 8; -- else -- tmp2 &= 0xffffff; -- } -- break; -- case 5: -- case 6: -- case 7: -- case 8: -- if ((ret = dwarf_readu64 (as, a, &tmp1, &u64, arg)) < 0) -- return ret; -- tmp2 = u64; -- if (operand1 != 8) -- { -- if (dwarf_is_big_endian (as)) -- tmp2 >>= 64 - 8 * operand1; -- else -- tmp2 &= (~ (unw_word_t) 0) << (8 * operand1); -- } -- break; -- } -- push (tmp2); -- break; -- -- case DW_OP_dup: -- Debug (15, "OP_dup\n"); -- push (pick (0)); -- break; -- -- case DW_OP_drop: -- Debug (15, "OP_drop\n"); -- pop (); -- break; -- -- case DW_OP_pick: -- Debug (15, "OP_pick(%d)\n", (int) operand1); -- push (pick (operand1)); -- break; -- -- case DW_OP_over: -- Debug (15, "OP_over\n"); -- push (pick (1)); -- break; -- -- case DW_OP_swap: -- Debug (15, "OP_swap\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (tmp1); -- push (tmp2); -- break; -- -- case DW_OP_rot: -- Debug (15, "OP_rot\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- tmp3 = pop (); -- push (tmp1); -- push (tmp3); -- push (tmp2); -- break; -- -- case DW_OP_abs: -- Debug (15, "OP_abs\n"); -- tmp1 = pop (); -- if (tmp1 & ((unw_word_t) 1 << (8 * dwarf_addr_size (as) - 1))) -- tmp1 = -tmp1; -- push (tmp1); -- break; -- -- case DW_OP_and: -- Debug (15, "OP_and\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (tmp1 & tmp2); -- break; -- -- case DW_OP_div: -- Debug (15, "OP_div\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- if (tmp1) -- tmp1 = sword (as, tmp2) / sword (as, tmp1); -- push (tmp1); -- break; -- -- case DW_OP_minus: -- Debug (15, "OP_minus\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- tmp1 = tmp2 - tmp1; -- push (tmp1); -- break; -- -- case DW_OP_mod: -- Debug (15, "OP_mod\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- if (tmp1) -- tmp1 = tmp2 % tmp1; -- push (tmp1); -- break; -- -- case DW_OP_mul: -- Debug (15, "OP_mul\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- if (tmp1) -- tmp1 = tmp2 * tmp1; -- push (tmp1); -- break; -- -- case DW_OP_neg: -- Debug (15, "OP_neg\n"); -- push (-pop ()); -- break; -- -- case DW_OP_not: -- Debug (15, "OP_not\n"); -- push (~pop ()); -- break; -- -- case DW_OP_or: -- Debug (15, "OP_or\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (tmp1 | tmp2); -- break; -- -- case DW_OP_plus: -- Debug (15, "OP_plus\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (tmp1 + tmp2); -- break; -- -- case DW_OP_plus_uconst: -- Debug (15, "OP_plus_uconst(%lu)\n", (unsigned long) operand1); -- tmp1 = pop (); -- push (tmp1 + operand1); -- break; -- -- case DW_OP_shl: -- Debug (15, "OP_shl\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (tmp2 << tmp1); -- break; -- -- case DW_OP_shr: -- Debug (15, "OP_shr\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (tmp2 >> tmp1); -- break; -- -- case DW_OP_shra: -- Debug (15, "OP_shra\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (sword (as, tmp2) >> tmp1); -- break; -- -- case DW_OP_xor: -- Debug (15, "OP_xor\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (tmp1 ^ tmp2); -- break; -- -- case DW_OP_le: -- Debug (15, "OP_le\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (sword (as, tmp1) <= sword (as, tmp2)); -- break; -- -- case DW_OP_ge: -- Debug (15, "OP_ge\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (sword (as, tmp1) >= sword (as, tmp2)); -- break; -- -- case DW_OP_eq: -- Debug (15, "OP_eq\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (sword (as, tmp1) == sword (as, tmp2)); -- break; -- -- case DW_OP_lt: -- Debug (15, "OP_lt\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (sword (as, tmp1) < sword (as, tmp2)); -- break; -- -- case DW_OP_gt: -- Debug (15, "OP_gt\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (sword (as, tmp1) > sword (as, tmp2)); -- break; -- -- case DW_OP_ne: -- Debug (15, "OP_ne\n"); -- tmp1 = pop (); -- tmp2 = pop (); -- push (sword (as, tmp1) != sword (as, tmp2)); -- break; -- -- case DW_OP_skip: -- Debug (15, "OP_skip(%d)\n", (int16_t) operand1); -- *addr += (int16_t) operand1; -- break; -- -- case DW_OP_bra: -- Debug (15, "OP_skip(%d)\n", (int16_t) operand1); -- tmp1 = pop (); -- if (tmp1) -- *addr += (int16_t) operand1; -- break; -- -- case DW_OP_nop: -- Debug (15, "OP_nop\n"); -- break; -- -- case DW_OP_call2: -- case DW_OP_call4: -- case DW_OP_call_ref: -- case DW_OP_fbreg: -- case DW_OP_piece: -- case DW_OP_push_object_address: -- case DW_OP_xderef: -- case DW_OP_xderef_size: -- default: -- Debug (1, "Unexpected opcode 0x%x\n", opcode); -- return -UNW_EINVAL; -- } -+ { -+ case DW_OP_lit0: case DW_OP_lit1: case DW_OP_lit2: -+ case DW_OP_lit3: case DW_OP_lit4: case DW_OP_lit5: -+ case DW_OP_lit6: case DW_OP_lit7: case DW_OP_lit8: -+ case DW_OP_lit9: case DW_OP_lit10: case DW_OP_lit11: -+ case DW_OP_lit12: case DW_OP_lit13: case DW_OP_lit14: -+ case DW_OP_lit15: case DW_OP_lit16: case DW_OP_lit17: -+ case DW_OP_lit18: case DW_OP_lit19: case DW_OP_lit20: -+ case DW_OP_lit21: case DW_OP_lit22: case DW_OP_lit23: -+ case DW_OP_lit24: case DW_OP_lit25: case DW_OP_lit26: -+ case DW_OP_lit27: case DW_OP_lit28: case DW_OP_lit29: -+ case DW_OP_lit30: case DW_OP_lit31: -+ Debug (15, "OP_lit(%d)\n", (int) opcode - DW_OP_lit0); -+ push (opcode - DW_OP_lit0); -+ break; -+ -+ case DW_OP_breg0: case DW_OP_breg1: case DW_OP_breg2: -+ case DW_OP_breg3: case DW_OP_breg4: case DW_OP_breg5: -+ case DW_OP_breg6: case DW_OP_breg7: case DW_OP_breg8: -+ case DW_OP_breg9: case DW_OP_breg10: case DW_OP_breg11: -+ case DW_OP_breg12: case DW_OP_breg13: case DW_OP_breg14: -+ case DW_OP_breg15: case DW_OP_breg16: case DW_OP_breg17: -+ case DW_OP_breg18: case DW_OP_breg19: case DW_OP_breg20: -+ case DW_OP_breg21: case DW_OP_breg22: case DW_OP_breg23: -+ case DW_OP_breg24: case DW_OP_breg25: case DW_OP_breg26: -+ case DW_OP_breg27: case DW_OP_breg28: case DW_OP_breg29: -+ case DW_OP_breg30: case DW_OP_breg31: -+ Debug (15, "OP_breg(r%d,0x%lx)\n", -+ (int) opcode - DW_OP_breg0, (unsigned long) operand1); -+ if ((ret = unw_get_reg (dwarf_to_cursor (c), -+ dwarf_to_unw_regnum (opcode - DW_OP_breg0), -+ &tmp1)) < 0) -+ return ret; -+ push (tmp1 + operand1); -+ break; -+ -+ case DW_OP_bregx: -+ Debug (15, "OP_bregx(r%d,0x%lx)\n", -+ (int) operand1, (unsigned long) operand2); -+ if ((ret = unw_get_reg (dwarf_to_cursor (c), -+ dwarf_to_unw_regnum (operand1), &tmp1)) < 0) -+ return ret; -+ push (tmp1 + operand2); -+ break; -+ -+ case DW_OP_reg0: case DW_OP_reg1: case DW_OP_reg2: -+ case DW_OP_reg3: case DW_OP_reg4: case DW_OP_reg5: -+ case DW_OP_reg6: case DW_OP_reg7: case DW_OP_reg8: -+ case DW_OP_reg9: case DW_OP_reg10: case DW_OP_reg11: -+ case DW_OP_reg12: case DW_OP_reg13: case DW_OP_reg14: -+ case DW_OP_reg15: case DW_OP_reg16: case DW_OP_reg17: -+ case DW_OP_reg18: case DW_OP_reg19: case DW_OP_reg20: -+ case DW_OP_reg21: case DW_OP_reg22: case DW_OP_reg23: -+ case DW_OP_reg24: case DW_OP_reg25: case DW_OP_reg26: -+ case DW_OP_reg27: case DW_OP_reg28: case DW_OP_reg29: -+ case DW_OP_reg30: case DW_OP_reg31: -+ Debug (15, "OP_reg(r%d)\n", (int) opcode - DW_OP_reg0); -+ *valp = dwarf_to_unw_regnum (opcode - DW_OP_reg0); -+ *is_register = 1; -+ return 0; -+ -+ case DW_OP_regx: -+ Debug (15, "OP_regx(r%d)\n", (int) operand1); -+ *valp = dwarf_to_unw_regnum (operand1); -+ *is_register = 1; -+ return 0; -+ -+ case DW_OP_addr: -+ case DW_OP_const1u: -+ case DW_OP_const2u: -+ case DW_OP_const4u: -+ case DW_OP_const8u: -+ case DW_OP_constu: -+ case DW_OP_const8s: -+ case DW_OP_consts: -+ Debug (15, "OP_const(0x%lx)\n", (unsigned long) operand1); -+ push (operand1); -+ break; -+ -+ case DW_OP_const1s: -+ if (operand1 & 0x80) -+ operand1 |= ((unw_word_t) -1) << 8; -+ Debug (15, "OP_const1s(%ld)\n", (long) operand1); -+ push (operand1); -+ break; -+ -+ case DW_OP_const2s: -+ if (operand1 & 0x8000) -+ operand1 |= ((unw_word_t) -1) << 16; -+ Debug (15, "OP_const2s(%ld)\n", (long) operand1); -+ push (operand1); -+ break; -+ -+ case DW_OP_const4s: -+ if (operand1 & 0x80000000) -+ operand1 |= (((unw_word_t) -1) << 16) << 16; -+ Debug (15, "OP_const4s(%ld)\n", (long) operand1); -+ push (operand1); -+ break; -+ -+ case DW_OP_deref: -+ Debug (15, "OP_deref\n"); -+ tmp1 = pop (); -+ if ((ret = dwarf_readw (as, a, &tmp1, &tmp2, arg)) < 0) -+ return ret; -+ push (tmp2); -+ break; -+ -+ case DW_OP_deref_size: -+ Debug (15, "OP_deref_size(%d)\n", (int) operand1); -+ tmp1 = pop (); -+ switch (operand1) -+ { -+ default: -+ Debug (1, "Unexpected DW_OP_deref_size size %d\n", -+ (int) operand1); -+ return -UNW_EINVAL; -+ -+ case 1: -+ if ((ret = dwarf_readu8 (as, a, &tmp1, &u8, arg)) < 0) -+ return ret; -+ tmp2 = u8; -+ break; -+ -+ case 2: -+ if ((ret = dwarf_readu16 (as, a, &tmp1, &u16, arg)) < 0) -+ return ret; -+ tmp2 = u16; -+ break; -+ -+ case 3: -+ case 4: -+ if ((ret = dwarf_readu32 (as, a, &tmp1, &u32, arg)) < 0) -+ return ret; -+ tmp2 = u32; -+ if (operand1 == 3) -+ { -+ if (dwarf_is_big_endian (as)) -+ tmp2 >>= 8; -+ else -+ tmp2 &= 0xffffff; -+ } -+ break; -+ case 5: -+ case 6: -+ case 7: -+ case 8: -+ if ((ret = dwarf_readu64 (as, a, &tmp1, &u64, arg)) < 0) -+ return ret; -+ tmp2 = u64; -+ if (operand1 != 8) -+ { -+ if (dwarf_is_big_endian (as)) -+ tmp2 >>= 64 - 8 * operand1; -+ else -+ tmp2 &= (~ (unw_word_t) 0) << (8 * operand1); -+ } -+ break; -+ } -+ push (tmp2); -+ break; -+ -+ case DW_OP_dup: -+ Debug (15, "OP_dup\n"); -+ push (pick (0)); -+ break; -+ -+ case DW_OP_drop: -+ Debug (15, "OP_drop\n"); -+ (void) pop (); -+ break; -+ -+ case DW_OP_pick: -+ Debug (15, "OP_pick(%d)\n", (int) operand1); -+ push (pick (operand1)); -+ break; -+ -+ case DW_OP_over: -+ Debug (15, "OP_over\n"); -+ push (pick (1)); -+ break; -+ -+ case DW_OP_swap: -+ Debug (15, "OP_swap\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (tmp1); -+ push (tmp2); -+ break; -+ -+ case DW_OP_rot: -+ Debug (15, "OP_rot\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ tmp3 = pop (); -+ push (tmp1); -+ push (tmp3); -+ push (tmp2); -+ break; -+ -+ case DW_OP_abs: -+ Debug (15, "OP_abs\n"); -+ tmp1 = pop (); -+ if (tmp1 & ((unw_word_t) 1 << (8 * dwarf_addr_size (as) - 1))) -+ tmp1 = -tmp1; -+ push (tmp1); -+ break; -+ -+ case DW_OP_and: -+ Debug (15, "OP_and\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (tmp1 & tmp2); -+ break; -+ -+ case DW_OP_div: -+ Debug (15, "OP_div\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ if (tmp1) -+ tmp1 = sword (as, tmp2) / sword (as, tmp1); -+ push (tmp1); -+ break; -+ -+ case DW_OP_minus: -+ Debug (15, "OP_minus\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ tmp1 = tmp2 - tmp1; -+ push (tmp1); -+ break; -+ -+ case DW_OP_mod: -+ Debug (15, "OP_mod\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ if (tmp1) -+ tmp1 = tmp2 % tmp1; -+ push (tmp1); -+ break; -+ -+ case DW_OP_mul: -+ Debug (15, "OP_mul\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ if (tmp1) -+ tmp1 = tmp2 * tmp1; -+ push (tmp1); -+ break; -+ -+ case DW_OP_neg: -+ Debug (15, "OP_neg\n"); -+ push (-pop ()); -+ break; -+ -+ case DW_OP_not: -+ Debug (15, "OP_not\n"); -+ push (~pop ()); -+ break; -+ -+ case DW_OP_or: -+ Debug (15, "OP_or\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (tmp1 | tmp2); -+ break; -+ -+ case DW_OP_plus: -+ Debug (15, "OP_plus\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (tmp1 + tmp2); -+ break; -+ -+ case DW_OP_plus_uconst: -+ Debug (15, "OP_plus_uconst(%lu)\n", (unsigned long) operand1); -+ tmp1 = pop (); -+ push (tmp1 + operand1); -+ break; -+ -+ case DW_OP_shl: -+ Debug (15, "OP_shl\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (tmp2 << tmp1); -+ break; -+ -+ case DW_OP_shr: -+ Debug (15, "OP_shr\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (tmp2 >> tmp1); -+ break; -+ -+ case DW_OP_shra: -+ Debug (15, "OP_shra\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (sword (as, tmp2) >> tmp1); -+ break; -+ -+ case DW_OP_xor: -+ Debug (15, "OP_xor\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (tmp1 ^ tmp2); -+ break; -+ -+ case DW_OP_le: -+ Debug (15, "OP_le\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (sword (as, tmp2) <= sword (as, tmp1)); -+ break; -+ -+ case DW_OP_ge: -+ Debug (15, "OP_ge\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (sword (as, tmp2) >= sword (as, tmp1)); -+ break; -+ -+ case DW_OP_eq: -+ Debug (15, "OP_eq\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (sword (as, tmp2) == sword (as, tmp1)); -+ break; -+ -+ case DW_OP_lt: -+ Debug (15, "OP_lt\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (sword (as, tmp2) < sword (as, tmp1)); -+ break; -+ -+ case DW_OP_gt: -+ Debug (15, "OP_gt\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (sword (as, tmp2) > sword (as, tmp1)); -+ break; -+ -+ case DW_OP_ne: -+ Debug (15, "OP_ne\n"); -+ tmp1 = pop (); -+ tmp2 = pop (); -+ push (sword (as, tmp2) != sword (as, tmp1)); -+ break; -+ -+ case DW_OP_skip: -+ Debug (15, "OP_skip(%d)\n", (int16_t) operand1); -+ *addr += (int16_t) operand1; -+ break; -+ -+ case DW_OP_bra: -+ Debug (15, "OP_skip(%d)\n", (int16_t) operand1); -+ tmp1 = pop (); -+ if (tmp1) -+ *addr += (int16_t) operand1; -+ break; -+ -+ case DW_OP_nop: -+ Debug (15, "OP_nop\n"); -+ break; -+ -+ case DW_OP_call2: -+ case DW_OP_call4: -+ case DW_OP_call_ref: -+ case DW_OP_fbreg: -+ case DW_OP_piece: -+ case DW_OP_push_object_address: -+ case DW_OP_xderef: -+ case DW_OP_xderef_size: -+ default: -+ Debug (1, "Unexpected opcode 0x%x\n", opcode); -+ return -UNW_EINVAL; -+ } - } - *valp = pop (); - Debug (14, "final value = 0x%lx\n", (unsigned long) *valp); -diff --git a/frysk-imports/libunwind/src/dwarf/Gfde.c b/frysk-imports/libunwind/src/dwarf/Gfde.c -index 28b5fea..6cd4a64 100644 ---- a/frysk-imports/libunwind/src/dwarf/Gfde.c -+++ b/frysk-imports/libunwind/src/dwarf/Gfde.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - Copyright (c) 2008 Red Hat, Inc. - Contributed by Mark Wielaard - -@@ -34,8 +34,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - repeated. */ - static inline int - parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, -- const unw_proc_info_t *pi, struct dwarf_cie_info *dci, -- unw_word_t base, void *arg) -+ const unw_proc_info_t *pi, struct dwarf_cie_info *dci, -+ int is_debug_frame, void *arg) - { - uint8_t version, ch, augstr[5], fde_encoding, handler_encoding; - unw_word_t len, cie_end_addr, aug_size; -@@ -43,14 +43,8 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - uint64_t u64val; - size_t i; - int ret; -- -- // FRYSK LOCAL. Upstream uses (base != 0) which doesn't work for -- // frysk since there is no reason the given address space wouldn't -- // be based on zero (in general it is for debug_frame). -- int debug_frame = (pi->format == UNW_INFO_FORMAT_TABLE); -- --# define STR2(x) #x --# define STR(x) STR2(x) -+# define STR2(x) #x -+# define STR(x) STR2(x) - - /* Pick appropriate default for FDE-encoding. DWARF spec says - start-IP (initial_location) and the code-size (address_range) are -@@ -59,9 +53,9 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - for fde_encoding. */ - switch (dwarf_addr_size (as)) - { -- case 4: fde_encoding = DW_EH_PE_udata4; break; -- case 8: fde_encoding = DW_EH_PE_udata8; break; -- default: fde_encoding = DW_EH_PE_omit; break; -+ case 4: fde_encoding = DW_EH_PE_udata4; break; -+ case 8: fde_encoding = DW_EH_PE_udata8; break; -+ default: fde_encoding = DW_EH_PE_omit; break; - } - - dci->lsda_encoding = DW_EH_PE_omit; -@@ -75,37 +69,37 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - /* the CIE is in the 32-bit DWARF format */ - uint32_t cie_id; - /* DWARF says CIE id should be 0xffffffff, but in .eh_frame, it's 0 */ -- const uint32_t expected_id = (debug_frame) ? 0xffffffff : 0; -+ const uint32_t expected_id = (is_debug_frame) ? 0xffffffff : 0; - - len = u32val; - cie_end_addr = addr + len; - if ((ret = dwarf_readu32 (as, a, &addr, &cie_id, arg)) < 0) -- return ret; -+ return ret; - if (cie_id != expected_id) -- { -- Debug (1, "Unexpected CIE id %x\n", cie_id); -- return -UNW_EINVAL; -- } -+ { -+ Debug (1, "Unexpected CIE id %x\n", cie_id); -+ return -UNW_EINVAL; -+ } - } - else - { - /* the CIE is in the 64-bit DWARF format */ - uint64_t cie_id; - /* DWARF says CIE id should be 0xffffffffffffffff, but in -- .eh_frame, it's 0 */ -- const uint64_t expected_id = (debug_frame) ? 0xffffffffffffffffull : 0; -+ .eh_frame, it's 0 */ -+ const uint64_t expected_id = (is_debug_frame) ? 0xffffffffffffffffull : 0; - - if ((ret = dwarf_readu64 (as, a, &addr, &u64val, arg)) < 0) -- return ret; -+ return ret; - len = u64val; - cie_end_addr = addr + len; - if ((ret = dwarf_readu64 (as, a, &addr, &cie_id, arg)) < 0) -- return ret; -+ return ret; - if (cie_id != expected_id) -- { -- Debug (1, "Unexpected CIE id %llx\n", (long long) cie_id); -- return -UNW_EINVAL; -- } -+ { -+ Debug (1, "Unexpected CIE id %llx\n", (long long) cie_id); -+ return -UNW_EINVAL; -+ } - } - dci->cie_instr_end = cie_end_addr; - -@@ -115,7 +109,7 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - if (version != 1 && version != DWARF_CIE_VERSION) - { - Debug (1, "Got CIE version %u, expected version 1 or " -- STR (DWARF_CIE_VERSION) "\n", version); -+ STR (DWARF_CIE_VERSION) "\n", version); - return -UNW_EBADVERSION; - } - -@@ -124,13 +118,13 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - for (i = 0;;) - { - if ((ret = dwarf_readu8 (as, a, &addr, &ch, arg)) < 0) -- return ret; -+ return ret; - - if (!ch) -- break; /* end of augmentation string */ -+ break; /* end of augmentation string */ - - if (i < sizeof (augstr) - 1) -- augstr[i++] = ch; -+ augstr[i++] = ch; - } - - if ((ret = dwarf_read_uleb128 (as, a, &addr, &dci->code_align, arg)) < 0 -@@ -141,11 +135,11 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - if (version == 1) - { - if ((ret = dwarf_readu8 (as, a, &addr, &ch, arg)) < 0) -- return ret; -+ return ret; - dci->ret_addr_column = ch; - } - else if ((ret = dwarf_read_uleb128 (as, a, &addr, &dci->ret_addr_column, -- arg)) < 0) -+ arg)) < 0) - return ret; - - i = 0; -@@ -153,7 +147,7 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - { - dci->sized_augmentation = 1; - if ((ret = dwarf_read_uleb128 (as, a, &addr, &aug_size, arg)) < 0) -- return ret; -+ return ret; - i++; - } - -@@ -161,22 +155,22 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - switch (augstr[i]) - { - case 'L': -- /* read the LSDA pointer-encoding format. */ -- if ((ret = dwarf_readu8 (as, a, &addr, &ch, arg)) < 0) -- return ret; -- dci->lsda_encoding = ch; -- break; -+ /* read the LSDA pointer-encoding format. */ -+ if ((ret = dwarf_readu8 (as, a, &addr, &ch, arg)) < 0) -+ return ret; -+ dci->lsda_encoding = ch; -+ break; - - case 'R': -- /* read the FDE pointer-encoding format. */ -- if ((ret = dwarf_readu8 (as, a, &addr, &fde_encoding, arg)) < 0) -- return ret; -- break; -+ /* read the FDE pointer-encoding format. */ -+ if ((ret = dwarf_readu8 (as, a, &addr, &fde_encoding, arg)) < 0) -+ return ret; -+ break; - - case 'P': -- /* read the personality-routine pointer-encoding format. */ -- if ((ret = dwarf_readu8 (as, a, &addr, &handler_encoding, arg)) < 0) -- return ret; -+ /* read the personality-routine pointer-encoding format. */ -+ if ((ret = dwarf_readu8 (as, a, &addr, &handler_encoding, arg)) < 0) -+ return ret; - // FRYSK LOCAL - // We never want to actually read the personality routine address - // since it can be stored anywhere and currently we are just -@@ -186,33 +180,34 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - // main address space. - handler_encoding &= ~DW_EH_PE_indirect; - // END FRYSK LOCAL -- if ((ret = dwarf_read_encoded_pointer (as, a, &addr, handler_encoding, -- pi, &dci->handler, arg)) < 0) -- return ret; -- break; -+ if ((ret = dwarf_read_encoded_pointer (as, a, &addr, handler_encoding, -+ pi, &dci->handler, arg)) < 0) -+ return ret; -+ break; - - case 'S': -- /* Original meaning of this augmentation marker. */ -- dci->signal_frame = 1; -- /* Temporarily set it to one so dwarf_parse_fde() knows that -- it should fetch the actual ABI/TAG pair from the FDE. */ -- dci->have_abi_marker = 1; -- break; -+ /* This is a signal frame. */ -+ dci->signal_frame = 1; -+ -+ /* Temporarily set it to one so dwarf_parse_fde() knows that -+ it should fetch the actual ABI/TAG pair from the FDE. */ -+ dci->have_abi_marker = 1; -+ break; - - default: -- Debug (1, "Unexpected augmentation string `%s'\n", augstr); -- if (dci->sized_augmentation) -- /* If we have the size of the augmentation body, we can skip -- over the parts that we don't understand, so we're OK. */ -- goto done; -- else -- return -UNW_EINVAL; -+ Debug (1, "Unexpected augmentation string `%s'\n", augstr); -+ if (dci->sized_augmentation) -+ /* If we have the size of the augmentation body, we can skip -+ over the parts that we don't understand, so we're OK. */ -+ goto done; -+ else -+ return -UNW_EINVAL; - } - done: - dci->fde_encoding = fde_encoding; - dci->cie_instr_start = addr; - Debug (15, "CIE parsed OK, augmentation = \"%s\", handler=0x%lx\n", -- augstr, (long) dci->handler); -+ augstr, (long) dci->handler); - return 0; - } - -@@ -223,9 +218,10 @@ parse_cie (unw_addr_space_t as, unw_accessors_t *a, unw_word_t addr, - - HIDDEN int - dwarf_extract_proc_info_from_fde (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addrp, unw_proc_info_t *pi, -- int need_unwind_info, unw_word_t base, -- void *arg) -+ unw_word_t *addrp, unw_proc_info_t *pi, -+ unw_word_t base, -+ int need_unwind_info, int is_debug_frame, -+ void *arg) - { - unw_word_t fde_end_addr, cie_addr, cie_offset_addr, aug_end_addr = 0; - unw_word_t start_ip, ip_range, aug_size, addr = *addrp; -@@ -234,11 +230,6 @@ dwarf_extract_proc_info_from_fde (unw_addr_space_t as, unw_accessors_t *a, - uint64_t u64val; - uint32_t u32val; - -- // FRYSK LOCAL. Upstream uses (base != 0) which doesn't work for -- // frysk since there is no reason the given address space wouldn't -- // be based on zero (in general it is for debug_frame). -- int debug_frame = (pi->format == UNW_INFO_FORMAT_TABLE); -- - Debug (12, "FDE @ 0x%lx\n", (long) addr); - - memset (&dci, 0, sizeof (dci)); -@@ -248,12 +239,12 @@ dwarf_extract_proc_info_from_fde (unw_addr_space_t as, unw_accessors_t *a, - - if (u32val != 0xffffffff) - { -- uint32_t cie_offset; -+ int32_t cie_offset; - - /* In some configurations, an FDE with a 0 length indicates the -- end of the FDE-table. */ -+ end of the FDE-table. */ - if (u32val == 0) -- return -UNW_ENOINFO; -+ return -UNW_ENOINFO; - - /* the FDE is in the 32-bit DWARF format */ - -@@ -261,61 +252,61 @@ dwarf_extract_proc_info_from_fde (unw_addr_space_t as, unw_accessors_t *a, - cie_offset_addr = addr; - - if ((ret = dwarf_reads32 (as, a, &addr, &cie_offset, arg)) < 0) -- return ret; -+ return ret; - - /* DWARF spec says CIE_id is 0xffffffff (for 32-bit ELF) or - 0xffffffffffffffff (for 64-bit ELF). However, the GNU toolchain - uses 0. */ -- if ((debug_frame && cie_offset == 0xffffffff) -- || (! debug_frame && cie_offset == 0)) -- /* ignore CIEs (happens during linear searches) */ -- return 0; -- -- /* DWARF says that the CIE_pointer in the FDE is a -- .debug_frame-relative offset, but the GCC-generated .eh_frame -- sections instead store a "pcrelative" offset, which is just -- as fine as it's self-contained. */ -- if (debug_frame) -- cie_addr = base + cie_offset; -+ if ((is_debug_frame && cie_offset == 0xffffffffL) -+ || (! is_debug_frame && cie_offset == 0)) -+ /* ignore CIEs (happens during linear searches) */ -+ return 0; -+ -+ if (is_debug_frame) -+ cie_addr = base + cie_offset; - else -- cie_addr = cie_offset_addr - cie_offset; -+ /* DWARF says that the CIE_pointer in the FDE is a -+ .debug_frame-relative offset, but the GCC-generated .eh_frame -+ sections instead store a "pcrelative" offset, which is just -+ as fine as it's self-contained. */ -+ cie_addr = cie_offset_addr - cie_offset; - } - else - { -- uint64_t cie_offset; -+ int64_t cie_offset; - - /* the FDE is in the 64-bit DWARF format */ - - if ((ret = dwarf_readu64 (as, a, &addr, &u64val, arg)) < 0) -- return ret; -+ return ret; - - *addrp = fde_end_addr = addr + u64val; - cie_offset_addr = addr; - - if ((ret = dwarf_reads64 (as, a, &addr, &cie_offset, arg)) < 0) -- return ret; -+ return ret; - - /* DWARF spec says CIE_id is 0xffffffff (for 32-bit ELF) or - 0xffffffffffffffff (for 64-bit ELF). However, the GNU toolchain - uses 0. */ -- if ((debug_frame && cie_offset == 0xffffffffffffffffull) -- || (! debug_frame && cie_offset == 0)) -- /* ignore CIEs (happens during linear searches) */ -- return 0; -- -- /* DWARF says that the CIE_pointer in the FDE is a -- .debug_frame-relative offset, but the GCC-generated .eh_frame -- sections instead store a "pcrelative" offset, which is just -- as fine as it's self-contained. */ -- if (debug_frame) -- cie_addr = base + cie_offset; -+ if ((is_debug_frame && cie_offset == 0xffffffffffffffffLL) -+ || (! is_debug_frame && cie_offset == 0)) -+ /* ignore CIEs (happens during linear searches) */ -+ return 0; -+ -+ if (is_debug_frame) -+ cie_addr = base + cie_offset; - else -- cie_addr = (unw_word_t) ((uint64_t) cie_offset_addr - cie_offset); -+ /* DWARF says that the CIE_pointer in the FDE is a -+ .debug_frame-relative offset, but the GCC-generated .eh_frame -+ sections instead store a "pcrelative" offset, which is just -+ as fine as it's self-contained. */ -+ cie_addr = (unw_word_t) ((uint64_t) cie_offset_addr - cie_offset); - } - -- Debug (15, "looking for CIE at address %x\n", (int) cie_addr); -+ Debug (15, "looking for CIE at address %lx\n", (long) cie_addr); - -- if ((ret = parse_cie (as, a, cie_addr, pi, &dci, base, arg)) < 0) -+ if ((ret = parse_cie (as, a, cie_addr, pi, &dci, is_debug_frame, arg)) < 0) - return ret; - - /* IP-range has same encoding as FDE pointers, except that it's -@@ -323,9 +314,9 @@ dwarf_extract_proc_info_from_fde (unw_addr_space_t as, unw_accessors_t *a, - ip_range_encoding = dci.fde_encoding & DW_EH_PE_FORMAT_MASK; - - if ((ret = dwarf_read_encoded_pointer (as, a, &addr, dci.fde_encoding, -- pi, &start_ip, arg)) < 0 -+ pi, &start_ip, arg)) < 0 - || (ret = dwarf_read_encoded_pointer (as, a, &addr, ip_range_encoding, -- pi, &ip_range, arg)) < 0) -+ pi, &ip_range, arg)) < 0) - return ret; - pi->start_ip = start_ip; - pi->end_ip = start_ip + ip_range; -@@ -334,16 +325,16 @@ dwarf_extract_proc_info_from_fde (unw_addr_space_t as, unw_accessors_t *a, - if (dci.sized_augmentation) - { - if ((ret = dwarf_read_uleb128 (as, a, &addr, &aug_size, arg)) < 0) -- return ret; -+ return ret; - aug_end_addr = addr + aug_size; - } - - if ((ret = dwarf_read_encoded_pointer (as, a, &addr, dci.lsda_encoding, -- pi, &pi->lsda, arg)) < 0) -+ pi, &pi->lsda, arg)) < 0) - return ret; - - Debug (15, "FDE covers IP 0x%lx-0x%lx, LSDA=0x%lx\n", -- (long) pi->start_ip, (long) pi->end_ip, (long) pi->lsda); -+ (long) pi->start_ip, (long) pi->end_ip, (long) pi->lsda); - - if (need_unwind_info) - { -@@ -352,21 +343,21 @@ dwarf_extract_proc_info_from_fde (unw_addr_space_t as, unw_accessors_t *a, - pi->unwind_info_size = sizeof (dci); - pi->unwind_info = mempool_alloc (&dwarf_cie_info_pool); - if (!pi->unwind_info) -- return -UNW_ENOMEM; -+ return -UNW_ENOMEM; - - if (dci.have_abi_marker) -- { -- if ((ret = dwarf_readu16 (as, a, &addr, &dci.abi, arg)) < 0 -- || (ret = dwarf_readu16 (as, a, &addr, &dci.tag, arg)) < 0) -- return ret; -- Debug (13, "Found ABI marker = (abi=%u, tag=%u)\n", -- dci.abi, dci.tag); -- } -+ { -+ if ((ret = dwarf_readu16 (as, a, &addr, &dci.abi, arg)) < 0 -+ || (ret = dwarf_readu16 (as, a, &addr, &dci.tag, arg)) < 0) -+ return ret; -+ Debug (13, "Found ABI marker = (abi=%u, tag=%u)\n", -+ dci.abi, dci.tag); -+ } - - if (dci.sized_augmentation) -- dci.fde_instr_start = aug_end_addr; -+ dci.fde_instr_start = aug_end_addr; - else -- dci.fde_instr_start = addr; -+ dci.fde_instr_start = addr; - dci.fde_instr_end = fde_end_addr; - #ifndef UNW_LOCAL_ONLY - dci.as = as; -diff --git a/frysk-imports/libunwind/src/dwarf/Gfind_proc_info-lsb.c b/frysk-imports/libunwind/src/dwarf/Gfind_proc_info-lsb.c -index 86d3454..6e1f4c3 100644 ---- a/frysk-imports/libunwind/src/dwarf/Gfind_proc_info-lsb.c -+++ b/frysk-imports/libunwind/src/dwarf/Gfind_proc_info-lsb.c -@@ -1,8 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -- Copyright (c) 2008, Red Hat, Inc. -- Contributed by Mark Wielaard -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -28,7 +26,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - /* Locate an FDE via the ELF data-structures defined by LSB v1.3 - (http://www.linuxbase.org/spec/). */ - --#include - #include - #include - #include -@@ -49,27 +46,13 @@ struct table_entry - #include "os-linux.h" - #endif - --struct callback_data -- { -- /* in: */ -- unw_word_t ip; /* instruction-pointer we're looking for */ -- unw_proc_info_t *pi; /* proc-info pointer */ -- int need_unwind_info; -- /* out: */ -- int single_fde; /* did we find a single FDE? (vs. a table) */ -- unw_dyn_info_t di; /* table info (if single_fde is false) */ -- unw_dyn_info_t di_debug; /* additional table info for .debug_frame */ -- }; -- --#endif /* !UNW_REMOTE_ONLY */ -- - static int - linear_search (unw_addr_space_t as, unw_word_t ip, -- unw_word_t eh_frame_start, unw_word_t eh_frame_end, -- unw_word_t fde_count, -- unw_proc_info_t *pi, int need_unwind_info, void *arg) -+ unw_word_t eh_frame_start, unw_word_t eh_frame_end, -+ unw_word_t fde_count, -+ unw_proc_info_t *pi, int need_unwind_info, void *arg) - { -- unw_accessors_t *a = unw_get_accessors (as); -+ unw_accessors_t *a = unw_get_accessors (unw_local_addr_space); - unw_word_t i = 0, fde_addr, addr = eh_frame_start; - int ret; - -@@ -77,28 +60,29 @@ linear_search (unw_addr_space_t as, unw_word_t ip, - { - fde_addr = addr; - if ((ret = dwarf_extract_proc_info_from_fde (as, a, &addr, pi, -- need_unwind_info, -- eh_frame_start, arg)) -- < 0) -- return ret; -+ eh_frame_start, -+ 0, 0, arg)) < 0) -+ return ret; - - if (ip >= pi->start_ip && ip < pi->end_ip) -- { -- if (!need_unwind_info) -- return 1; -- addr = fde_addr; -- if ((ret = dwarf_extract_proc_info_from_fde (as, a, &addr, pi, -- need_unwind_info, -- eh_frame_start, arg)) -- < 0) -- return ret; -- return 1; -- } -+ { -+ if (!need_unwind_info) -+ return 1; -+ addr = fde_addr; -+ if ((ret = dwarf_extract_proc_info_from_fde (as, a, &addr, pi, -+ eh_frame_start, -+ need_unwind_info, 0, -+ arg)) -+ < 0) -+ return ret; -+ return 1; -+ } - } - return -UNW_ENOINFO; - } -+#endif /* !UNW_REMOTE_ONLY */ - --#ifndef UNW_REMOTE_ONLY -+#ifdef CONFIG_DEBUG_FRAME - /* Load .debug_frame section from FILE. Allocates and returns space - in *BUF, and sets *BUFSIZE to its size. IS_LOCAL is 1 if using the - local process, in which case we can search the system debug file -@@ -114,8 +98,8 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) - FILE *f; - Elf_W (Ehdr) ehdr; - Elf_W (Half) shstrndx; -- Elf_W (Shdr) *sec_hdrs; -- char *stringtab; -+ Elf_W (Shdr) *sec_hdrs = NULL; -+ char *stringtab = NULL; - unsigned int i; - size_t linksize = 0; - char *linkbuf = NULL; -@@ -128,7 +112,8 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) - if (!f) - return 1; - -- fread (&ehdr, sizeof (Elf_W (Ehdr)), 1, f); -+ if (fread (&ehdr, sizeof (Elf_W (Ehdr)), 1, f) != 1) -+ goto file_error; - - shstrndx = ehdr.e_shstrndx; - -@@ -137,13 +122,15 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) - - fseek (f, ehdr.e_shoff, SEEK_SET); - sec_hdrs = calloc (ehdr.e_shnum, sizeof (Elf_W (Shdr))); -- fread (sec_hdrs, sizeof (Elf_W (Shdr)), ehdr.e_shnum, f); -+ if (fread (sec_hdrs, sizeof (Elf_W (Shdr)), ehdr.e_shnum, f) != ehdr.e_shnum) -+ goto file_error; - -- Debug (4, "loading string table of size %d\n", -- sec_hdrs[shstrndx].sh_size); -+ Debug (4, "loading string table of size %zd\n", -+ sec_hdrs[shstrndx].sh_size); - stringtab = malloc (sec_hdrs[shstrndx].sh_size); - fseek (f, sec_hdrs[shstrndx].sh_offset, SEEK_SET); -- fread (stringtab, 1, sec_hdrs[shstrndx].sh_size, f); -+ if (fread (stringtab, 1, sec_hdrs[shstrndx].sh_size, f) != sec_hdrs[shstrndx].sh_size) -+ goto file_error; - - for (i = 1; i < ehdr.e_shnum && *buf == NULL; i++) - { -@@ -151,26 +138,28 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) - - if (strcmp (secname, ".debug_frame") == 0) - { -- *bufsize = sec_hdrs[i].sh_size; -- *buf = malloc (*bufsize); -- -- fseek (f, sec_hdrs[i].sh_offset, SEEK_SET); -- fread (*buf, 1, *bufsize, f); -- -- Debug (4, "read %d bytes of .debug_frame from offset %d\n", -- *bufsize, sec_hdrs[i].sh_offset); -- } -- else if (is_local >= 0 && strcmp (secname, ".gnu_debuglink") == 0) -- { -- linksize = sec_hdrs[i].sh_size; -- linkbuf = malloc (linksize); -- -- fseek (f, sec_hdrs[i].sh_offset, SEEK_SET); -- fread (linkbuf, 1, linksize, f); -- -- Debug (4, "read %d bytes of .gnu_debuglink from offset %d\n", -- *bufsize, sec_hdrs[i].sh_offset); -- } -+ *bufsize = sec_hdrs[i].sh_size; -+ *buf = malloc (*bufsize); -+ -+ fseek (f, sec_hdrs[i].sh_offset, SEEK_SET); -+ if (fread (*buf, 1, *bufsize, f) != *bufsize) -+ goto file_error; -+ -+ Debug (4, "read %zd bytes of .debug_frame from offset %zd\n", -+ *bufsize, sec_hdrs[i].sh_offset); -+ } -+ else if (strcmp (secname, ".gnu_debuglink") == 0) -+ { -+ linksize = sec_hdrs[i].sh_size; -+ linkbuf = malloc (linksize); -+ -+ fseek (f, sec_hdrs[i].sh_offset, SEEK_SET); -+ if (fread (linkbuf, 1, linksize, f) != linksize) -+ goto file_error; -+ -+ Debug (4, "read %zd bytes of .gnu_debuglink from offset %zd\n", -+ linksize, sec_hdrs[i].sh_offset); -+ } - } - - free (stringtab); -@@ -178,6 +167,13 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) - - fclose (f); - -+ /* Ignore separate debug files which contain a .gnu_debuglink section. */ -+ if (linkbuf && is_local == -1) -+ { -+ free (linkbuf); -+ return 1; -+ } -+ - if (*buf == NULL && linkbuf != NULL && memchr (linkbuf, 0, linksize) != NULL) - { - char *newname, *basedir, *p; -@@ -187,16 +183,16 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) - /* XXX: Don't bother with the checksum; just search for the file. */ - basedir = malloc (strlen (file) + 1); - newname = malloc (strlen (linkbuf) + strlen (debugdir) -- + strlen (file) + 9); -+ + strlen (file) + 9); - - p = strrchr (file, '/'); - if (p != NULL) -- { -- memcpy (basedir, file, p - file); -- basedir[p - file] = '\0'; -- } -+ { -+ memcpy (basedir, file, p - file); -+ basedir[p - file] = '\0'; -+ } - else -- basedir[0] = 0; -+ basedir[0] = 0; - - strcpy (newname, basedir); - strcat (newname, "/"); -@@ -204,21 +200,21 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) - ret = load_debug_frame (newname, buf, bufsize, -1); - - if (ret == 1) -- { -- strcpy (newname, basedir); -- strcat (newname, "/.debug/"); -- strcat (newname, linkbuf); -- ret = load_debug_frame (newname, buf, bufsize, -1); -- } -+ { -+ strcpy (newname, basedir); -+ strcat (newname, "/.debug/"); -+ strcat (newname, linkbuf); -+ ret = load_debug_frame (newname, buf, bufsize, -1); -+ } - - if (ret == 1 && is_local == 1) -- { -- strcpy (newname, debugdir); -- strcat (newname, basedir); -- strcat (newname, "/"); -- strcat (newname, linkbuf); -- ret = load_debug_frame (newname, buf, bufsize, -1); -- } -+ { -+ strcpy (newname, debugdir); -+ strcat (newname, basedir); -+ strcat (newname, "/"); -+ strcat (newname, linkbuf); -+ ret = load_debug_frame (newname, buf, bufsize, -1); -+ } - - free (basedir); - free (newname); -@@ -226,37 +222,45 @@ load_debug_frame (const char *file, char **buf, size_t *bufsize, int is_local) - free (linkbuf); - - return 0; -+ -+/* An error reading image file. Release resources and return error code */ -+file_error: -+ free(stringtab); -+ free(sec_hdrs); -+ free(linkbuf); -+ fclose(f); -+ -+ return 1; - } - - /* Locate the binary which originated the contents of address ADDR. Return -- the name of the binary in *name (which is allocated on the heap, and must -- be freed by the caller). Returns 0 if a binary is successfully found, or 1 -- if an error occurs. */ -+ the name of the binary in *name (space is allocated by the caller) -+ Returns 0 if a binary is successfully found, or 1 if an error occurs. */ - - static int --find_binary_for_address (unw_word_t ip, char **name) -+find_binary_for_address (unw_word_t ip, char *name, size_t name_size) - { --#ifdef __linux -+#if defined(__linux) && (!UNW_REMOTE_ONLY) - struct map_iterator mi; -- char path[PATH_MAX]; - int found = 0; - int pid = getpid (); - unsigned long segbase, mapoff, hi; - - maps_init (&mi, pid); -- while (maps_next (&mi, &segbase, &hi, &mapoff, path, sizeof (path))) -+ while (maps_next (&mi, &segbase, &hi, &mapoff)) - if (ip >= segbase && ip < hi) - { -- found = 1; -- break; -+ size_t len = strlen (mi.path); -+ -+ if (len + 1 <= name_size) -+ { -+ memcpy (name, mi.path, len + 1); -+ found = 1; -+ } -+ break; - } - maps_close (&mi); -- -- if (found) -- { -- *name = strdup (path); -- return 0; -- } -+ return !found; - #endif - - return 1; -@@ -266,24 +270,23 @@ find_binary_for_address (unw_word_t ip, char **name) - pointer to debug frame descriptor, or zero if not found. */ - - static struct unw_debug_frame_list * --locate_debug_info (unw_addr_space_t as, struct dl_phdr_info *info, -- unw_word_t addr, const char *dlname) -+locate_debug_info (unw_addr_space_t as, unw_word_t addr, const char *dlname, -+ unw_word_t start, unw_word_t end) - { - struct unw_debug_frame_list *w, *fdesc = 0; -- char *name = 0; -+ char path[PATH_MAX]; -+ char *name = path; - int err; -- uint64_t start = 0, end = 0; - char *buf; - size_t bufsize; -- unsigned int i; - - /* First, see if we loaded this frame already. */ - - for (w = as->debug_frames; w; w = w->next) - { -- Debug (4, "checking %p: %x-%x\n", w, (int)w->start, (int)w->end); -+ Debug (4, "checking %p: %lx-%lx\n", w, (long)w->start, (long)w->end); - if (addr >= w->start && addr < w->end) -- return w; -+ return w; - } - - /* If the object name we receive is blank, there's still a chance of locating -@@ -291,40 +294,17 @@ locate_debug_info (unw_addr_space_t as, struct dl_phdr_info *info, - - if (strcmp (dlname, "") == 0) - { -- err = find_binary_for_address (addr, &name); -+ err = find_binary_for_address (addr, name, sizeof(path)); - if (err) - { -- Debug (15, "tried to locate binary for 0x%" PRIx64 ", but no luck\n", -- (uint64_t) addr); -+ Debug (15, "tried to locate binary for 0x%" PRIx64 ", but no luck\n", -+ (uint64_t) addr); - return 0; -- } -+ } - } - else - name = (char*) dlname; - -- /* Find the start/end of the described region by parsing the -- dl_phdr_info structure. */ -- -- start = info->dlpi_addr + info->dlpi_phdr[0].p_vaddr; -- end = start; -- -- for (i = 0; i < info->dlpi_phnum; i++) -- { -- Elf_W (Addr) hdrbase = info->dlpi_addr + info->dlpi_phdr[i].p_vaddr; -- Elf_W (Addr) hdrlimit = hdrbase + info->dlpi_phdr[i].p_memsz; -- -- if (info->dlpi_phdr[i].p_type != PT_LOAD) -- continue; -- -- if (hdrbase < start) -- start = hdrbase; -- if (hdrlimit > end) -- end = hdrlimit; -- } -- -- Debug (4, "calculated bounds of %x-%x for '%s'\n", (int)start, (int)end, -- name); -- - err = load_debug_frame (name, &buf, &bufsize, as == unw_local_addr_space); - - if (!err) -@@ -341,9 +321,6 @@ locate_debug_info (unw_addr_space_t as, struct dl_phdr_info *info, - as->debug_frames = fdesc; - } - -- if (name && name != dlname) -- free (name); -- - return fdesc; - } - -@@ -354,21 +331,9 @@ struct debug_frame_tab - uint32_t size; - }; - --static struct debug_frame_tab * --debug_frame_tab_new (unsigned int base_size) --{ -- struct debug_frame_tab *tab = malloc (sizeof (struct debug_frame_tab)); -- -- tab->tab = calloc (base_size, sizeof (struct table_entry)); -- tab->length = 0; -- tab->size = base_size; -- -- return tab; --} -- - static void - debug_frame_tab_append (struct debug_frame_tab *tab, -- unw_word_t fde_offset, unw_word_t start_ip) -+ unw_word_t fde_offset, unw_word_t start_ip) - { - unsigned int length = tab->length; - -@@ -407,34 +372,187 @@ debug_frame_tab_compare (const void *a, const void *b) - return 0; - } - --/* Info is a pointer to a unw_dyn_info_t structure and, on entry, -- member u.rti.segbase contains the instruction-pointer we're looking -+PROTECTED int -+dwarf_find_debug_frame (int found, unw_dyn_info_t *di_debug, unw_word_t ip, -+ unw_word_t segbase, const char* obj_name, -+ unw_word_t start, unw_word_t end) -+{ -+ unw_dyn_info_t *di; -+ struct unw_debug_frame_list *fdesc = 0; -+ unw_accessors_t *a; -+ unw_word_t addr; -+ -+ Debug (15, "Trying to find .debug_frame for %s\n", obj_name); -+ di = di_debug; -+ -+ fdesc = locate_debug_info (unw_local_addr_space, ip, obj_name, start, end); -+ -+ if (!fdesc) -+ { -+ Debug (15, "couldn't load .debug_frame\n"); -+ return found; -+ } -+ else -+ { -+ char *buf; -+ size_t bufsize; -+ unw_word_t item_start, item_end = 0; -+ uint32_t u32val = 0; -+ uint64_t cie_id = 0; -+ struct debug_frame_tab tab; -+ -+ Debug (15, "loaded .debug_frame\n"); -+ -+ buf = fdesc->debug_frame; -+ bufsize = fdesc->debug_frame_size; -+ -+ if (bufsize == 0) -+ { -+ Debug (15, "zero-length .debug_frame\n"); -+ return found; -+ } -+ -+ /* Now create a binary-search table, if it does not already exist. */ -+ if (!fdesc->index) -+ { -+ addr = (unw_word_t) (uintptr_t) buf; -+ -+ a = unw_get_accessors (unw_local_addr_space); -+ -+ /* Find all FDE entries in debug_frame, and make into a sorted -+ index. */ -+ -+ tab.length = 0; -+ tab.size = 16; -+ tab.tab = calloc (tab.size, sizeof (struct table_entry)); -+ -+ while (addr < (unw_word_t) (uintptr_t) (buf + bufsize)) -+ { -+ uint64_t id_for_cie; -+ item_start = addr; -+ -+ dwarf_readu32 (unw_local_addr_space, a, &addr, &u32val, NULL); -+ -+ if (u32val == 0) -+ break; -+ else if (u32val != 0xffffffff) -+ { -+ uint32_t cie_id32 = 0; -+ item_end = addr + u32val; -+ dwarf_readu32 (unw_local_addr_space, a, &addr, &cie_id32, -+ NULL); -+ cie_id = cie_id32; -+ id_for_cie = 0xffffffff; -+ } -+ else -+ { -+ uint64_t u64val = 0; -+ /* Extended length. */ -+ dwarf_readu64 (unw_local_addr_space, a, &addr, &u64val, NULL); -+ item_end = addr + u64val; -+ -+ dwarf_readu64 (unw_local_addr_space, a, &addr, &cie_id, NULL); -+ id_for_cie = 0xffffffffffffffffull; -+ } -+ -+ /*Debug (1, "CIE/FDE id = %.8x\n", (int) cie_id);*/ -+ -+ if (cie_id == id_for_cie) -+ ; -+ /*Debug (1, "Found CIE at %.8x.\n", item_start);*/ -+ else -+ { -+ unw_word_t fde_addr = item_start; -+ unw_proc_info_t this_pi; -+ int err; -+ -+ /*Debug (1, "Found FDE at %.8x\n", item_start);*/ -+ -+ err = dwarf_extract_proc_info_from_fde (unw_local_addr_space, -+ a, &fde_addr, -+ &this_pi, -+ (uintptr_t) buf, 0, 1, -+ NULL); -+ if (err == 0) -+ { -+ Debug (15, "start_ip = %lx, end_ip = %lx\n", -+ (long) this_pi.start_ip, (long) this_pi.end_ip); -+ debug_frame_tab_append (&tab, -+ item_start - (unw_word_t) (uintptr_t) buf, -+ this_pi.start_ip); -+ } -+ /*else -+ Debug (1, "FDE parse failed\n");*/ -+ } -+ -+ addr = item_end; -+ } -+ -+ debug_frame_tab_shrink (&tab); -+ qsort (tab.tab, tab.length, sizeof (struct table_entry), -+ debug_frame_tab_compare); -+ /* for (i = 0; i < tab.length; i++) -+ { -+ fprintf (stderr, "ip %x, fde offset %x\n", -+ (int) tab.tab[i].start_ip_offset, -+ (int) tab.tab[i].fde_offset); -+ }*/ -+ fdesc->index = tab.tab; -+ fdesc->index_size = tab.length; -+ } -+ -+ di->format = UNW_INFO_FORMAT_TABLE; -+ di->start_ip = fdesc->start; -+ di->end_ip = fdesc->end; -+ di->u.ti.name_ptr = (unw_word_t) (uintptr_t) obj_name; -+ di->u.ti.table_data = (unw_word_t *) fdesc; -+ di->u.ti.table_len = sizeof (*fdesc) / sizeof (unw_word_t); -+ di->u.ti.segbase = segbase; -+ -+ found = 1; -+ Debug (15, "found debug_frame table `%s': segbase=0x%lx, len=%lu, " -+ "gp=0x%lx, table_data=0x%lx\n", -+ (char *) (uintptr_t) di->u.ti.name_ptr, -+ (long) di->u.ti.segbase, (long) di->u.ti.table_len, -+ (long) di->gp, (long) di->u.ti.table_data); -+ } -+ return found; -+} -+ -+#endif /* CONFIG_DEBUG_FRAME */ -+ -+#ifndef UNW_REMOTE_ONLY -+ -+/* ptr is a pointer to a dwarf_callback_data structure and, on entry, -+ member ip contains the instruction-pointer we're looking - for. */ --static int --callback (struct dl_phdr_info *info, size_t size, void *ptr) -+HIDDEN int -+dwarf_callback (struct dl_phdr_info *info, size_t size, void *ptr) - { -- struct callback_data *cb_data = ptr; -+ struct dwarf_callback_data *cb_data = ptr; - unw_dyn_info_t *di = &cb_data->di; - const Elf_W(Phdr) *phdr, *p_eh_hdr, *p_dynamic, *p_text; - unw_word_t addr, eh_frame_start, eh_frame_end, fde_count, ip; -- Elf_W(Addr) load_base, segbase = 0, max_load_addr = 0; -+ Elf_W(Addr) load_base, max_load_addr = 0; - int ret, need_unwind_info = cb_data->need_unwind_info; - unw_proc_info_t *pi = cb_data->pi; - struct dwarf_eh_frame_hdr *hdr; - unw_accessors_t *a; - long n; -- struct unw_debug_frame_list *fdesc = 0; - int found = 0; -+#ifdef CONFIG_DEBUG_FRAME -+ unw_word_t start, end; -+#endif /* CONFIG_DEBUG_FRAME*/ - - ip = cb_data->ip; - - /* Make sure struct dl_phdr_info is at least as big as we need. */ - if (size < offsetof (struct dl_phdr_info, dlpi_phnum) -- + sizeof (info->dlpi_phnum)) -+ + sizeof (info->dlpi_phnum)) - return -1; - - Debug (15, "checking %s, base=0x%lx)\n", -- info->dlpi_name, (long) info->dlpi_addr); -+ info->dlpi_name, (long) info->dlpi_addr); - - phdr = info->dlpi_phdr; - load_base = info->dlpi_addr; -@@ -447,19 +565,19 @@ callback (struct dl_phdr_info *info, size_t size, void *ptr) - for (n = info->dlpi_phnum; --n >= 0; phdr++) - { - if (phdr->p_type == PT_LOAD) -- { -- Elf_W(Addr) vaddr = phdr->p_vaddr + load_base; -+ { -+ Elf_W(Addr) vaddr = phdr->p_vaddr + load_base; - -- if (ip >= vaddr && ip < vaddr + phdr->p_memsz) -- p_text = phdr; -+ if (ip >= vaddr && ip < vaddr + phdr->p_memsz) -+ p_text = phdr; - -- if (vaddr + phdr->p_filesz > max_load_addr) -- max_load_addr = vaddr + phdr->p_filesz; -- } -+ if (vaddr + phdr->p_filesz > max_load_addr) -+ max_load_addr = vaddr + phdr->p_filesz; -+ } - else if (phdr->p_type == PT_GNU_EH_FRAME) -- p_eh_hdr = phdr; -+ p_eh_hdr = phdr; - else if (phdr->p_type == PT_DYNAMIC) -- p_dynamic = phdr; -+ p_dynamic = phdr; - } - - if (!p_text) -@@ -467,262 +585,134 @@ callback (struct dl_phdr_info *info, size_t size, void *ptr) - - if (p_eh_hdr) - { -- if (likely (p_eh_hdr->p_vaddr >= p_text->p_vaddr -- && p_eh_hdr->p_vaddr < p_text->p_vaddr + p_text->p_memsz)) -- /* normal case: eh-hdr is inside text segment */ -- segbase = p_text->p_vaddr + load_base; -- else -- { -- /* Special case: eh-hdr is in some other segment; this may -- happen, e.g., for the Linux kernel's gate DSO, for -- example. */ -- phdr = info->dlpi_phdr; -- for (n = info->dlpi_phnum; --n >= 0; phdr++) -- { -- if (phdr->p_type == PT_LOAD && p_eh_hdr->p_vaddr >= phdr->p_vaddr -- && p_eh_hdr->p_vaddr < phdr->p_vaddr + phdr->p_memsz) -- { -- segbase = phdr->p_vaddr + load_base; -- break; -- } -- } -- } -- - if (p_dynamic) -- { -- /* For dynamicly linked executables and shared libraries, -- DT_PLTGOT is the value that data-relative addresses are -- relative to for that object. We call this the "gp". */ -- Elf_W(Dyn) *dyn = (Elf_W(Dyn) *)(p_dynamic->p_vaddr + load_base); -- for (; dyn->d_tag != DT_NULL; ++dyn) -- if (dyn->d_tag == DT_PLTGOT) -- { -- /* Assume that _DYNAMIC is writable and GLIBC has -- relocated it (true for x86 at least). */ -- di->gp = dyn->d_un.d_ptr; -- break; -- } -- } -+ { -+ /* For dynamicly linked executables and shared libraries, -+ DT_PLTGOT is the value that data-relative addresses are -+ relative to for that object. We call this the "gp". */ -+ Elf_W(Dyn) *dyn = (Elf_W(Dyn) *)(p_dynamic->p_vaddr + load_base); -+ for (; dyn->d_tag != DT_NULL; ++dyn) -+ if (dyn->d_tag == DT_PLTGOT) -+ { -+ /* Assume that _DYNAMIC is writable and GLIBC has -+ relocated it (true for x86 at least). */ -+ di->gp = dyn->d_un.d_ptr; -+ break; -+ } -+ } - else -- /* Otherwise this is a static executable with no _DYNAMIC. Assume -- that data-relative addresses are relative to 0, i.e., -- absolute. */ -- di->gp = 0; -+ /* Otherwise this is a static executable with no _DYNAMIC. Assume -+ that data-relative addresses are relative to 0, i.e., -+ absolute. */ -+ di->gp = 0; - pi->gp = di->gp; - - hdr = (struct dwarf_eh_frame_hdr *) (p_eh_hdr->p_vaddr + load_base); - if (hdr->version != DW_EH_VERSION) -- { -- Debug (1, "table `%s' has unexpected version %d\n", -- info->dlpi_name, hdr->version); -- return 0; -- } -+ { -+ Debug (1, "table `%s' has unexpected version %d\n", -+ info->dlpi_name, hdr->version); -+ return 0; -+ } - - a = unw_get_accessors (unw_local_addr_space); - addr = (unw_word_t) (uintptr_t) (hdr + 1); - - /* (Optionally) read eh_frame_ptr: */ - if ((ret = dwarf_read_encoded_pointer (unw_local_addr_space, a, -- &addr, hdr->eh_frame_ptr_enc, pi, -- &eh_frame_start, NULL)) < 0) -- return ret; -+ &addr, hdr->eh_frame_ptr_enc, pi, -+ &eh_frame_start, NULL)) < 0) -+ return ret; - - /* (Optionally) read fde_count: */ - if ((ret = dwarf_read_encoded_pointer (unw_local_addr_space, a, -- &addr, hdr->fde_count_enc, pi, -- &fde_count, NULL)) < 0) -- return ret; -+ &addr, hdr->fde_count_enc, pi, -+ &fde_count, NULL)) < 0) -+ return ret; - - if (hdr->table_enc != (DW_EH_PE_datarel | DW_EH_PE_sdata4)) -- { -- /* If there is no search table or it has an unsupported -- encoding, fall back on linear search. */ -- if (hdr->table_enc == DW_EH_PE_omit) -- Debug (4, "table `%s' lacks search table; doing linear search\n", -- info->dlpi_name); -- else -- Debug (4, "table `%s' has encoding 0x%x; doing linear search\n", -- info->dlpi_name, hdr->table_enc); -- -- eh_frame_end = max_load_addr; /* XXX can we do better? */ -- -- if (hdr->fde_count_enc == DW_EH_PE_omit) -- fde_count = ~0UL; -- if (hdr->eh_frame_ptr_enc == DW_EH_PE_omit) -- abort (); -- -- /* XXX we know how to build a local binary search table for -- .debug_frame, so we could do that here too. */ -- cb_data->single_fde = 1; -- found = linear_search (unw_local_addr_space, ip, -- eh_frame_start, eh_frame_end, fde_count, -- pi, need_unwind_info, NULL); -- if (found != 1) -- found = 0; -- } -+ { -+ /* If there is no search table or it has an unsupported -+ encoding, fall back on linear search. */ -+ if (hdr->table_enc == DW_EH_PE_omit) -+ Debug (4, "table `%s' lacks search table; doing linear search\n", -+ info->dlpi_name); -+ else -+ Debug (4, "table `%s' has encoding 0x%x; doing linear search\n", -+ info->dlpi_name, hdr->table_enc); -+ -+ eh_frame_end = max_load_addr; /* XXX can we do better? */ -+ -+ if (hdr->fde_count_enc == DW_EH_PE_omit) -+ fde_count = ~0UL; -+ if (hdr->eh_frame_ptr_enc == DW_EH_PE_omit) -+ abort (); -+ -+ /* XXX we know how to build a local binary search table for -+ .debug_frame, so we could do that here too. */ -+ cb_data->single_fde = 1; -+ found = linear_search (unw_local_addr_space, ip, -+ eh_frame_start, eh_frame_end, fde_count, -+ pi, need_unwind_info, NULL); -+ if (found != 1) -+ found = 0; -+ } - else -- { -- di->format = UNW_INFO_FORMAT_REMOTE_TABLE; -- di->start_ip = p_text->p_vaddr + load_base; -- di->end_ip = p_text->p_vaddr + load_base + p_text->p_memsz; -- di->u.rti.name_ptr = (unw_word_t) (uintptr_t) info->dlpi_name; -- di->u.rti.table_data = addr; -- assert (sizeof (struct table_entry) % sizeof (unw_word_t) == 0); -- di->u.rti.table_len = (fde_count * sizeof (struct table_entry) -- / sizeof (unw_word_t)); -- /* For the binary-search table in the eh_frame_hdr, data-relative -- means relative to the start of that section... */ -- di->u.rti.segbase = (unw_word_t) (uintptr_t) hdr; -- -- found = 1; -- Debug (15, "found table `%s': segbase=0x%lx, len=%lu, gp=0x%lx, " -- "table_data=0x%lx\n", (char *) (uintptr_t) di->u.rti.name_ptr, -- (long) di->u.rti.segbase, (long) di->u.rti.table_len, -- (long) di->gp, (long) di->u.rti.table_data); -- } -+ { -+ di->format = UNW_INFO_FORMAT_REMOTE_TABLE; -+ di->start_ip = p_text->p_vaddr + load_base; -+ di->end_ip = p_text->p_vaddr + load_base + p_text->p_memsz; -+ di->u.rti.name_ptr = (unw_word_t) (uintptr_t) info->dlpi_name; -+ di->u.rti.table_data = addr; -+ assert (sizeof (struct table_entry) % sizeof (unw_word_t) == 0); -+ di->u.rti.table_len = (fde_count * sizeof (struct table_entry) -+ / sizeof (unw_word_t)); -+ /* For the binary-search table in the eh_frame_hdr, data-relative -+ means relative to the start of that section... */ -+ di->u.rti.segbase = (unw_word_t) (uintptr_t) hdr; -+ -+ found = 1; -+ Debug (15, "found table `%s': segbase=0x%lx, len=%lu, gp=0x%lx, " -+ "table_data=0x%lx\n", (char *) (uintptr_t) di->u.rti.name_ptr, -+ (long) di->u.rti.segbase, (long) di->u.rti.table_len, -+ (long) di->gp, (long) di->u.rti.table_data); -+ } - } - -- Debug (15, "Trying to find .debug_frame\n"); -- di = &cb_data->di_debug; -- fdesc = locate_debug_info (unw_local_addr_space, info, ip, info->dlpi_name); -+#ifdef CONFIG_DEBUG_FRAME -+ /* Find the start/end of the described region by parsing the phdr_info -+ structure. */ -+ start = (unw_word_t) -1; -+ end = 0; - -- if (!fdesc) -+ for (n = 0; n < info->dlpi_phnum; n++) - { -- Debug (15, "couldn't load .debug_frame\n"); -- return found; -- } -- else -- { -- char *buf; -- size_t bufsize; -- unw_word_t item_start, item_end = 0; -- uint32_t u32val = 0; -- uint64_t cie_id = 0; -- struct debug_frame_tab *tab; -- -- Debug (15, "loaded .debug_frame\n"); -- -- buf = fdesc->debug_frame; -- bufsize = fdesc->debug_frame_size; -- -- if (bufsize == 0) -- { -- Debug (15, "zero-length .debug_frame\n"); -- return found; -- } -+ if (info->dlpi_phdr[n].p_type == PT_LOAD) -+ { -+ unw_word_t seg_start = info->dlpi_addr + info->dlpi_phdr[n].p_vaddr; -+ unw_word_t seg_end = seg_start + info->dlpi_phdr[n].p_memsz; - -- /* Now create a binary-search table, if it does not already exist. */ -- if (!fdesc->index) -- { -- addr = (unw_word_t) (uintptr_t) buf; -- -- a = unw_get_accessors (unw_local_addr_space); -- -- /* Find all FDE entries in debug_frame, and make into a sorted -- index. */ -- -- tab = debug_frame_tab_new (16); -- -- while (addr < (unw_word_t) (uintptr_t) (buf + bufsize)) -- { -- uint64_t id_for_cie; -- item_start = addr; -- -- dwarf_readu32 (unw_local_addr_space, a, &addr, &u32val, NULL); -- -- if (u32val == 0) -- break; -- else if (u32val != 0xffffffff) -- { -- uint32_t cie_id32 = 0; -- item_end = addr + u32val; -- dwarf_readu32 (unw_local_addr_space, a, &addr, &cie_id32, -- NULL); -- cie_id = cie_id32; -- id_for_cie = 0xffffffff; -- } -- else -- { -- uint64_t u64val = 0; -- /* Extended length. */ -- dwarf_readu64 (unw_local_addr_space, a, &addr, &u64val, NULL); -- item_end = addr + u64val; -- -- dwarf_readu64 (unw_local_addr_space, a, &addr, &cie_id, NULL); -- id_for_cie = 0xffffffffffffffffull; -- } -- -- /*Debug (1, "CIE/FDE id = %.8x\n", (int) cie_id);*/ -- -- if (cie_id == id_for_cie) -- ; -- /*Debug (1, "Found CIE at %.8x.\n", item_start);*/ -- else -- { -- unw_word_t fde_addr = item_start; -- unw_proc_info_t this_pi; -- int err; -- -- /*Debug (1, "Found FDE at %.8x\n", item_start);*/ -- -- err = dwarf_extract_proc_info_from_fde (unw_local_addr_space, -- a, &fde_addr, -- &this_pi, 0, -- (uintptr_t) buf, -- NULL); -- if (err == 0) -- { -- Debug (15, "start_ip = %x, end_ip = %x\n", -- (int) this_pi.start_ip, (int) this_pi.end_ip); -- debug_frame_tab_append (tab, -- item_start - (unw_word_t) (uintptr_t) buf, -- this_pi.start_ip); -- } -- /*else -- Debug (1, "FDE parse failed\n");*/ -- } -- -- addr = item_end; -- } -- -- debug_frame_tab_shrink (tab); -- qsort (tab->tab, tab->length, sizeof (struct table_entry), -- debug_frame_tab_compare); -- /* for (i = 0; i < tab->length; i++) -- { -- fprintf (stderr, "ip %x, fde offset %x\n", -- (int) tab->tab[i].start_ip_offset, -- (int) tab->tab[i].fde_offset); -- }*/ -- fdesc->index = tab->tab; -- fdesc->index_size = tab->length; -- free (tab); -- } -+ if (seg_start < start) -+ start = seg_start; - -- di->format = UNW_INFO_FORMAT_TABLE; -- di->start_ip = fdesc->start; -- di->end_ip = fdesc->end; -- di->u.ti.name_ptr = (unw_word_t) (uintptr_t) info->dlpi_name; -- di->u.ti.table_data = (unw_word_t *) fdesc; -- di->u.ti.table_len = sizeof (*fdesc) / sizeof (unw_word_t); -- di->u.ti.segbase = (unw_word_t) (uintptr_t) info->dlpi_addr; -- -- found = 1; -- Debug (15, "found debug_frame table `%s': segbase=0x%lx, len=%lu, " -- "gp=0x%lx, table_data=0x%lx\n", -- (char *) (uintptr_t) di->u.ti.name_ptr, -- (long) di->u.ti.segbase, (long) di->u.ti.table_len, -- (long) di->gp, (long) di->u.ti.table_data); -+ if (seg_end > end) -+ end = seg_end; -+ } - } - -+ found = dwarf_find_debug_frame (found, &cb_data->di_debug, ip, -+ info->dlpi_addr, info->dlpi_name, start, -+ end); -+#endif /* CONFIG_DEBUG_FRAME */ -+ - return found; - } - - HIDDEN int - dwarf_find_proc_info (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, int need_unwind_info, void *arg) -+ unw_proc_info_t *pi, int need_unwind_info, void *arg) - { -- struct callback_data cb_data; -+ struct dwarf_callback_data cb_data; - intrmask_t saved_mask; - int ret; - -@@ -735,9 +725,9 @@ dwarf_find_proc_info (unw_addr_space_t as, unw_word_t ip, - cb_data.di.format = -1; - cb_data.di_debug.format = -1; - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- ret = dl_iterate_phdr (callback, &cb_data); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ SIGPROCMASK (SIG_SETMASK, &unwi_full_mask, &saved_mask); -+ ret = dl_iterate_phdr (dwarf_callback, &cb_data); -+ SIGPROCMASK (SIG_SETMASK, &saved_mask, NULL); - - if (ret <= 0) - { -@@ -752,13 +742,13 @@ dwarf_find_proc_info (unw_addr_space_t as, unw_word_t ip, - /* search the table: */ - if (cb_data.di.format != -1) - ret = dwarf_search_unwind_table (as, ip, &cb_data.di, -- pi, need_unwind_info, arg); -+ pi, need_unwind_info, arg); - else - ret = -UNW_ENOINFO; - - if (ret == -UNW_ENOINFO && cb_data.di_debug.format != -1) - ret = dwarf_search_unwind_table (as, ip, &cb_data.di_debug, pi, -- need_unwind_info, arg); -+ need_unwind_info, arg); - return ret; - } - -@@ -766,7 +756,7 @@ static inline const struct table_entry * - lookup (const struct table_entry *table, size_t table_size, int32_t rel_ip) - { - unsigned long table_len = table_size / sizeof (struct table_entry); -- const struct table_entry *e = 0; -+ const struct table_entry *e = NULL; - unsigned long lo, hi, mid; - - /* do a binary search for right entry: */ -@@ -774,14 +764,14 @@ lookup (const struct table_entry *table, size_t table_size, int32_t rel_ip) - { - mid = (lo + hi) / 2; - e = table + mid; -- Debug (1, "e->start_ip_offset = %x\n", (int) e->start_ip_offset); -+ Debug (15, "e->start_ip_offset = %lx\n", (long) e->start_ip_offset); - if (rel_ip < e->start_ip_offset) -- hi = mid; -+ hi = mid; - else -- lo = mid + 1; -+ lo = mid + 1; - } - if (hi <= 0) -- return NULL; -+ return NULL; - e = table + hi - 1; - return e; - } -@@ -795,8 +785,8 @@ lookup (const struct table_entry *table, size_t table_size, int32_t rel_ip) - occurred reading remote memory. */ - static int - remote_lookup (unw_addr_space_t as, -- unw_word_t table, size_t table_size, int32_t rel_ip, -- struct table_entry *e, void *arg) -+ unw_word_t table, size_t table_size, int32_t rel_ip, -+ struct table_entry *e, void *arg) - { - unsigned long table_len = table_size / sizeof (struct table_entry); - unw_accessors_t *a = unw_get_accessors (as); -@@ -811,12 +801,12 @@ remote_lookup (unw_addr_space_t as, - mid = (lo + hi) / 2; - e_addr = table + mid * sizeof (struct table_entry); - if ((ret = dwarf_reads32 (as, a, &e_addr, &start, arg)) < 0) -- return ret; -+ return ret; - - if (rel_ip < start) -- hi = mid; -+ hi = mid; - else -- lo = mid + 1; -+ lo = mid + 1; - } - if (hi <= 0) - return 0; -@@ -829,13 +819,19 @@ remote_lookup (unw_addr_space_t as, - - #endif /* !UNW_LOCAL_ONLY */ - -+static int is_remote_table(int format) -+{ -+ return (format == UNW_INFO_FORMAT_REMOTE_TABLE || -+ format == UNW_INFO_FORMAT_IP_OFFSET); -+} -+ - PROTECTED int - dwarf_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t *di, unw_proc_info_t *pi, -- int need_unwind_info, void *arg) -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg) - { - const struct table_entry *e = NULL, *table; -- unw_word_t segbase = 0, fde_addr; -+ unw_word_t ip_base = 0, segbase = 0, fde_addr; - unw_accessors_t *a; - #ifndef UNW_LOCAL_ONLY - struct table_entry ent; -@@ -844,21 +840,15 @@ dwarf_search_unwind_table (unw_addr_space_t as, unw_word_t ip, - unw_word_t debug_frame_base; - size_t table_len; - -- assert (di->format == UNW_INFO_FORMAT_REMOTE_TABLE -- || di->format == UNW_INFO_FORMAT_TABLE); -- -- // FRYSK LOCAL WAY to handle debug_frame. -- if (di->format == UNW_INFO_FORMAT_TABLE) -- { -- ret = linear_search (as, ip, di->u.rti.table_data, -- di->u.rti.table_data -- + di->u.rti.table_len * sizeof (unw_word_t), -- ~0UL, pi, need_unwind_info, arg); -- return ret; -- } -- -+#ifdef UNW_REMOTE_ONLY -+ assert (is_remote_table(di->format)); -+#else -+ assert (is_remote_table(di->format) -+ || di->format == UNW_INFO_FORMAT_TABLE); -+#endif - assert (ip >= di->start_ip && ip < di->end_ip); -- if (di->format == UNW_INFO_FORMAT_REMOTE_TABLE) -+ -+ if (is_remote_table(di->format)) - { - table = (const struct table_entry *) (uintptr_t) di->u.rti.table_data; - table_len = di->u.rti.table_len * sizeof (unw_word_t); -@@ -866,16 +856,15 @@ dwarf_search_unwind_table (unw_addr_space_t as, unw_word_t ip, - } - else - { -+ assert(di->format == UNW_INFO_FORMAT_TABLE); - #ifndef UNW_REMOTE_ONLY - struct unw_debug_frame_list *fdesc = (void *) di->u.ti.table_data; - -- /* UNW_INFO_FORMAT_TABLE (i.e. .debug_frame) is currently only -- supported for the local address space. Both the index and -- the unwind tables live in local memory, but the address space -- to check for properties like the address size and endianness -- is the target one. When the ptrace code adds support for -- .debug_frame something will have to change. */ -- assert (as == unw_local_addr_space); -+ /* UNW_INFO_FORMAT_TABLE (i.e. .debug_frame) is read from local address -+ space. Both the index and the unwind tables live in local memory, but -+ the address space to check for properties like the address size and -+ endianness is the target one. */ -+ as = unw_local_addr_space; - table = fdesc->index; - table_len = fdesc->index_size * sizeof (struct table_entry); - debug_frame_base = (uintptr_t) fdesc->debug_frame; -@@ -884,11 +873,17 @@ dwarf_search_unwind_table (unw_addr_space_t as, unw_word_t ip, - - a = unw_get_accessors (as); - -+ segbase = di->u.rti.segbase; -+ if (di->format == UNW_INFO_FORMAT_IP_OFFSET) { -+ ip_base = di->start_ip; -+ } else { -+ ip_base = segbase; -+ } -+ - #ifndef UNW_REMOTE_ONLY - if (as == unw_local_addr_space) - { -- segbase = di->u.rti.segbase; -- e = lookup (table, table_len, ip - segbase); -+ e = lookup (table, table_len, ip - ip_base); - } - else - #endif -@@ -896,34 +891,36 @@ dwarf_search_unwind_table (unw_addr_space_t as, unw_word_t ip, - #ifndef UNW_LOCAL_ONLY - segbase = di->u.rti.segbase; - if ((ret = remote_lookup (as, (uintptr_t) table, table_len, -- ip - segbase, &ent, arg)) < 0) -- return ret; -+ ip - ip_base, &ent, arg)) < 0) -+ return ret; - if (ret) -- e = &ent; -+ e = &ent; - else -- e = NULL; /* no info found */ -+ e = NULL; /* no info found */ - #endif - } - if (!e) - { -- Debug (1, "IP %x inside range %x-%x, but no explicit unwind info found\n", -- (int) ip, (int) di->start_ip, (int) di->end_ip); -+ Debug (1, "IP %lx inside range %lx-%lx, but no explicit unwind info found\n", -+ (long) ip, (long) di->start_ip, (long) di->end_ip); - /* IP is inside this table's range, but there is no explicit -- unwind info. */ -+ unwind info. */ - return -UNW_ENOINFO; - } - Debug (15, "ip=0x%lx, start_ip=0x%lx\n", -- (long) ip, (long) (e->start_ip_offset)); -+ (long) ip, (long) (e->start_ip_offset)); - if (debug_frame_base) - fde_addr = e->fde_offset + debug_frame_base; - else - fde_addr = e->fde_offset + segbase; -- Debug (1, "e->fde_offset = %x, segbase = %x, debug_frame_base = %x, " -- "fde_addr = %x\n", (int) e->fde_offset, (int) segbase, -- (int) debug_frame_base, (int) fde_addr); -+ Debug (1, "e->fde_offset = %lx, segbase = %lx, debug_frame_base = %lx, " -+ "fde_addr = %lx\n", (long) e->fde_offset, (long) segbase, -+ (long) debug_frame_base, (long) fde_addr); - if ((ret = dwarf_extract_proc_info_from_fde (as, a, &fde_addr, pi, -- need_unwind_info, -- debug_frame_base, arg)) < 0) -+ debug_frame_base ? -+ debug_frame_base : segbase, -+ need_unwind_info, -+ debug_frame_base != 0, arg)) < 0) - return ret; - - /* .debug_frame uses an absolute encoding that does not know about any -@@ -932,6 +929,7 @@ dwarf_search_unwind_table (unw_addr_space_t as, unw_word_t ip, - { - pi->start_ip += segbase; - pi->end_ip += segbase; -+ pi->flags = UNW_PI_FLAG_DEBUG_FRAME; - } - - if (ip < pi->start_ip || ip >= pi->end_ip) -@@ -943,5 +941,5 @@ dwarf_search_unwind_table (unw_addr_space_t as, unw_word_t ip, - HIDDEN void - dwarf_put_unwind_info (unw_addr_space_t as, unw_proc_info_t *pi, void *arg) - { -- return; /* always a nop */ -+ return; /* always a nop */ - } -diff --git a/frysk-imports/libunwind/src/dwarf/Gfind_unwind_table.c b/frysk-imports/libunwind/src/dwarf/Gfind_unwind_table.c -new file mode 100644 -index 0000000..a51c611 ---- /dev/null -+++ b/frysk-imports/libunwind/src/dwarf/Gfind_unwind_table.c -@@ -0,0 +1,227 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2003-2004 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+#include -+ -+#include -+ -+#include "libunwind_i.h" -+#include "dwarf-eh.h" -+#include "dwarf_i.h" -+ -+int -+dwarf_find_unwind_table (struct elf_dyn_info *edi, unw_addr_space_t as, -+ char *path, unw_word_t segbase, unw_word_t mapoff, -+ unw_word_t ip) -+{ -+ Elf_W(Phdr) *phdr, *ptxt = NULL, *peh_hdr = NULL, *pdyn = NULL; -+ unw_word_t addr, eh_frame_start, fde_count, load_base; -+ unw_word_t max_load_addr = 0; -+ unw_word_t start_ip = (unw_word_t) -1; -+ unw_word_t end_ip = 0; -+ struct dwarf_eh_frame_hdr *hdr; -+ unw_proc_info_t pi; -+ unw_accessors_t *a; -+ Elf_W(Ehdr) *ehdr; -+#if UNW_TARGET_ARM -+ const Elf_W(Phdr) *parm_exidx = NULL; -+#endif -+ int i, ret, found = 0; -+ -+ /* XXX: Much of this code is Linux/LSB-specific. */ -+ -+ if (!elf_w(valid_object) (&edi->ei)) -+ return -UNW_ENOINFO; -+ -+ ehdr = edi->ei.image; -+ phdr = (Elf_W(Phdr) *) ((char *) edi->ei.image + ehdr->e_phoff); -+ -+ for (i = 0; i < ehdr->e_phnum; ++i) -+ { -+ switch (phdr[i].p_type) -+ { -+ case PT_LOAD: -+ if (phdr[i].p_vaddr < start_ip) -+ start_ip = phdr[i].p_vaddr; -+ -+ if (phdr[i].p_vaddr + phdr[i].p_memsz > end_ip) -+ end_ip = phdr[i].p_vaddr + phdr[i].p_memsz; -+ -+ if (phdr[i].p_offset == mapoff) -+ ptxt = phdr + i; -+ if ((uintptr_t) edi->ei.image + phdr->p_filesz > max_load_addr) -+ max_load_addr = (uintptr_t) edi->ei.image + phdr->p_filesz; -+ break; -+ -+ case PT_GNU_EH_FRAME: -+ peh_hdr = phdr + i; -+ break; -+ -+ case PT_DYNAMIC: -+ pdyn = phdr + i; -+ break; -+ -+#if UNW_TARGET_ARM -+ case PT_ARM_EXIDX: -+ parm_exidx = phdr + i; -+ break; -+#endif -+ -+ default: -+ break; -+ } -+ } -+ -+ if (!ptxt) -+ return 0; -+ -+ load_base = segbase - ptxt->p_vaddr; -+ start_ip += load_base; -+ end_ip += load_base; -+ -+ if (peh_hdr) -+ { -+ if (pdyn) -+ { -+ /* For dynamicly linked executables and shared libraries, -+ DT_PLTGOT is the value that data-relative addresses are -+ relative to for that object. We call this the "gp". */ -+ Elf_W(Dyn) *dyn = (Elf_W(Dyn) *)(pdyn->p_offset -+ + (char *) edi->ei.image); -+ for (; dyn->d_tag != DT_NULL; ++dyn) -+ if (dyn->d_tag == DT_PLTGOT) -+ { -+ /* Assume that _DYNAMIC is writable and GLIBC has -+ relocated it (true for x86 at least). */ -+ edi->di_cache.gp = dyn->d_un.d_ptr; -+ break; -+ } -+ } -+ else -+ /* Otherwise this is a static executable with no _DYNAMIC. Assume -+ that data-relative addresses are relative to 0, i.e., -+ absolute. */ -+ edi->di_cache.gp = 0; -+ -+ hdr = (struct dwarf_eh_frame_hdr *) (peh_hdr->p_offset -+ + (char *) edi->ei.image); -+ if (hdr->version != DW_EH_VERSION) -+ { -+ Debug (1, "table `%s' has unexpected version %d\n", -+ path, hdr->version); -+ return -UNW_ENOINFO; -+ } -+ -+ a = unw_get_accessors (unw_local_addr_space); -+ addr = (unw_word_t) (hdr + 1); -+ -+ /* Fill in a dummy proc_info structure. We just need to fill in -+ enough to ensure that dwarf_read_encoded_pointer() can do it's -+ job. Since we don't have a procedure-context at this point, all -+ we have to do is fill in the global-pointer. */ -+ memset (&pi, 0, sizeof (pi)); -+ pi.gp = edi->di_cache.gp; -+ -+ /* (Optionally) read eh_frame_ptr: */ -+ if ((ret = dwarf_read_encoded_pointer (unw_local_addr_space, a, -+ &addr, hdr->eh_frame_ptr_enc, &pi, -+ &eh_frame_start, NULL)) < 0) -+ return -UNW_ENOINFO; -+ -+ /* (Optionally) read fde_count: */ -+ if ((ret = dwarf_read_encoded_pointer (unw_local_addr_space, a, -+ &addr, hdr->fde_count_enc, &pi, -+ &fde_count, NULL)) < 0) -+ return -UNW_ENOINFO; -+ -+ if (hdr->table_enc != (DW_EH_PE_datarel | DW_EH_PE_sdata4)) -+ { -+ #if 1 -+ abort (); -+ #else -+ unw_word_t eh_frame_end; -+ -+ /* If there is no search table or it has an unsupported -+ encoding, fall back on linear search. */ -+ if (hdr->table_enc == DW_EH_PE_omit) -+ Debug (4, "EH lacks search table; doing linear search\n"); -+ else -+ Debug (4, "EH table has encoding 0x%x; doing linear search\n", -+ hdr->table_enc); -+ -+ eh_frame_end = max_load_addr; /* XXX can we do better? */ -+ -+ if (hdr->fde_count_enc == DW_EH_PE_omit) -+ fde_count = ~0UL; -+ if (hdr->eh_frame_ptr_enc == DW_EH_PE_omit) -+ abort (); -+ -+ return linear_search (unw_local_addr_space, ip, -+ eh_frame_start, eh_frame_end, fde_count, -+ pi, need_unwind_info, NULL); -+ #endif -+ } -+ -+ edi->di_cache.start_ip = start_ip; -+ edi->di_cache.end_ip = end_ip; -+ edi->di_cache.format = UNW_INFO_FORMAT_REMOTE_TABLE; -+ edi->di_cache.u.rti.name_ptr = 0; -+ /* two 32-bit values (ip_offset/fde_offset) per table-entry: */ -+ edi->di_cache.u.rti.table_len = (fde_count * 8) / sizeof (unw_word_t); -+ edi->di_cache.u.rti.table_data = ((load_base + peh_hdr->p_vaddr) -+ + (addr - (unw_word_t) edi->ei.image -+ - peh_hdr->p_offset)); -+ -+ /* For the binary-search table in the eh_frame_hdr, data-relative -+ means relative to the start of that section... */ -+ edi->di_cache.u.rti.segbase = ((load_base + peh_hdr->p_vaddr) -+ + ((unw_word_t) hdr - (unw_word_t) edi->ei.image -+ - peh_hdr->p_offset)); -+ found = 1; -+ } -+ -+#if UNW_TARGET_ARM -+ if (parm_exidx) -+ { -+ edi->di_arm.format = UNW_INFO_FORMAT_ARM_EXIDX; -+ edi->di_arm.start_ip = start_ip; -+ edi->di_arm.end_ip = end_ip; -+ edi->di_arm.u.rti.name_ptr = (unw_word_t) path; -+ edi->di_arm.u.rti.table_data = load_base + parm_exidx->p_vaddr; -+ edi->di_arm.u.rti.table_len = parm_exidx->p_memsz; -+ found = 1; -+ } -+#endif -+ -+#ifdef CONFIG_DEBUG_FRAME -+ /* Try .debug_frame. */ -+ found = dwarf_find_debug_frame (found, &edi->di_debug, ip, load_base, path, -+ start_ip, end_ip); -+#endif -+ -+ return found; -+} -diff --git a/frysk-imports/libunwind/src/dwarf/Gparser.c b/frysk-imports/libunwind/src/dwarf/Gparser.c -index ea7c4c9..c80b352 100644 ---- a/frysk-imports/libunwind/src/dwarf/Gparser.c -+++ b/frysk-imports/libunwind/src/dwarf/Gparser.c -@@ -1,6 +1,8 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2007-2008, Red Hat Inc. -+ Copyright (C) 2016, Andrew Cagney - - This file is part of libunwind. - -@@ -27,12 +29,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "dwarf_i.h" - #include "libunwind_i.h" - --#define alloc_reg_state() (mempool_alloc (&dwarf_reg_state_pool)) --#define free_reg_state(rs) (mempool_free (&dwarf_reg_state_pool, rs)) -+#define alloc_reg_state() (mempool_alloc (&dwarf_reg_state_pool)) -+#define free_reg_state(rs) (mempool_free (&dwarf_reg_state_pool, rs)) - - static inline int - read_regnum (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- unw_word_t *valp, void *arg) -+ unw_word_t *valp, void *arg) - { - int ret; - -@@ -49,7 +51,7 @@ read_regnum (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static inline void - set_reg (dwarf_state_record_t *sr, unw_word_t regnum, dwarf_where_t where, -- unw_word_t val) -+ unw_word_t val) - { - sr->rs_current.reg[regnum].where = where; - sr->rs_current.reg[regnum].val = val; -@@ -58,318 +60,343 @@ set_reg (dwarf_state_record_t *sr, unw_word_t regnum, dwarf_where_t where, - /* Run a CFI program to update the register state. */ - static int - run_cfi_program (struct dwarf_cursor *c, dwarf_state_record_t *sr, -- unw_word_t ip, unw_word_t *addr, unw_word_t end_addr, -- struct dwarf_cie_info *dci) -+ unw_word_t ip, unw_word_t *addr, unw_word_t end_addr, -+ struct dwarf_cie_info *dci) - { - unw_word_t curr_ip, operand = 0, regnum, val, len, fde_encoding; - dwarf_reg_state_t *rs_stack = NULL, *new_rs, *old_rs; -- unw_addr_space_t as; -- unw_accessors_t *a; - uint8_t u8, op; - uint16_t u16; - uint32_t u32; -- void *arg; - int ret; - -+ unw_addr_space_t cfi_as; -+ void *cfi_arg; - #ifndef UNW_LOCAL_ONLY -- as = dci->as; -- arg = dci->as_arg; -+ cfi_as = dci->as; -+ cfi_arg = dci->as_arg; - #else -- as = c->as; -- arg = c->as_arg; -+ cfi_as = c->as; -+ cfi_arg = c->as_arg; - #endif -- a = unw_get_accessors (as); -+ if (c->pi.flags & UNW_PI_FLAG_DEBUG_FRAME) -+ { -+ /* .debug_frame CFI is stored in local address space. */ -+ cfi_as = unw_local_addr_space; -+ cfi_arg = NULL; -+ } -+ unw_accessors_t *cfi_a = unw_get_accessors (cfi_as); -+ -+ unw_addr_space_t t_as = c->as; -+ void *t_arg = c->as_arg; -+ unw_accessors_t *t_a = unw_get_accessors (t_as); -+ - curr_ip = c->pi.start_ip; - -- /* Process all the instructions including the ones after `DW_CFA_advance_loc' -- up to the next advance higher than the current `ip' (therefore `<='). -- See also the `c->decrease_ip' handling in `fetch_proc_info'. */ -+ /* Process everything up to and including the current 'ip', -+ including all the DW_CFA_advance_loc instructions. See -+ 'c->use_prev_instr' use in 'fetch_proc_info' for details. */ - while (curr_ip <= ip && *addr < end_addr) - { -- if ((ret = dwarf_readu8 (as, a, addr, &op, arg)) < 0) -- return ret; -+ if ((ret = dwarf_readu8 (cfi_as, cfi_a, addr, &op, cfi_arg)) < 0) -+ return ret; - - if (op & DWARF_CFA_OPCODE_MASK) -- { -- operand = op & DWARF_CFA_OPERAND_MASK; -- op &= ~DWARF_CFA_OPERAND_MASK; -- } -+ { -+ operand = op & DWARF_CFA_OPERAND_MASK; -+ op &= ~DWARF_CFA_OPERAND_MASK; -+ } - switch ((dwarf_cfa_t) op) -- { -- case DW_CFA_advance_loc: -- curr_ip += operand * dci->code_align; -- Debug (15, "CFA_advance_loc to 0x%lx\n", (long) curr_ip); -- break; -- -- case DW_CFA_advance_loc1: -- if ((ret = dwarf_readu8 (as, a, addr, &u8, arg)) < 0) -- goto fail; -- curr_ip += u8 * dci->code_align; -- Debug (15, "CFA_advance_loc1 to 0x%lx\n", (long) curr_ip); -- break; -- -- case DW_CFA_advance_loc2: -- if ((ret = dwarf_readu16 (as, a, addr, &u16, arg)) < 0) -- goto fail; -- curr_ip += u16 * dci->code_align; -- Debug (15, "CFA_advance_loc2 to 0x%lx\n", (long) curr_ip); -- break; -- -- case DW_CFA_advance_loc4: -- if ((ret = dwarf_readu32 (as, a, addr, &u32, arg)) < 0) -- goto fail; -- curr_ip += u32 * dci->code_align; -- Debug (15, "CFA_advance_loc4 to 0x%lx\n", (long) curr_ip); -- break; -- -- case DW_CFA_MIPS_advance_loc8: -+ { -+ case DW_CFA_advance_loc: -+ curr_ip += operand * dci->code_align; -+ Debug (15, "CFA_advance_loc to 0x%lx\n", (long) curr_ip); -+ break; -+ -+ case DW_CFA_advance_loc1: -+ if ((ret = dwarf_readu8 (cfi_as, cfi_a, addr, &u8, cfi_arg)) < 0) -+ goto fail; -+ curr_ip += u8 * dci->code_align; -+ Debug (15, "CFA_advance_loc1 to 0x%lx\n", (long) curr_ip); -+ break; -+ -+ case DW_CFA_advance_loc2: -+ if ((ret = dwarf_readu16 (cfi_as, cfi_a, addr, &u16, cfi_arg)) < 0) -+ goto fail; -+ curr_ip += u16 * dci->code_align; -+ Debug (15, "CFA_advance_loc2 to 0x%lx\n", (long) curr_ip); -+ break; -+ -+ case DW_CFA_advance_loc4: -+ if ((ret = dwarf_readu32 (cfi_as, cfi_a, addr, &u32, cfi_arg)) < 0) -+ goto fail; -+ curr_ip += u32 * dci->code_align; -+ Debug (15, "CFA_advance_loc4 to 0x%lx\n", (long) curr_ip); -+ break; -+ -+ case DW_CFA_MIPS_advance_loc8: - #ifdef UNW_TARGET_MIPS -- { -- uint64_t u64; -- -- if ((ret = dwarf_readu64 (as, a, addr, &u64, arg)) < 0) -- goto fail; -- curr_ip += u64 * dci->code_align; -- Debug (15, "CFA_MIPS_advance_loc8\n"); -- break; -- } -+ { -+ uint64_t u64; -+ -+ if ((ret = dwarf_readu64 (cfi_as, cfi_a, addr, &u64, cfi_arg)) < 0) -+ goto fail; -+ curr_ip += u64 * dci->code_align; -+ Debug (15, "CFA_MIPS_advance_loc8\n"); -+ break; -+ } - #else -- Debug (1, "DW_CFA_MIPS_advance_loc8 on non-MIPS target\n"); -- ret = -UNW_EINVAL; -- goto fail; -+ Debug (1, "DW_CFA_MIPS_advance_loc8 on non-MIPS target\n"); -+ ret = -UNW_EINVAL; -+ goto fail; - #endif - -- case DW_CFA_offset: -- regnum = operand; -- if (regnum >= DWARF_NUM_PRESERVED_REGS) -- { -- Debug (1, "Invalid register number %u in DW_cfa_OFFSET\n", -- (unsigned int) regnum); -- ret = -UNW_EBADREG; -- goto fail; -- } -- if ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0) -- goto fail; -- set_reg (sr, regnum, DWARF_WHERE_CFAREL, val * dci->data_align); -- Debug (15, "CFA_offset r%lu at cfa+0x%lx\n", -- (long) regnum, (long) (val * dci->data_align)); -- break; -- -- case DW_CFA_offset_extended: -- if (((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- || ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0)) -- goto fail; -- set_reg (sr, regnum, DWARF_WHERE_CFAREL, val * dci->data_align); -- Debug (15, "CFA_offset_extended r%lu at cf+0x%lx\n", -- (long) regnum, (long) (val * dci->data_align)); -- break; -- -- case DW_CFA_offset_extended_sf: -- if (((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- || ((ret = dwarf_read_sleb128 (as, a, addr, &val, arg)) < 0)) -- goto fail; -- set_reg (sr, regnum, DWARF_WHERE_CFAREL, val * dci->data_align); -- Debug (15, "CFA_offset_extended_sf r%lu at cf+0x%lx\n", -- (long) regnum, (long) (val * dci->data_align)); -- break; -- -- case DW_CFA_restore: -- regnum = operand; -- if (regnum >= DWARF_NUM_PRESERVED_REGS) -- { -- Debug (1, "Invalid register number %u in DW_CFA_restore\n", -- (unsigned int) regnum); -- ret = -UNW_EINVAL; -- goto fail; -- } -- sr->rs_current.reg[regnum] = sr->rs_initial.reg[regnum]; -- Debug (15, "CFA_restore r%lu\n", (long) regnum); -- break; -- -- case DW_CFA_restore_extended: -- if ((ret = dwarf_read_uleb128 (as, a, addr, ®num, arg)) < 0) -- goto fail; -- if (regnum >= DWARF_NUM_PRESERVED_REGS) -- { -- Debug (1, "Invalid register number %u in " -- "DW_CFA_restore_extended\n", (unsigned int) regnum); -- ret = -UNW_EINVAL; -- goto fail; -- } -- sr->rs_current.reg[regnum] = sr->rs_initial.reg[regnum]; -- Debug (15, "CFA_restore_extended r%lu\n", (long) regnum); -- break; -- -- case DW_CFA_nop: -- break; -- -- case DW_CFA_set_loc: -- fde_encoding = dci->fde_encoding; -- if ((ret = dwarf_read_encoded_pointer (as, a, addr, fde_encoding, -- &c->pi, &curr_ip, -- arg)) < 0) -- goto fail; -- Debug (15, "CFA_set_loc to 0x%lx\n", (long) curr_ip); -- break; -- -- case DW_CFA_undefined: -- if ((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- goto fail; -- set_reg (sr, regnum, DWARF_WHERE_UNDEF, 0); -- Debug (15, "CFA_undefined r%lu\n", (long) regnum); -- break; -- -- case DW_CFA_same_value: -- if ((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- goto fail; -- set_reg (sr, regnum, DWARF_WHERE_SAME, 0); -- Debug (15, "CFA_same_value r%lu\n", (long) regnum); -- break; -- -- case DW_CFA_register: -- if (((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- || ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0)) -- goto fail; -- set_reg (sr, regnum, DWARF_WHERE_REG, val); -- Debug (15, "CFA_register r%lu to r%lu\n", (long) regnum, (long) val); -- break; -- -- case DW_CFA_remember_state: -- new_rs = alloc_reg_state (); -- if (!new_rs) -- { -- Debug (1, "Out of memory in DW_CFA_remember_state\n"); -- ret = -UNW_ENOMEM; -- goto fail; -- } -- -- memcpy (new_rs->reg, sr->rs_current.reg, sizeof (new_rs->reg)); -- new_rs->next = rs_stack; -- rs_stack = new_rs; -- Debug (15, "CFA_remember_state\n"); -- break; -- -- case DW_CFA_restore_state: -- if (!rs_stack) -- { -- Debug (1, "register-state stack underflow\n"); -- ret = -UNW_EINVAL; -- goto fail; -- } -- memcpy (&sr->rs_current.reg, &rs_stack->reg, sizeof (rs_stack->reg)); -- old_rs = rs_stack; -- rs_stack = rs_stack->next; -- free_reg_state (old_rs); -- Debug (15, "CFA_restore_state\n"); -- break; -- -- case DW_CFA_def_cfa: -- if (((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- || ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0)) -- goto fail; -- set_reg (sr, DWARF_CFA_REG_COLUMN, DWARF_WHERE_REG, regnum); -- set_reg (sr, DWARF_CFA_OFF_COLUMN, 0, val); /* NOT factored! */ -- Debug (15, "CFA_def_cfa r%lu+0x%lx\n", (long) regnum, (long) val); -- break; -- -- case DW_CFA_def_cfa_sf: -- if (((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- || ((ret = dwarf_read_sleb128 (as, a, addr, &val, arg)) < 0)) -- goto fail; -- set_reg (sr, DWARF_CFA_REG_COLUMN, DWARF_WHERE_REG, regnum); -- set_reg (sr, DWARF_CFA_OFF_COLUMN, 0, -- val * dci->data_align); /* factored! */ -- Debug (15, "CFA_def_cfa_sf r%lu+0x%lx\n", -- (long) regnum, (long) (val * dci->data_align)); -- break; -- -- case DW_CFA_def_cfa_register: -- if ((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- goto fail; -- set_reg (sr, DWARF_CFA_REG_COLUMN, DWARF_WHERE_REG, regnum); -- Debug (15, "CFA_def_cfa_register r%lu\n", (long) regnum); -- break; -- -- case DW_CFA_def_cfa_offset: -- if ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0) -- goto fail; -- set_reg (sr, DWARF_CFA_OFF_COLUMN, 0, val); /* NOT factored! */ -- Debug (15, "CFA_def_cfa_offset 0x%lx\n", (long) val); -- break; -- -- case DW_CFA_def_cfa_offset_sf: -- if ((ret = dwarf_read_sleb128 (as, a, addr, &val, arg)) < 0) -- goto fail; -- set_reg (sr, DWARF_CFA_OFF_COLUMN, 0, -- val * dci->data_align); /* factored! */ -- Debug (15, "CFA_def_cfa_offset_sf 0x%lx\n", -- (long) (val * dci->data_align)); -- break; -- -- case DW_CFA_def_cfa_expression: -- /* Save the address of the DW_FORM_block for later evaluation. */ -- set_reg (sr, DWARF_CFA_REG_COLUMN, DWARF_WHERE_EXPR, *addr); -- -- if ((ret = dwarf_read_uleb128 (as, a, addr, &len, arg)) < 0) -- goto fail; -- -- Debug (15, "CFA_def_cfa_expr @ 0x%lx [%lu bytes]\n", -- (long) *addr, (long) len); -- *addr += len; -- break; -- -- case DW_CFA_expression: -- if ((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- goto fail; -- -- /* Save the address of the DW_FORM_block for later evaluation. */ -- set_reg (sr, regnum, DWARF_WHERE_EXPR, *addr); -- -- if ((ret = dwarf_read_uleb128 (as, a, addr, &len, arg)) < 0) -- goto fail; -- -- Debug (15, "CFA_expression r%lu @ 0x%lx [%lu bytes]\n", -- (long) regnum, (long) addr, (long) len); -- *addr += len; -- break; -- -- case DW_CFA_GNU_args_size: -- if ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0) -- goto fail; -- sr->args_size = val; -- Debug (15, "CFA_GNU_args_size %lu\n", (long) val); -- break; -- -- case DW_CFA_GNU_negative_offset_extended: -- /* A comment in GCC says that this is obsoleted by -- DW_CFA_offset_extended_sf, but that it's used by older -- PowerPC code. */ -- if (((ret = read_regnum (as, a, addr, ®num, arg)) < 0) -- || ((ret = dwarf_read_uleb128 (as, a, addr, &val, arg)) < 0)) -- goto fail; -- set_reg (sr, regnum, DWARF_WHERE_CFAREL, -(val * dci->data_align)); -- Debug (15, "CFA_GNU_negative_offset_extended cfa+0x%lx\n", -- (long) -(val * dci->data_align)); -- break; -- -- case DW_CFA_GNU_window_save: -+ case DW_CFA_offset: -+ regnum = operand; -+ if (regnum >= DWARF_NUM_PRESERVED_REGS) -+ { -+ Debug (1, "Invalid register number %u in DW_cfa_OFFSET\n", -+ (unsigned int) regnum); -+ ret = -UNW_EBADREG; -+ goto fail; -+ } -+ if ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0) -+ goto fail; -+ set_reg (sr, regnum, DWARF_WHERE_CFAREL, val * dci->data_align); -+ Debug (15, "CFA_offset r%lu at cfa+0x%lx\n", -+ (long) regnum, (long) (val * dci->data_align)); -+ break; -+ -+ case DW_CFA_offset_extended: -+ if (((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ || ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0)) -+ goto fail; -+ set_reg (sr, regnum, DWARF_WHERE_CFAREL, val * dci->data_align); -+ Debug (15, "CFA_offset_extended r%lu at cf+0x%lx\n", -+ (long) regnum, (long) (val * dci->data_align)); -+ break; -+ -+ case DW_CFA_offset_extended_sf: -+ if (((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ || ((ret = dwarf_read_sleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0)) -+ goto fail; -+ set_reg (sr, regnum, DWARF_WHERE_CFAREL, val * dci->data_align); -+ Debug (15, "CFA_offset_extended_sf r%lu at cf+0x%lx\n", -+ (long) regnum, (long) (val * dci->data_align)); -+ break; -+ -+ case DW_CFA_restore: -+ regnum = operand; -+ if (regnum >= DWARF_NUM_PRESERVED_REGS) -+ { -+ Debug (1, "Invalid register number %u in DW_CFA_restore\n", -+ (unsigned int) regnum); -+ ret = -UNW_EINVAL; -+ goto fail; -+ } -+ sr->rs_current.reg[regnum] = sr->rs_initial.reg[regnum]; -+ Debug (15, "CFA_restore r%lu\n", (long) regnum); -+ break; -+ -+ case DW_CFA_restore_extended: -+ if ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, ®num, cfi_arg)) < 0) -+ goto fail; -+ if (regnum >= DWARF_NUM_PRESERVED_REGS) -+ { -+ Debug (1, "Invalid register number %u in " -+ "DW_CFA_restore_extended\n", (unsigned int) regnum); -+ ret = -UNW_EINVAL; -+ goto fail; -+ } -+ sr->rs_current.reg[regnum] = sr->rs_initial.reg[regnum]; -+ Debug (15, "CFA_restore_extended r%lu\n", (long) regnum); -+ break; -+ -+ case DW_CFA_nop: -+ break; -+ -+ case DW_CFA_set_loc: -+ fde_encoding = dci->fde_encoding; -+ if ((ret = dwarf_read_encoded_pointer (cfi_as, cfi_a, addr, fde_encoding, -+ &c->pi, &curr_ip, -+ cfi_arg)) < 0) -+ goto fail; -+ Debug (15, "CFA_set_loc to 0x%lx\n", (long) curr_ip); -+ break; -+ -+ case DW_CFA_undefined: -+ if ((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ goto fail; -+ set_reg (sr, regnum, DWARF_WHERE_UNDEF, 0); -+ Debug (15, "CFA_undefined r%lu\n", (long) regnum); -+ break; -+ -+ case DW_CFA_same_value: -+ if ((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ goto fail; -+ set_reg (sr, regnum, DWARF_WHERE_SAME, 0); -+ Debug (15, "CFA_same_value r%lu\n", (long) regnum); -+ break; -+ -+ case DW_CFA_register: -+ if (((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ || ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0)) -+ goto fail; -+ set_reg (sr, regnum, DWARF_WHERE_REG, val); -+ Debug (15, "CFA_register r%lu to r%lu\n", (long) regnum, (long) val); -+ break; -+ -+ case DW_CFA_remember_state: -+ new_rs = alloc_reg_state (); -+ if (!new_rs) -+ { -+ Debug (1, "Out of memory in DW_CFA_remember_state\n"); -+ ret = -UNW_ENOMEM; -+ goto fail; -+ } -+ -+ memcpy (new_rs->reg, sr->rs_current.reg, sizeof (new_rs->reg)); -+ new_rs->next = rs_stack; -+ rs_stack = new_rs; -+ Debug (15, "CFA_remember_state\n"); -+ break; -+ -+ case DW_CFA_restore_state: -+ if (!rs_stack) -+ { -+ Debug (1, "register-state stack underflow\n"); -+ ret = -UNW_EINVAL; -+ goto fail; -+ } -+ memcpy (&sr->rs_current.reg, &rs_stack->reg, sizeof (rs_stack->reg)); -+ old_rs = rs_stack; -+ rs_stack = rs_stack->next; -+ free_reg_state (old_rs); -+ Debug (15, "CFA_restore_state\n"); -+ break; -+ -+ case DW_CFA_def_cfa: -+ if (((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ || ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0)) -+ goto fail; -+ set_reg (sr, DWARF_CFA_REG_COLUMN, DWARF_WHERE_REG, regnum); -+ set_reg (sr, DWARF_CFA_OFF_COLUMN, 0, val); /* NOT factored! */ -+ Debug (15, "CFA_def_cfa r%lu+0x%lx\n", (long) regnum, (long) val); -+ break; -+ -+ case DW_CFA_def_cfa_sf: -+ if (((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ || ((ret = dwarf_read_sleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0)) -+ goto fail; -+ set_reg (sr, DWARF_CFA_REG_COLUMN, DWARF_WHERE_REG, regnum); -+ set_reg (sr, DWARF_CFA_OFF_COLUMN, 0, -+ val * dci->data_align); /* factored! */ -+ Debug (15, "CFA_def_cfa_sf r%lu+0x%lx\n", -+ (long) regnum, (long) (val * dci->data_align)); -+ break; -+ -+ case DW_CFA_def_cfa_register: -+ if ((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ goto fail; -+ set_reg (sr, DWARF_CFA_REG_COLUMN, DWARF_WHERE_REG, regnum); -+ Debug (15, "CFA_def_cfa_register r%lu\n", (long) regnum); -+ break; -+ -+ case DW_CFA_def_cfa_offset: -+ if ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0) -+ goto fail; -+ set_reg (sr, DWARF_CFA_OFF_COLUMN, 0, val); /* NOT factored! */ -+ Debug (15, "CFA_def_cfa_offset 0x%lx\n", (long) val); -+ break; -+ -+ case DW_CFA_def_cfa_offset_sf: -+ if ((ret = dwarf_read_sleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0) -+ goto fail; -+ set_reg (sr, DWARF_CFA_OFF_COLUMN, 0, -+ val * dci->data_align); /* factored! */ -+ Debug (15, "CFA_def_cfa_offset_sf 0x%lx\n", -+ (long) (val * dci->data_align)); -+ break; -+ -+ case DW_CFA_def_cfa_expression: -+ /* Save the address of the DW_FORM_block for later evaluation. */ -+ set_reg (sr, DWARF_CFA_REG_COLUMN, DWARF_WHERE_EXPR, *addr); -+ -+ if ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &len, cfi_arg)) < 0) -+ goto fail; -+ -+ Debug (15, "CFA_def_cfa_expr @ 0x%lx [%lu bytes]\n", -+ (long) *addr, (long) len); -+ *addr += len; -+ break; -+ -+ case DW_CFA_expression: -+ if ((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ goto fail; -+ -+ /* Save the address of the DW_FORM_block for later evaluation. */ -+ set_reg (sr, regnum, DWARF_WHERE_EXPR, *addr); -+ -+ if ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &len, cfi_arg)) < 0) -+ goto fail; -+ -+ Debug (15, "CFA_expression r%lu @ 0x%lx [%lu bytes]\n", -+ (long) regnum, (long) addr, (long) len); -+ *addr += len; -+ break; -+ -+ case DW_CFA_val_expression: -+ if ((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ goto fail; -+ -+ /* Save the address of the DW_FORM_block for later evaluation. */ -+ set_reg (sr, regnum, DWARF_WHERE_VAL_EXPR, *addr); -+ -+ if ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &len, cfi_arg)) < 0) -+ goto fail; -+ -+ Debug (15, "CFA_val_expression r%lu @ 0x%lx [%lu bytes]\n", -+ (long) regnum, (long) addr, (long) len); -+ *addr += len; -+ break; -+ -+ case DW_CFA_GNU_args_size: -+ if ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0) -+ goto fail; -+ sr->args_size = val; -+ Debug (15, "CFA_GNU_args_size %lu\n", (long) val); -+ break; -+ -+ case DW_CFA_GNU_negative_offset_extended: -+ /* A comment in GCC says that this is obsoleted by -+ DW_CFA_offset_extended_sf, but that it's used by older -+ PowerPC code. */ -+ if (((ret = read_regnum (t_as, t_a, addr, ®num, t_arg)) < 0) -+ || ((ret = dwarf_read_uleb128 (cfi_as, cfi_a, addr, &val, cfi_arg)) < 0)) -+ goto fail; -+ set_reg (sr, regnum, DWARF_WHERE_CFAREL, -(val * dci->data_align)); -+ Debug (15, "CFA_GNU_negative_offset_extended cfa+0x%lx\n", -+ (long) -(val * dci->data_align)); -+ break; -+ -+ case DW_CFA_GNU_window_save: - #ifdef UNW_TARGET_SPARC -- /* This is a special CFA to handle all 16 windowed registers -- on SPARC. */ -- for (regnum = 16; regnum < 32; ++regnum) -- set_reg (sr, regnum, DWARF_WHERE_CFAREL, -- (regnum - 16) * sizeof (unw_word_t)); -- Debug (15, "CFA_GNU_window_save\n"); -- break; -+ /* This is a special CFA to handle all 16 windowed registers -+ on SPARC. */ -+ for (regnum = 16; regnum < 32; ++regnum) -+ set_reg (sr, regnum, DWARF_WHERE_CFAREL, -+ (regnum - 16) * sizeof (unw_word_t)); -+ Debug (15, "CFA_GNU_window_save\n"); -+ break; - #else -- /* FALL THROUGH */ -+ /* FALL THROUGH */ - #endif -- case DW_CFA_lo_user: -- case DW_CFA_hi_user: -- Debug (1, "Unexpected CFA opcode 0x%x\n", op); -- ret = -UNW_EINVAL; -- goto fail; -- } -+ case DW_CFA_lo_user: -+ case DW_CFA_hi_user: -+ Debug (1, "Unexpected CFA opcode 0x%x\n", op); -+ ret = -UNW_EINVAL; -+ goto fail; -+ } - } - ret = 0; - -@@ -389,13 +416,22 @@ fetch_proc_info (struct dwarf_cursor *c, unw_word_t ip, int need_unwind_info) - { - int ret, dynamic = 1; - -- /* In the current (lowest) frame we must not touch `ip' as the current -- address is where we stand. On the other hand any upper frames will stand -- on the next instruction behind our call which may have a different stack -- DWARF information (for `stdcall' called functions) or the next instruction -- even may belong already to a different continuing function. -- Also signal frames got invoked from the instruction we want to analyze. */ -- if (c->decrease_ip) -+ /* The 'ip' can point either to the previous or next instruction -+ depending on what type of frame we have: normal call or a place -+ to resume execution (e.g. after signal frame). -+ -+ For a normal call frame we need to back up so we point within the -+ call itself; this is important because a) the call might be the -+ very last instruction of the function and the edge of the FDE, -+ and b) so that run_cfi_program() runs locations up to the call -+ but not more. -+ -+ For execution resume, we need to do the exact opposite and look -+ up using the current 'ip' value. That is where execution will -+ continue, and it's important we get this right, as 'ip' could be -+ right at the function entry and hence FDE edge, or at instruction -+ that manipulates CFA (push/pop). */ -+ if (c->use_prev_instr) - --ip; - - if (c->pi_valid && !need_unwind_info) -@@ -405,19 +441,33 @@ fetch_proc_info (struct dwarf_cursor *c, unw_word_t ip, int need_unwind_info) - - /* check dynamic info first --- it overrides everything else */ - ret = unwi_find_dynamic_proc_info (c->as, ip, &c->pi, need_unwind_info, -- c->as_arg); -+ c->as_arg); - if (ret == -UNW_ENOINFO) - { - dynamic = 0; - if ((ret = tdep_find_proc_info (c, ip, need_unwind_info)) < 0) -- return ret; -+ return ret; - } - -+ if (c->pi.format != UNW_INFO_FORMAT_DYNAMIC -+ && c->pi.format != UNW_INFO_FORMAT_TABLE -+ && c->pi.format != UNW_INFO_FORMAT_REMOTE_TABLE) -+ return -UNW_ENOINFO; -+ - c->pi_valid = 1; - c->pi_is_dynamic = dynamic; - -+ /* Let system/machine-dependent code determine frame-specific attributes. */ - if (ret >= 0) -- tdep_fetch_proc_info_post (c, ip, need_unwind_info); -+ tdep_fetch_frame (c, ip, need_unwind_info); -+ -+ /* Update use_prev_instr for the next frame. */ -+ if (need_unwind_info) -+ { -+ assert(c->pi.unwind_info); -+ struct dwarf_cie_info *dci = c->pi.unwind_info; -+ c->use_prev_instr = ! dci->signal_frame; -+ } - - return ret; - } -@@ -436,39 +486,34 @@ parse_dynamic (struct dwarf_cursor *c, unw_word_t ip, dwarf_state_record_t *sr) - static inline void - put_unwind_info (struct dwarf_cursor *c, unw_proc_info_t *pi) - { -- if (!c->pi_valid) -- return; -- -- if (c->pi_is_dynamic) { -+ if (c->pi_is_dynamic) - unwi_put_dynamic_unwind_info (c->as, pi, c->as_arg); -- return; -- } -- -- if (pi->unwind_info); { -- // Find the eh-frame's address space and arguments. -- unw_addr_space_t frame_as; -- void *frame_arg; -+ else if (pi->unwind_info && pi->format == UNW_INFO_FORMAT_TABLE) -+ { -+ mempool_free (&dwarf_cie_info_pool, pi->unwind_info); -+ pi->unwind_info = NULL; -+ } - #ifndef UNW_LOCAL_ONLY -- struct dwarf_cie_info *dci = pi->unwind_info; -- frame_as = dci->as; -- frame_arg = dci->as_arg; --#else -- frame_as = c->as; -- frame_arg = c->as_arg; --#endif -- if (frame_as) { -- // notify the eh-frame accessors that the info is being -- // released so it can also release its local data (for instance -- // the frame_arg pointer). -- unw_accessors_t *a = unw_get_accessors (frame_as); -- if (a->put_unwind_info != NULL) { -- a->put_unwind_info(frame_as, pi, frame_arg); -- } -+ else if (pi->unwind_info && pi->format == UNW_INFO_FORMAT_REMOTE_TABLE) -+ { -+ // Find the eh-frame's address space and arguments. -+ struct dwarf_cie_info *dci = pi->unwind_info; -+ unw_addr_space_t frame_as = dci->as; -+ void *frame_arg = dci->as_arg; -+ if (frame_as) -+ { -+ // notify the eh-frame accessors that the info is being -+ // released so it can also release its local data (for -+ // instance the frame_arg pointer). -+ unw_accessors_t *a = unw_get_accessors (frame_as); -+ if (a->put_unwind_info != NULL) -+ a->put_unwind_info(frame_as, pi, frame_arg); -+ } -+ // Free this data. -+ mempool_free (&dwarf_cie_info_pool, pi->unwind_info); -+ pi->unwind_info = NULL; - } -- // Free this data. -- mempool_free (&dwarf_cie_info_pool, pi->unwind_info); -- pi->unwind_info = NULL; -- } -+#endif - } - - static inline int -@@ -483,7 +528,7 @@ parse_fde (struct dwarf_cursor *c, unw_word_t ip, dwarf_state_record_t *sr) - - addr = dci->cie_instr_start; - if ((ret = run_cfi_program (c, sr, ~(unw_word_t) 0, &addr, -- dci->cie_instr_end, dci)) < 0) -+ dci->cie_instr_end, dci)) < 0) - return ret; - - memcpy (&sr->rs_initial, &sr->rs_current, sizeof (sr->rs_initial)); -@@ -506,9 +551,10 @@ flush_rs_cache (struct dwarf_rs_cache *cache) - for (i = 0; i < DWARF_UNW_CACHE_SIZE; ++i) - { - if (i > 0) -- cache->buckets[i].lru_chain = (i - 1); -+ cache->buckets[i].lru_chain = (i - 1); - cache->buckets[i].coll_chain = -1; - cache->buckets[i].ip = 0; -+ cache->buckets[i].valid = 0; - } - for (i = 0; ihash[i] = -1; -@@ -523,22 +569,11 @@ get_rs_cache (unw_addr_space_t as, intrmask_t *saved_maskp) - if (caching == UNW_CACHE_NONE) - return NULL; - --#ifdef HAVE_ATOMIC_H -- if (!spin_trylock_irqsave (&cache->busy, *saved_maskp)) -- return NULL; --#else --# ifdef HAVE_ATOMIC_OPS_H -- if (AO_test_and_set (&cache->busy) == AO_TS_SET) -- return NULL; --# else -- sigprocmask (SIG_SETMASK, &unwi_full_mask, saved_maskp); - if (likely (caching == UNW_CACHE_GLOBAL)) - { -- Debug (16, "%s: acquiring lock\n", __FUNCTION__); -- mutex_lock (&cache->lock); -+ Debug (16, "acquiring lock\n"); -+ lock_acquire (&cache->lock, *saved_maskp); - } --# endif --#endif - - if (atomic_read (&as->cache_generation) != atomic_read (&cache->generation)) - { -@@ -551,37 +586,28 @@ get_rs_cache (unw_addr_space_t as, intrmask_t *saved_maskp) - - static inline void - put_rs_cache (unw_addr_space_t as, struct dwarf_rs_cache *cache, -- intrmask_t *saved_maskp) -+ intrmask_t *saved_maskp) - { - assert (as->caching_policy != UNW_CACHE_NONE); - - Debug (16, "unmasking signals/interrupts and releasing lock\n"); --#ifdef HAVE_ATOMIC_H -- spin_unlock_irqrestore (&cache->busy, *saved_maskp); --#else --# ifdef HAVE_ATOMIC_OPS_H -- AO_CLEAR (&cache->busy); --# else - if (likely (as->caching_policy == UNW_CACHE_GLOBAL)) -- mutex_unlock (&cache->lock); -- sigprocmask (SIG_SETMASK, saved_maskp, NULL); --# endif --#endif -+ lock_release (&cache->lock, *saved_maskp); - } - --static inline unw_hash_index_t -+static inline unw_hash_index_t CONST_ATTR - hash (unw_word_t ip) - { - /* based on (sqrt(5)/2-1)*2^64 */ --# define magic ((unw_word_t) 0x9e3779b97f4a7c16ULL) -+# define magic ((unw_word_t) 0x9e3779b97f4a7c16ULL) - -- return (ip) * magic >> ((sizeof(unw_word_t) * 8) - DWARF_LOG_UNW_HASH_SIZE); -+ return ip * magic >> ((sizeof(unw_word_t) * 8) - DWARF_LOG_UNW_HASH_SIZE); - } - - static inline long - cache_match (dwarf_reg_state_t *rs, unw_word_t ip) - { -- if (ip == rs->ip) -+ if (rs->valid && (ip == rs->ip)) - return 1; - return 0; - } -@@ -600,7 +626,7 @@ rs_lookup (struct dwarf_rs_cache *cache, struct dwarf_cursor *c) - - index = cache->hash[hash (ip)]; - if (index >= DWARF_UNW_CACHE_SIZE) -- return 0; -+ return NULL; - - rs = cache->buckets + index; - while (1) -@@ -613,7 +639,7 @@ rs_lookup (struct dwarf_rs_cache *cache, struct dwarf_cursor *c) - return rs; - } - if (rs->coll_chain >= DWARF_UNW_HASH_SIZE) -- return 0; -+ return NULL; - rs = cache->buckets + rs->coll_chain; - } - } -@@ -638,24 +664,24 @@ rs_new (struct dwarf_rs_cache *cache, struct dwarf_cursor * c) - { - index = hash (rs->ip); - tmp = cache->buckets + cache->hash[index]; -- prev = 0; -+ prev = NULL; - while (1) -- { -- if (tmp == rs) -- { -- if (prev) -- prev->coll_chain = tmp->coll_chain; -- else -- cache->hash[index] = tmp->coll_chain; -- break; -- } -- else -- prev = tmp; -- if (tmp->coll_chain >= DWARF_UNW_CACHE_SIZE) -- /* old rs wasn't in the hash-table */ -- break; -- tmp = cache->buckets + tmp->coll_chain; -- } -+ { -+ if (tmp == rs) -+ { -+ if (prev) -+ prev->coll_chain = tmp->coll_chain; -+ else -+ cache->hash[index] = tmp->coll_chain; -+ break; -+ } -+ else -+ prev = tmp; -+ if (tmp->coll_chain >= DWARF_UNW_CACHE_SIZE) -+ /* old rs wasn't in the hash-table */ -+ break; -+ tmp = cache->buckets + tmp->coll_chain; -+ } - } - - /* enter new rs in the hash table */ -@@ -665,14 +691,17 @@ rs_new (struct dwarf_rs_cache *cache, struct dwarf_cursor * c) - - rs->hint = 0; - rs->ip = c->ip; -+ rs->valid = 1; - rs->ret_addr_column = c->ret_addr_column; -+ rs->signal_frame = 0; -+ tdep_cache_frame (c, rs); - - return rs; - } - - static int - create_state_record_for (struct dwarf_cursor *c, dwarf_state_record_t *sr, -- unw_word_t ip) -+ unw_word_t ip) - { - int i, ret; - -@@ -702,8 +731,8 @@ create_state_record_for (struct dwarf_cursor *c, dwarf_state_record_t *sr, - - static inline int - eval_location_expr (struct dwarf_cursor *c, unw_addr_space_t as, -- unw_accessors_t *a, unw_word_t addr, -- dwarf_loc_t *locp, void *arg) -+ unw_accessors_t *a, unw_word_t addr, -+ dwarf_loc_t *locp, void *arg) - { - int ret, is_register; - unw_word_t len, val; -@@ -750,17 +779,18 @@ apply_reg_state (struct dwarf_cursor *c, struct dwarf_reg_state *rs) - /* CFA is equal to [reg] + offset: */ - - /* As a special-case, if the stack-pointer is the CFA and the -- stack-pointer wasn't saved, popping the CFA implicitly pops -- the stack-pointer as well. */ -+ stack-pointer wasn't saved, popping the CFA implicitly pops -+ the stack-pointer as well. */ - if ((rs->reg[DWARF_CFA_REG_COLUMN].val == UNW_TDEP_SP) -- && (rs->reg[UNW_TDEP_SP].where == DWARF_WHERE_SAME)) -- cfa = c->cfa; -+ && (UNW_TDEP_SP < ARRAY_SIZE(rs->reg)) -+ && (rs->reg[UNW_TDEP_SP].where == DWARF_WHERE_SAME)) -+ cfa = c->cfa; - else -- { -- regnum = dwarf_to_unw_regnum (rs->reg[DWARF_CFA_REG_COLUMN].val); -- if ((ret = unw_get_reg ((unw_cursor_t *) c, regnum, &cfa)) < 0) -- return ret; -- } -+ { -+ regnum = dwarf_to_unw_regnum (rs->reg[DWARF_CFA_REG_COLUMN].val); -+ if ((ret = unw_get_reg ((unw_cursor_t *) c, regnum, &cfa)) < 0) -+ return ret; -+ } - cfa += rs->reg[DWARF_CFA_OFF_COLUMN].val; - } - else -@@ -771,72 +801,71 @@ apply_reg_state (struct dwarf_cursor *c, struct dwarf_reg_state *rs) - - addr = rs->reg[DWARF_CFA_REG_COLUMN].val; - if ((ret = eval_location_expr (c, as, a, addr, &cfa_loc, arg)) < 0) -- return ret; -+ return ret; - /* the returned location better be a memory location... */ - if (DWARF_IS_REG_LOC (cfa_loc)) -- return -UNW_EBADFRAME; -+ return -UNW_EBADFRAME; - cfa = DWARF_GET_LOC (cfa_loc); - } - - for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) - { - switch ((dwarf_where_t) rs->reg[i].where) -- { -- case DWARF_WHERE_UNDEF: -- c->loc[i] = DWARF_NULL_LOC; -- break; -- -- case DWARF_WHERE_SAME: -- break; -- -- case DWARF_WHERE_CFAREL: -- c->loc[i] = DWARF_MEM_LOC (c, cfa + rs->reg[i].val); -- break; -- -- case DWARF_WHERE_REG: -- c->loc[i] = DWARF_REG_LOC (c, dwarf_to_unw_regnum (rs->reg[i].val)); -- break; -- -- case DWARF_WHERE_EXPR: -- addr = rs->reg[i].val; -- if ((ret = eval_location_expr (c, as, a, addr, c->loc + i, arg)) , 0) -- return ret; -- break; -- } -+ { -+ case DWARF_WHERE_UNDEF: -+ c->loc[i] = DWARF_NULL_LOC; -+ break; -+ -+ case DWARF_WHERE_SAME: -+ break; -+ -+ case DWARF_WHERE_CFAREL: -+ c->loc[i] = DWARF_MEM_LOC (c, cfa + rs->reg[i].val); -+ break; -+ -+ case DWARF_WHERE_REG: -+ c->loc[i] = DWARF_REG_LOC (c, dwarf_to_unw_regnum (rs->reg[i].val)); -+ break; -+ -+ case DWARF_WHERE_EXPR: -+ addr = rs->reg[i].val; -+ if ((ret = eval_location_expr (c, as, a, addr, c->loc + i, arg)) < 0) -+ return ret; -+ break; -+ -+ case DWARF_WHERE_VAL_EXPR: -+ addr = rs->reg[i].val; -+ if ((ret = eval_location_expr (c, as, a, addr, c->loc + i, arg)) < 0) -+ return ret; -+ c->loc[i] = DWARF_VAL_LOC (c, DWARF_GET_LOC (c->loc[i])); -+ break; -+ } - } -+ - c->cfa = cfa; -- /* After fixing glibc's `__restore_rt' unwinding by CFI in: -- http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/unix/sysv/linux/x86_64/sigaction.c.diff?cvsroot=glibc&r1=text&tr1=1.10&r2=text&tr2=1.12&f=u -- we need to check for the frame stop (indicated by `ip == 0'). */ -+ /* DWARF spec says undefined return address location means end of stack. */ - if (DWARF_IS_NULL_LOC (c->loc[c->ret_addr_column])) - c->ip = 0; - else -- { -- ret = dwarf_get (c, c->loc[c->ret_addr_column], &ip); -- if (ret < 0) -- return ret; -- c->ip = ip; -- } -- /* XXX: check for ip to be code_aligned */ -+ { -+ ret = dwarf_get (c, c->loc[c->ret_addr_column], &ip); -+ if (ret < 0) -+ return ret; -+ c->ip = ip; -+ } - -+ /* XXX: check for ip to be code_aligned */ - if (c->ip == prev_ip && c->cfa == prev_cfa) - { -- dprintf ("%s: ip and cfa unchanged; stopping here (ip=0x%lx)\n", -- __FUNCTION__, (long) c->ip); -+ Dprintf ("%s: ip and cfa unchanged; stopping here (ip=0x%lx)\n", -+ __FUNCTION__, (long) c->ip); - return -UNW_EBADFRAME; - } -- return 0; --} - --static int --is_signal_frame (struct dwarf_cursor *c) --{ -- struct dwarf_cie_info *dci; -- -- assert (c->pi_valid); -+ if (c->stash_frames) -+ tdep_stash_frame (c, rs); - -- dci = c->pi.unwind_info; -- return dci->signal_frame; -+ return 0; - } - - static int -@@ -846,9 +875,10 @@ uncached_dwarf_find_save_locs (struct dwarf_cursor *c) - int ret; - - if ((ret = fetch_proc_info (c, c->ip, 1)) < 0) -- return ret; -- -- c->decrease_ip = !is_signal_frame (c); -+ { -+ put_unwind_info (c, &c->pi); -+ return ret; -+ } - - if ((ret = create_state_record_for (c, &sr, c->ip)) < 0) - return ret; -@@ -866,7 +896,7 @@ HIDDEN int - dwarf_find_save_locs (struct dwarf_cursor *c) - { - dwarf_state_record_t sr; -- dwarf_reg_state_t *rs, *rs1; -+ dwarf_reg_state_t *rs, rs_copy; - struct dwarf_rs_cache *cache; - int ret = 0; - intrmask_t saved_mask; -@@ -875,51 +905,38 @@ dwarf_find_save_locs (struct dwarf_cursor *c) - return uncached_dwarf_find_save_locs (c); - - cache = get_rs_cache(c->as, &saved_mask); -- if (!cache) -- return -UNW_ENOINFO; /* cache is busy */ - rs = rs_lookup(cache, c); - - if (rs) - { - c->ret_addr_column = rs->ret_addr_column; -- goto apply; -+ c->use_prev_instr = ! rs->signal_frame; - } -- -- if ((ret = fetch_proc_info (c, c->ip, 1)) < 0) -- goto out; -- -- c->decrease_ip = !is_signal_frame (c); -- -- if ((ret = create_state_record_for (c, &sr, c->ip)) < 0) -- goto out; -- -- rs1 = &sr.rs_current; -- if (rs1) -+ else - { -- rs = rs_new (cache, c); -- memcpy(rs, rs1, offsetof(struct dwarf_reg_state, ip)); -- if (!rs) -+ if ((ret = fetch_proc_info (c, c->ip, 1)) < 0 || -+ (ret = create_state_record_for (c, &sr, c->ip)) < 0) - { -- dprintf ("%s: failed to create unwind rs\n", __FUNCTION__); -- ret = -UNW_EUNSPEC; -- goto out; -+ put_rs_cache (c->as, cache, &saved_mask); -+ put_unwind_info (c, &c->pi); -+ return ret; - } -- } -- cache->buckets[c->prev_rs].hint = rs - cache->buckets; - -- c->hint = rs->hint; -- c->prev_rs = rs - cache->buckets; -+ rs = rs_new (cache, c); -+ memcpy(rs, &sr.rs_current, offsetof(struct dwarf_reg_state, ip)); -+ cache->buckets[c->prev_rs].hint = rs - cache->buckets; -+ -+ c->hint = rs->hint; -+ c->prev_rs = rs - cache->buckets; - -- put_unwind_info (c, &c->pi); -- ret = apply_reg_state (c, rs); -+ put_unwind_info (c, &c->pi); -+ } - --out: -+ memcpy (&rs_copy, rs, sizeof (rs_copy)); - put_rs_cache (c->as, cache, &saved_mask); -- return ret; - --apply: -- put_rs_cache (c->as, cache, &saved_mask); -- if ((ret = apply_reg_state (c, rs)) < 0) -+ tdep_reuse_frame (c, &rs_copy); -+ if ((ret = apply_reg_state (c, &rs_copy)) < 0) - return ret; - - return 0; -diff --git a/frysk-imports/libunwind/src/dwarf/Gpe.c b/frysk-imports/libunwind/src/dwarf/Gpe.c -index c271d76..a0e37ba 100644 ---- a/frysk-imports/libunwind/src/dwarf/Gpe.c -+++ b/frysk-imports/libunwind/src/dwarf/Gpe.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -30,10 +30,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN int - dwarf_read_encoded_pointer (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, unsigned char encoding, -- const unw_proc_info_t *pi, -- unw_word_t *valp, void *arg) -+ unw_word_t *addr, unsigned char encoding, -+ const unw_proc_info_t *pi, -+ unw_word_t *valp, void *arg) - { - return dwarf_read_encoded_pointer_inlined (as, a, addr, encoding, -- pi, valp, arg); -+ pi, valp, arg); - } -diff --git a/frysk-imports/libunwind/src/dwarf/Gstep.c b/frysk-imports/libunwind/src/dwarf/Gstep.c -index a9b789c..d251af9 100644 ---- a/frysk-imports/libunwind/src/dwarf/Gstep.c -+++ b/frysk-imports/libunwind/src/dwarf/Gstep.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -29,12 +29,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - HIDDEN int - dwarf_step (struct dwarf_cursor *c) - { -- unw_word_t prev_cfa = c->cfa; - int ret; - - if ((ret = dwarf_find_save_locs (c)) >= 0) { - c->pi_valid = 0; -- ret = (c->ip == 0) ? 0 : 1; -+ ret = 1; - } - - Debug (15, "returning %d\n", ret); -diff --git a/frysk-imports/libunwind/src/dwarf/Lfind_unwind_table.c b/frysk-imports/libunwind/src/dwarf/Lfind_unwind_table.c -new file mode 100644 -index 0000000..68e269f ---- /dev/null -+++ b/frysk-imports/libunwind/src/dwarf/Lfind_unwind_table.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gfind_unwind_table.c" -+#endif -diff --git a/frysk-imports/libunwind/src/dwarf/global.c b/frysk-imports/libunwind/src/dwarf/global.c -index 4658ccf..8d0957d 100644 ---- a/frysk-imports/libunwind/src/dwarf/global.c -+++ b/frysk-imports/libunwind/src/dwarf/global.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003-2004 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/elf32.h b/frysk-imports/libunwind/src/elf32.h -index d27646c..2c7bca4 100644 ---- a/frysk-imports/libunwind/src/elf32.h -+++ b/frysk-imports/libunwind/src/elf32.h -@@ -1,7 +1,9 @@ - #ifndef elf32_h - #define elf32_h - --#define ELF_CLASS ELFCLASS32 -+#ifndef ELF_CLASS -+#define ELF_CLASS ELFCLASS32 -+#endif - #include "elfxx.h" - - #endif /* elf32_h */ -diff --git a/frysk-imports/libunwind/src/elf64.h b/frysk-imports/libunwind/src/elf64.h -index 8f22384..091fba8 100644 ---- a/frysk-imports/libunwind/src/elf64.h -+++ b/frysk-imports/libunwind/src/elf64.h -@@ -1,7 +1,9 @@ - #ifndef elf64_h - #define elf64_h - --#define ELF_CLASS ELFCLASS64 -+#ifndef ELF_CLASS -+#define ELF_CLASS ELFCLASS64 -+#endif - #include "elfxx.h" - - #endif /* elf64_h */ -diff --git a/frysk-imports/libunwind/src/elfxx.c b/frysk-imports/libunwind/src/elfxx.c -index 05b9943..33fccba 100644 ---- a/frysk-imports/libunwind/src/elfxx.c -+++ b/frysk-imports/libunwind/src/elfxx.c -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -24,112 +24,276 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -+#include "libunwind_i.h" -+ - #include -+#include - --#include "libunwind_i.h" -+#ifdef HAVE_LZMA -+#include -+#endif /* HAVE_LZMA */ - --HIDDEN int --elf_w (valid_object) (struct elf_image *ei) -+static Elf_W (Shdr)* -+elf_w (section_table) (struct elf_image *ei) - { -- if (ei->size <= EI_CLASS) -- return 0; -+ Elf_W (Ehdr) *ehdr = ei->image; -+ Elf_W (Off) soff; -+ -+ soff = ehdr->e_shoff; -+ if (soff + ehdr->e_shnum * ehdr->e_shentsize > ei->size) -+ { -+ Debug (1, "section table outside of image? (%lu > %lu)\n", -+ (unsigned long) (soff + ehdr->e_shnum * ehdr->e_shentsize), -+ (unsigned long) ei->size); -+ return NULL; -+ } - -- return (memcmp (ei->image, ELFMAG, SELFMAG) == 0 -- && ((uint8_t *) ei->image)[EI_CLASS] == ELF_CLASS); -+ return (Elf_W (Shdr) *) ((char *) ei->image + soff); - } - -+static char* -+elf_w (string_table) (struct elf_image *ei, int section) -+{ -+ Elf_W (Ehdr) *ehdr = ei->image; -+ Elf_W (Off) soff, str_soff; -+ Elf_W (Shdr) *str_shdr; -+ -+ /* this offset is assumed to be OK */ -+ soff = ehdr->e_shoff; -+ -+ str_soff = soff + (section * ehdr->e_shentsize); -+ if (str_soff + ehdr->e_shentsize > ei->size) -+ { -+ Debug (1, "string shdr table outside of image? (%lu > %lu)\n", -+ (unsigned long) (str_soff + ehdr->e_shentsize), -+ (unsigned long) ei->size); -+ return NULL; -+ } -+ str_shdr = (Elf_W (Shdr) *) ((char *) ei->image + str_soff); -+ -+ if (str_shdr->sh_offset + str_shdr->sh_size > ei->size) -+ { -+ Debug (1, "string table outside of image? (%lu > %lu)\n", -+ (unsigned long) (str_shdr->sh_offset + str_shdr->sh_size), -+ (unsigned long) ei->size); -+ return NULL; -+ } -+ -+ Debug (16, "strtab=0x%lx\n", (long) str_shdr->sh_offset); -+ return ei->image + str_shdr->sh_offset; -+} - - static int - elf_w (lookup_symbol) (unw_addr_space_t as, -- unw_word_t ip, struct elf_image *ei, -- Elf_W (Addr) load_offset, -- char *buf, size_t buf_len, unw_word_t *offp) -+ unw_word_t ip, struct elf_image *ei, -+ Elf_W (Addr) load_offset, -+ char *buf, size_t buf_len, Elf_W (Addr) *min_dist) - { - size_t syment_size; - Elf_W (Ehdr) *ehdr = ei->image; - Elf_W (Sym) *sym, *symtab, *symtab_end; -- Elf_W (Off) soff, str_soff; -- Elf_W (Shdr) *shdr, *str_shdr; -- Elf_W (Addr) val, min_dist = ~(Elf_W (Addr))0; -- int i, ret = 0; -+ Elf_W (Shdr) *shdr; -+ Elf_W (Addr) val; -+ int i, ret = -UNW_ENOINFO; - char *strtab; - - if (!elf_w (valid_object) (ei)) - return -UNW_ENOINFO; - -- soff = ehdr->e_shoff; -- if (soff + ehdr->e_shnum * ehdr->e_shentsize > ei->size) -+ shdr = elf_w (section_table) (ei); -+ if (!shdr) -+ return -UNW_ENOINFO; -+ -+ for (i = 0; i < ehdr->e_shnum; ++i) - { -- Debug (1, "section table outside of image? (%lu > %lu)\n", -- (unsigned long) (soff + ehdr->e_shnum * ehdr->e_shentsize), -- (unsigned long) ei->size); -- return -UNW_ENOINFO; -+ switch (shdr->sh_type) -+ { -+ case SHT_SYMTAB: -+ case SHT_DYNSYM: -+ symtab = (Elf_W (Sym) *) ((char *) ei->image + shdr->sh_offset); -+ symtab_end = (Elf_W (Sym) *) ((char *) symtab + shdr->sh_size); -+ syment_size = shdr->sh_entsize; -+ -+ strtab = elf_w (string_table) (ei, shdr->sh_link); -+ if (!strtab) -+ break; -+ -+ Debug (16, "symtab=0x%lx[%d]\n", -+ (long) shdr->sh_offset, shdr->sh_type); -+ -+ for (sym = symtab; -+ sym < symtab_end; -+ sym = (Elf_W (Sym) *) ((char *) sym + syment_size)) -+ { -+ if (ELF_W (ST_TYPE) (sym->st_info) == STT_FUNC -+ && sym->st_shndx != SHN_UNDEF) -+ { -+ val = sym->st_value; -+ if (sym->st_shndx != SHN_ABS) -+ val += load_offset; -+ if (tdep_get_func_addr (as, val, &val) < 0) -+ continue; -+ Debug (16, "0x%016lx info=0x%02x %s\n", -+ (long) val, sym->st_info, strtab + sym->st_name); -+ -+ if ((Elf_W (Addr)) (ip - val) < *min_dist) -+ { -+ *min_dist = (Elf_W (Addr)) (ip - val); -+ strncpy (buf, strtab + sym->st_name, buf_len); -+ buf[buf_len - 1] = '\0'; -+ ret = (strlen (strtab + sym->st_name) >= buf_len -+ ? -UNW_ENOMEM : 0); -+ } -+ } -+ } -+ break; -+ -+ default: -+ break; -+ } -+ shdr = (Elf_W (Shdr) *) (((char *) shdr) + ehdr->e_shentsize); - } -+ return ret; -+} -+ -+static Elf_W (Addr) -+elf_w (get_load_offset) (struct elf_image *ei, unsigned long segbase, -+ unsigned long mapoff) -+{ -+ Elf_W (Addr) offset = 0; -+ Elf_W (Ehdr) *ehdr; -+ Elf_W (Phdr) *phdr; -+ int i; - -- shdr = (Elf_W (Shdr) *) ((char *) ei->image + soff); -+ ehdr = ei->image; -+ phdr = (Elf_W (Phdr) *) ((char *) ei->image + ehdr->e_phoff); -+ -+ for (i = 0; i < ehdr->e_phnum; ++i) -+ if (phdr[i].p_type == PT_LOAD && phdr[i].p_offset == mapoff) -+ { -+ offset = segbase - phdr[i].p_vaddr; -+ break; -+ } -+ -+ return offset; -+} -+ -+#if HAVE_LZMA -+static size_t -+xz_uncompressed_size (uint8_t *compressed, size_t length) -+{ -+ uint64_t memlimit = UINT64_MAX; -+ size_t ret = 0, pos = 0; -+ lzma_stream_flags options; -+ lzma_index *index; -+ -+ if (length < LZMA_STREAM_HEADER_SIZE) -+ return 0; -+ -+ uint8_t *footer = compressed + length - LZMA_STREAM_HEADER_SIZE; -+ if (lzma_stream_footer_decode (&options, footer) != LZMA_OK) -+ return 0; -+ -+ if (length < LZMA_STREAM_HEADER_SIZE + options.backward_size) -+ return 0; -+ -+ uint8_t *indexdata = footer - options.backward_size; -+ if (lzma_index_buffer_decode (&index, &memlimit, NULL, indexdata, -+ &pos, options.backward_size) != LZMA_OK) -+ return 0; -+ -+ if (lzma_index_size (index) == options.backward_size) -+ { -+ ret = lzma_index_uncompressed_size (index); -+ } -+ -+ lzma_index_end (index, NULL); -+ return ret; -+} -+ -+static int -+elf_w (extract_minidebuginfo) (struct elf_image *ei, struct elf_image *mdi) -+{ -+ Elf_W (Ehdr) *ehdr = ei->image; -+ Elf_W (Shdr) *shdr; -+ char *strtab; -+ int i; -+ uint8_t *compressed = NULL; -+ uint64_t memlimit = UINT64_MAX; /* no memory limit */ -+ size_t compressed_len, uncompressed_len; -+ -+ if (!elf_w (valid_object) (ei)) -+ return 0; -+ -+ shdr = elf_w (section_table) (ei); -+ if (!shdr) -+ return 0; -+ -+ strtab = elf_w (string_table) (ei, ehdr->e_shstrndx); -+ if (!strtab) -+ return 0; - - for (i = 0; i < ehdr->e_shnum; ++i) - { -- switch (shdr->sh_type) -- { -- case SHT_SYMTAB: -- case SHT_DYNSYM: -- symtab = (Elf_W (Sym) *) ((char *) ei->image + shdr->sh_offset); -- symtab_end = (Elf_W (Sym) *) ((char *) symtab + shdr->sh_size); -- syment_size = shdr->sh_entsize; -- -- str_soff = soff + (shdr->sh_link * ehdr->e_shentsize); -- if (str_soff + ehdr->e_shentsize >= ei->size) -- { -- Debug (1, "string table outside of image? (%lu >= %lu)\n", -- (unsigned long) (str_soff + ehdr->e_shentsize), -- (unsigned long) ei->size); -- break; -- } -- str_shdr = (Elf_W (Shdr) *) ((char *) ei->image + str_soff); -- strtab = (char *) ei->image + str_shdr->sh_offset; -- -- Debug (16, "symtab=0x%lx[%d], strtab=0x%lx\n", -- (long) shdr->sh_offset, shdr->sh_type, -- (long) str_shdr->sh_offset); -- -- for (sym = symtab; -- sym < symtab_end; -- sym = (Elf_W (Sym) *) ((char *) sym + syment_size)) -- { -- if (ELF_W (ST_TYPE) (sym->st_info) == STT_FUNC -- && sym->st_shndx != SHN_UNDEF) -- { -- if (tdep_get_func_addr (as, sym->st_value, &val) < 0) -- continue; -- if (sym->st_shndx != SHN_ABS) -- val += load_offset; -- Debug (16, "0x%016lx info=0x%02x %s\n", -- (long) val, sym->st_info, strtab + sym->st_name); -- -- if ((Elf_W (Addr)) (ip - val) < min_dist) -- { -- min_dist = (Elf_W (Addr)) (ip - val); -- strncpy (buf, strtab + sym->st_name, buf_len); -- buf[buf_len - 1] = '\0'; -- if (strlen (strtab + sym->st_name) >= buf_len) -- ret = -UNW_ENOMEM; -- } -- } -- } -- break; -- -- default: -- break; -- } -+ if (strcmp (strtab + shdr->sh_name, ".gnu_debugdata") == 0) -+ { -+ if (shdr->sh_offset + shdr->sh_size > ei->size) -+ { -+ Debug (1, ".gnu_debugdata outside image? (0x%lu > 0x%lu)\n", -+ (unsigned long) shdr->sh_offset + shdr->sh_size, -+ (unsigned long) ei->size); -+ return 0; -+ } -+ -+ Debug (16, "found .gnu_debugdata at 0x%lx\n", -+ (unsigned long) shdr->sh_offset); -+ compressed = ((uint8_t *) ei->image) + shdr->sh_offset; -+ compressed_len = shdr->sh_size; -+ break; -+ } -+ - shdr = (Elf_W (Shdr) *) (((char *) shdr) + ehdr->e_shentsize); - } -- if (min_dist >= ei->size) -- return -UNW_ENOINFO; /* not found */ -- if (offp) -- *offp = min_dist; -- return ret; -+ -+ /* not found */ -+ if (!compressed) -+ return 0; -+ -+ uncompressed_len = xz_uncompressed_size (compressed, compressed_len); -+ if (uncompressed_len == 0) -+ { -+ Debug (1, "invalid .gnu_debugdata contents\n"); -+ return 0; -+ } -+ -+ mdi->size = uncompressed_len; -+ mdi->image = mmap (NULL, uncompressed_len, PROT_READ|PROT_WRITE, -+ MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); -+ -+ if (mdi->image == MAP_FAILED) -+ return 0; -+ -+ size_t in_pos = 0, out_pos = 0; -+ lzma_ret lret; -+ lret = lzma_stream_buffer_decode (&memlimit, 0, NULL, -+ compressed, &in_pos, compressed_len, -+ mdi->image, &out_pos, mdi->size); -+ if (lret != LZMA_OK) -+ { -+ Debug (1, "LZMA decompression failed: %d\n", lret); -+ munmap (mdi->image, mdi->size); -+ return 0; -+ } -+ -+ return 1; -+} -+#else -+static int -+elf_w (extract_minidebuginfo) (struct elf_image *ei, struct elf_image *mdi) -+{ -+ return 0; - } -+#endif /* !HAVE_LZMA */ - - /* Find the ELF image that contains IP and return the "closest" - procedure name, if there is one. With some caching, this could be -@@ -137,31 +301,56 @@ elf_w (lookup_symbol) (unw_addr_space_t as, - sensitive to the performance of this routine, why bother... */ - - HIDDEN int -+elf_w (get_proc_name_in_image) (unw_addr_space_t as, struct elf_image *ei, -+ unsigned long segbase, -+ unsigned long mapoff, -+ unw_word_t ip, -+ char *buf, size_t buf_len, unw_word_t *offp) -+{ -+ Elf_W (Addr) load_offset; -+ Elf_W (Addr) min_dist = ~(Elf_W (Addr))0; -+ int ret; -+ -+ load_offset = elf_w (get_load_offset) (ei, segbase, mapoff); -+ ret = elf_w (lookup_symbol) (as, ip, ei, load_offset, buf, buf_len, &min_dist); -+ -+ /* If the ELF image has MiniDebugInfo embedded in it, look up the symbol in -+ there as well and replace the previously found if it is closer. */ -+ struct elf_image mdi; -+ if (elf_w (extract_minidebuginfo) (ei, &mdi)) -+ { -+ int ret_mdi = elf_w (lookup_symbol) (as, ip, &mdi, load_offset, buf, -+ buf_len, &min_dist); -+ -+ /* Closer symbol was found (possibly truncated). */ -+ if (ret_mdi == 0 || ret_mdi == -UNW_ENOMEM) -+ { -+ ret = ret_mdi; -+ } -+ -+ munmap (mdi.image, mdi.size); -+ } -+ -+ if (min_dist >= ei->size) -+ return -UNW_ENOINFO; /* not found */ -+ if (offp) -+ *offp = min_dist; -+ return ret; -+} -+ -+HIDDEN int - elf_w (get_proc_name) (unw_addr_space_t as, pid_t pid, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp) -+ char *buf, size_t buf_len, unw_word_t *offp) - { - unsigned long segbase, mapoff; -- Elf_W (Addr) load_offset = 0; - struct elf_image ei; -- Elf_W (Ehdr) *ehdr; -- Elf_W (Phdr) *phdr; -- int i, ret; -+ int ret; - -- ret = tdep_get_elf_image (&ei, pid, ip, &segbase, &mapoff); -+ ret = tdep_get_elf_image (&ei, pid, ip, &segbase, &mapoff, NULL, 0); - if (ret < 0) - return ret; - -- ehdr = ei.image; -- phdr = (Elf_W (Phdr) *) ((char *) ei.image + ehdr->e_phoff); -- -- for (i = 0; i < ehdr->e_phnum; ++i) -- if (phdr[i].p_type == PT_LOAD && phdr[i].p_offset == mapoff) -- { -- load_offset = segbase - phdr[i].p_vaddr; -- break; -- } -- -- ret = elf_w (lookup_symbol) (as, ip, &ei, load_offset, buf, buf_len, offp); -+ ret = elf_w (get_proc_name_in_image) (as, &ei, segbase, mapoff, ip, buf, buf_len, offp); - - munmap (ei.image, ei.size); - ei.image = NULL; -diff --git a/frysk-imports/libunwind/src/elfxx.h b/frysk-imports/libunwind/src/elfxx.h -index 7742806..cef6647 100644 ---- a/frysk-imports/libunwind/src/elfxx.h -+++ b/frysk-imports/libunwind/src/elfxx.h -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003, 2005 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -24,7 +24,6 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#include - #include - #include - -@@ -34,15 +33,39 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "libunwind_i.h" - - #if ELF_CLASS == ELFCLASS32 --# define ELF_W(x) ELF32_##x --# define Elf_W(x) Elf32_##x --# define elf_w(x) _Uelf32_##x -+# define ELF_W(x) ELF32_##x -+# define Elf_W(x) Elf32_##x -+# define elf_w(x) _Uelf32_##x - #else --# define ELF_W(x) ELF64_##x --# define Elf_W(x) Elf64_##x --# define elf_w(x) _Uelf64_##x -+# define ELF_W(x) ELF64_##x -+# define Elf_W(x) Elf64_##x -+# define elf_w(x) _Uelf64_##x - #endif - -+extern int elf_w (get_proc_name) (unw_addr_space_t as, -+ pid_t pid, unw_word_t ip, -+ char *buf, size_t len, -+ unw_word_t *offp); -+ -+extern int elf_w (get_proc_name_in_image) (unw_addr_space_t as, -+ struct elf_image *ei, -+ unsigned long segbase, -+ unsigned long mapoff, -+ unw_word_t ip, -+ char *buf, size_t buf_len, unw_word_t *offp); -+ -+static inline int -+elf_w (valid_object) (struct elf_image *ei) -+{ -+ if (ei->size <= EI_VERSION) -+ return 0; -+ -+ return (memcmp (ei->image, ELFMAG, SELFMAG) == 0 -+ && ((uint8_t *) ei->image)[EI_CLASS] == ELF_CLASS -+ && ((uint8_t *) ei->image)[EI_VERSION] != EV_NONE -+ && ((uint8_t *) ei->image)[EI_VERSION] <= EV_CURRENT); -+} -+ - static inline int - elf_map_image (struct elf_image *ei, const char *path) - { -@@ -65,11 +88,11 @@ elf_map_image (struct elf_image *ei, const char *path) - if (ei->image == MAP_FAILED) - return -1; - -+ if (!elf_w (valid_object) (ei)) -+ { -+ munmap(ei->image, ei->size); -+ return -1; -+ } -+ - return 0; - } -- --extern int elf_w (valid_object) (struct elf_image *ei); --extern int elf_w (get_proc_name) (unw_addr_space_t as, -- pid_t pid, unw_word_t ip, -- char *buf, size_t len, -- unw_word_t *offp); -diff --git a/frysk-imports/libunwind/src/hppa/Gcreate_addr_space.c b/frysk-imports/libunwind/src/hppa/Gcreate_addr_space.c -index 8f4301f..71186e0 100644 ---- a/frysk-imports/libunwind/src/hppa/Gcreate_addr_space.c -+++ b/frysk-imports/libunwind/src/hppa/Gcreate_addr_space.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -33,8 +33,15 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - #ifdef UNW_LOCAL_ONLY - return NULL; - #else -- unw_addr_space_t as = malloc (sizeof (*as)); -+ unw_addr_space_t as; - -+ /* -+ * hppa supports only big-endian. -+ */ -+ if (byte_order != 0 && byte_order != __BIG_ENDIAN) -+ return NULL; -+ -+ as = malloc (sizeof (*as)); - if (!as) - return NULL; - -@@ -42,11 +49,6 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - - as->acc = *a; - -- /* -- * hppa supports only big-endian. -- */ -- if (byte_order != 0 && byte_order != __BIG_ENDIAN) -- return NULL; - return as; - #endif - } -diff --git a/frysk-imports/libunwind/src/hppa/Gget_proc_info.c b/frysk-imports/libunwind/src/hppa/Gget_proc_info.c -index 8d2c1fd..ce7a950 100644 ---- a/frysk-imports/libunwind/src/hppa/Gget_proc_info.c -+++ b/frysk-imports/libunwind/src/hppa/Gget_proc_info.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -33,9 +33,9 @@ unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) - if (dwarf_make_proc_info (&c->dwarf) < 0) - { - /* On hppa, some key routines such as _start() and _dl_start() -- are missing DWARF unwind info. We don't want to fail in that -- case, because those frames are uninteresting and just mark -- the end of the frame-chain anyhow. */ -+ are missing DWARF unwind info. We don't want to fail in that -+ case, because those frames are uninteresting and just mark -+ the end of the frame-chain anyhow. */ - memset (pi, 0, sizeof (*pi)); - pi->start_ip = c->dwarf.ip; - pi->end_ip = c->dwarf.ip + 4; -diff --git a/frysk-imports/libunwind/src/hppa/Gget_save_loc.c b/frysk-imports/libunwind/src/hppa/Gget_save_loc.c -index 7aa6f31..549366a 100644 ---- a/frysk-imports/libunwind/src/hppa/Gget_save_loc.c -+++ b/frysk-imports/libunwind/src/hppa/Gget_save_loc.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -28,14 +28,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - PROTECTED int - unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - { -- struct cursor *c = (struct cursor *) cursor; -+ /* struct cursor *c = (struct cursor *) cursor; */ - dwarf_loc_t loc; - -- loc = DWARF_NULL_LOC; /* default to "not saved" */ -+ loc = DWARF_NULL_LOC; /* default to "not saved" */ - - #warning FIX ME! - -- memset (sloc, 0, sizeof (sloc)); -+ memset (sloc, 0, sizeof (*sloc)); - - if (DWARF_IS_NULL_LOC (loc)) - { -diff --git a/frysk-imports/libunwind/src/hppa/Gglobal.c b/frysk-imports/libunwind/src/hppa/Gglobal.c -index a56426d..351a501 100644 ---- a/frysk-imports/libunwind/src/hppa/Gglobal.c -+++ b/frysk-imports/libunwind/src/hppa/Gglobal.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2004-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -25,8 +25,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "unwind_i.h" - --HIDDEN pthread_mutex_t hppa_lock = PTHREAD_MUTEX_INITIALIZER; --HIDDEN int tdep_needs_initialization = 1; -+HIDDEN define_lock (hppa_lock); -+HIDDEN int tdep_init_done; - - HIDDEN void - tdep_init (void) -@@ -35,10 +35,9 @@ tdep_init (void) - - sigfillset (&unwi_full_mask); - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- mutex_lock (&hppa_lock); -+ lock_acquire (&hppa_lock, saved_mask); - { -- if (!tdep_needs_initialization) -+ if (tdep_init_done) - /* another thread else beat us to it... */ - goto out; - -@@ -49,9 +48,8 @@ tdep_init (void) - #ifndef UNW_REMOTE_ONLY - hppa_local_addr_space_init (); - #endif -- tdep_needs_initialization = 0; /* signal that we're initialized... */ -+ tdep_init_done = 1; /* signal that we're initialized... */ - } - out: -- mutex_unlock (&hppa_lock); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ lock_release (&hppa_lock, saved_mask); - } -diff --git a/frysk-imports/libunwind/src/hppa/Ginit.c b/frysk-imports/libunwind/src/hppa/Ginit.c -index 5326b82..89ad51c 100644 ---- a/frysk-imports/libunwind/src/hppa/Ginit.c -+++ b/frysk-imports/libunwind/src/hppa/Ginit.c -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002, 2004 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -79,7 +79,7 @@ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - - static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -- void *arg) -+ void *arg) - { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; - return 0; -@@ -87,7 +87,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - - static int - access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - if (write) - { -@@ -104,7 +104,7 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - unw_word_t *addr; - ucontext_t *uc = arg; -@@ -135,7 +135,7 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { - ucontext_t *uc = arg; - unw_fpreg_t *addr; -@@ -150,14 +150,14 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - if (write) - { - Debug (12, "%s <- %08x.%08x\n", -- unw_regname (reg), val->raw.bits[1], val->raw.bits[0]); -+ unw_regname (reg), val->raw.bits[1], val->raw.bits[0]); - *(unw_fpreg_t *) addr = *val; - } - else - { - *val = *(unw_fpreg_t *) addr; - Debug (12, "%s -> %08x.%08x\n", -- unw_regname (reg), val->raw.bits[1], val->raw.bits[0]); -+ unw_regname (reg), val->raw.bits[1], val->raw.bits[0]); - } - return 0; - -@@ -169,8 +169,8 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - - static int - get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, -- void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) - { - return _Uelf32_get_proc_name (as, getpid (), ip, buf, buf_len, offp); - } -diff --git a/frysk-imports/libunwind/src/hppa/Ginit_local.c b/frysk-imports/libunwind/src/hppa/Ginit_local.c -index 243ffd4..0ad2f88 100644 ---- a/frysk-imports/libunwind/src/hppa/Ginit_local.c -+++ b/frysk-imports/libunwind/src/hppa/Ginit_local.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by ... -+ Contributed by ... - - This file is part of libunwind. - -@@ -41,14 +41,14 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) - { - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = unw_local_addr_space; - c->dwarf.as_arg = uc; -- return common_init (c); -+ return common_init (c, 1); - } - - #endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/hppa/Ginit_remote.c b/frysk-imports/libunwind/src/hppa/Ginit_remote.c -index 3d6606d..a4160fd 100644 ---- a/frysk-imports/libunwind/src/hppa/Ginit_remote.c -+++ b/frysk-imports/libunwind/src/hppa/Ginit_remote.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2004 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -34,13 +34,13 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) - #else /* !UNW_LOCAL_ONLY */ - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = as; - c->dwarf.as_arg = as_arg; -- return common_init (c); -+ return common_init (c, 0); - #endif /* !UNW_LOCAL_ONLY */ - } -diff --git a/frysk-imports/libunwind/src/hppa/Gis_signal_frame.c b/frysk-imports/libunwind/src/hppa/Gis_signal_frame.c -index 202b570..00e40c6 100644 ---- a/frysk-imports/libunwind/src/hppa/Gis_signal_frame.c -+++ b/frysk-imports/libunwind/src/hppa/Gis_signal_frame.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -64,7 +64,7 @@ unw_is_signal_frame (unw_cursor_t *cursor) - return ret; - } - ret = ((w0 == 0x34190000 || w0 == 0x34190002) -- && w1 == 0x3414015a && w2 == 0xe4008200 && w3 == 0x08000240); -+ && w1 == 0x3414015a && w2 == 0xe4008200 && w3 == 0x08000240); - Debug (1, "(cursor=%p, ip=0x%08lx) -> %d\n", c, (unsigned) ip, ret); - return ret; - #else -diff --git a/frysk-imports/libunwind/src/hppa/Gregs.c b/frysk-imports/libunwind/src/hppa/Gregs.c -index e6d84e3..da0542c 100644 ---- a/frysk-imports/libunwind/src/hppa/Gregs.c -+++ b/frysk-imports/libunwind/src/hppa/Gregs.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,7 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN int - tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -- int write) -+ int write) - { - struct dwarf_loc loc; - -@@ -35,16 +35,16 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - { - case UNW_HPPA_IP: - if (write) -- c->dwarf.ip = *valp; /* update the IP cache */ -+ c->dwarf.ip = *valp; /* update the IP cache */ - if (c->dwarf.pi_valid && (*valp < c->dwarf.pi.start_ip -- || *valp >= c->dwarf.pi.end_ip)) -- c->dwarf.pi_valid = 0; /* new IP outside of current proc */ -+ || *valp >= c->dwarf.pi.end_ip)) -+ c->dwarf.pi_valid = 0; /* new IP outside of current proc */ - break; - - case UNW_HPPA_CFA: - case UNW_HPPA_SP: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - *valp = c->dwarf.cfa; - return 0; - -@@ -71,7 +71,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - HIDDEN int - tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -- int write) -+ int write) - { - struct dwarf_loc loc; - -diff --git a/frysk-imports/libunwind/src/hppa/Gresume.c b/frysk-imports/libunwind/src/hppa/Gresume.c -index 92d506d..f6bc023 100644 ---- a/frysk-imports/libunwind/src/hppa/Gresume.c -+++ b/frysk-imports/libunwind/src/hppa/Gresume.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2004 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -40,11 +40,11 @@ my_rt_sigreturn (void *new_sp, int in_syscall) - register unsigned long r20 __asm__ ("r20") = SYS_rt_sigreturn; - - __asm__ __volatile__ ("copy %0, %%sp\n" -- "be,l 0x100(%%sr2,%%r0),%%sr0,%%r31\n" -- "nop" -- : -- : "r"(new_sp), "r"(r20), "r"(r25) -- : "memory"); -+ "be,l 0x100(%%sr2,%%r0),%%sr0,%%r31\n" -+ "nop" -+ : -+ : "r"(new_sp), "r"(r20), "r"(r25) -+ : "memory"); - abort (); - } - -@@ -90,9 +90,9 @@ static inline int - establish_machine_state (struct cursor *c) - { - int (*access_reg) (unw_addr_space_t, unw_regnum_t, unw_word_t *, -- int write, void *); -+ int write, void *); - int (*access_fpreg) (unw_addr_space_t, unw_regnum_t, unw_fpreg_t *, -- int write, void *); -+ int write, void *); - unw_addr_space_t as = c->dwarf.as; - void *arg = c->dwarf.as_arg; - unw_fpreg_t fpval; -@@ -108,15 +108,15 @@ establish_machine_state (struct cursor *c) - { - Debug (16, "copying %s %d\n", unw_regname (reg), reg); - if (unw_is_fpreg (reg)) -- { -- if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -- (*access_fpreg) (as, reg, &fpval, 1, arg); -- } -+ { -+ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -+ (*access_fpreg) (as, reg, &fpval, 1, arg); -+ } - else -- { -- if (tdep_access_reg (c, reg, &val, 0) >= 0) -- (*access_reg) (as, reg, &val, 1, arg); -- } -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ (*access_reg) (as, reg, &val, 1, arg); -+ } - } - return 0; - } -@@ -141,5 +141,5 @@ unw_resume (unw_cursor_t *cursor) - return ret; - - return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -- c->dwarf.as_arg); -+ c->dwarf.as_arg); - } -diff --git a/frysk-imports/libunwind/src/hppa/Gstep.c b/frysk-imports/libunwind/src/hppa/Gstep.c -index abff456..078ff43 100644 ---- a/frysk-imports/libunwind/src/hppa/Gstep.c -+++ b/frysk-imports/libunwind/src/hppa/Gstep.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger -+ Contributed by David Mosberger - - This file is part of libunwind. - -@@ -46,49 +46,49 @@ unw_step (unw_cursor_t *cursor) - if (unlikely (ret < 0)) - { - /* DWARF failed, let's see if we can follow the frame-chain -- or skip over the signal trampoline. */ -+ or skip over the signal trampoline. */ - - Debug (13, "dwarf_step() failed (ret=%d), trying fallback\n", ret); - - if (unw_is_signal_frame (cursor)) -- { -+ { - #ifdef __linux__ -- /* Assume that the trampoline is at the beginning of the -- sigframe. */ -- unw_word_t ip, sc_addr = c->dwarf.ip + LINUX_RT_SIGFRAME_UC_OFF; -- dwarf_loc_t iaoq_loc = DWARF_LOC (sc_addr + LINUX_SC_IAOQ_OFF, 0); -- -- c->sigcontext_format = HPPA_SCF_LINUX_RT_SIGFRAME; -- c->sigcontext_addr = sc_addr; -- c->dwarf.ret_addr_column = UNW_HPPA_RP; -- -- if ((ret = dwarf_get (&c->dwarf, iaoq_loc, &ip)) , 0) -- { -- Debug (2, "failed to read IAOQ[1] (ret=%d)\n", ret); -- return ret; -- } -- c->dwarf.ip = ip & ~0x3; /* mask out the privilege level */ -- -- for (i = 0; i < 32; ++i) -- { -- c->dwarf.loc[UNW_HPPA_GR + i] -- = DWARF_LOC (sc_addr + LINUX_SC_GR_OFF + 4*i, 0); -- c->dwarf.loc[UNW_HPPA_FR + i] -- = DWARF_LOC (sc_addr + LINUX_SC_FR_OFF + 4*i, 0); -- } -- -- if ((ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_HPPA_SP], -- &c->dwarf.cfa)) < 0) -- { -- Debug (2, "failed to read SP (ret=%d)\n", ret); -- return ret; -- } -+ /* Assume that the trampoline is at the beginning of the -+ sigframe. */ -+ unw_word_t ip, sc_addr = c->dwarf.ip + LINUX_RT_SIGFRAME_UC_OFF; -+ dwarf_loc_t iaoq_loc = DWARF_LOC (sc_addr + LINUX_SC_IAOQ_OFF, 0); -+ -+ c->sigcontext_format = HPPA_SCF_LINUX_RT_SIGFRAME; -+ c->sigcontext_addr = sc_addr; -+ c->dwarf.ret_addr_column = UNW_HPPA_RP; -+ -+ if ((ret = dwarf_get (&c->dwarf, iaoq_loc, &ip)) < 0) -+ { -+ Debug (2, "failed to read IAOQ[1] (ret=%d)\n", ret); -+ return ret; -+ } -+ c->dwarf.ip = ip & ~0x3; /* mask out the privilege level */ -+ -+ for (i = 0; i < 32; ++i) -+ { -+ c->dwarf.loc[UNW_HPPA_GR + i] -+ = DWARF_LOC (sc_addr + LINUX_SC_GR_OFF + 4*i, 0); -+ c->dwarf.loc[UNW_HPPA_FR + i] -+ = DWARF_LOC (sc_addr + LINUX_SC_FR_OFF + 4*i, 0); -+ } -+ -+ if ((ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_HPPA_SP], -+ &c->dwarf.cfa)) < 0) -+ { -+ Debug (2, "failed to read SP (ret=%d)\n", ret); -+ return ret; -+ } - #else - # error Implement me! - #endif -- } -+ } - else -- c->dwarf.ip = 0; -+ c->dwarf.ip = 0; - } - ret = (c->dwarf.ip == 0) ? 0 : 1; - Debug (2, "returning %d\n", ret); -diff --git a/frysk-imports/libunwind/src/hppa/get_accessors.c b/frysk-imports/libunwind/src/hppa/get_accessors.c -index b6bd49a..873a38c 100644 ---- a/frysk-imports/libunwind/src/hppa/get_accessors.c -+++ b/frysk-imports/libunwind/src/hppa/get_accessors.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by ... -+ Contributed by ... - - This file is part of libunwind. - -@@ -28,10 +28,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - PROTECTED unw_accessors_t * - unw_get_accessors (unw_addr_space_t as) - { -- if (hppa_needs_initialization) -- { -- hppa_needs_initialization = 0; -- hppa_init (); -- } -+ if (!tdep_init_done) -+ tdep_init (); -+ - return &as->acc; - } -diff --git a/frysk-imports/libunwind/src/hppa/init.h b/frysk-imports/libunwind/src/hppa/init.h -index 18610ef..4e23b86 100644 ---- a/frysk-imports/libunwind/src/hppa/init.h -+++ b/frysk-imports/libunwind/src/hppa/init.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by ... -+ Contributed by ... - - This file is part of libunwind. - -@@ -26,28 +26,22 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - - static inline int --common_init (struct cursor *c) -+common_init (struct cursor *c, unsigned use_prev_instr) - { - int ret; - -- c->ip_loc = HPPA_REG_LOC (c, UNW_HPPA_IP); -- c->sp_loc = HPPA_REG_LOC (c, UNW_HPPA_SP); -+ c->dwarf.loc[UNW_HPPA_IP] = DWARF_REG_LOC (&c->dwarf, UNW_HPPA_IP); -+ c->dwarf.loc[UNW_HPPA_SP] = DWARF_REG_LOC (&c->dwarf, UNW_HPPA_SP); - -- ret = hppa_get (c, c->ip_loc, &c->ip); -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_HPPA_IP], &c->dwarf.ip); - if (ret < 0) - return ret; - -- ret = hppa_get (c, HPPA_REG_LOC (c, UNW_HPPA_SP), &c->sp); -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_HPPA_SP], &c->dwarf.cfa); - if (ret < 0) - return ret; - -- c->sigcontext_format = HPPA_SCF_NONE; -- c->sigcontext_addr = 0; -- -- c->dwarf.decrease_ip = 0; -- c->dwarf.args_size = 0; -- c->dwarf.ret_addr_column = 0; -- c->dwarf.pi_valid = 0; -- c->dwarf.pi_is_dynamic = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; - return 0; - } -diff --git a/frysk-imports/libunwind/src/hppa/offsets.h b/frysk-imports/libunwind/src/hppa/offsets.h -index d824770..24e6453 100644 ---- a/frysk-imports/libunwind/src/hppa/offsets.h -+++ b/frysk-imports/libunwind/src/hppa/offsets.h -@@ -1,17 +1,17 @@ --#define LINUX_UC_FLAGS_OFF 0x000 --#define LINUX_UC_LINK_OFF 0x004 --#define LINUX_UC_STACK_OFF 0x008 --#define LINUX_UC_MCONTEXT_OFF 0x018 --#define LINUX_UC_SIGMASK_OFF 0x1b8 -+#define LINUX_UC_FLAGS_OFF 0x000 -+#define LINUX_UC_LINK_OFF 0x004 -+#define LINUX_UC_STACK_OFF 0x008 -+#define LINUX_UC_MCONTEXT_OFF 0x018 -+#define LINUX_UC_SIGMASK_OFF 0x1b8 - --#define LINUX_SC_FLAGS_OFF 0x000 --#define LINUX_SC_GR_OFF 0x004 --#define LINUX_SC_FR_OFF 0x088 --#define LINUX_SC_IASQ_OFF 0x188 --#define LINUX_SC_IAOQ_OFF 0x190 --#define LINUX_SC_SAR_OFF 0x198 -+#define LINUX_SC_FLAGS_OFF 0x000 -+#define LINUX_SC_GR_OFF 0x004 -+#define LINUX_SC_FR_OFF 0x088 -+#define LINUX_SC_IASQ_OFF 0x188 -+#define LINUX_SC_IAOQ_OFF 0x190 -+#define LINUX_SC_SAR_OFF 0x198 - - /* The signal frame contains 4 words of space for the sigreturn - trampoline, the siginfo structure, and then the sigcontext - structure. See include/asm-parisc/compat_rt_sigframe.h. */ --#define LINUX_RT_SIGFRAME_UC_OFF 0xac -+#define LINUX_RT_SIGFRAME_UC_OFF 0xac -diff --git a/frysk-imports/libunwind/src/hppa/regname.c b/frysk-imports/libunwind/src/hppa/regname.c -index 07cae8e..06dfae7 100644 ---- a/frysk-imports/libunwind/src/hppa/regname.c -+++ b/frysk-imports/libunwind/src/hppa/regname.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2004-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/hppa/tables.c b/frysk-imports/libunwind/src/hppa/tables.c -index 383b449..5104d4d 100644 ---- a/frysk-imports/libunwind/src/hppa/tables.c -+++ b/frysk-imports/libunwind/src/hppa/tables.c -@@ -7,14 +7,14 @@ is_local_addr_space (unw_addr_space_t as) - - return (as == _Uhppa_local_addr_space - #ifndef UNW_REMOTE_ONLY -- || as == _ULhppa_local_addr_space -+ || as == _ULhppa_local_addr_space - #endif -- ); -+ ); - } - - HIDDEN int - tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, int need_unwind_info, void *arg) -+ unw_proc_info_t *pi, int need_unwind_info, void *arg) - { - printf ("%s: begging to get implemented...\n", __FUNCTION__); - return 0; -@@ -22,8 +22,8 @@ tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip, - - HIDDEN int - tdep_search_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t *di, -- unw_proc_info_t *pi, int need_unwind_info, void *arg) -+ unw_dyn_info_t *di, -+ unw_proc_info_t *pi, int need_unwind_info, void *arg) - { - printf ("%s: the biggest beggar of them all...\n", __FUNCTION__); - return 0; -diff --git a/frysk-imports/libunwind/src/hppa/unwind_i.h b/frysk-imports/libunwind/src/hppa/unwind_i.h -index d3c11be..cafeab5 100644 ---- a/frysk-imports/libunwind/src/hppa/unwind_i.h -+++ b/frysk-imports/libunwind/src/hppa/unwind_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,22 +26,21 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef unwind_i_h - #define unwind_i_h - --#include - #include - - #include - - #include "libunwind_i.h" - --#define hppa_lock UNW_OBJ(lock) --#define hppa_local_resume UNW_OBJ(local_resume) --#define hppa_local_addr_space_init UNW_OBJ(local_addr_space_init) --#define hppa_scratch_loc UNW_OBJ(scratch_loc) --#define setcontext UNW_ARCH_OBJ (setcontext) -+#define hppa_lock UNW_OBJ(lock) -+#define hppa_local_resume UNW_OBJ(local_resume) -+#define hppa_local_addr_space_init UNW_OBJ(local_addr_space_init) -+#define hppa_scratch_loc UNW_OBJ(scratch_loc) -+#define setcontext UNW_ARCH_OBJ (setcontext) - - extern void hppa_local_addr_space_init (void); - extern int hppa_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -- void *arg); -+ void *arg); - extern dwarf_loc_t hppa_scratch_loc (struct cursor *c, unw_regnum_t reg); - extern int setcontext (const ucontext_t *ucp); - -diff --git a/frysk-imports/libunwind/src/ia64/Gcreate_addr_space.c b/frysk-imports/libunwind/src/ia64/Gcreate_addr_space.c -index a3524a0..20cf5d8 100644 ---- a/frysk-imports/libunwind/src/ia64/Gcreate_addr_space.c -+++ b/frysk-imports/libunwind/src/ia64/Gcreate_addr_space.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/ia64/Gfind_unwind_table.c b/frysk-imports/libunwind/src/ia64/Gfind_unwind_table.c -new file mode 100644 -index 0000000..9fd2707 ---- /dev/null -+++ b/frysk-imports/libunwind/src/ia64/Gfind_unwind_table.c -@@ -0,0 +1,143 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2003-2004 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include "libunwind_i.h" -+#include "elf64.h" -+ -+static unw_word_t -+find_gp (struct elf_dyn_info *edi, Elf64_Phdr *pdyn, Elf64_Addr load_base) -+{ -+ Elf64_Off soff, str_soff; -+ Elf64_Ehdr *ehdr = edi->ei.image; -+ Elf64_Shdr *shdr; -+ Elf64_Shdr *str_shdr; -+ Elf64_Addr gp = 0; -+ char *strtab; -+ int i; -+ -+ if (pdyn) -+ { -+ /* If we have a PT_DYNAMIC program header, fetch the gp-value -+ from the DT_PLTGOT entry. */ -+ Elf64_Dyn *dyn = (Elf64_Dyn *) (pdyn->p_offset + (char *) edi->ei.image); -+ for (; dyn->d_tag != DT_NULL; ++dyn) -+ if (dyn->d_tag == DT_PLTGOT) -+ { -+ gp = (Elf64_Addr) dyn->d_un.d_ptr + load_base; -+ goto done; -+ } -+ } -+ -+ /* Without a PT_DYAMIC header, lets try to look for a non-empty .opd -+ section. If there is such a section, we know it's full of -+ function descriptors, and we can simply pick up the gp from the -+ second word of the first entry in this table. */ -+ -+ soff = ehdr->e_shoff; -+ str_soff = soff + (ehdr->e_shstrndx * ehdr->e_shentsize); -+ -+ if (soff + ehdr->e_shnum * ehdr->e_shentsize > edi->ei.size) -+ { -+ Debug (1, "section table outside of image? (%lu > %lu)", -+ soff + ehdr->e_shnum * ehdr->e_shentsize, -+ edi->ei.size); -+ goto done; -+ } -+ -+ shdr = (Elf64_Shdr *) ((char *) edi->ei.image + soff); -+ str_shdr = (Elf64_Shdr *) ((char *) edi->ei.image + str_soff); -+ strtab = (char *) edi->ei.image + str_shdr->sh_offset; -+ for (i = 0; i < ehdr->e_shnum; ++i) -+ { -+ if (strcmp (strtab + shdr->sh_name, ".opd") == 0 -+ && shdr->sh_size >= 16) -+ { -+ gp = ((Elf64_Addr *) ((char *) edi->ei.image + shdr->sh_offset))[1]; -+ goto done; -+ } -+ shdr = (Elf64_Shdr *) (((char *) shdr) + ehdr->e_shentsize); -+ } -+ -+ done: -+ Debug (16, "image at %p, gp = %lx\n", edi->ei.image, gp); -+ return gp; -+} -+ -+int -+ia64_find_unwind_table (struct elf_dyn_info *edi, unw_addr_space_t as, -+ char *path, unw_word_t segbase, unw_word_t mapoff, -+ unw_word_t ip) -+{ -+ Elf64_Phdr *phdr, *ptxt = NULL, *punw = NULL, *pdyn = NULL; -+ Elf64_Ehdr *ehdr; -+ int i; -+ -+ if (!_Uelf64_valid_object (&edi->ei)) -+ return -UNW_ENOINFO; -+ -+ ehdr = edi->ei.image; -+ phdr = (Elf64_Phdr *) ((char *) edi->ei.image + ehdr->e_phoff); -+ -+ for (i = 0; i < ehdr->e_phnum; ++i) -+ { -+ switch (phdr[i].p_type) -+ { -+ case PT_LOAD: -+ if (phdr[i].p_offset == mapoff) -+ ptxt = phdr + i; -+ break; -+ -+ case PT_IA_64_UNWIND: -+ punw = phdr + i; -+ break; -+ -+ case PT_DYNAMIC: -+ pdyn = phdr + i; -+ break; -+ -+ default: -+ break; -+ } -+ } -+ if (!ptxt || !punw) -+ return 0; -+ -+ edi->di_cache.start_ip = segbase; -+ edi->di_cache.end_ip = edi->di_cache.start_ip + ptxt->p_memsz; -+ edi->di_cache.gp = find_gp (edi, pdyn, segbase - ptxt->p_vaddr); -+ edi->di_cache.format = UNW_INFO_FORMAT_TABLE; -+ edi->di_cache.u.ti.name_ptr = 0; -+ edi->di_cache.u.ti.segbase = segbase; -+ edi->di_cache.u.ti.table_len = punw->p_memsz / sizeof (unw_word_t); -+ edi->di_cache.u.ti.table_data = (unw_word_t *) -+ ((char *) edi->ei.image + (punw->p_vaddr - ptxt->p_vaddr)); -+ return 1; -+} -diff --git a/frysk-imports/libunwind/src/ia64/Gget_proc_info.c b/frysk-imports/libunwind/src/ia64/Gget_proc_info.c -index 21015d4..6b4722d 100644 ---- a/frysk-imports/libunwind/src/ia64/Gget_proc_info.c -+++ b/frysk-imports/libunwind/src/ia64/Gget_proc_info.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/ia64/Gget_save_loc.c b/frysk-imports/libunwind/src/ia64/Gget_save_loc.c -index 7bc2b19..fc37ad9 100644 ---- a/frysk-imports/libunwind/src/ia64/Gget_save_loc.c -+++ b/frysk-imports/libunwind/src/ia64/Gget_save_loc.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2003, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -38,7 +38,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - uint8_t nat_bitnr; - int ret; - -- loc = IA64_NULL_LOC; /* default to "not saved" */ -+ loc = IA64_NULL_LOC; /* default to "not saved" */ - - switch (reg) - { -@@ -62,8 +62,8 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - reg_loc = c->loc[IA64_REG_R4 + (reg - (UNW_IA64_NAT + 4))]; - nat_bitnr = c->nat_bitnr[reg - (UNW_IA64_NAT + 4)]; - if (IA64_IS_FP_LOC (reg_loc)) -- /* NaT bit saved as a NaTVal. */ -- loc = reg_loc; -+ /* NaT bit saved as a NaTVal. */ -+ loc = reg_loc; - break; - - case UNW_IA64_FR + 2: loc = c->loc[IA64_REG_F2]; break; -@@ -74,29 +74,29 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - loc = c->loc[IA64_REG_F16 + (reg - (UNW_IA64_FR + 16))]; - break; - -- case UNW_IA64_AR_BSP: loc = c->loc[IA64_REG_BSP]; break; -- case UNW_IA64_AR_BSPSTORE: loc = c->loc[IA64_REG_BSPSTORE]; break; -- case UNW_IA64_AR_PFS: loc = c->loc[IA64_REG_PFS]; break; -- case UNW_IA64_AR_RNAT: loc = c->loc[IA64_REG_RNAT]; break; -- case UNW_IA64_AR_UNAT: loc = c->loc[IA64_REG_UNAT]; break; -- case UNW_IA64_AR_LC: loc = c->loc[IA64_REG_LC]; break; -- case UNW_IA64_AR_FPSR: loc = c->loc[IA64_REG_FPSR]; break; -- case UNW_IA64_BR + 1: loc = c->loc[IA64_REG_B1]; break; -- case UNW_IA64_BR + 2: loc = c->loc[IA64_REG_B2]; break; -- case UNW_IA64_BR + 3: loc = c->loc[IA64_REG_B3]; break; -- case UNW_IA64_BR + 4: loc = c->loc[IA64_REG_B4]; break; -- case UNW_IA64_BR + 5: loc = c->loc[IA64_REG_B5]; break; -- case UNW_IA64_CFM: loc = c->cfm_loc; break; -- case UNW_IA64_PR: loc = c->loc[IA64_REG_PR]; break; -- -- case UNW_IA64_GR + 32 ... UNW_IA64_GR + 127: /* stacked reg */ -+ case UNW_IA64_AR_BSP: loc = c->loc[IA64_REG_BSP]; break; -+ case UNW_IA64_AR_BSPSTORE: loc = c->loc[IA64_REG_BSPSTORE]; break; -+ case UNW_IA64_AR_PFS: loc = c->loc[IA64_REG_PFS]; break; -+ case UNW_IA64_AR_RNAT: loc = c->loc[IA64_REG_RNAT]; break; -+ case UNW_IA64_AR_UNAT: loc = c->loc[IA64_REG_UNAT]; break; -+ case UNW_IA64_AR_LC: loc = c->loc[IA64_REG_LC]; break; -+ case UNW_IA64_AR_FPSR: loc = c->loc[IA64_REG_FPSR]; break; -+ case UNW_IA64_BR + 1: loc = c->loc[IA64_REG_B1]; break; -+ case UNW_IA64_BR + 2: loc = c->loc[IA64_REG_B2]; break; -+ case UNW_IA64_BR + 3: loc = c->loc[IA64_REG_B3]; break; -+ case UNW_IA64_BR + 4: loc = c->loc[IA64_REG_B4]; break; -+ case UNW_IA64_BR + 5: loc = c->loc[IA64_REG_B5]; break; -+ case UNW_IA64_CFM: loc = c->cfm_loc; break; -+ case UNW_IA64_PR: loc = c->loc[IA64_REG_PR]; break; -+ -+ case UNW_IA64_GR + 32 ... UNW_IA64_GR + 127: /* stacked reg */ - reg = rotate_gr (c, reg - UNW_IA64_GR); - ret = ia64_get_stacked (c, reg, &loc, NULL); - if (ret < 0) -- return ret; -+ return ret; - break; - -- case UNW_IA64_NAT + 32 ... UNW_IA64_NAT + 127: /* stacked reg */ -+ case UNW_IA64_NAT + 32 ... UNW_IA64_NAT + 127: /* stacked reg */ - reg = rotate_gr (c, reg - UNW_IA64_NAT); - ret = ia64_get_stacked (c, reg, NULL, &loc); - break; -@@ -108,9 +108,9 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - /* scratch & special registers: */ - - case UNW_IA64_GR + 0: -- case UNW_IA64_GR + 1: /* global pointer */ -+ case UNW_IA64_GR + 1: /* global pointer */ - case UNW_IA64_NAT + 0: -- case UNW_IA64_NAT + 1: /* global pointer */ -+ case UNW_IA64_NAT + 1: /* global pointer */ - case UNW_IA64_FR + 0: - case UNW_IA64_FR + 1: - break; -@@ -142,7 +142,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - break; - } - -- memset (sloc, 0, sizeof (sloc)); -+ memset (sloc, 0, sizeof (*sloc)); - - if (IA64_IS_NULL_LOC (loc)) - { -diff --git a/frysk-imports/libunwind/src/ia64/Gglobal.c b/frysk-imports/libunwind/src/ia64/Gglobal.c -index 9525f8c..5c6156f 100644 ---- a/frysk-imports/libunwind/src/ia64/Gglobal.c -+++ b/frysk-imports/libunwind/src/ia64/Gglobal.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -29,7 +29,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN struct ia64_global_unwind_state unw = - { -- .needs_initialization = 1, - .lock = PTHREAD_MUTEX_INITIALIZER, - .save_order = { - IA64_REG_IP, IA64_REG_PFS, IA64_REG_PSP, IA64_REG_PR, -@@ -53,15 +52,15 @@ HIDDEN struct ia64_global_unwind_state unw = - HIDDEN void - tdep_init (void) - { -- uint8_t f1_bytes[16] = { -+ const uint8_t f1_bytes[16] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; -- uint8_t nat_val_bytes[16] = { -+ const uint8_t nat_val_bytes[16] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfe, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; -- uint8_t int_val_bytes[16] = { -+ const uint8_t int_val_bytes[16] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; -@@ -71,10 +70,9 @@ tdep_init (void) - - sigfillset (&unwi_full_mask); - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- mutex_lock (&unw.lock); -+ lock_acquire (&unw.lock, saved_mask); - { -- if (!tdep_needs_initialization) -+ if (tdep_init_done) - /* another thread else beat us to it... */ - goto out; - -@@ -82,7 +80,7 @@ tdep_init (void) - - mempool_init (&unw.reg_state_pool, sizeof (struct ia64_reg_state), 0); - mempool_init (&unw.labeled_state_pool, -- sizeof (struct ia64_labeled_state), 0); -+ sizeof (struct ia64_labeled_state), 0); - - unw.read_only.r0 = 0; - unw.read_only.f0.raw.bits[0] = 0; -@@ -92,24 +90,24 @@ tdep_init (void) - bep = (uint8_t *) &unw.read_only.f1_be; - for (i = 0; i < 16; ++i) - { -- *--lep = f1_bytes[i]; -- *bep++ = f1_bytes[i]; -+ *--lep = f1_bytes[i]; -+ *bep++ = f1_bytes[i]; - } - - lep = (uint8_t *) &unw.nat_val_le + 16; - bep = (uint8_t *) &unw.nat_val_be; - for (i = 0; i < 16; ++i) - { -- *--lep = nat_val_bytes[i]; -- *bep++ = nat_val_bytes[i]; -+ *--lep = nat_val_bytes[i]; -+ *bep++ = nat_val_bytes[i]; - } - - lep = (uint8_t *) &unw.int_val_le + 16; - bep = (uint8_t *) &unw.int_val_be; - for (i = 0; i < 16; ++i) - { -- *--lep = int_val_bytes[i]; -- *bep++ = int_val_bytes[i]; -+ *--lep = int_val_bytes[i]; -+ *bep++ = int_val_bytes[i]; - } - - assert (8*sizeof(unw_hash_index_t) >= IA64_LOG_UNW_HASH_SIZE); -@@ -117,9 +115,8 @@ tdep_init (void) - #ifndef UNW_REMOTE_ONLY - ia64_local_addr_space_init (); - #endif -- tdep_needs_initialization = 0; /* signal that we're initialized... */ -+ tdep_init_done = 1; /* signal that we're initialized... */ - } - out: -- mutex_unlock (&unw.lock); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ lock_release (&unw.lock, saved_mask); - } -diff --git a/frysk-imports/libunwind/src/ia64/Ginit.c b/frysk-imports/libunwind/src/ia64/Ginit.c -index 5afa9ab..7b64f0c 100644 ---- a/frysk-imports/libunwind/src/ia64/Ginit.c -+++ b/frysk-imports/libunwind/src/ia64/Ginit.c -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2005 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -61,7 +61,7 @@ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - - static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -- void *arg) -+ void *arg) - { - #ifndef UNW_LOCAL_ONLY - # pragma weak _U_dyn_info_list_addr -@@ -74,7 +74,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - - static int - access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - if (write) - { -@@ -91,12 +91,12 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - - #ifdef HAVE_SYS_UC_ACCESS_H - --#define SYSCALL_CFM_SAVE_REG 11 /* on a syscall, ar.pfs is saved in r11 */ --#define REASON_SYSCALL 0 -+#define SYSCALL_CFM_SAVE_REG 11 /* on a syscall, ar.pfs is saved in r11 */ -+#define REASON_SYSCALL 0 - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - ucontext_t *uc = arg; - unsigned int nat, mask; -@@ -110,88 +110,88 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - { - case UNW_IA64_GR ... UNW_IA64_GR + 31: - if ((ret = __uc_get_grs (uc, (reg - UNW_IA64_GR), 1, &value, &nat))) -- break; -+ break; - - if (write) -- ret = __uc_set_grs (uc, (reg - UNW_IA64_GR), 1, val, nat); -+ ret = __uc_set_grs (uc, (reg - UNW_IA64_GR), 1, val, nat); - else -- *val = value; -+ *val = value; - break; - - case UNW_IA64_NAT ... UNW_IA64_NAT + 31: - if ((ret = __uc_get_grs (uc, (reg - UNW_IA64_GR), 1, &value, &nat))) -- break; -+ break; - - mask = 1 << (reg - UNW_IA64_GR); - - if (write) -- { -- if (*val) -- nat |= mask; -- else -- nat &= ~mask; -- ret = __uc_set_grs (uc, (reg - UNW_IA64_GR), 1, &value, nat); -- } -+ { -+ if (*val) -+ nat |= mask; -+ else -+ nat &= ~mask; -+ ret = __uc_set_grs (uc, (reg - UNW_IA64_GR), 1, &value, nat); -+ } - else -- *val = (nat & mask) != 0; -+ *val = (nat & mask) != 0; - break; - - case UNW_IA64_AR ... UNW_IA64_AR + 127: - if (reg == UNW_IA64_AR_BSP) -- { -- if (write) -- ret = __uc_set_ar (uc, (reg - UNW_IA64_AR), *val); -- else -- ret = __uc_get_ar (uc, (reg - UNW_IA64_AR), val); -- } -+ { -+ if (write) -+ ret = __uc_set_ar (uc, (reg - UNW_IA64_AR), *val); -+ else -+ ret = __uc_get_ar (uc, (reg - UNW_IA64_AR), val); -+ } - else if (reg == UNW_IA64_AR_PFS && reason == REASON_SYSCALL) -- { -- /* As of HP-UX 11.22, getcontext() does not have unwind info -- and because of that, we need to hack thins manually here. -- Hopefully, this is OK because the HP-UX kernel also needs -- to know where AR.PFS has been saved, so the use of -- register r11 for this purpose is pretty much nailed -- down. */ -- if (write) -- ret = __uc_set_grs (uc, SYSCALL_CFM_SAVE_REG, 1, val, 0); -- else -- ret = __uc_get_grs (uc, SYSCALL_CFM_SAVE_REG, 1, val, &nat); -- } -+ { -+ /* As of HP-UX 11.22, getcontext() does not have unwind info -+ and because of that, we need to hack thins manually here. -+ Hopefully, this is OK because the HP-UX kernel also needs -+ to know where AR.PFS has been saved, so the use of -+ register r11 for this purpose is pretty much nailed -+ down. */ -+ if (write) -+ ret = __uc_set_grs (uc, SYSCALL_CFM_SAVE_REG, 1, val, 0); -+ else -+ ret = __uc_get_grs (uc, SYSCALL_CFM_SAVE_REG, 1, val, &nat); -+ } - else -- { -- if (write) -- ret = __uc_set_ar (uc, (reg - UNW_IA64_AR), *val); -- else -- ret = __uc_get_ar (uc, (reg - UNW_IA64_AR), val); -- } -+ { -+ if (write) -+ ret = __uc_set_ar (uc, (reg - UNW_IA64_AR), *val); -+ else -+ ret = __uc_get_ar (uc, (reg - UNW_IA64_AR), val); -+ } - break; - - case UNW_IA64_BR ... UNW_IA64_BR + 7: - if (write) -- ret = __uc_set_brs (uc, (reg - UNW_IA64_BR), 1, val); -+ ret = __uc_set_brs (uc, (reg - UNW_IA64_BR), 1, val); - else -- ret = __uc_get_brs (uc, (reg - UNW_IA64_BR), 1, val); -+ ret = __uc_get_brs (uc, (reg - UNW_IA64_BR), 1, val); - break; - - case UNW_IA64_PR: - if (write) -- ret = __uc_set_prs (uc, *val); -+ ret = __uc_set_prs (uc, *val); - else -- ret = __uc_get_prs (uc, val); -+ ret = __uc_get_prs (uc, val); - break; - - case UNW_IA64_IP: - if (write) -- ret = __uc_set_ip (uc, *val); -+ ret = __uc_set_ip (uc, *val); - else -- ret = __uc_get_ip (uc, val); -+ ret = __uc_get_ip (uc, val); - break; - - case UNW_IA64_CFM: - if (write) -- ret = __uc_set_cfm (uc, *val); -+ ret = __uc_set_cfm (uc, *val); - else -- ret = __uc_get_cfm (uc, val); -+ ret = __uc_get_cfm (uc, val); - break; - - case UNW_IA64_FR ... UNW_IA64_FR + 127: -@@ -203,7 +203,7 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - if (ret != 0) - { - Debug (1, "failed to %s %s (ret = %d)\n", -- write ? "write" : "read", unw_regname (reg), ret); -+ write ? "write" : "read", unw_regname (reg), ret); - return -UNW_EBADREG; - } - -@@ -216,7 +216,7 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { - ucontext_t *uc = arg; - fp_regval_t fp_regval; -@@ -226,15 +226,15 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - { - case UNW_IA64_FR ... UNW_IA64_FR + 127: - if (write) -- { -- memcpy (&fp_regval, val, sizeof (fp_regval)); -- ret = __uc_set_frs (uc, (reg - UNW_IA64_FR), 1, &fp_regval); -- } -+ { -+ memcpy (&fp_regval, val, sizeof (fp_regval)); -+ ret = __uc_set_frs (uc, (reg - UNW_IA64_FR), 1, &fp_regval); -+ } - else -- { -- ret = __uc_get_frs (uc, (reg - UNW_IA64_FR), 1, &fp_regval); -- memcpy (val, &fp_regval, sizeof (*val)); -- } -+ { -+ ret = __uc_get_frs (uc, (reg - UNW_IA64_FR), 1, &fp_regval); -+ memcpy (val, &fp_regval, sizeof (*val)); -+ } - break; - - default: -@@ -251,7 +251,7 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - unw_word_t *addr, mask; - ucontext_t *uc = arg; -@@ -260,19 +260,19 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - { - mask = ((unw_word_t) 1) << (reg - UNW_IA64_NAT); - if (write) -- { -- if (*val) -- uc->uc_mcontext.sc_nat |= mask; -- else -- uc->uc_mcontext.sc_nat &= ~mask; -- } -+ { -+ if (*val) -+ uc->uc_mcontext.sc_nat |= mask; -+ else -+ uc->uc_mcontext.sc_nat &= ~mask; -+ } - else -- *val = (uc->uc_mcontext.sc_nat & mask) != 0; -+ *val = (uc->uc_mcontext.sc_nat & mask) != 0; - - if (write) -- Debug (12, "%s <- %lx\n", unw_regname (reg), *val); -+ Debug (12, "%s <- %lx\n", unw_regname (reg), *val); - else -- Debug (12, "%s -> %lx\n", unw_regname (reg), *val); -+ Debug (12, "%s -> %lx\n", unw_regname (reg), *val); - return 0; - } - -@@ -283,10 +283,10 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - if (write) - { - if (ia64_read_only_reg (addr)) -- { -- Debug (16, "attempt to write read-only register\n"); -- return -UNW_EREADONLYREG; -- } -+ { -+ Debug (16, "attempt to write read-only register\n"); -+ return -UNW_EREADONLYREG; -+ } - *addr = *val; - Debug (12, "%s <- %lx\n", unw_regname (reg), *val); - } -@@ -304,7 +304,7 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { - ucontext_t *uc = arg; - unw_fpreg_t *addr; -@@ -319,19 +319,19 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - if (write) - { - if (ia64_read_only_reg (addr)) -- { -- Debug (16, "attempt to write read-only register\n"); -- return -UNW_EREADONLYREG; -- } -+ { -+ Debug (16, "attempt to write read-only register\n"); -+ return -UNW_EREADONLYREG; -+ } - *addr = *val; - Debug (12, "%s <- %016lx.%016lx\n", -- unw_regname (reg), val->raw.bits[1], val->raw.bits[0]); -+ unw_regname (reg), val->raw.bits[1], val->raw.bits[0]); - } - else - { - *val = *(unw_fpreg_t *) addr; - Debug (12, "%s -> %016lx.%016lx\n", -- unw_regname (reg), val->raw.bits[1], val->raw.bits[0]); -+ unw_regname (reg), val->raw.bits[1], val->raw.bits[0]); - } - return 0; - -@@ -345,8 +345,8 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - - static int - get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, -- void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) - { - return _Uelf64_get_proc_name (as, getpid (), ip, buf, buf_len, offp); - } -@@ -379,7 +379,7 @@ ia64_local_addr_space_init (void) - - HIDDEN int - ia64_uc_access_reg (struct cursor *c, ia64_loc_t loc, unw_word_t *valp, -- int write) -+ int write) - { - #ifdef HAVE_SYS_UC_ACCESS_H - unw_word_t uc_addr = IA64_GET_AUX_ADDR (loc); -@@ -387,7 +387,7 @@ ia64_uc_access_reg (struct cursor *c, ia64_loc_t loc, unw_word_t *valp, - int ret; - - Debug (16, "%s location %s\n", -- write ? "writing" : "reading", ia64_strloc (loc)); -+ write ? "writing" : "reading", ia64_strloc (loc)); - - if (c->as == unw_local_addr_space) - ucp = (ucontext_t *) uc_addr; -@@ -398,7 +398,7 @@ ia64_uc_access_reg (struct cursor *c, ia64_loc_t loc, unw_word_t *valp, - /* Need to copy-in ucontext_t first. */ - ucp = alloca (sizeof (ucontext_t)); - if (!ucp) -- return -UNW_ENOMEM; -+ return -UNW_ENOMEM; - - /* For now, there is no non-HP-UX implementation of the - uc_access(3) interface. Because of that, we cannot, e.g., -@@ -410,25 +410,25 @@ ia64_uc_access_reg (struct cursor *c, ia64_loc_t loc, unw_word_t *valp, - - dst = (unw_word_t *) ucp; - for (src = uc_addr; src < uc_addr + sizeof (ucontext_t); src += 8) -- if ((ret = (*c->as->acc.access_mem) (c->as, src, dst++, 0, c->as_arg)) -- < 0) -- return ret; -+ if ((ret = (*c->as->acc.access_mem) (c->as, src, dst++, 0, c->as_arg)) -+ < 0) -+ return ret; - } - - if (IA64_IS_REG_LOC (loc)) - ret = access_reg (unw_local_addr_space, IA64_GET_REG (loc), valp, write, -- ucp); -+ ucp); - else - { - /* Must be an access to the RSE backing store in ucontext_t. */ - unw_word_t addr = IA64_GET_ADDR (loc); - - if (write) -- ret = __uc_set_rsebs (ucp, (uint64_t *) addr, 1, valp); -+ ret = __uc_set_rsebs (ucp, (uint64_t *) addr, 1, valp); - else -- ret = __uc_get_rsebs (ucp, (uint64_t *) addr, 1, valp); -+ ret = __uc_get_rsebs (ucp, (uint64_t *) addr, 1, valp); - if (ret != 0) -- ret = -UNW_EBADREG; -+ ret = -UNW_EBADREG; - } - if (ret < 0) - return ret; -@@ -438,9 +438,9 @@ ia64_uc_access_reg (struct cursor *c, ia64_loc_t loc, unw_word_t *valp, - /* need to copy-out ucontext_t: */ - unw_word_t dst, *src = (unw_word_t *) ucp; - for (dst = uc_addr; dst < uc_addr + sizeof (ucontext_t); dst += 8) -- if ((ret = (*c->as->acc.access_mem) (c->as, dst, src++, 1, c->as_arg)) -- < 0) -- return ret; -+ if ((ret = (*c->as->acc.access_mem) (c->as, dst, src++, 1, c->as_arg)) -+ < 0) -+ return ret; - } - return 0; - #else /* !HAVE_SYS_UC_ACCESS_H */ -@@ -450,7 +450,7 @@ ia64_uc_access_reg (struct cursor *c, ia64_loc_t loc, unw_word_t *valp, - - HIDDEN int - ia64_uc_access_fpreg (struct cursor *c, ia64_loc_t loc, unw_fpreg_t *valp, -- int write) -+ int write) - { - #ifdef HAVE_SYS_UC_ACCESS_H - unw_word_t uc_addr = IA64_GET_AUX_ADDR (loc); -@@ -466,7 +466,7 @@ ia64_uc_access_fpreg (struct cursor *c, ia64_loc_t loc, unw_fpreg_t *valp, - /* Need to copy-in ucontext_t first. */ - ucp = alloca (sizeof (ucontext_t)); - if (!ucp) -- return -UNW_ENOMEM; -+ return -UNW_ENOMEM; - - /* For now, there is no non-HP-UX implementation of the - uc_access(3) interface. Because of that, we cannot, e.g., -@@ -478,13 +478,13 @@ ia64_uc_access_fpreg (struct cursor *c, ia64_loc_t loc, unw_fpreg_t *valp, - - dst = (unw_word_t *) ucp; - for (src = uc_addr; src < uc_addr + sizeof (ucontext_t); src += 8) -- if ((ret = (*c->as->acc.access_mem) (c->as, src, dst++, 0, c->as_arg)) -- < 0) -- return ret; -+ if ((ret = (*c->as->acc.access_mem) (c->as, src, dst++, 0, c->as_arg)) -+ < 0) -+ return ret; - } - - if ((ret = access_fpreg (unw_local_addr_space, IA64_GET_REG (loc), valp, -- write, ucp)) < 0) -+ write, ucp)) < 0) - return ret; - - if (write && c->as != unw_local_addr_space) -@@ -492,9 +492,9 @@ ia64_uc_access_fpreg (struct cursor *c, ia64_loc_t loc, unw_fpreg_t *valp, - /* need to copy-out ucontext_t: */ - unw_word_t dst, *src = (unw_word_t *) ucp; - for (dst = uc_addr; dst < uc_addr + sizeof (ucontext_t); dst += 8) -- if ((ret = (*c->as->acc.access_mem) (c->as, dst, src++, 1, c->as_arg)) -- < 0) -- return ret; -+ if ((ret = (*c->as->acc.access_mem) (c->as, dst, src++, 1, c->as_arg)) -+ < 0) -+ return ret; - } - return 0; - #else /* !HAVE_SYS_UC_ACCESS_H */ -diff --git a/frysk-imports/libunwind/src/ia64/Ginit_local.c b/frysk-imports/libunwind/src/ia64/Ginit_local.c -index 42f8b1f..8c727e1 100644 ---- a/frysk-imports/libunwind/src/ia64/Ginit_local.c -+++ b/frysk-imports/libunwind/src/ia64/Ginit_local.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2003, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -49,7 +49,7 @@ set_as_arg (struct cursor *c, unw_context_t *uc) - - static inline int - get_initial_stack_pointers (struct cursor *c, unw_context_t *uc, -- unw_word_t *sp, unw_word_t *bsp) -+ unw_word_t *sp, unw_word_t *bsp) - { - #if defined(__linux) - unw_word_t sol, bspstore; -@@ -83,7 +83,7 @@ unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) - unw_word_t sp, bsp; - int ret; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); -diff --git a/frysk-imports/libunwind/src/ia64/Ginit_remote.c b/frysk-imports/libunwind/src/ia64/Ginit_remote.c -index ae0b718..e26a4e4 100644 ---- a/frysk-imports/libunwind/src/ia64/Ginit_remote.c -+++ b/frysk-imports/libunwind/src/ia64/Ginit_remote.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002, 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -36,7 +36,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) - unw_word_t sp, bsp; - int ret; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); -diff --git a/frysk-imports/libunwind/src/ia64/Gis_signal_frame.c b/frysk-imports/libunwind/src/ia64/Gis_signal_frame.c -index cc69bd6..0b7e19c 100644 ---- a/frysk-imports/libunwind/src/ia64/Gis_signal_frame.c -+++ b/frysk-imports/libunwind/src/ia64/Gis_signal_frame.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/ia64/Gparser.c b/frysk-imports/libunwind/src/ia64/Gparser.c -index 001581d..b1f0f4a 100644 ---- a/frysk-imports/libunwind/src/ia64/Gparser.c -+++ b/frysk-imports/libunwind/src/ia64/Gparser.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,15 +27,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* forward declaration: */ - static int create_state_record_for (struct cursor *c, -- struct ia64_state_record *sr, -- unw_word_t ip); -+ struct ia64_state_record *sr, -+ unw_word_t ip); - - typedef unsigned long unw_word; - --#define alloc_reg_state() (mempool_alloc (&unw.reg_state_pool)) --#define free_reg_state(rs) (mempool_free (&unw.reg_state_pool, rs)) --#define alloc_labeled_state() (mempool_alloc (&unw.labeled_state_pool)) --#define free_labeled_state(s) (mempool_free (&unw.labeled_state_pool, s)) -+#define alloc_reg_state() (mempool_alloc (&unw.reg_state_pool)) -+#define free_reg_state(rs) (mempool_free (&unw.reg_state_pool, rs)) -+#define alloc_labeled_state() (mempool_alloc (&unw.labeled_state_pool)) -+#define free_labeled_state(s) (mempool_free (&unw.labeled_state_pool, s)) - - /* Routines to manipulate the state stack. */ - -@@ -78,15 +78,15 @@ dup_state_stack (struct ia64_reg_state *rs) - { - copy = alloc_reg_state (); - if (!copy) -- { -- print_error ("unwind.dup_state_stack: out of memory\n"); -- return NULL; -- } -+ { -+ print_error ("unwind.dup_state_stack: out of memory\n"); -+ return NULL; -+ } - memcpy (copy, rs, sizeof (*copy)); - if (first) -- prev->next = copy; -+ prev->next = copy; - else -- first = copy; -+ first = copy; - rs = rs->next; - prev = copy; - } -@@ -109,7 +109,7 @@ free_state_stack (struct ia64_reg_state *rs) - - /* Unwind decoder routines */ - --static enum ia64_pregnum __attribute__ ((const)) -+static enum ia64_pregnum CONST_ATTR - decode_abreg (unsigned char abreg, int memory) - { - switch (abreg) -@@ -147,13 +147,13 @@ decode_abreg (unsigned char abreg, int memory) - default: - break; - } -- dprintf ("libunwind: bad abreg=0x%x\n", abreg); -+ Dprintf ("libunwind: bad abreg=0x%x\n", abreg); - return IA64_REG_LC; - } - - static void - set_reg (struct ia64_reg_info *reg, enum ia64_where where, int when, -- unsigned long val) -+ unsigned long val) - { - reg->val = val; - reg->where = where; -@@ -163,37 +163,37 @@ set_reg (struct ia64_reg_info *reg, enum ia64_where where, int when, - - static void - alloc_spill_area (unsigned long *offp, unsigned long regsize, -- struct ia64_reg_info *lo, struct ia64_reg_info *hi) -+ struct ia64_reg_info *lo, struct ia64_reg_info *hi) - { - struct ia64_reg_info *reg; - - for (reg = hi; reg >= lo; --reg) - { - if (reg->where == IA64_WHERE_SPILL_HOME) -- { -- reg->where = IA64_WHERE_PSPREL; -- *offp -= regsize; -- reg->val = *offp; -- } -+ { -+ reg->where = IA64_WHERE_PSPREL; -+ *offp -= regsize; -+ reg->val = *offp; -+ } - } - } - - static inline void - spill_next_when (struct ia64_reg_info **regp, struct ia64_reg_info *lim, -- unw_word t) -+ unw_word t) - { - struct ia64_reg_info *reg; - - for (reg = *regp; reg <= lim; ++reg) - { - if (reg->where == IA64_WHERE_SPILL_HOME) -- { -- reg->when = t; -- *regp = reg + 1; -- return; -- } -+ { -+ reg->when = t; -+ *regp = reg + 1; -+ return; -+ } - } -- dprintf ("libunwind: excess spill!\n"); -+ Dprintf ("libunwind: excess spill!\n"); - } - - static inline void -@@ -209,10 +209,10 @@ finish_prologue (struct ia64_state_record *sr) - { - reg = sr->curr.reg + unw.save_order[i]; - if (reg->where == IA64_WHERE_GR_SAVE) -- { -- reg->where = IA64_WHERE_GR; -- reg->val = sr->gr_save_loc++; -- } -+ { -+ reg->where = IA64_WHERE_GR; -+ reg->val = sr->gr_save_loc++; -+ } - } - - /* Next, compute when the fp, general, and branch registers get -@@ -225,8 +225,8 @@ finish_prologue (struct ia64_state_record *sr) - unsigned long t; - static const unsigned char limit[3] = - { -- IA64_REG_F31, IA64_REG_R7, IA64_REG_B5 -- }; -+ IA64_REG_F31, IA64_REG_R7, IA64_REG_B5 -+ }; - struct ia64_reg_info *(regs[3]); - - regs[0] = sr->curr.reg + IA64_REG_F2; -@@ -234,14 +234,14 @@ finish_prologue (struct ia64_state_record *sr) - regs[2] = sr->curr.reg + IA64_REG_B1; - - for (t = 0; (int) t < sr->region_len; ++t) -- { -- if ((t & 3) == 0) -- mask = *cp++; -- kind = (mask >> 2 * (3 - (t & 3))) & 3; -- if (kind > 0) -- spill_next_when (®s[kind - 1], sr->curr.reg + limit[kind - 1], -- sr->region_start + t); -- } -+ { -+ if ((t & 3) == 0) -+ mask = *cp++; -+ kind = (mask >> 2 * (3 - (t & 3))) & 3; -+ if (kind > 0) -+ spill_next_when (®s[kind - 1], sr->curr.reg + limit[kind - 1], -+ sr->region_start + t); -+ } - } - - /* Next, lay out the memory stack spill area. */ -@@ -250,11 +250,11 @@ finish_prologue (struct ia64_state_record *sr) - { - off = sr->spill_offset; - alloc_spill_area (&off, 16, sr->curr.reg + IA64_REG_F2, -- sr->curr.reg + IA64_REG_F31); -+ sr->curr.reg + IA64_REG_F31); - alloc_spill_area (&off, 8, sr->curr.reg + IA64_REG_B1, -- sr->curr.reg + IA64_REG_B5); -+ sr->curr.reg + IA64_REG_B5); - alloc_spill_area (&off, 8, sr->curr.reg + IA64_REG_R4, -- sr->curr.reg + IA64_REG_R7); -+ sr->curr.reg + IA64_REG_R7); - } - } - -@@ -262,7 +262,7 @@ finish_prologue (struct ia64_state_record *sr) - - static void - desc_prologue (int body, unw_word rlen, unsigned char mask, -- unsigned char grsave, struct ia64_state_record *sr) -+ unsigned char grsave, struct ia64_state_record *sr) - { - int i, region_start; - -@@ -293,17 +293,17 @@ desc_prologue (int body, unw_word rlen, unsigned char mask, - push (sr); - - if (mask) -- for (i = 0; i < 4; ++i) -- { -- if (mask & 0x8) -- set_reg (sr->curr.reg + unw.save_order[i], IA64_WHERE_GR, -- sr->region_start + sr->region_len - 1, grsave++); -- mask <<= 1; -- } -+ for (i = 0; i < 4; ++i) -+ { -+ if (mask & 0x8) -+ set_reg (sr->curr.reg + unw.save_order[i], IA64_WHERE_GR, -+ sr->region_start + sr->region_len - 1, grsave++); -+ mask <<= 1; -+ } - sr->gr_save_loc = grsave; - sr->any_spills = 0; - sr->imask = 0; -- sr->spill_offset = 0x10; /* default to psp+16 */ -+ sr->spill_offset = 0x10; /* default to psp+16 */ - } - } - -@@ -311,22 +311,22 @@ desc_prologue (int body, unw_word rlen, unsigned char mask, - - static inline void - desc_abi (unsigned char abi, unsigned char context, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - sr->abi_marker = (abi << 8) | context; - } - - static inline void - desc_br_gr (unsigned char brmask, unsigned char gr, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - int i; - - for (i = 0; i < 5; ++i) - { - if (brmask & 1) -- set_reg (sr->curr.reg + IA64_REG_B1 + i, IA64_WHERE_GR, -- sr->region_start + sr->region_len - 1, gr++); -+ set_reg (sr->curr.reg + IA64_REG_B1 + i, IA64_WHERE_GR, -+ sr->region_start + sr->region_len - 1, gr++); - brmask >>= 1; - } - } -@@ -339,40 +339,40 @@ desc_br_mem (unsigned char brmask, struct ia64_state_record *sr) - for (i = 0; i < 5; ++i) - { - if (brmask & 1) -- { -- set_reg (sr->curr.reg + IA64_REG_B1 + i, IA64_WHERE_SPILL_HOME, -- sr->region_start + sr->region_len - 1, 0); -- sr->any_spills = 1; -- } -+ { -+ set_reg (sr->curr.reg + IA64_REG_B1 + i, IA64_WHERE_SPILL_HOME, -+ sr->region_start + sr->region_len - 1, 0); -+ sr->any_spills = 1; -+ } - brmask >>= 1; - } - } - - static inline void - desc_frgr_mem (unsigned char grmask, unw_word frmask, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - int i; - - for (i = 0; i < 4; ++i) - { - if ((grmask & 1) != 0) -- { -- set_reg (sr->curr.reg + IA64_REG_R4 + i, IA64_WHERE_SPILL_HOME, -- sr->region_start + sr->region_len - 1, 0); -- sr->any_spills = 1; -- } -+ { -+ set_reg (sr->curr.reg + IA64_REG_R4 + i, IA64_WHERE_SPILL_HOME, -+ sr->region_start + sr->region_len - 1, 0); -+ sr->any_spills = 1; -+ } - grmask >>= 1; - } - for (i = 0; i < 20; ++i) - { - if ((frmask & 1) != 0) -- { -- int base = (i < 4) ? IA64_REG_F2 : IA64_REG_F16 - 4; -- set_reg (sr->curr.reg + base + i, IA64_WHERE_SPILL_HOME, -- sr->region_start + sr->region_len - 1, 0); -- sr->any_spills = 1; -- } -+ { -+ int base = (i < 4) ? IA64_REG_F2 : IA64_REG_F16 - 4; -+ set_reg (sr->curr.reg + base + i, IA64_WHERE_SPILL_HOME, -+ sr->region_start + sr->region_len - 1, 0); -+ sr->any_spills = 1; -+ } - frmask >>= 1; - } - } -@@ -385,26 +385,26 @@ desc_fr_mem (unsigned char frmask, struct ia64_state_record *sr) - for (i = 0; i < 4; ++i) - { - if ((frmask & 1) != 0) -- { -- set_reg (sr->curr.reg + IA64_REG_F2 + i, IA64_WHERE_SPILL_HOME, -- sr->region_start + sr->region_len - 1, 0); -- sr->any_spills = 1; -- } -+ { -+ set_reg (sr->curr.reg + IA64_REG_F2 + i, IA64_WHERE_SPILL_HOME, -+ sr->region_start + sr->region_len - 1, 0); -+ sr->any_spills = 1; -+ } - frmask >>= 1; - } - } - - static inline void - desc_gr_gr (unsigned char grmask, unsigned char gr, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - int i; - - for (i = 0; i < 4; ++i) - { - if ((grmask & 1) != 0) -- set_reg (sr->curr.reg + IA64_REG_R4 + i, IA64_WHERE_GR, -- sr->region_start + sr->region_len - 1, gr++); -+ set_reg (sr->curr.reg + IA64_REG_R4 + i, IA64_WHERE_GR, -+ sr->region_start + sr->region_len - 1, gr++); - grmask >>= 1; - } - } -@@ -417,11 +417,11 @@ desc_gr_mem (unsigned char grmask, struct ia64_state_record *sr) - for (i = 0; i < 4; ++i) - { - if ((grmask & 1) != 0) -- { -- set_reg (sr->curr.reg + IA64_REG_R4 + i, IA64_WHERE_SPILL_HOME, -- sr->region_start + sr->region_len - 1, 0); -- sr->any_spills = 1; -- } -+ { -+ set_reg (sr->curr.reg + IA64_REG_R4 + i, IA64_WHERE_SPILL_HOME, -+ sr->region_start + sr->region_len - 1, 0); -+ sr->any_spills = 1; -+ } - grmask >>= 1; - } - } -@@ -430,7 +430,7 @@ static inline void - desc_mem_stack_f (unw_word t, unw_word size, struct ia64_state_record *sr) - { - set_reg (sr->curr.reg + IA64_REG_PSP, IA64_WHERE_NONE, -- sr->region_start + MIN ((int) t, sr->region_len - 1), 16 * size); -+ sr->region_start + MIN ((int) t, sr->region_len - 1), 16 * size); - } - - static inline void -@@ -442,26 +442,26 @@ desc_mem_stack_v (unw_word t, struct ia64_state_record *sr) - - static inline void - desc_reg_gr (unsigned char reg, unsigned char dst, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - set_reg (sr->curr.reg + reg, IA64_WHERE_GR, -- sr->region_start + sr->region_len - 1, dst); -+ sr->region_start + sr->region_len - 1, dst); - } - - static inline void - desc_reg_psprel (unsigned char reg, unw_word pspoff, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - set_reg (sr->curr.reg + reg, IA64_WHERE_PSPREL, -- sr->region_start + sr->region_len - 1, 0x10 - 4 * pspoff); -+ sr->region_start + sr->region_len - 1, 0x10 - 4 * pspoff); - } - - static inline void - desc_reg_sprel (unsigned char reg, unw_word spoff, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - set_reg (sr->curr.reg + reg, IA64_WHERE_SPREL, -- sr->region_start + sr->region_len - 1, 4 * spoff); -+ sr->region_start + sr->region_len - 1, 4 * spoff); - } - - static inline void -@@ -510,12 +510,12 @@ desc_copy_state (unw_word label, struct ia64_state_record *sr) - for (ls = sr->labeled_states; ls; ls = ls->next) - { - if (ls->label == label) -- { -- free_state_stack (&sr->curr); -- memcpy (&sr->curr, &ls->saved_state, sizeof (sr->curr)); -- sr->curr.next = dup_state_stack (ls->saved_state.next); -- return; -- } -+ { -+ free_state_stack (&sr->curr); -+ memcpy (&sr->curr, &ls->saved_state, sizeof (sr->curr)); -+ sr->curr.next = dup_state_stack (ls->saved_state.next); -+ return; -+ } - } - print_error ("libunwind: failed to find labeled state\n"); - } -@@ -550,7 +550,7 @@ desc_is_active (unsigned char qp, unw_word t, struct ia64_state_record *sr) - if (qp > 0) - { - if ((sr->pr_val & ((unw_word_t) 1 << qp)) == 0) -- return 0; -+ return 0; - sr->pr_mask |= ((unw_word_t) 1 << qp); - } - return 1; -@@ -558,7 +558,7 @@ desc_is_active (unsigned char qp, unw_word t, struct ia64_state_record *sr) - - static inline void - desc_restore_p (unsigned char qp, unw_word t, unsigned char abreg, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - struct ia64_reg_info *r; - -@@ -573,8 +573,8 @@ desc_restore_p (unsigned char qp, unw_word t, unsigned char abreg, - - static inline void - desc_spill_reg_p (unsigned char qp, unw_word t, unsigned char abreg, -- unsigned char x, unsigned char ytreg, -- struct ia64_state_record *sr) -+ unsigned char x, unsigned char ytreg, -+ struct ia64_state_record *sr) - { - enum ia64_where where = IA64_WHERE_GR; - struct ia64_reg_info *r; -@@ -595,7 +595,7 @@ desc_spill_reg_p (unsigned char qp, unw_word t, unsigned char abreg, - - static inline void - desc_spill_psprel_p (unsigned char qp, unw_word t, unsigned char abreg, -- unw_word pspoff, struct ia64_state_record *sr) -+ unw_word pspoff, struct ia64_state_record *sr) - { - struct ia64_reg_info *r; - -@@ -610,7 +610,7 @@ desc_spill_psprel_p (unsigned char qp, unw_word t, unsigned char abreg, - - static inline void - desc_spill_sprel_p (unsigned char qp, unw_word t, unsigned char abreg, -- unw_word spoff, struct ia64_state_record *sr) -+ unw_word spoff, struct ia64_state_record *sr) - { - struct ia64_reg_info *r; - -@@ -623,69 +623,69 @@ desc_spill_sprel_p (unsigned char qp, unw_word t, unsigned char abreg, - r->val = 4 * spoff; - } - --#define UNW_DEC_BAD_CODE(code) \ -- print_error ("libunwind: unknown code encountered\n") -+#define UNW_DEC_BAD_CODE(code) \ -+ print_error ("libunwind: unknown code encountered\n") - - /* Register names. */ --#define UNW_REG_BSP IA64_REG_BSP --#define UNW_REG_BSPSTORE IA64_REG_BSPSTORE --#define UNW_REG_FPSR IA64_REG_FPSR --#define UNW_REG_LC IA64_REG_LC --#define UNW_REG_PFS IA64_REG_PFS --#define UNW_REG_PR IA64_REG_PR --#define UNW_REG_RNAT IA64_REG_RNAT --#define UNW_REG_PSP IA64_REG_PSP --#define UNW_REG_RP IA64_REG_IP --#define UNW_REG_UNAT IA64_REG_UNAT -+#define UNW_REG_BSP IA64_REG_BSP -+#define UNW_REG_BSPSTORE IA64_REG_BSPSTORE -+#define UNW_REG_FPSR IA64_REG_FPSR -+#define UNW_REG_LC IA64_REG_LC -+#define UNW_REG_PFS IA64_REG_PFS -+#define UNW_REG_PR IA64_REG_PR -+#define UNW_REG_RNAT IA64_REG_RNAT -+#define UNW_REG_PSP IA64_REG_PSP -+#define UNW_REG_RP IA64_REG_IP -+#define UNW_REG_UNAT IA64_REG_UNAT - - /* Region headers. */ --#define UNW_DEC_PROLOGUE_GR(fmt,r,m,gr,arg) desc_prologue(0,r,m,gr,arg) --#define UNW_DEC_PROLOGUE(fmt,b,r,arg) desc_prologue(b,r,0,32,arg) -+#define UNW_DEC_PROLOGUE_GR(fmt,r,m,gr,arg) desc_prologue(0,r,m,gr,arg) -+#define UNW_DEC_PROLOGUE(fmt,b,r,arg) desc_prologue(b,r,0,32,arg) - - /* Prologue descriptors. */ --#define UNW_DEC_ABI(fmt,a,c,arg) desc_abi(a,c,arg) --#define UNW_DEC_BR_GR(fmt,b,g,arg) desc_br_gr(b,g,arg) --#define UNW_DEC_BR_MEM(fmt,b,arg) desc_br_mem(b,arg) --#define UNW_DEC_FRGR_MEM(fmt,g,f,arg) desc_frgr_mem(g,f,arg) --#define UNW_DEC_FR_MEM(fmt,f,arg) desc_fr_mem(f,arg) --#define UNW_DEC_GR_GR(fmt,m,g,arg) desc_gr_gr(m,g,arg) --#define UNW_DEC_GR_MEM(fmt,m,arg) desc_gr_mem(m,arg) --#define UNW_DEC_MEM_STACK_F(fmt,t,s,arg) desc_mem_stack_f(t,s,arg) --#define UNW_DEC_MEM_STACK_V(fmt,t,arg) desc_mem_stack_v(t,arg) --#define UNW_DEC_REG_GR(fmt,r,d,arg) desc_reg_gr(r,d,arg) --#define UNW_DEC_REG_PSPREL(fmt,r,o,arg) desc_reg_psprel(r,o,arg) --#define UNW_DEC_REG_SPREL(fmt,r,o,arg) desc_reg_sprel(r,o,arg) --#define UNW_DEC_REG_WHEN(fmt,r,t,arg) desc_reg_when(r,t,arg) -+#define UNW_DEC_ABI(fmt,a,c,arg) desc_abi(a,c,arg) -+#define UNW_DEC_BR_GR(fmt,b,g,arg) desc_br_gr(b,g,arg) -+#define UNW_DEC_BR_MEM(fmt,b,arg) desc_br_mem(b,arg) -+#define UNW_DEC_FRGR_MEM(fmt,g,f,arg) desc_frgr_mem(g,f,arg) -+#define UNW_DEC_FR_MEM(fmt,f,arg) desc_fr_mem(f,arg) -+#define UNW_DEC_GR_GR(fmt,m,g,arg) desc_gr_gr(m,g,arg) -+#define UNW_DEC_GR_MEM(fmt,m,arg) desc_gr_mem(m,arg) -+#define UNW_DEC_MEM_STACK_F(fmt,t,s,arg) desc_mem_stack_f(t,s,arg) -+#define UNW_DEC_MEM_STACK_V(fmt,t,arg) desc_mem_stack_v(t,arg) -+#define UNW_DEC_REG_GR(fmt,r,d,arg) desc_reg_gr(r,d,arg) -+#define UNW_DEC_REG_PSPREL(fmt,r,o,arg) desc_reg_psprel(r,o,arg) -+#define UNW_DEC_REG_SPREL(fmt,r,o,arg) desc_reg_sprel(r,o,arg) -+#define UNW_DEC_REG_WHEN(fmt,r,t,arg) desc_reg_when(r,t,arg) - #define UNW_DEC_PRIUNAT_WHEN_GR(fmt,t,arg) \ -- desc_reg_when(IA64_REG_PRI_UNAT_GR,t,arg) -+ desc_reg_when(IA64_REG_PRI_UNAT_GR,t,arg) - #define UNW_DEC_PRIUNAT_WHEN_MEM(fmt,t,arg) \ -- desc_reg_when(IA64_REG_PRI_UNAT_MEM,t,arg) -+ desc_reg_when(IA64_REG_PRI_UNAT_MEM,t,arg) - #define UNW_DEC_PRIUNAT_GR(fmt,r,arg) \ -- desc_reg_gr(IA64_REG_PRI_UNAT_GR,r,arg) -+ desc_reg_gr(IA64_REG_PRI_UNAT_GR,r,arg) - #define UNW_DEC_PRIUNAT_PSPREL(fmt,o,arg) \ -- desc_reg_psprel(IA64_REG_PRI_UNAT_MEM,o,arg) -+ desc_reg_psprel(IA64_REG_PRI_UNAT_MEM,o,arg) - #define UNW_DEC_PRIUNAT_SPREL(fmt,o,arg) \ -- desc_reg_sprel(IA64_REG_PRI_UNAT_MEM,o,arg) --#define UNW_DEC_RP_BR(fmt,d,arg) desc_rp_br(d,arg) --#define UNW_DEC_SPILL_BASE(fmt,o,arg) desc_spill_base(o,arg) --#define UNW_DEC_SPILL_MASK(fmt,m,arg) (m = desc_spill_mask(m,arg)) -+ desc_reg_sprel(IA64_REG_PRI_UNAT_MEM,o,arg) -+#define UNW_DEC_RP_BR(fmt,d,arg) desc_rp_br(d,arg) -+#define UNW_DEC_SPILL_BASE(fmt,o,arg) desc_spill_base(o,arg) -+#define UNW_DEC_SPILL_MASK(fmt,m,arg) (m = desc_spill_mask(m,arg)) - - /* Body descriptors. */ --#define UNW_DEC_EPILOGUE(fmt,t,c,arg) desc_epilogue(t,c,arg) --#define UNW_DEC_COPY_STATE(fmt,l,arg) desc_copy_state(l,arg) --#define UNW_DEC_LABEL_STATE(fmt,l,arg) desc_label_state(l,arg) -+#define UNW_DEC_EPILOGUE(fmt,t,c,arg) desc_epilogue(t,c,arg) -+#define UNW_DEC_COPY_STATE(fmt,l,arg) desc_copy_state(l,arg) -+#define UNW_DEC_LABEL_STATE(fmt,l,arg) desc_label_state(l,arg) - - /* General unwind descriptors. */ --#define UNW_DEC_SPILL_REG_P(f,p,t,a,x,y,arg) desc_spill_reg_p(p,t,a,x,y,arg) --#define UNW_DEC_SPILL_REG(f,t,a,x,y,arg) desc_spill_reg_p(0,t,a,x,y,arg) -+#define UNW_DEC_SPILL_REG_P(f,p,t,a,x,y,arg) desc_spill_reg_p(p,t,a,x,y,arg) -+#define UNW_DEC_SPILL_REG(f,t,a,x,y,arg) desc_spill_reg_p(0,t,a,x,y,arg) - #define UNW_DEC_SPILL_PSPREL_P(f,p,t,a,o,arg) \ -- desc_spill_psprel_p(p,t,a,o,arg) -+ desc_spill_psprel_p(p,t,a,o,arg) - #define UNW_DEC_SPILL_PSPREL(f,t,a,o,arg) \ -- desc_spill_psprel_p(0,t,a,o,arg) --#define UNW_DEC_SPILL_SPREL_P(f,p,t,a,o,arg) desc_spill_sprel_p(p,t,a,o,arg) --#define UNW_DEC_SPILL_SPREL(f,t,a,o,arg) desc_spill_sprel_p(0,t,a,o,arg) --#define UNW_DEC_RESTORE_P(f,p,t,a,arg) desc_restore_p(p,t,a,arg) --#define UNW_DEC_RESTORE(f,t,a,arg) desc_restore_p(0,t,a,arg) -+ desc_spill_psprel_p(0,t,a,o,arg) -+#define UNW_DEC_SPILL_SPREL_P(f,p,t,a,o,arg) desc_spill_sprel_p(p,t,a,o,arg) -+#define UNW_DEC_SPILL_SPREL(f,t,a,o,arg) desc_spill_sprel_p(0,t,a,o,arg) -+#define UNW_DEC_RESTORE_P(f,p,t,a,arg) desc_restore_p(p,t,a,arg) -+#define UNW_DEC_RESTORE(f,t,a,arg) desc_restore_p(0,t,a,arg) - - #include "unwind_decoder.h" - -@@ -700,22 +700,22 @@ lookup_preg (int regnum, int memory, struct ia64_state_record *sr) - - switch (regnum) - { -- case UNW_IA64_AR_BSP: preg = IA64_REG_BSP; break; -- case UNW_IA64_AR_BSPSTORE: preg = IA64_REG_BSPSTORE; break; -- case UNW_IA64_AR_FPSR: preg = IA64_REG_FPSR; break; -- case UNW_IA64_AR_LC: preg = IA64_REG_LC; break; -- case UNW_IA64_AR_PFS: preg = IA64_REG_PFS; break; -- case UNW_IA64_AR_RNAT: preg = IA64_REG_RNAT; break; -- case UNW_IA64_AR_UNAT: preg = IA64_REG_UNAT; break; -- case UNW_IA64_BR + 0: preg = IA64_REG_IP; break; -- case UNW_IA64_PR: preg = IA64_REG_PR; break; -- case UNW_IA64_SP: preg = IA64_REG_PSP; break; -+ case UNW_IA64_AR_BSP: preg = IA64_REG_BSP; break; -+ case UNW_IA64_AR_BSPSTORE: preg = IA64_REG_BSPSTORE; break; -+ case UNW_IA64_AR_FPSR: preg = IA64_REG_FPSR; break; -+ case UNW_IA64_AR_LC: preg = IA64_REG_LC; break; -+ case UNW_IA64_AR_PFS: preg = IA64_REG_PFS; break; -+ case UNW_IA64_AR_RNAT: preg = IA64_REG_RNAT; break; -+ case UNW_IA64_AR_UNAT: preg = IA64_REG_UNAT; break; -+ case UNW_IA64_BR + 0: preg = IA64_REG_IP; break; -+ case UNW_IA64_PR: preg = IA64_REG_PR; break; -+ case UNW_IA64_SP: preg = IA64_REG_PSP; break; - - case UNW_IA64_NAT: - if (memory) -- preg = IA64_REG_PRI_UNAT_MEM; -+ preg = IA64_REG_PRI_UNAT_MEM; - else -- preg = IA64_REG_PRI_UNAT_GR; -+ preg = IA64_REG_PRI_UNAT_GR; - break; - - case UNW_IA64_GR + 4 ... UNW_IA64_GR + 7: -@@ -735,7 +735,7 @@ lookup_preg (int regnum, int memory, struct ia64_state_record *sr) - break; - - default: -- dprintf ("%s: invalid register number %d\n", __FUNCTION__, regnum); -+ Dprintf ("%s: invalid register number %d\n", __FUNCTION__, regnum); - return NULL; - } - return sr->curr.reg + preg; -@@ -802,119 +802,119 @@ parse_dynamic (struct cursor *c, struct ia64_state_record *sr) - { - len = r->insn_count; - if (len < 0) -- { -- if (r->next) -- { -- Debug (1, "negative region length allowed in last region only!"); -- return -UNW_EINVAL; -- } -- len = -len; -- /* hack old region info to set the start where we need it: */ -- sr->region_start = (di->end_ip - di->start_ip) / 0x10 * 3 - len; -- sr->region_len = 0; -- } -+ { -+ if (r->next) -+ { -+ Debug (1, "negative region length allowed in last region only!"); -+ return -UNW_EINVAL; -+ } -+ len = -len; -+ /* hack old region info to set the start where we need it: */ -+ sr->region_start = (di->end_ip - di->start_ip) / 0x10 * 3 - len; -+ sr->region_len = 0; -+ } - /* all regions are treated as prologue regions: */ - desc_prologue (0, len, 0, 0, sr); - - if (sr->done) -- return 0; -+ return 0; - - for (op = r->op; op < r->op + r->op_count; ++op) -- { -- when = op->when; -- val = op->val; -- qp = op->qp; -- -- if (!desc_is_active (qp, when, sr)) -- continue; -- -- when = sr->region_start + MIN ((int) when, sr->region_len - 1); -- -- switch (op->tag) -- { -- case UNW_DYN_SAVE_REG: -- memory = 0; -- if ((unsigned) (val - UNW_IA64_GR) < 128) -- where = IA64_WHERE_GR; -- else if ((unsigned) (val - UNW_IA64_FR) < 128) -- where = IA64_WHERE_FR; -- else if ((unsigned) (val - UNW_IA64_BR) < 8) -- where = IA64_WHERE_BR; -- else -- { -- dprintf ("%s: can't save to register number %d\n", -- __FUNCTION__, (int) op->reg); -- return -UNW_EBADREG; -- } -- /* fall through */ -- update_reg_info: -- ri = lookup_preg (op->reg, memory, sr); -- if (!ri) -- return -UNW_EBADREG; -- ri->where = where; -- ri->when = when; -- ri->val = val; -- break; -- -- case UNW_DYN_SPILL_FP_REL: -- memory = 1; -- where = IA64_WHERE_PSPREL; -- val = 0x10 - val; -- goto update_reg_info; -- -- case UNW_DYN_SPILL_SP_REL: -- memory = 1; -- where = IA64_WHERE_SPREL; -- goto update_reg_info; -- -- case UNW_DYN_ADD: -- if (op->reg == UNW_IA64_SP) -- { -- if (val & 0xf) -- { -- dprintf ("%s: frame-size %ld not an integer " -- "multiple of 16\n", -- __FUNCTION__, (long) op->val); -- return -UNW_EINVAL; -- } -- desc_mem_stack_f (when, -((int64_t) val / 16), sr); -- } -- else -- { -- dprintf ("%s: can only ADD to stack-pointer\n", -- __FUNCTION__); -- return -UNW_EBADREG; -- } -- break; -- -- case UNW_DYN_POP_FRAMES: -- sr->when_sp_restored = when; -- sr->epilogue_count = op->val; -- break; -- -- case UNW_DYN_LABEL_STATE: -- desc_label_state (op->val, sr); -- break; -- -- case UNW_DYN_COPY_STATE: -- desc_copy_state (op->val, sr); -- break; -- -- case UNW_DYN_ALIAS: -- if ((ret = desc_alias (op, c, sr)) < 0) -- return ret; -- -- case UNW_DYN_STOP: -- goto end_of_ops; -- } -- } -+ { -+ when = op->when; -+ val = op->val; -+ qp = op->qp; -+ -+ if (!desc_is_active (qp, when, sr)) -+ continue; -+ -+ when = sr->region_start + MIN ((int) when, sr->region_len - 1); -+ -+ switch (op->tag) -+ { -+ case UNW_DYN_SAVE_REG: -+ memory = 0; -+ if ((unsigned) (val - UNW_IA64_GR) < 128) -+ where = IA64_WHERE_GR; -+ else if ((unsigned) (val - UNW_IA64_FR) < 128) -+ where = IA64_WHERE_FR; -+ else if ((unsigned) (val - UNW_IA64_BR) < 8) -+ where = IA64_WHERE_BR; -+ else -+ { -+ Dprintf ("%s: can't save to register number %d\n", -+ __FUNCTION__, (int) op->reg); -+ return -UNW_EBADREG; -+ } -+ /* fall through */ -+ update_reg_info: -+ ri = lookup_preg (op->reg, memory, sr); -+ if (!ri) -+ return -UNW_EBADREG; -+ ri->where = where; -+ ri->when = when; -+ ri->val = val; -+ break; -+ -+ case UNW_DYN_SPILL_FP_REL: -+ memory = 1; -+ where = IA64_WHERE_PSPREL; -+ val = 0x10 - val; -+ goto update_reg_info; -+ -+ case UNW_DYN_SPILL_SP_REL: -+ memory = 1; -+ where = IA64_WHERE_SPREL; -+ goto update_reg_info; -+ -+ case UNW_DYN_ADD: -+ if (op->reg == UNW_IA64_SP) -+ { -+ if (val & 0xf) -+ { -+ Dprintf ("%s: frame-size %ld not an integer " -+ "multiple of 16\n", -+ __FUNCTION__, (long) op->val); -+ return -UNW_EINVAL; -+ } -+ desc_mem_stack_f (when, -((int64_t) val / 16), sr); -+ } -+ else -+ { -+ Dprintf ("%s: can only ADD to stack-pointer\n", -+ __FUNCTION__); -+ return -UNW_EBADREG; -+ } -+ break; -+ -+ case UNW_DYN_POP_FRAMES: -+ sr->when_sp_restored = when; -+ sr->epilogue_count = op->val; -+ break; -+ -+ case UNW_DYN_LABEL_STATE: -+ desc_label_state (op->val, sr); -+ break; -+ -+ case UNW_DYN_COPY_STATE: -+ desc_copy_state (op->val, sr); -+ break; -+ -+ case UNW_DYN_ALIAS: -+ if ((ret = desc_alias (op, c, sr)) < 0) -+ return ret; -+ -+ case UNW_DYN_STOP: -+ goto end_of_ops; -+ } -+ } - end_of_ops: - ; - } - return 0; - } - #else --# define parse_dynamic(c,sr) (-UNW_EINVAL) -+# define parse_dynamic(c,sr) (-UNW_EINVAL) - #endif /* _U_dyn_op */ - - -@@ -928,7 +928,7 @@ ia64_fetch_proc_info (struct cursor *c, unw_word_t ip, int need_unwind_info) - - /* check dynamic info first --- it overrides everything else */ - ret = unwi_find_dynamic_proc_info (c->as, ip, &c->pi, need_unwind_info, -- c->as_arg); -+ c->as_arg); - if (ret == -UNW_ENOINFO) - { - dynamic = 0; -@@ -954,7 +954,7 @@ put_unwind_info (struct cursor *c, unw_proc_info_t *pi) - - static int - create_state_record_for (struct cursor *c, struct ia64_state_record *sr, -- unw_word_t ip) -+ unw_word_t ip) - { - unw_word_t predicates = c->pr; - struct ia64_reg_info *r; -@@ -975,7 +975,7 @@ create_state_record_for (struct cursor *c, struct ia64_state_record *sr, - /* No info, return default unwinder (leaf proc, no mem stack, no - saved regs), rp in b0, pfs in ar.pfs. */ - Debug (1, "no unwind info for ip=0x%lx (gp=%lx)\n", -- (long) ip, (long) c->pi.gp); -+ (long) ip, (long) c->pi.gp); - sr->curr.reg[IA64_REG_IP].where = IA64_WHERE_BR; - sr->curr.reg[IA64_REG_IP].when = -1; - sr->curr.reg[IA64_REG_IP].val = 0; -@@ -983,7 +983,7 @@ create_state_record_for (struct cursor *c, struct ia64_state_record *sr, - } - - sr->when_target = (3 * ((ip & ~(unw_word_t) 0xf) - c->pi.start_ip) / 16 -- + (ip & 0xf)); -+ + (ip & 0xf)); - - switch (c->pi.format) - { -@@ -992,7 +992,7 @@ create_state_record_for (struct cursor *c, struct ia64_state_record *sr, - dp = c->pi.unwind_info; - desc_end = dp + c->pi.unwind_info_size; - while (!sr->done && dp < desc_end) -- dp = unw_decode (dp, sr->in_body, sr); -+ dp = unw_decode (dp, sr->in_body, sr); - ret = 0; - break; - -@@ -1012,18 +1012,18 @@ create_state_record_for (struct cursor *c, struct ia64_state_record *sr, - if (sr->when_target > sr->when_sp_restored) - { - /* sp has been restored and all values on the memory stack below -- psp also have been restored. */ -+ psp also have been restored. */ - sr->curr.reg[IA64_REG_PSP].val = 0; - sr->curr.reg[IA64_REG_PSP].where = IA64_WHERE_NONE; - sr->curr.reg[IA64_REG_PSP].when = IA64_WHEN_NEVER; - for (r = sr->curr.reg; r < sr->curr.reg + IA64_NUM_PREGS; ++r) -- if ((r->where == IA64_WHERE_PSPREL && r->val <= 0x10) -- || r->where == IA64_WHERE_SPREL) -- { -- r->val = 0; -- r->where = IA64_WHERE_NONE; -- r->when = IA64_WHEN_NEVER; -- } -+ if ((r->where == IA64_WHERE_PSPREL && r->val <= 0x10) -+ || r->where == IA64_WHERE_SPREL) -+ { -+ r->val = 0; -+ r->where = IA64_WHERE_NONE; -+ r->when = IA64_WHEN_NEVER; -+ } - } - - /* If RP did't get saved, generate entry for the return link -@@ -1040,49 +1040,49 @@ create_state_record_for (struct cursor *c, struct ia64_state_record *sr, - && sr->when_target > sr->curr.reg[IA64_REG_RNAT].when) - { - Debug (8, "func 0x%lx may switch the register-backing-store\n", -- c->pi.start_ip); -+ c->pi.start_ip); - c->pi.flags |= UNW_PI_FLAG_IA64_RBS_SWITCH; - } - out: - #if UNW_DEBUG - if (unwi_debug_level > 2) - { -- dprintf ("%s: state record for func 0x%lx, t=%u (flags=0x%lx):\n", -- __FUNCTION__, -- (long) c->pi.start_ip, sr->when_target, (long) c->pi.flags); -+ Dprintf ("%s: state record for func 0x%lx, t=%u (flags=0x%lx):\n", -+ __FUNCTION__, -+ (long) c->pi.start_ip, sr->when_target, (long) c->pi.flags); - for (r = sr->curr.reg; r < sr->curr.reg + IA64_NUM_PREGS; ++r) -- { -- if (r->where != IA64_WHERE_NONE || r->when != IA64_WHEN_NEVER) -- { -- dprintf (" %s <- ", unw.preg_name[r - sr->curr.reg]); -- switch (r->where) -- { -- case IA64_WHERE_GR: -- dprintf ("r%lu", (long) r->val); -- break; -- case IA64_WHERE_FR: -- dprintf ("f%lu", (long) r->val); -- break; -- case IA64_WHERE_BR: -- dprintf ("b%lu", (long) r->val); -- break; -- case IA64_WHERE_SPREL: -- dprintf ("[sp+0x%lx]", (long) r->val); -- break; -- case IA64_WHERE_PSPREL: -- dprintf ("[psp+0x%lx]", (long) r->val); -- break; -- case IA64_WHERE_NONE: -- dprintf ("%s+0x%lx", -- unw.preg_name[r - sr->curr.reg], (long) r->val); -- break; -- default: -- dprintf ("BADWHERE(%d)", r->where); -- break; -- } -- dprintf ("\t\t%d\n", r->when); -- } -- } -+ { -+ if (r->where != IA64_WHERE_NONE || r->when != IA64_WHEN_NEVER) -+ { -+ Dprintf (" %s <- ", unw.preg_name[r - sr->curr.reg]); -+ switch (r->where) -+ { -+ case IA64_WHERE_GR: -+ Dprintf ("r%lu", (long) r->val); -+ break; -+ case IA64_WHERE_FR: -+ Dprintf ("f%lu", (long) r->val); -+ break; -+ case IA64_WHERE_BR: -+ Dprintf ("b%lu", (long) r->val); -+ break; -+ case IA64_WHERE_SPREL: -+ Dprintf ("[sp+0x%lx]", (long) r->val); -+ break; -+ case IA64_WHERE_PSPREL: -+ Dprintf ("[psp+0x%lx]", (long) r->val); -+ break; -+ case IA64_WHERE_NONE: -+ Dprintf ("%s+0x%lx", -+ unw.preg_name[r - sr->curr.reg], (long) r->val); -+ break; -+ default: -+ Dprintf ("BADWHERE(%d)", r->where); -+ break; -+ } -+ Dprintf ("\t\t%d\n", r->when); -+ } -+ } - } - #endif - return 0; -@@ -1123,9 +1123,9 @@ ia64_make_proc_info (struct cursor *c) - { - /* Lookup it up the slow way... */ - if ((ret = ia64_fetch_proc_info (c, c->ip, 0)) < 0) -- return ret; -+ return ret; - if (caching) -- ia64_cache_proc_info (c); -+ ia64_cache_proc_info (c); - } - return 0; - } -diff --git a/frysk-imports/libunwind/src/ia64/Grbs.c b/frysk-imports/libunwind/src/ia64/Grbs.c -index 4230cf3..e7c01fe 100644 ---- a/frysk-imports/libunwind/src/ia64/Grbs.c -+++ b/frysk-imports/libunwind/src/ia64/Grbs.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -62,7 +62,7 @@ ia64_strloc (ia64_loc_t loc) - sprintf (buf + strlen (buf), "%s", unw_regname (IA64_GET_REG (loc))); - else - sprintf (buf + strlen (buf), "0x%llx", -- (unsigned long long) IA64_GET_ADDR (loc)); -+ (unsigned long long) IA64_GET_ADDR (loc)); - - if (IA64_IS_FP_LOC (loc)) - strcat (buf, ")"); -@@ -78,8 +78,8 @@ ia64_strloc (ia64_loc_t loc) - - HIDDEN int - rbs_switch (struct cursor *c, -- unw_word_t saved_bsp, unw_word_t saved_bspstore, -- ia64_loc_t saved_rnat_loc) -+ unw_word_t saved_bsp, unw_word_t saved_bspstore, -+ ia64_loc_t saved_rnat_loc) - { - struct rbs_area *rbs = &c->rbs_area[c->rbs_curr]; - unw_word_t lo, ndirty, rbs_base; -@@ -98,13 +98,13 @@ rbs_switch (struct cursor *c, - if (rbs->size) - { - Debug (10, "inner=[0x%lx-0x%lx)\n", -- (long) (rbs->end - rbs->size), (long) rbs->end); -+ (long) (rbs->end - rbs->size), (long) rbs->end); - - c->rbs_curr = (c->rbs_curr + 1) % ARRAY_SIZE (c->rbs_area); - rbs = c->rbs_area + c->rbs_curr; - - if (c->rbs_curr == c->rbs_left_edge) -- c->rbs_left_edge = (c->rbs_left_edge + 1) % ARRAY_SIZE (c->rbs_area); -+ c->rbs_left_edge = (c->rbs_left_edge + 1) % ARRAY_SIZE (c->rbs_area); - } - - if ((ret = rbs_get_base (c, saved_bspstore, &rbs_base)) < 0) -@@ -117,13 +117,13 @@ rbs_switch (struct cursor *c, - c->bsp = saved_bsp; - - Debug (10, "outer=[0x%llx-0x%llx), rnat@%s\n", (long long) rbs_base, -- (long long) rbs->end, ia64_strloc (rbs->rnat_loc)); -+ (long long) rbs->end, ia64_strloc (rbs->rnat_loc)); - return 0; - } - - HIDDEN int - rbs_find_stacked (struct cursor *c, unw_word_t regs_to_skip, -- ia64_loc_t *locp, ia64_loc_t *rnat_locp) -+ ia64_loc_t *locp, ia64_loc_t *rnat_locp) - { - unw_word_t nregs, bsp = c->bsp, curr = c->rbs_curr, n; - unw_word_t left_edge = c->rbs_left_edge; -@@ -134,10 +134,10 @@ rbs_find_stacked (struct cursor *c, unw_word_t regs_to_skip, - while (!rbs_contains (&c->rbs_area[curr], bsp)) - { - if (curr == left_edge) -- { -- Debug (1, "could not find register r%d!\n", reg); -- return -UNW_EBADREG; -- } -+ { -+ Debug (1, "could not find register r%d!\n", reg); -+ return -UNW_EBADREG; -+ } - - n = rse_num_regs (c->rbs_area[curr].end, bsp); - curr = (curr + ARRAY_SIZE (c->rbs_area) - 1) % ARRAY_SIZE (c->rbs_area); -@@ -149,23 +149,23 @@ rbs_find_stacked (struct cursor *c, unw_word_t regs_to_skip, - nregs = rse_num_regs (bsp, c->rbs_area[curr].end); - - if (regs_to_skip < nregs) -- { -- /* found it: */ -- unw_word_t addr; -- -- addr = rse_skip_regs (bsp, regs_to_skip); -- if (locp) -- *locp = rbs_loc (c->rbs_area + curr, addr); -- if (rnat_locp) -- *rnat_locp = rbs_get_rnat_loc (c->rbs_area + curr, addr); -- return 0; -- } -+ { -+ /* found it: */ -+ unw_word_t addr; -+ -+ addr = rse_skip_regs (bsp, regs_to_skip); -+ if (locp) -+ *locp = rbs_loc (c->rbs_area + curr, addr); -+ if (rnat_locp) -+ *rnat_locp = rbs_get_rnat_loc (c->rbs_area + curr, addr); -+ return 0; -+ } - - if (curr == left_edge) -- { -- Debug (1, "could not find register r%d!\n", reg); -- return -UNW_EBADREG; -- } -+ { -+ Debug (1, "could not find register r%d!\n", reg); -+ return -UNW_EBADREG; -+ } - - regs_to_skip -= nregs; - -@@ -178,7 +178,7 @@ rbs_find_stacked (struct cursor *c, unw_word_t regs_to_skip, - - static inline int - get_rnat (struct cursor *c, struct rbs_area *rbs, unw_word_t bsp, -- unw_word_t *__restrict rnatp) -+ unw_word_t *__restrict rnatp) - { - ia64_loc_t rnat_locp = rbs_get_rnat_loc (rbs, bsp); - -@@ -197,8 +197,8 @@ get_rnat (struct cursor *c, struct rbs_area *rbs, unw_word_t bsp, - Note: This does not modify the rbs_area[] structure in any way. */ - HIDDEN int - rbs_cover_and_flush (struct cursor *c, unw_word_t nregs, -- unw_word_t *dirty_partition, unw_word_t *dirty_rnat, -- unw_word_t *bspstore) -+ unw_word_t *dirty_partition, unw_word_t *dirty_rnat, -+ unw_word_t *bspstore) - { - unw_word_t n, src_mask, dst_mask, bsp, *dst, src_rnat, dst_rnat = 0; - unw_word_t curr = c->rbs_curr, left_edge = c->rbs_left_edge; -@@ -213,23 +213,23 @@ rbs_cover_and_flush (struct cursor *c, unw_word_t nregs, - /* at least _some_ registers are on rbs... */ - n = rse_num_regs (bsp, rbs->end); - if (likely (n >= nregs)) -- { -- /* common case #1: all registers are on current rbs... */ -- /* got lucky: _all_ registers are on rbs... */ -- ia64_loc_t rnat_loc = rbs_get_rnat_loc (rbs, c->bsp); -- -- *bspstore = c->bsp; -- -- if (IA64_IS_REG_LOC (rnat_loc)) -- { -- unw_word_t rnat_addr = (unw_word_t) -- tdep_uc_addr (c->as_arg, UNW_IA64_AR_RNAT, NULL); -- rnat_loc = IA64_LOC_ADDR (rnat_addr, 0); -- } -- c->loc[IA64_REG_RNAT] = rnat_loc; -- return 0; /* all done */ -- } -- nregs -= n; /* account for registers already on the rbs */ -+ { -+ /* common case #1: all registers are on current rbs... */ -+ /* got lucky: _all_ registers are on rbs... */ -+ ia64_loc_t rnat_loc = rbs_get_rnat_loc (rbs, c->bsp); -+ -+ *bspstore = c->bsp; -+ -+ if (IA64_IS_REG_LOC (rnat_loc)) -+ { -+ unw_word_t rnat_addr = (unw_word_t) -+ tdep_uc_addr (c->as_arg, UNW_IA64_AR_RNAT, NULL); -+ rnat_loc = IA64_LOC_ADDR (rnat_addr, 0); -+ } -+ c->loc[IA64_REG_RNAT] = rnat_loc; -+ return 0; /* all done */ -+ } -+ nregs -= n; /* account for registers already on the rbs */ - - assert (rse_skip_regs (c->bsp, -nregs) == rse_skip_regs (rbs->end, 0)); - } -@@ -249,54 +249,54 @@ rbs_cover_and_flush (struct cursor *c, unw_word_t nregs, - while (nregs > 0) - { - if (unlikely (!rbs_contains (rbs, bsp))) -- { -- /* switch to next non-empty rbs-area: */ -- do -- { -- if (curr == left_edge) -- { -- Debug (0, "rbs-underflow while flushing %lu regs, " -- "bsp=0x%lx, dst=0x%p\n", (unsigned long) nregs, -- (unsigned long) bsp, dst); -- return -UNW_EBADREG; -- } -- -- assert (rse_num_regs (rbs->end, bsp) == 0); -- -- curr = (curr + ARRAY_SIZE (c->rbs_area) - 1) -- % ARRAY_SIZE (c->rbs_area); -- rbs = c->rbs_area + curr; -- bsp = rbs->end - rbs->size; -- } -- while (rbs->size == 0); -- -- if ((ret = get_rnat (c, rbs, bsp, &src_rnat)) < 0) -- return ret; -- } -+ { -+ /* switch to next non-empty rbs-area: */ -+ do -+ { -+ if (curr == left_edge) -+ { -+ Debug (0, "rbs-underflow while flushing %lu regs, " -+ "bsp=0x%lx, dst=0x%p\n", (unsigned long) nregs, -+ (unsigned long) bsp, dst); -+ return -UNW_EBADREG; -+ } -+ -+ assert (rse_num_regs (rbs->end, bsp) == 0); -+ -+ curr = (curr + ARRAY_SIZE (c->rbs_area) - 1) -+ % ARRAY_SIZE (c->rbs_area); -+ rbs = c->rbs_area + curr; -+ bsp = rbs->end - rbs->size; -+ } -+ while (rbs->size == 0); -+ -+ if ((ret = get_rnat (c, rbs, bsp, &src_rnat)) < 0) -+ return ret; -+ } - - if (unlikely (rse_is_rnat_slot (bsp))) -- { -- bsp += 8; -- if ((ret = get_rnat (c, rbs, bsp, &src_rnat)) < 0) -- return ret; -- } -+ { -+ bsp += 8; -+ if ((ret = get_rnat (c, rbs, bsp, &src_rnat)) < 0) -+ return ret; -+ } - if (unlikely (rse_is_rnat_slot ((unw_word_t) dst))) -- { -- *dst++ = dst_rnat; -- dst_rnat = 0; -- } -+ { -+ *dst++ = dst_rnat; -+ dst_rnat = 0; -+ } - - src_mask = ((unw_word_t) 1) << rse_slot_num (bsp); - dst_mask = ((unw_word_t) 1) << rse_slot_num ((unw_word_t) dst); - - if (src_rnat & src_mask) -- dst_rnat |= dst_mask; -+ dst_rnat |= dst_mask; - else -- dst_rnat &= ~dst_mask; -+ dst_rnat &= ~dst_mask; - - /* copy one slot: */ - if ((ret = ia64_get (c, rbs_loc (rbs, bsp), dst)) < 0) -- return ret; -+ return ret; - - /* advance to next slot: */ - --nregs; -@@ -306,9 +306,9 @@ rbs_cover_and_flush (struct cursor *c, unw_word_t nregs, - if (unlikely (rse_is_rnat_slot ((unw_word_t) dst))) - { - /* The LOADRS instruction loads "the N bytes below the current -- BSP" but BSP can never point to an RNaT slot so if the last -- destination word happens to be an RNaT slot, we need to write -- that slot now. */ -+ BSP" but BSP can never point to an RNaT slot so if the last -+ destination word happens to be an RNaT slot, we need to write -+ that slot now. */ - *dst++ = dst_rnat; - dst_rnat = 0; - } -diff --git a/frysk-imports/libunwind/src/ia64/Gregs.c b/frysk-imports/libunwind/src/ia64/Gregs.c -index f3e4075..ac6f738 100644 ---- a/frysk-imports/libunwind/src/ia64/Gregs.c -+++ b/frysk-imports/libunwind/src/ia64/Gregs.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -38,60 +38,60 @@ linux_scratch_loc (struct cursor *c, unw_regnum_t reg, uint8_t *nat_bitnr) - || ia64_get_abi_marker (c) == ABI_MARKER_OLD_LINUX_SIGTRAMP) - { - switch (reg) -- { -- case UNW_IA64_NAT + 2 ... UNW_IA64_NAT + 3: -- case UNW_IA64_NAT + 8 ... UNW_IA64_NAT + 31: -- /* Linux sigcontext contains the NaT bit of scratch register -- N in bit position N of the sc_nat member. */ -- *nat_bitnr = (reg - UNW_IA64_NAT); -- addr += LINUX_SC_NAT_OFF; -- break; -- -- case UNW_IA64_GR + 2 ... UNW_IA64_GR + 3: -- case UNW_IA64_GR + 8 ... UNW_IA64_GR + 31: -- addr += LINUX_SC_GR_OFF + 8 * (reg - UNW_IA64_GR); -- break; -- -- case UNW_IA64_FR + 6 ... UNW_IA64_FR + 15: -- addr += LINUX_SC_FR_OFF + 16 * (reg - UNW_IA64_FR); -- return IA64_LOC_ADDR (addr, IA64_LOC_TYPE_FP); -- -- case UNW_IA64_FR + 32 ... UNW_IA64_FR + 127: -- if (ia64_get (c, IA64_LOC_ADDR (addr + LINUX_SC_FLAGS_OFF, 0), -- &flags) < 0) -- return IA64_NULL_LOC; -- -- if (!(flags & IA64_SC_FLAG_FPH_VALID)) -- { -- /* initialize fph partition: */ -- tmp_addr = addr + LINUX_SC_FR_OFF + 32*16; -- for (i = 32; i < 128; ++i, tmp_addr += 16) -- if (ia64_putfp (c, IA64_LOC_ADDR (tmp_addr, 0), -- unw.read_only.f0) < 0) -- return IA64_NULL_LOC; -- /* mark fph partition as valid: */ -- if (ia64_put (c, IA64_LOC_ADDR (addr + LINUX_SC_FLAGS_OFF, 0), -- flags | IA64_SC_FLAG_FPH_VALID) < 0) -- return IA64_NULL_LOC; -- } -- -- addr += LINUX_SC_FR_OFF + 16 * (reg - UNW_IA64_FR); -- return IA64_LOC_ADDR (addr, IA64_LOC_TYPE_FP); -- -- case UNW_IA64_BR + 0: addr += LINUX_SC_BR_OFF + 0; break; -- case UNW_IA64_BR + 6: addr += LINUX_SC_BR_OFF + 6*8; break; -- case UNW_IA64_BR + 7: addr += LINUX_SC_BR_OFF + 7*8; break; -- case UNW_IA64_AR_RSC: addr += LINUX_SC_AR_RSC_OFF; break; -- case UNW_IA64_AR_CSD: addr += LINUX_SC_AR_CSD_OFF; break; -- case UNW_IA64_AR_SSD: addr += LINUX_SC_AR_SSD_OFF; break; -- case UNW_IA64_AR_CCV: addr += LINUX_SC_AR_CCV; break; -- -- default: -- if (unw_is_fpreg (reg)) -- return IA64_FPREG_LOC (c, reg); -- else -- return IA64_REG_LOC (c, reg); -- } -+ { -+ case UNW_IA64_NAT + 2 ... UNW_IA64_NAT + 3: -+ case UNW_IA64_NAT + 8 ... UNW_IA64_NAT + 31: -+ /* Linux sigcontext contains the NaT bit of scratch register -+ N in bit position N of the sc_nat member. */ -+ *nat_bitnr = (reg - UNW_IA64_NAT); -+ addr += LINUX_SC_NAT_OFF; -+ break; -+ -+ case UNW_IA64_GR + 2 ... UNW_IA64_GR + 3: -+ case UNW_IA64_GR + 8 ... UNW_IA64_GR + 31: -+ addr += LINUX_SC_GR_OFF + 8 * (reg - UNW_IA64_GR); -+ break; -+ -+ case UNW_IA64_FR + 6 ... UNW_IA64_FR + 15: -+ addr += LINUX_SC_FR_OFF + 16 * (reg - UNW_IA64_FR); -+ return IA64_LOC_ADDR (addr, IA64_LOC_TYPE_FP); -+ -+ case UNW_IA64_FR + 32 ... UNW_IA64_FR + 127: -+ if (ia64_get (c, IA64_LOC_ADDR (addr + LINUX_SC_FLAGS_OFF, 0), -+ &flags) < 0) -+ return IA64_NULL_LOC; -+ -+ if (!(flags & IA64_SC_FLAG_FPH_VALID)) -+ { -+ /* initialize fph partition: */ -+ tmp_addr = addr + LINUX_SC_FR_OFF + 32*16; -+ for (i = 32; i < 128; ++i, tmp_addr += 16) -+ if (ia64_putfp (c, IA64_LOC_ADDR (tmp_addr, 0), -+ unw.read_only.f0) < 0) -+ return IA64_NULL_LOC; -+ /* mark fph partition as valid: */ -+ if (ia64_put (c, IA64_LOC_ADDR (addr + LINUX_SC_FLAGS_OFF, 0), -+ flags | IA64_SC_FLAG_FPH_VALID) < 0) -+ return IA64_NULL_LOC; -+ } -+ -+ addr += LINUX_SC_FR_OFF + 16 * (reg - UNW_IA64_FR); -+ return IA64_LOC_ADDR (addr, IA64_LOC_TYPE_FP); -+ -+ case UNW_IA64_BR + 0: addr += LINUX_SC_BR_OFF + 0; break; -+ case UNW_IA64_BR + 6: addr += LINUX_SC_BR_OFF + 6*8; break; -+ case UNW_IA64_BR + 7: addr += LINUX_SC_BR_OFF + 7*8; break; -+ case UNW_IA64_AR_RSC: addr += LINUX_SC_AR_RSC_OFF; break; -+ case UNW_IA64_AR_CSD: addr += LINUX_SC_AR_CSD_OFF; break; -+ case UNW_IA64_AR_SSD: addr += LINUX_SC_AR_SSD_OFF; break; -+ case UNW_IA64_AR_CCV: addr += LINUX_SC_AR_CCV; break; -+ -+ default: -+ if (unw_is_fpreg (reg)) -+ return IA64_FPREG_LOC (c, reg); -+ else -+ return IA64_REG_LOC (c, reg); -+ } - return IA64_LOC_ADDR (addr, 0); - } - else -@@ -99,120 +99,120 @@ linux_scratch_loc (struct cursor *c, unw_regnum_t reg, uint8_t *nat_bitnr) - int is_nat = 0; - - if ((unsigned) (reg - UNW_IA64_NAT) < 128) -- { -- is_nat = 1; -- reg -= (UNW_IA64_NAT - UNW_IA64_GR); -- } -+ { -+ is_nat = 1; -+ reg -= (UNW_IA64_NAT - UNW_IA64_GR); -+ } - if (ia64_get_abi_marker (c) == ABI_MARKER_LINUX_INTERRUPT) -- { -- switch (reg) -- { -- case UNW_IA64_BR + 6 ... UNW_IA64_BR + 7: -- addr += LINUX_PT_B6_OFF + 8 * (reg - (UNW_IA64_BR + 6)); -- break; -- -- case UNW_IA64_AR_CSD: addr += LINUX_PT_CSD_OFF; break; -- case UNW_IA64_AR_SSD: addr += LINUX_PT_SSD_OFF; break; -- -- case UNW_IA64_GR + 8 ... UNW_IA64_GR + 11: -- addr += LINUX_PT_R8_OFF + 8 * (reg - (UNW_IA64_GR + 8)); -- break; -- -- case UNW_IA64_IP: addr += LINUX_PT_IIP_OFF; break; -- case UNW_IA64_CFM: addr += LINUX_PT_IFS_OFF; break; -- case UNW_IA64_AR_UNAT: addr += LINUX_PT_UNAT_OFF; break; -- case UNW_IA64_AR_PFS: addr += LINUX_PT_PFS_OFF; break; -- case UNW_IA64_AR_RSC: addr += LINUX_PT_RSC_OFF; break; -- case UNW_IA64_AR_RNAT: addr += LINUX_PT_RNAT_OFF; break; -- case UNW_IA64_AR_BSPSTORE: addr += LINUX_PT_BSPSTORE_OFF; break; -- case UNW_IA64_PR: addr += LINUX_PT_PR_OFF; break; -- case UNW_IA64_BR + 0: addr += LINUX_PT_B0_OFF; break; -- -- case UNW_IA64_GR + 1: -- /* The saved r1 value is valid only in the frame in which -- it was saved; for everything else we need to look up -- the appropriate gp value. */ -- if (c->sigcontext_addr != c->sp + 0x10) -- return IA64_NULL_LOC; -- addr += LINUX_PT_R1_OFF; -- break; -- -- case UNW_IA64_GR + 12: addr += LINUX_PT_R12_OFF; break; -- case UNW_IA64_GR + 13: addr += LINUX_PT_R13_OFF; break; -- case UNW_IA64_AR_FPSR: addr += LINUX_PT_FPSR_OFF; break; -- case UNW_IA64_GR + 15: addr += LINUX_PT_R15_OFF; break; -- case UNW_IA64_GR + 14: addr += LINUX_PT_R14_OFF; break; -- case UNW_IA64_GR + 2: addr += LINUX_PT_R2_OFF; break; -- case UNW_IA64_GR + 3: addr += LINUX_PT_R3_OFF; break; -- -- case UNW_IA64_GR + 16 ... UNW_IA64_GR + 31: -- addr += LINUX_PT_R16_OFF + 8 * (reg - (UNW_IA64_GR + 16)); -- break; -- -- case UNW_IA64_AR_CCV: addr += LINUX_PT_CCV_OFF; break; -- -- case UNW_IA64_FR + 6 ... UNW_IA64_FR + 11: -- addr += LINUX_PT_F6_OFF + 16 * (reg - (UNW_IA64_FR + 6)); -- return IA64_LOC_ADDR (addr, IA64_LOC_TYPE_FP); -- -- default: -- if (unw_is_fpreg (reg)) -- return IA64_FPREG_LOC (c, reg); -- else -- return IA64_REG_LOC (c, reg); -- } -- } -+ { -+ switch (reg) -+ { -+ case UNW_IA64_BR + 6 ... UNW_IA64_BR + 7: -+ addr += LINUX_PT_B6_OFF + 8 * (reg - (UNW_IA64_BR + 6)); -+ break; -+ -+ case UNW_IA64_AR_CSD: addr += LINUX_PT_CSD_OFF; break; -+ case UNW_IA64_AR_SSD: addr += LINUX_PT_SSD_OFF; break; -+ -+ case UNW_IA64_GR + 8 ... UNW_IA64_GR + 11: -+ addr += LINUX_PT_R8_OFF + 8 * (reg - (UNW_IA64_GR + 8)); -+ break; -+ -+ case UNW_IA64_IP: addr += LINUX_PT_IIP_OFF; break; -+ case UNW_IA64_CFM: addr += LINUX_PT_IFS_OFF; break; -+ case UNW_IA64_AR_UNAT: addr += LINUX_PT_UNAT_OFF; break; -+ case UNW_IA64_AR_PFS: addr += LINUX_PT_PFS_OFF; break; -+ case UNW_IA64_AR_RSC: addr += LINUX_PT_RSC_OFF; break; -+ case UNW_IA64_AR_RNAT: addr += LINUX_PT_RNAT_OFF; break; -+ case UNW_IA64_AR_BSPSTORE: addr += LINUX_PT_BSPSTORE_OFF; break; -+ case UNW_IA64_PR: addr += LINUX_PT_PR_OFF; break; -+ case UNW_IA64_BR + 0: addr += LINUX_PT_B0_OFF; break; -+ -+ case UNW_IA64_GR + 1: -+ /* The saved r1 value is valid only in the frame in which -+ it was saved; for everything else we need to look up -+ the appropriate gp value. */ -+ if (c->sigcontext_addr != c->sp + 0x10) -+ return IA64_NULL_LOC; -+ addr += LINUX_PT_R1_OFF; -+ break; -+ -+ case UNW_IA64_GR + 12: addr += LINUX_PT_R12_OFF; break; -+ case UNW_IA64_GR + 13: addr += LINUX_PT_R13_OFF; break; -+ case UNW_IA64_AR_FPSR: addr += LINUX_PT_FPSR_OFF; break; -+ case UNW_IA64_GR + 15: addr += LINUX_PT_R15_OFF; break; -+ case UNW_IA64_GR + 14: addr += LINUX_PT_R14_OFF; break; -+ case UNW_IA64_GR + 2: addr += LINUX_PT_R2_OFF; break; -+ case UNW_IA64_GR + 3: addr += LINUX_PT_R3_OFF; break; -+ -+ case UNW_IA64_GR + 16 ... UNW_IA64_GR + 31: -+ addr += LINUX_PT_R16_OFF + 8 * (reg - (UNW_IA64_GR + 16)); -+ break; -+ -+ case UNW_IA64_AR_CCV: addr += LINUX_PT_CCV_OFF; break; -+ -+ case UNW_IA64_FR + 6 ... UNW_IA64_FR + 11: -+ addr += LINUX_PT_F6_OFF + 16 * (reg - (UNW_IA64_FR + 6)); -+ return IA64_LOC_ADDR (addr, IA64_LOC_TYPE_FP); -+ -+ default: -+ if (unw_is_fpreg (reg)) -+ return IA64_FPREG_LOC (c, reg); -+ else -+ return IA64_REG_LOC (c, reg); -+ } -+ } - else if (ia64_get_abi_marker (c) == ABI_MARKER_OLD_LINUX_INTERRUPT) -- { -- switch (reg) -- { -- case UNW_IA64_GR + 1: -- /* The saved r1 value is valid only in the frame in which -- it was saved; for everything else we need to look up -- the appropriate gp value. */ -- if (c->sigcontext_addr != c->sp + 0x10) -- return IA64_NULL_LOC; -- addr += LINUX_OLD_PT_R1_OFF; -- break; -- -- case UNW_IA64_GR + 2 ... UNW_IA64_GR + 3: -- addr += LINUX_OLD_PT_R2_OFF + 8 * (reg - (UNW_IA64_GR + 2)); -- break; -- -- case UNW_IA64_GR + 8 ... UNW_IA64_GR + 11: -- addr += LINUX_OLD_PT_R8_OFF + 8 * (reg - (UNW_IA64_GR + 8)); -- break; -- -- case UNW_IA64_GR + 16 ... UNW_IA64_GR + 31: -- addr += LINUX_OLD_PT_R16_OFF + 8 * (reg - (UNW_IA64_GR + 16)); -- break; -- -- case UNW_IA64_FR + 6 ... UNW_IA64_FR + 9: -- addr += LINUX_OLD_PT_F6_OFF + 16 * (reg - (UNW_IA64_FR + 6)); -- return IA64_LOC_ADDR (addr, IA64_LOC_TYPE_FP); -- -- case UNW_IA64_BR + 0: addr += LINUX_OLD_PT_B0_OFF; break; -- case UNW_IA64_BR + 6: addr += LINUX_OLD_PT_B6_OFF; break; -- case UNW_IA64_BR + 7: addr += LINUX_OLD_PT_B7_OFF; break; -- -- case UNW_IA64_AR_RSC: addr += LINUX_OLD_PT_RSC_OFF; break; -- case UNW_IA64_AR_CCV: addr += LINUX_OLD_PT_CCV_OFF; break; -- -- default: -- if (unw_is_fpreg (reg)) -- return IA64_FPREG_LOC (c, reg); -- else -- return IA64_REG_LOC (c, reg); -- } -- } -+ { -+ switch (reg) -+ { -+ case UNW_IA64_GR + 1: -+ /* The saved r1 value is valid only in the frame in which -+ it was saved; for everything else we need to look up -+ the appropriate gp value. */ -+ if (c->sigcontext_addr != c->sp + 0x10) -+ return IA64_NULL_LOC; -+ addr += LINUX_OLD_PT_R1_OFF; -+ break; -+ -+ case UNW_IA64_GR + 2 ... UNW_IA64_GR + 3: -+ addr += LINUX_OLD_PT_R2_OFF + 8 * (reg - (UNW_IA64_GR + 2)); -+ break; -+ -+ case UNW_IA64_GR + 8 ... UNW_IA64_GR + 11: -+ addr += LINUX_OLD_PT_R8_OFF + 8 * (reg - (UNW_IA64_GR + 8)); -+ break; -+ -+ case UNW_IA64_GR + 16 ... UNW_IA64_GR + 31: -+ addr += LINUX_OLD_PT_R16_OFF + 8 * (reg - (UNW_IA64_GR + 16)); -+ break; -+ -+ case UNW_IA64_FR + 6 ... UNW_IA64_FR + 9: -+ addr += LINUX_OLD_PT_F6_OFF + 16 * (reg - (UNW_IA64_FR + 6)); -+ return IA64_LOC_ADDR (addr, IA64_LOC_TYPE_FP); -+ -+ case UNW_IA64_BR + 0: addr += LINUX_OLD_PT_B0_OFF; break; -+ case UNW_IA64_BR + 6: addr += LINUX_OLD_PT_B6_OFF; break; -+ case UNW_IA64_BR + 7: addr += LINUX_OLD_PT_B7_OFF; break; -+ -+ case UNW_IA64_AR_RSC: addr += LINUX_OLD_PT_RSC_OFF; break; -+ case UNW_IA64_AR_CCV: addr += LINUX_OLD_PT_CCV_OFF; break; -+ -+ default: -+ if (unw_is_fpreg (reg)) -+ return IA64_FPREG_LOC (c, reg); -+ else -+ return IA64_REG_LOC (c, reg); -+ } -+ } - if (is_nat) -- { -- /* For Linux pt-regs structure, bit number is determined by -- the UNaT slot number (as determined by st8.spill) and the -- bits are saved wherever the (primary) UNaT was saved. */ -- *nat_bitnr = ia64_unat_slot_num (addr); -- return c->loc[IA64_REG_PRI_UNAT_MEM]; -- } -+ { -+ /* For Linux pt-regs structure, bit number is determined by -+ the UNaT slot number (as determined by st8.spill) and the -+ bits are saved wherever the (primary) UNaT was saved. */ -+ *nat_bitnr = ia64_unat_slot_num (addr); -+ return c->loc[IA64_REG_PRI_UNAT_MEM]; -+ } - return IA64_LOC_ADDR (addr, 0); - } - #endif -@@ -235,11 +235,11 @@ ia64_scratch_loc (struct cursor *c, unw_regnum_t reg, uint8_t *nat_bitnr) - if (c->sigcontext_addr) - { - if (ia64_get_abi (c) == ABI_LINUX) -- return linux_scratch_loc (c, reg, nat_bitnr); -+ return linux_scratch_loc (c, reg, nat_bitnr); - else if (ia64_get_abi (c) == ABI_HPUX) -- return hpux_scratch_loc (c, reg, nat_bitnr); -+ return hpux_scratch_loc (c, reg, nat_bitnr); - else -- return IA64_NULL_LOC; -+ return IA64_NULL_LOC; - } - else - return IA64_REG_LOC (c, reg); -@@ -247,7 +247,7 @@ ia64_scratch_loc (struct cursor *c, unw_regnum_t reg, uint8_t *nat_bitnr) - - static inline int - update_nat (struct cursor *c, ia64_loc_t nat_loc, unw_word_t mask, -- unw_word_t *valp, int write) -+ unw_word_t *valp, int write) - { - unw_word_t nat_word; - int ret; -@@ -259,9 +259,9 @@ update_nat (struct cursor *c, ia64_loc_t nat_loc, unw_word_t mask, - if (write) - { - if (*valp) -- nat_word |= mask; -+ nat_word |= mask; - else -- nat_word &= ~mask; -+ nat_word &= ~mask; - ret = ia64_put (c, nat_loc, nat_word); - } - else -@@ -271,8 +271,8 @@ update_nat (struct cursor *c, ia64_loc_t nat_loc, unw_word_t mask, - - static int - access_nat (struct cursor *c, -- ia64_loc_t nat_loc, ia64_loc_t reg_loc, uint8_t nat_bitnr, -- unw_word_t *valp, int write) -+ ia64_loc_t nat_loc, ia64_loc_t reg_loc, uint8_t nat_bitnr, -+ unw_word_t *valp, int write) - { - unw_word_t mask = 0; - unw_fpreg_t tmp; -@@ -281,47 +281,47 @@ access_nat (struct cursor *c, - if (IA64_IS_FP_LOC (reg_loc)) - { - /* NaT bit is saved as a NaTVal. This happens when a general -- register is saved to a floating-point register. */ -+ register is saved to a floating-point register. */ - if (write) -- { -- if (*valp) -- { -- if (ia64_is_big_endian (c)) -- ret = ia64_putfp (c, reg_loc, unw.nat_val_be); -- else -- ret = ia64_putfp (c, reg_loc, unw.nat_val_le); -- } -- else -- { -- unw_word_t *src, *dst; -- unw_fpreg_t tmp; -- -- ret = ia64_getfp (c, reg_loc, &tmp); -- if (ret < 0) -- return ret; -- -- /* Reset the exponent to 0x1003e so that the significand -- will be interpreted as an integer value. */ -- src = (unw_word_t *) &unw.int_val_be; -- dst = (unw_word_t *) &tmp; -- if (!ia64_is_big_endian (c)) -- ++src, ++dst; -- *dst = *src; -- -- ret = ia64_putfp (c, reg_loc, tmp); -- } -- } -+ { -+ if (*valp) -+ { -+ if (ia64_is_big_endian (c)) -+ ret = ia64_putfp (c, reg_loc, unw.nat_val_be); -+ else -+ ret = ia64_putfp (c, reg_loc, unw.nat_val_le); -+ } -+ else -+ { -+ unw_word_t *src, *dst; -+ unw_fpreg_t tmp; -+ -+ ret = ia64_getfp (c, reg_loc, &tmp); -+ if (ret < 0) -+ return ret; -+ -+ /* Reset the exponent to 0x1003e so that the significand -+ will be interpreted as an integer value. */ -+ src = (unw_word_t *) &unw.int_val_be; -+ dst = (unw_word_t *) &tmp; -+ if (!ia64_is_big_endian (c)) -+ ++src, ++dst; -+ *dst = *src; -+ -+ ret = ia64_putfp (c, reg_loc, tmp); -+ } -+ } - else -- { -- ret = ia64_getfp (c, reg_loc, &tmp); -- if (ret < 0) -- return ret; -- -- if (ia64_is_big_endian (c)) -- *valp = (memcmp (&tmp, &unw.nat_val_be, sizeof (tmp)) == 0); -- else -- *valp = (memcmp (&tmp, &unw.nat_val_le, sizeof (tmp)) == 0); -- } -+ { -+ ret = ia64_getfp (c, reg_loc, &tmp); -+ if (ret < 0) -+ return ret; -+ -+ if (ia64_is_big_endian (c)) -+ *valp = (memcmp (&tmp, &unw.nat_val_be, sizeof (tmp)) == 0); -+ else -+ *valp = (memcmp (&tmp, &unw.nat_val_le, sizeof (tmp)) == 0); -+ } - return ret; - } - -@@ -330,25 +330,25 @@ access_nat (struct cursor *c, - || IA64_IS_UC_LOC (reg_loc)) - { - if (write) -- return ia64_put (c, nat_loc, *valp); -+ return ia64_put (c, nat_loc, *valp); - else -- return ia64_get (c, nat_loc, valp); -+ return ia64_get (c, nat_loc, valp); - } - - if (IA64_IS_NULL_LOC (nat_loc)) - { - /* NaT bit is not saved. This happens if a general register is -- saved to a branch register. Since the NaT bit gets lost, we -- need to drop it here, too. Note that if the NaT bit had been -- set when the save occurred, it would have caused a NaT -- consumption fault. */ -+ saved to a branch register. Since the NaT bit gets lost, we -+ need to drop it here, too. Note that if the NaT bit had been -+ set when the save occurred, it would have caused a NaT -+ consumption fault. */ - if (write) -- { -- if (*valp) -- return -UNW_EBADREG; /* can't set NaT bit */ -- } -+ { -+ if (*valp) -+ return -UNW_EBADREG; /* can't set NaT bit */ -+ } - else -- *valp = 0; -+ *valp = 0; - return 0; - } - -@@ -358,7 +358,7 @@ access_nat (struct cursor *c, - - HIDDEN int - tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -- int write) -+ int write) - { - ia64_loc_t loc, reg_loc, nat_loc; - unw_word_t mask, val; -@@ -371,25 +371,25 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - case UNW_IA64_BSP: - if (write) -- c->bsp = *valp; -+ c->bsp = *valp; - else -- *valp = c->bsp; -+ *valp = c->bsp; - return 0; - - case UNW_REG_SP: - if (write) -- c->sp = *valp; -+ c->sp = *valp; - else -- *valp = c->sp; -+ *valp = c->sp; - return 0; - - case UNW_REG_IP: - if (write) -- { -- c->ip = *valp; /* also update the IP cache */ -- if (c->pi_valid && (*valp < c->pi.start_ip || *valp >= c->pi.end_ip)) -- c->pi_valid = 0; /* new IP outside of current proc */ -- } -+ { -+ c->ip = *valp; /* also update the IP cache */ -+ if (c->pi_valid && (*valp < c->pi.start_ip || *valp >= c->pi.end_ip)) -+ c->pi_valid = 0; /* new IP outside of current proc */ -+ } - loc = c->loc[IA64_REG_IP]; - break; - -@@ -405,22 +405,22 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - nat_bitnr = c->nat_bitnr[reg - (UNW_IA64_NAT + 4)]; - return access_nat (c, loc, reg_loc, nat_bitnr, valp, write); - -- case UNW_IA64_AR_BSP: loc = c->loc[IA64_REG_BSP]; break; -- case UNW_IA64_AR_BSPSTORE: loc = c->loc[IA64_REG_BSPSTORE]; break; -- case UNW_IA64_AR_PFS: loc = c->loc[IA64_REG_PFS]; break; -- case UNW_IA64_AR_RNAT: loc = c->loc[IA64_REG_RNAT]; break; -- case UNW_IA64_AR_UNAT: loc = c->loc[IA64_REG_UNAT]; break; -- case UNW_IA64_AR_LC: loc = c->loc[IA64_REG_LC]; break; -- case UNW_IA64_AR_FPSR: loc = c->loc[IA64_REG_FPSR]; break; -- case UNW_IA64_BR + 1: loc = c->loc[IA64_REG_B1]; break; -- case UNW_IA64_BR + 2: loc = c->loc[IA64_REG_B2]; break; -- case UNW_IA64_BR + 3: loc = c->loc[IA64_REG_B3]; break; -- case UNW_IA64_BR + 4: loc = c->loc[IA64_REG_B4]; break; -- case UNW_IA64_BR + 5: loc = c->loc[IA64_REG_B5]; break; -+ case UNW_IA64_AR_BSP: loc = c->loc[IA64_REG_BSP]; break; -+ case UNW_IA64_AR_BSPSTORE: loc = c->loc[IA64_REG_BSPSTORE]; break; -+ case UNW_IA64_AR_PFS: loc = c->loc[IA64_REG_PFS]; break; -+ case UNW_IA64_AR_RNAT: loc = c->loc[IA64_REG_RNAT]; break; -+ case UNW_IA64_AR_UNAT: loc = c->loc[IA64_REG_UNAT]; break; -+ case UNW_IA64_AR_LC: loc = c->loc[IA64_REG_LC]; break; -+ case UNW_IA64_AR_FPSR: loc = c->loc[IA64_REG_FPSR]; break; -+ case UNW_IA64_BR + 1: loc = c->loc[IA64_REG_B1]; break; -+ case UNW_IA64_BR + 2: loc = c->loc[IA64_REG_B2]; break; -+ case UNW_IA64_BR + 3: loc = c->loc[IA64_REG_B3]; break; -+ case UNW_IA64_BR + 4: loc = c->loc[IA64_REG_B4]; break; -+ case UNW_IA64_BR + 5: loc = c->loc[IA64_REG_B5]; break; - - case UNW_IA64_CFM: - if (write) -- c->cfm = *valp; /* also update the CFM cache */ -+ c->cfm = *valp; /* also update the CFM cache */ - loc = c->cfm_loc; - break; - -@@ -430,59 +430,59 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - * (i.e., it is done as if CFM.rrb.pr == 0. - */ - if (write) -- { -- c->pr = *valp; /* update the predicate cache */ -- return ia64_put (c, c->loc[IA64_REG_PR], *valp); -- } -+ { -+ c->pr = *valp; /* update the predicate cache */ -+ return ia64_put (c, c->loc[IA64_REG_PR], *valp); -+ } - else -- return ia64_get (c, c->loc[IA64_REG_PR], valp); -+ return ia64_get (c, c->loc[IA64_REG_PR], valp); - -- case UNW_IA64_GR + 32 ... UNW_IA64_GR + 127: /* stacked reg */ -+ case UNW_IA64_GR + 32 ... UNW_IA64_GR + 127: /* stacked reg */ - reg = rotate_gr (c, reg - UNW_IA64_GR); - if (reg < 0) -- return -UNW_EBADREG; -+ return -UNW_EBADREG; - ret = ia64_get_stacked (c, reg, &loc, NULL); - if (ret < 0) -- return ret; -+ return ret; - break; - -- case UNW_IA64_NAT + 32 ... UNW_IA64_NAT + 127: /* stacked reg */ -+ case UNW_IA64_NAT + 32 ... UNW_IA64_NAT + 127: /* stacked reg */ - reg = rotate_gr (c, reg - UNW_IA64_NAT); - if (reg < 0) -- return -UNW_EBADREG; -+ return -UNW_EBADREG; - ret = ia64_get_stacked (c, reg, &loc, &nat_loc); - if (ret < 0) -- return ret; -+ return ret; - assert (!IA64_IS_REG_LOC (loc)); - mask = (unw_word_t) 1 << rse_slot_num (IA64_GET_ADDR (loc)); - return update_nat (c, nat_loc, mask, valp, write); - - case UNW_IA64_AR_EC: - if ((ret = ia64_get (c, c->ec_loc, &val)) < 0) -- return ret; -+ return ret; - - if (write) -- { -- val = ((val & ~((unw_word_t) 0x3f << 52)) | ((*valp & 0x3f) << 52)); -- return ia64_put (c, c->ec_loc, val); -- } -+ { -+ val = ((val & ~((unw_word_t) 0x3f << 52)) | ((*valp & 0x3f) << 52)); -+ return ia64_put (c, c->ec_loc, val); -+ } - else -- { -- *valp = (val >> 52) & 0x3f; -- return 0; -- } -+ { -+ *valp = (val >> 52) & 0x3f; -+ return 0; -+ } - - /* scratch & special registers: */ - - case UNW_IA64_GR + 0: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - *valp = 0; - return 0; - - case UNW_IA64_NAT + 0: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - *valp = 0; - return 0; - -@@ -491,37 +491,37 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - case UNW_IA64_NAT + 8 ... UNW_IA64_NAT + 31: - loc = ia64_scratch_loc (c, reg, &nat_bitnr); - if (IA64_IS_NULL_LOC (loc) && reg == UNW_IA64_NAT + 1) -- { -- /* access to GP */ -- if (write) -- return -UNW_EREADONLYREG; -- *valp = 0; -- return 0; -- } -+ { -+ /* access to GP */ -+ if (write) -+ return -UNW_EREADONLYREG; -+ *valp = 0; -+ return 0; -+ } - if (!(IA64_IS_REG_LOC (loc) || IA64_IS_UC_LOC (loc) -- || IA64_IS_FP_LOC (loc))) -- /* We're dealing with a NaT bit stored in memory. */ -- return update_nat(c, loc, (unw_word_t) 1 << nat_bitnr, valp, write); -+ || IA64_IS_FP_LOC (loc))) -+ /* We're dealing with a NaT bit stored in memory. */ -+ return update_nat(c, loc, (unw_word_t) 1 << nat_bitnr, valp, write); - break; - - case UNW_IA64_GR + 15 ... UNW_IA64_GR + 18: - mask = 1 << (reg - (UNW_IA64_GR + 15)); - if (write) -- { -- c->eh_args[reg - (UNW_IA64_GR + 15)] = *valp; -- c->eh_valid_mask |= mask; -- return 0; -- } -+ { -+ c->eh_args[reg - (UNW_IA64_GR + 15)] = *valp; -+ c->eh_valid_mask |= mask; -+ return 0; -+ } - else if ((c->eh_valid_mask & mask) != 0) -- { -- *valp = c->eh_args[reg - (UNW_IA64_GR + 15)]; -- return 0; -- } -+ { -+ *valp = c->eh_args[reg - (UNW_IA64_GR + 15)]; -+ return 0; -+ } - else -- loc = ia64_scratch_loc (c, reg, NULL); -+ loc = ia64_scratch_loc (c, reg, NULL); - break; - -- case UNW_IA64_GR + 1: /* global pointer */ -+ case UNW_IA64_GR + 1: /* global pointer */ - case UNW_IA64_GR + 2 ... UNW_IA64_GR + 3: - case UNW_IA64_GR + 8 ... UNW_IA64_GR + 14: - case UNW_IA64_GR + 19 ... UNW_IA64_GR + 31: -@@ -534,17 +534,17 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - case UNW_IA64_AR_CCV: - loc = ia64_scratch_loc (c, reg, NULL); - if (IA64_IS_NULL_LOC (loc) && reg == UNW_IA64_GR + 1) -- { -- /* access to GP */ -- if (write) -- return -UNW_EREADONLYREG; -- -- /* ensure c->pi is up-to-date: */ -- if ((ret = ia64_make_proc_info (c)) < 0) -- return ret; -- *valp = c->pi.gp; -- return 0; -- } -+ { -+ /* access to GP */ -+ if (write) -+ return -UNW_EREADONLYREG; -+ -+ /* ensure c->pi is up-to-date: */ -+ if ((ret = ia64_make_proc_info (c)) < 0) -+ return ret; -+ *valp = c->pi.gp; -+ return 0; -+ } - break; - - default: -@@ -560,7 +560,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - HIDDEN int - tdep_access_fpreg (struct cursor *c, int reg, unw_fpreg_t *valp, -- int write) -+ int write) - { - ia64_loc_t loc; - -@@ -568,18 +568,18 @@ tdep_access_fpreg (struct cursor *c, int reg, unw_fpreg_t *valp, - { - case UNW_IA64_FR + 0: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - *valp = unw.read_only.f0; - return 0; - - case UNW_IA64_FR + 1: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - - if (ia64_is_big_endian (c)) -- *valp = unw.read_only.f1_be; -+ *valp = unw.read_only.f1_be; - else -- *valp = unw.read_only.f1_le; -+ *valp = unw.read_only.f1_le; - return 0; - - case UNW_IA64_FR + 2: loc = c->loc[IA64_REG_F2]; break; -diff --git a/frysk-imports/libunwind/src/ia64/Gresume.c b/frysk-imports/libunwind/src/ia64/Gresume.c -index fe23f76..aa395b6 100644 ---- a/frysk-imports/libunwind/src/ia64/Gresume.c -+++ b/frysk-imports/libunwind/src/ia64/Gresume.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -51,15 +51,15 @@ local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - } - extra; - int ret, dirty_size; --# define GET_NAT(n) \ -- do \ -- { \ -- ret = tdep_access_reg (c, UNW_IA64_NAT + (n), &val, 0); \ -- if (ret < 0) \ -- return ret; \ -- if (val) \ -- pri_unat |= (unw_word_t) 1 << n; \ -- } \ -+# define GET_NAT(n) \ -+ do \ -+ { \ -+ ret = tdep_access_reg (c, UNW_IA64_NAT + (n), &val, 0); \ -+ if (ret < 0) \ -+ return ret; \ -+ if (val) \ -+ pri_unat |= (unw_word_t) 1 << n; \ -+ } \ - while (0) - - /* ensure c->pi is up-to-date: */ -@@ -84,43 +84,43 @@ local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - if (unlikely (c->sigcontext_addr)) - { - struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; --# define PR_SCRATCH 0xffc0 /* p6-p15 are scratch */ --# define PR_PRESERVED (~(PR_SCRATCH | 1)) -+# define PR_SCRATCH 0xffc0 /* p6-p15 are scratch */ -+# define PR_PRESERVED (~(PR_SCRATCH | 1)) - - /* We're returning to a frame that was (either directly or -- indirectly) interrupted by a signal. We have to restore -- _both_ "preserved" and "scratch" registers. That doesn't -- leave us any registers to work with, and the only way we can -- achieve this is by doing a sigreturn(). -+ indirectly) interrupted by a signal. We have to restore -+ _both_ "preserved" and "scratch" registers. That doesn't -+ leave us any registers to work with, and the only way we can -+ achieve this is by doing a sigreturn(). - -- Note: it might be tempting to think that we don't have to -- restore the scratch registers when returning to a frame that -- was indirectly interrupted by a signal. However, that is not -- safe because that frame and its descendants could have been -- using a special convention that stores "preserved" state in -- scratch registers. For example, the Linux fsyscall -- convention does this with r11 (to save ar.pfs) and b6 (to -- save "rp"). */ -+ Note: it might be tempting to think that we don't have to -+ restore the scratch registers when returning to a frame that -+ was indirectly interrupted by a signal. However, that is not -+ safe because that frame and its descendants could have been -+ using a special convention that stores "preserved" state in -+ scratch registers. For example, the Linux fsyscall -+ convention does this with r11 (to save ar.pfs) and b6 (to -+ save "rp"). */ - - sc->sc_gr[12] = c->psp; - c->psp = c->sigcontext_addr - c->sigcontext_off; - - sof = (c->cfm & 0x7f); - if ((dirty_size = rbs_cover_and_flush (c, sof, dirty_partition, -- &dirty_rnat, &bspstore)) < 0) -- return dirty_size; -+ &dirty_rnat, &bspstore)) < 0) -+ return dirty_size; - - /* Clear the "in-syscall" flag, because in general we won't be -- returning to the interruption-point and we need all registers -- restored. */ -+ returning to the interruption-point and we need all registers -+ restored. */ - sc->sc_flags &= ~IA64_SC_FLAG_IN_SYSCALL; - sc->sc_ip = c->ip; - sc->sc_cfm = c->cfm & (((unw_word_t) 1 << 38) - 1); - sc->sc_pr = (c->pr & ~PR_SCRATCH) | (sc->sc_pr & ~PR_PRESERVED); - if ((ret = ia64_get (c, c->loc[IA64_REG_PFS], &sc->sc_ar_pfs)) < 0 -- || (ret = ia64_get (c, c->loc[IA64_REG_FPSR], &sc->sc_ar_fpsr)) < 0 -- || (ret = ia64_get (c, c->loc[IA64_REG_UNAT], &sc->sc_ar_unat)) < 0) -- return ret; -+ || (ret = ia64_get (c, c->loc[IA64_REG_FPSR], &sc->sc_ar_fpsr)) < 0 -+ || (ret = ia64_get (c, c->loc[IA64_REG_UNAT], &sc->sc_ar_unat)) < 0) -+ return ret; - - sc->sc_gr[1] = c->pi.gp; - if (c->eh_valid_mask & 0x1) sc->sc_gr[15] = c->eh_args[0]; -@@ -128,19 +128,19 @@ local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - if (c->eh_valid_mask & 0x4) sc->sc_gr[17] = c->eh_args[2]; - if (c->eh_valid_mask & 0x8) sc->sc_gr[18] = c->eh_args[3]; - Debug (9, "sc: r15=%lx,r16=%lx,r17=%lx,r18=%lx\n", -- (long) sc->sc_gr[15], (long) sc->sc_gr[16], -- (long) sc->sc_gr[17], (long) sc->sc_gr[18]); -+ (long) sc->sc_gr[15], (long) sc->sc_gr[16], -+ (long) sc->sc_gr[17], (long) sc->sc_gr[18]); - } - else - { - /* Account for the fact that _Uia64_install_context() will -- return via br.ret, which will decrement bsp by size-of-locals. */ -+ return via br.ret, which will decrement bsp by size-of-locals. */ - if ((ret = ia64_get (c, c->loc[IA64_REG_PFS], &pfs)) < 0) -- return ret; -+ return ret; - sol = (pfs >> 7) & 0x7f; - if ((dirty_size = rbs_cover_and_flush (c, sol, dirty_partition, -- &dirty_rnat, &bspstore)) < 0) -- return dirty_size; -+ &dirty_rnat, &bspstore)) < 0) -+ return dirty_size; - - extra.r1 = c->pi.gp; - extra.r15 = c->eh_args[0]; -@@ -148,17 +148,17 @@ local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - extra.r17 = c->eh_args[2]; - extra.r18 = c->eh_args[3]; - Debug (9, "extra: r15=%lx,r16=%lx,r17=%lx,r18=%lx\n", -- (long) extra.r15, (long) extra.r16, -- (long) extra.r17, (long) extra.r18); -+ (long) extra.r15, (long) extra.r16, -+ (long) extra.r17, (long) extra.r18); - } - Debug (8, "resuming at ip=%lx\n", (long) c->ip); - ia64_install_cursor (c, pri_unat, (unw_word_t *) &extra, -- bspstore, dirty_size, dirty_partition + dirty_size/8, -- dirty_rnat); -+ bspstore, dirty_size, dirty_partition + dirty_size/8, -+ dirty_rnat); - #elif defined(__hpux) - struct cursor *c = (struct cursor *) cursor; - -- setcontext (c->as_arg); /* should not return */ -+ setcontext (c->as_arg); /* should not return */ - #endif - return -UNW_EINVAL; - } -@@ -177,9 +177,9 @@ static inline int - remote_install_cursor (struct cursor *c) - { - int (*access_reg) (unw_addr_space_t, unw_regnum_t, unw_word_t *, -- int write, void *); -+ int write, void *); - int (*access_fpreg) (unw_addr_space_t, unw_regnum_t, unw_fpreg_t *, -- int write, void *); -+ int write, void *); - unw_fpreg_t fpval; - unw_word_t val; - int reg; -@@ -188,49 +188,49 @@ remote_install_cursor (struct cursor *c) - if (c->as == unw_local_addr_space) - { - /* Take a short-cut: we directly resume out of the cursor and -- all we need to do is make sure that all locations point to -- memory, not registers. Furthermore, R4-R7 and NAT4-NAT7 are -- taken care of by ia64_local_resume() so they don't need to be -- handled here. */ --# define MEMIFY(preg, reg) \ -- do { \ -- if (IA64_IS_REG_LOC (c->loc[(preg)])) \ -- c->loc[(preg)] = IA64_LOC_ADDR ((unw_word_t) \ -- tdep_uc_addr(c->as_arg, (reg), \ -- NULL), 0); \ -+ all we need to do is make sure that all locations point to -+ memory, not registers. Furthermore, R4-R7 and NAT4-NAT7 are -+ taken care of by ia64_local_resume() so they don't need to be -+ handled here. */ -+# define MEMIFY(preg, reg) \ -+ do { \ -+ if (IA64_IS_REG_LOC (c->loc[(preg)])) \ -+ c->loc[(preg)] = IA64_LOC_ADDR ((unw_word_t) \ -+ tdep_uc_addr(c->as_arg, (reg), \ -+ NULL), 0); \ - } while (0) -- MEMIFY (IA64_REG_PR, UNW_IA64_PR); -- MEMIFY (IA64_REG_PFS, UNW_IA64_AR_PFS); -- MEMIFY (IA64_REG_RNAT, UNW_IA64_AR_RNAT); -- MEMIFY (IA64_REG_UNAT, UNW_IA64_AR_UNAT); -- MEMIFY (IA64_REG_LC, UNW_IA64_AR_LC); -- MEMIFY (IA64_REG_FPSR, UNW_IA64_AR_FPSR); -- MEMIFY (IA64_REG_IP, UNW_IA64_BR + 0); -- MEMIFY (IA64_REG_B1, UNW_IA64_BR + 1); -- MEMIFY (IA64_REG_B2, UNW_IA64_BR + 2); -- MEMIFY (IA64_REG_B3, UNW_IA64_BR + 3); -- MEMIFY (IA64_REG_B4, UNW_IA64_BR + 4); -- MEMIFY (IA64_REG_B5, UNW_IA64_BR + 5); -- MEMIFY (IA64_REG_F2, UNW_IA64_FR + 2); -- MEMIFY (IA64_REG_F3, UNW_IA64_FR + 3); -- MEMIFY (IA64_REG_F4, UNW_IA64_FR + 4); -- MEMIFY (IA64_REG_F5, UNW_IA64_FR + 5); -- MEMIFY (IA64_REG_F16, UNW_IA64_FR + 16); -- MEMIFY (IA64_REG_F17, UNW_IA64_FR + 17); -- MEMIFY (IA64_REG_F18, UNW_IA64_FR + 18); -- MEMIFY (IA64_REG_F19, UNW_IA64_FR + 19); -- MEMIFY (IA64_REG_F20, UNW_IA64_FR + 20); -- MEMIFY (IA64_REG_F21, UNW_IA64_FR + 21); -- MEMIFY (IA64_REG_F22, UNW_IA64_FR + 22); -- MEMIFY (IA64_REG_F23, UNW_IA64_FR + 23); -- MEMIFY (IA64_REG_F24, UNW_IA64_FR + 24); -- MEMIFY (IA64_REG_F25, UNW_IA64_FR + 25); -- MEMIFY (IA64_REG_F26, UNW_IA64_FR + 26); -- MEMIFY (IA64_REG_F27, UNW_IA64_FR + 27); -- MEMIFY (IA64_REG_F28, UNW_IA64_FR + 28); -- MEMIFY (IA64_REG_F29, UNW_IA64_FR + 29); -- MEMIFY (IA64_REG_F30, UNW_IA64_FR + 30); -- MEMIFY (IA64_REG_F31, UNW_IA64_FR + 31); -+ MEMIFY (IA64_REG_PR, UNW_IA64_PR); -+ MEMIFY (IA64_REG_PFS, UNW_IA64_AR_PFS); -+ MEMIFY (IA64_REG_RNAT, UNW_IA64_AR_RNAT); -+ MEMIFY (IA64_REG_UNAT, UNW_IA64_AR_UNAT); -+ MEMIFY (IA64_REG_LC, UNW_IA64_AR_LC); -+ MEMIFY (IA64_REG_FPSR, UNW_IA64_AR_FPSR); -+ MEMIFY (IA64_REG_IP, UNW_IA64_BR + 0); -+ MEMIFY (IA64_REG_B1, UNW_IA64_BR + 1); -+ MEMIFY (IA64_REG_B2, UNW_IA64_BR + 2); -+ MEMIFY (IA64_REG_B3, UNW_IA64_BR + 3); -+ MEMIFY (IA64_REG_B4, UNW_IA64_BR + 4); -+ MEMIFY (IA64_REG_B5, UNW_IA64_BR + 5); -+ MEMIFY (IA64_REG_F2, UNW_IA64_FR + 2); -+ MEMIFY (IA64_REG_F3, UNW_IA64_FR + 3); -+ MEMIFY (IA64_REG_F4, UNW_IA64_FR + 4); -+ MEMIFY (IA64_REG_F5, UNW_IA64_FR + 5); -+ MEMIFY (IA64_REG_F16, UNW_IA64_FR + 16); -+ MEMIFY (IA64_REG_F17, UNW_IA64_FR + 17); -+ MEMIFY (IA64_REG_F18, UNW_IA64_FR + 18); -+ MEMIFY (IA64_REG_F19, UNW_IA64_FR + 19); -+ MEMIFY (IA64_REG_F20, UNW_IA64_FR + 20); -+ MEMIFY (IA64_REG_F21, UNW_IA64_FR + 21); -+ MEMIFY (IA64_REG_F22, UNW_IA64_FR + 22); -+ MEMIFY (IA64_REG_F23, UNW_IA64_FR + 23); -+ MEMIFY (IA64_REG_F24, UNW_IA64_FR + 24); -+ MEMIFY (IA64_REG_F25, UNW_IA64_FR + 25); -+ MEMIFY (IA64_REG_F26, UNW_IA64_FR + 26); -+ MEMIFY (IA64_REG_F27, UNW_IA64_FR + 27); -+ MEMIFY (IA64_REG_F28, UNW_IA64_FR + 28); -+ MEMIFY (IA64_REG_F29, UNW_IA64_FR + 29); -+ MEMIFY (IA64_REG_F30, UNW_IA64_FR + 30); -+ MEMIFY (IA64_REG_F31, UNW_IA64_FR + 31); - } - else - #endif /* __linux && !UNW_REMOTE_ONLY */ -@@ -241,18 +241,18 @@ remote_install_cursor (struct cursor *c) - Debug (8, "copying out cursor state\n"); - - for (reg = 0; reg <= UNW_REG_LAST; ++reg) -- { -- if (unw_is_fpreg (reg)) -- { -- if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -- (*access_fpreg) (c->as, reg, &fpval, 1, c->as_arg); -- } -- else -- { -- if (tdep_access_reg (c, reg, &val, 0) >= 0) -- (*access_reg) (c->as, reg, &val, 1, c->as_arg); -- } -- } -+ { -+ if (unw_is_fpreg (reg)) -+ { -+ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -+ (*access_fpreg) (c->as, reg, &fpval, 1, c->as_arg); -+ } -+ else -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ (*access_reg) (c->as, reg, &val, 1, c->as_arg); -+ } -+ } - } - return (*c->as->acc.resume) (c->as, (unw_cursor_t *) c, c->as_arg); - } -diff --git a/frysk-imports/libunwind/src/ia64/Gscript.c b/frysk-imports/libunwind/src/ia64/Gscript.c -index bf9ca02..e96e89e 100644 ---- a/frysk-imports/libunwind/src/ia64/Gscript.c -+++ b/frysk-imports/libunwind/src/ia64/Gscript.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -29,19 +29,19 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - enum ia64_script_insn_opcode - { -- IA64_INSN_INC_PSP, /* psp += val */ -- IA64_INSN_LOAD_PSP, /* psp = *psp_loc */ -- IA64_INSN_ADD_PSP, /* s[dst] = (s.psp + val) */ -- IA64_INSN_ADD_PSP_NAT, /* like above, but with NaT info */ -- IA64_INSN_ADD_SP, /* s[dst] = (s.sp + val) */ -- IA64_INSN_ADD_SP_NAT, /* like above, but with NaT info */ -- IA64_INSN_MOVE, /* s[dst] = s[val] */ -- IA64_INSN_MOVE_NAT, /* like above, but with NaT info */ -- IA64_INSN_MOVE_NO_NAT, /* like above, but clear NaT info */ -- IA64_INSN_MOVE_STACKED, /* s[dst] = rse_skip(*s.bsp_loc, val) */ -- IA64_INSN_MOVE_STACKED_NAT, /* like above, but with NaT info */ -- IA64_INSN_MOVE_SCRATCH, /* s[dst] = scratch reg "val" */ -- IA64_INSN_MOVE_SCRATCH_NAT, /* like above, but with NaT info */ -+ IA64_INSN_INC_PSP, /* psp += val */ -+ IA64_INSN_LOAD_PSP, /* psp = *psp_loc */ -+ IA64_INSN_ADD_PSP, /* s[dst] = (s.psp + val) */ -+ IA64_INSN_ADD_PSP_NAT, /* like above, but with NaT info */ -+ IA64_INSN_ADD_SP, /* s[dst] = (s.sp + val) */ -+ IA64_INSN_ADD_SP_NAT, /* like above, but with NaT info */ -+ IA64_INSN_MOVE, /* s[dst] = s[val] */ -+ IA64_INSN_MOVE_NAT, /* like above, but with NaT info */ -+ IA64_INSN_MOVE_NO_NAT, /* like above, but clear NaT info */ -+ IA64_INSN_MOVE_STACKED, /* s[dst] = rse_skip(*s.bsp_loc, val) */ -+ IA64_INSN_MOVE_STACKED_NAT, /* like above, but with NaT info */ -+ IA64_INSN_MOVE_SCRATCH, /* s[dst] = scratch reg "val" */ -+ IA64_INSN_MOVE_SCRATCH_NAT, /* like above, but with NaT info */ - IA64_INSN_MOVE_SCRATCH_NO_NAT /* like above, but clear NaT info */ - }; - -@@ -56,11 +56,11 @@ static __thread struct ia64_script_cache ia64_per_thread_cache = - }; - #endif - --static inline unw_hash_index_t -+static inline unw_hash_index_t CONST_ATTR - hash (unw_word_t ip) - { - /* based on (sqrt(5)/2-1)*2^64 */ --# define magic ((unw_word_t) 0x9e3779b97f4a7c16ULL) -+# define magic ((unw_word_t) 0x9e3779b97f4a7c16ULL) - - return (ip >> 4) * magic >> (64 - IA64_LOG_UNW_HASH_SIZE); - } -@@ -84,7 +84,7 @@ flush_script_cache (struct ia64_script_cache *cache) - for (i = 0; i < IA64_UNW_CACHE_SIZE; ++i) - { - if (i > 0) -- cache->buckets[i].lru_chain = (i - 1); -+ cache->buckets[i].lru_chain = (i - 1); - cache->buckets[i].coll_chain = -1; - cache->buckets[i].ip = 0; - } -@@ -113,11 +113,10 @@ get_script_cache (unw_addr_space_t as, intrmask_t *saved_maskp) - if (AO_test_and_set (&cache->busy) == AO_TS_SET) - return NULL; - # else -- sigprocmask (SIG_SETMASK, &unwi_full_mask, saved_maskp); - if (likely (caching == UNW_CACHE_GLOBAL)) - { -- Debug (16, "%s: acquiring lock\n", __FUNCTION__); -- mutex_lock (&cache->lock); -+ Debug (16, "acquiring lock\n"); -+ lock_acquire (&cache->lock, *saved_maskp); - } - # endif - #endif -@@ -132,7 +131,7 @@ get_script_cache (unw_addr_space_t as, intrmask_t *saved_maskp) - - static inline void - put_script_cache (unw_addr_space_t as, struct ia64_script_cache *cache, -- intrmask_t *saved_maskp) -+ intrmask_t *saved_maskp) - { - assert (as->caching_policy != UNW_CACHE_NONE); - -@@ -144,8 +143,7 @@ put_script_cache (unw_addr_space_t as, struct ia64_script_cache *cache, - AO_CLEAR (&cache->busy); - # else - if (likely (as->caching_policy == UNW_CACHE_GLOBAL)) -- mutex_unlock (&cache->lock); -- sigprocmask (SIG_SETMASK, saved_maskp, NULL); -+ lock_release (&cache->lock, *saved_maskp); - # endif - #endif - } -@@ -171,14 +169,14 @@ script_lookup (struct ia64_script_cache *cache, struct cursor *c) - while (1) - { - if (cache_match (script, ip, pr)) -- { -- /* update hint; no locking needed: single-word writes are atomic */ -- c->hint = cache->buckets[c->prev_script].hint = -- (script - cache->buckets); -- return script; -- } -+ { -+ /* update hint; no locking needed: single-word writes are atomic */ -+ c->hint = cache->buckets[c->prev_script].hint = -+ (script - cache->buckets); -+ return script; -+ } - if (script->coll_chain >= IA64_UNW_HASH_SIZE) -- return 0; -+ return 0; - script = cache->buckets + script->coll_chain; - } - } -@@ -214,22 +212,22 @@ script_new (struct ia64_script_cache *cache, unw_word_t ip) - tmp = cache->buckets + cache->hash[index]; - prev = 0; - while (1) -- { -- if (tmp == script) -- { -- if (prev) -- prev->coll_chain = tmp->coll_chain; -- else -- cache->hash[index] = tmp->coll_chain; -- break; -- } -- else -- prev = tmp; -- if (tmp->coll_chain >= IA64_UNW_CACHE_SIZE) -- /* old script wasn't in the hash-table */ -- break; -- tmp = cache->buckets + tmp->coll_chain; -- } -+ { -+ if (tmp == script) -+ { -+ if (prev) -+ prev->coll_chain = tmp->coll_chain; -+ else -+ cache->hash[index] = tmp->coll_chain; -+ break; -+ } -+ else -+ prev = tmp; -+ if (tmp->coll_chain >= IA64_UNW_CACHE_SIZE) -+ /* old script wasn't in the hash-table */ -+ break; -+ tmp = cache->buckets + tmp->coll_chain; -+ } - } - - /* enter new script in the hash table */ -@@ -243,7 +241,7 @@ script_new (struct ia64_script_cache *cache, unw_word_t ip) - - static inline void - script_finalize (struct ia64_script *script, struct cursor *c, -- struct ia64_state_record *sr) -+ struct ia64_state_record *sr) - { - script->pr_mask = sr->pr_mask; - script->pr_val = sr->pr_val; -@@ -255,8 +253,8 @@ script_emit (struct ia64_script *script, struct ia64_script_insn insn) - { - if (script->count >= IA64_MAX_SCRIPT_LEN) - { -- dprintf ("%s: script exceeds maximum size of %u instructions!\n", -- __FUNCTION__, IA64_MAX_SCRIPT_LEN); -+ Dprintf ("%s: script exceeds maximum size of %u instructions!\n", -+ __FUNCTION__, IA64_MAX_SCRIPT_LEN); - return; - } - script->insn[script->count++] = insn; -@@ -264,7 +262,7 @@ script_emit (struct ia64_script *script, struct ia64_script_insn insn) - - static void - compile_reg (struct ia64_state_record *sr, int i, struct ia64_reg_info *r, -- struct ia64_script *script) -+ struct ia64_script *script) - { - enum ia64_script_insn_opcode opc; - unsigned long val, rval; -@@ -282,94 +280,94 @@ compile_reg (struct ia64_state_record *sr, int i, struct ia64_reg_info *r, - { - /* Handle most common case first... */ - if (rval >= 32) -- { -- /* register got spilled to a stacked register */ -- if (is_preserved_gr) -- opc = IA64_INSN_MOVE_STACKED_NAT; -- else -- opc = IA64_INSN_MOVE_STACKED; -- val = rval; -- } -+ { -+ /* register got spilled to a stacked register */ -+ if (is_preserved_gr) -+ opc = IA64_INSN_MOVE_STACKED_NAT; -+ else -+ opc = IA64_INSN_MOVE_STACKED; -+ val = rval; -+ } - else if (rval >= 4 && rval <= 7) -- { -- /* register got spilled to a preserved register */ -- val = IA64_REG_R4 + (rval - 4); -- if (is_preserved_gr) -- opc = IA64_INSN_MOVE_NAT; -- } -+ { -+ /* register got spilled to a preserved register */ -+ val = IA64_REG_R4 + (rval - 4); -+ if (is_preserved_gr) -+ opc = IA64_INSN_MOVE_NAT; -+ } - else -- { -- /* register got spilled to a scratch register */ -- if (is_preserved_gr) -- opc = IA64_INSN_MOVE_SCRATCH_NAT; -- else -- opc = IA64_INSN_MOVE_SCRATCH; -- val = UNW_IA64_GR + rval; -- } -+ { -+ /* register got spilled to a scratch register */ -+ if (is_preserved_gr) -+ opc = IA64_INSN_MOVE_SCRATCH_NAT; -+ else -+ opc = IA64_INSN_MOVE_SCRATCH; -+ val = UNW_IA64_GR + rval; -+ } - } - else - { - switch (r->where) -- { -- case IA64_WHERE_FR: -- /* Note: There is no need to handle NaT-bit info here -- (indepent of is_preserved_gr), because for floating-point -- NaTs are represented as NaTVal, so the NaT-info never -- needs to be consulated. */ -- if (rval >= 2 && rval <= 5) -- val = IA64_REG_F2 + (rval - 2); -- else if (rval >= 16 && rval <= 31) -- val = IA64_REG_F16 + (rval - 16); -- else -- { -- opc = IA64_INSN_MOVE_SCRATCH; -- val = UNW_IA64_FR + rval; -- } -- break; -- -- case IA64_WHERE_BR: -- if (rval >= 1 && rval <= 5) -- { -- val = IA64_REG_B1 + (rval - 1); -- if (is_preserved_gr) -- opc = IA64_INSN_MOVE_NO_NAT; -- } -- else -- { -- opc = IA64_INSN_MOVE_SCRATCH; -- if (is_preserved_gr) -- opc = IA64_INSN_MOVE_SCRATCH_NO_NAT; -- val = UNW_IA64_BR + rval; -- } -- break; -- -- case IA64_WHERE_SPREL: -- if (is_preserved_gr) -- opc = IA64_INSN_ADD_SP_NAT; -- else -- { -- opc = IA64_INSN_ADD_SP; -- if (i >= IA64_REG_F2 && i <= IA64_REG_F31) -- val |= IA64_LOC_TYPE_FP; -- } -- break; -- -- case IA64_WHERE_PSPREL: -- if (is_preserved_gr) -- opc = IA64_INSN_ADD_PSP_NAT; -- else -- { -- opc = IA64_INSN_ADD_PSP; -- if (i >= IA64_REG_F2 && i <= IA64_REG_F31) -- val |= IA64_LOC_TYPE_FP; -- } -- break; -- -- default: -- dprintf ("%s: register %u has unexpected `where' value of %u\n", -- __FUNCTION__, i, r->where); -- break; -- } -+ { -+ case IA64_WHERE_FR: -+ /* Note: There is no need to handle NaT-bit info here -+ (indepent of is_preserved_gr), because for floating-point -+ NaTs are represented as NaTVal, so the NaT-info never -+ needs to be consulated. */ -+ if (rval >= 2 && rval <= 5) -+ val = IA64_REG_F2 + (rval - 2); -+ else if (rval >= 16 && rval <= 31) -+ val = IA64_REG_F16 + (rval - 16); -+ else -+ { -+ opc = IA64_INSN_MOVE_SCRATCH; -+ val = UNW_IA64_FR + rval; -+ } -+ break; -+ -+ case IA64_WHERE_BR: -+ if (rval >= 1 && rval <= 5) -+ { -+ val = IA64_REG_B1 + (rval - 1); -+ if (is_preserved_gr) -+ opc = IA64_INSN_MOVE_NO_NAT; -+ } -+ else -+ { -+ opc = IA64_INSN_MOVE_SCRATCH; -+ if (is_preserved_gr) -+ opc = IA64_INSN_MOVE_SCRATCH_NO_NAT; -+ val = UNW_IA64_BR + rval; -+ } -+ break; -+ -+ case IA64_WHERE_SPREL: -+ if (is_preserved_gr) -+ opc = IA64_INSN_ADD_SP_NAT; -+ else -+ { -+ opc = IA64_INSN_ADD_SP; -+ if (i >= IA64_REG_F2 && i <= IA64_REG_F31) -+ val |= IA64_LOC_TYPE_FP; -+ } -+ break; -+ -+ case IA64_WHERE_PSPREL: -+ if (is_preserved_gr) -+ opc = IA64_INSN_ADD_PSP_NAT; -+ else -+ { -+ opc = IA64_INSN_ADD_PSP; -+ if (i >= IA64_REG_F2 && i <= IA64_REG_F31) -+ val |= IA64_LOC_TYPE_FP; -+ } -+ break; -+ -+ default: -+ Dprintf ("%s: register %u has unexpected `where' value of %u\n", -+ __FUNCTION__, i, r->where); -+ break; -+ } - } - insn.opc = opc; - insn.dst = i; -@@ -379,8 +377,8 @@ compile_reg (struct ia64_state_record *sr, int i, struct ia64_reg_info *r, - if (i == IA64_REG_PSP) - { - /* c->psp must contain the _value_ of the previous sp, not it's -- save-location. We get this by dereferencing the value we -- just stored in loc[IA64_REG_PSP]: */ -+ save-location. We get this by dereferencing the value we -+ just stored in loc[IA64_REG_PSP]: */ - insn.opc = IA64_INSN_LOAD_PSP; - script_emit (script, insn); - } -@@ -402,8 +400,8 @@ sort_regs (struct ia64_state_record *sr, int regorder[]) - for (r = IA64_REG_BSP; r < IA64_NUM_PREGS; ++r) - { - if (sr->curr.reg[r].where == IA64_WHERE_NONE -- || sr->curr.reg[r].when >= sr->when_target) -- continue; -+ || sr->curr.reg[r].when >= sr->when_target) -+ continue; - - regorder[num_regs++] = r; - } -@@ -418,17 +416,17 @@ sort_regs (struct ia64_state_record *sr, int regorder[]) - max_when = sr->curr.reg[max_reg].when; - - for (j = i + 1; j < num_regs; ++j) -- if (sr->curr.reg[regorder[j]].when > max_when) -- { -- max = j; -- max_reg = regorder[j]; -- max_when = sr->curr.reg[max_reg].when; -- } -+ if (sr->curr.reg[regorder[j]].when > max_when) -+ { -+ max = j; -+ max_reg = regorder[j]; -+ max_when = sr->curr.reg[max_reg].when; -+ } - if (i != max) -- { -- regorder[max] = regorder[i]; -- regorder[i] = max_reg; -- } -+ { -+ regorder[max] = regorder[i]; -+ regorder[i] = max_reg; -+ } - } - return num_regs; - } -@@ -459,7 +457,7 @@ build_script (struct cursor *c, struct ia64_script *script) - { - /* new psp is psp plus frame size */ - insn.opc = IA64_INSN_INC_PSP; -- insn.val = sr.curr.reg[IA64_REG_PSP].val; /* frame size */ -+ insn.val = sr.curr.reg[IA64_REG_PSP].val; /* frame size */ - script_emit (script, insn); - } - else -@@ -471,18 +469,18 @@ build_script (struct cursor *c, struct ia64_script *script) - || sr.when_target >= sr.curr.reg[IA64_REG_PRI_UNAT_MEM].when) - { - if (sr.when_target < sr.curr.reg[IA64_REG_PRI_UNAT_GR].when) -- /* (primary) NaT bits were saved to memory only */ -- pri_unat = sr.curr.reg + IA64_REG_PRI_UNAT_MEM; -+ /* (primary) NaT bits were saved to memory only */ -+ pri_unat = sr.curr.reg + IA64_REG_PRI_UNAT_MEM; - else if (sr.when_target < sr.curr.reg[IA64_REG_PRI_UNAT_MEM].when) -- /* (primary) NaT bits were saved to a register only */ -- pri_unat = sr.curr.reg + IA64_REG_PRI_UNAT_GR; -+ /* (primary) NaT bits were saved to a register only */ -+ pri_unat = sr.curr.reg + IA64_REG_PRI_UNAT_GR; - else if (sr.curr.reg[IA64_REG_PRI_UNAT_MEM].when > -- sr.curr.reg[IA64_REG_PRI_UNAT_GR].when) -- /* (primary) NaT bits were last saved to memory */ -- pri_unat = sr.curr.reg + IA64_REG_PRI_UNAT_MEM; -+ sr.curr.reg[IA64_REG_PRI_UNAT_GR].when) -+ /* (primary) NaT bits were last saved to memory */ -+ pri_unat = sr.curr.reg + IA64_REG_PRI_UNAT_MEM; - else -- /* (primary) NaT bits were last saved to a register */ -- pri_unat = sr.curr.reg + IA64_REG_PRI_UNAT_GR; -+ /* (primary) NaT bits were last saved to a register */ -+ pri_unat = sr.curr.reg + IA64_REG_PRI_UNAT_GR; - - /* Note: we always store the final primary-UNaT location in UNAT_MEM. */ - compile_reg (&sr, IA64_REG_PRI_UNAT_MEM, pri_unat, script); -@@ -503,7 +501,7 @@ build_script (struct cursor *c, struct ia64_script *script) - - static inline void - set_nat_info (struct cursor *c, unsigned long dst, -- ia64_loc_t nat_loc, uint8_t bitnr) -+ ia64_loc_t nat_loc, uint8_t bitnr) - { - assert (dst >= IA64_REG_R4 && dst <= IA64_REG_R7); - -@@ -540,79 +538,79 @@ run_script (struct ia64_script *script, struct cursor *c) - - /* This is by far the most common operation: */ - if (likely (opc == IA64_INSN_MOVE_STACKED)) -- { -- if ((ret = ia64_get_stacked (c, val, &loc, NULL)) < 0) -- return ret; -- } -+ { -+ if ((ret = ia64_get_stacked (c, val, &loc, NULL)) < 0) -+ return ret; -+ } - else -- switch (opc) -- { -- case IA64_INSN_INC_PSP: -- c->psp += val; -- continue; -- -- case IA64_INSN_LOAD_PSP: -- if ((ret = ia64_get (c, c->loc[IA64_REG_PSP], &c->psp)) < 0) -- return ret; -- continue; -- -- case IA64_INSN_ADD_PSP: -- loc = IA64_LOC_ADDR (c->psp + val, (val & IA64_LOC_TYPE_FP)); -- break; -- -- case IA64_INSN_ADD_SP: -- loc = IA64_LOC_ADDR (c->sp + val, (val & IA64_LOC_TYPE_FP)); -- break; -- -- case IA64_INSN_MOVE_NO_NAT: -- set_nat_info (c, dst, IA64_NULL_LOC, 0); -- case IA64_INSN_MOVE: -- loc = c->loc[val]; -- break; -- -- case IA64_INSN_MOVE_SCRATCH_NO_NAT: -- set_nat_info (c, dst, IA64_NULL_LOC, 0); -- case IA64_INSN_MOVE_SCRATCH: -- loc = ia64_scratch_loc (c, val, NULL); -- break; -- -- case IA64_INSN_ADD_PSP_NAT: -- loc = IA64_LOC_ADDR (c->psp + val, 0); -- assert (!IA64_IS_REG_LOC (loc)); -- set_nat_info (c, dst, -- c->loc[IA64_REG_PRI_UNAT_MEM], -- ia64_unat_slot_num (IA64_GET_ADDR (loc))); -- break; -- -- case IA64_INSN_ADD_SP_NAT: -- loc = IA64_LOC_ADDR (c->sp + val, 0); -- assert (!IA64_IS_REG_LOC (loc)); -- set_nat_info (c, dst, -- c->loc[IA64_REG_PRI_UNAT_MEM], -- ia64_unat_slot_num (IA64_GET_ADDR (loc))); -- break; -- -- case IA64_INSN_MOVE_NAT: -- loc = c->loc[val]; -- set_nat_info (c, dst, -- c->loc[val - IA64_REG_R4 + IA64_REG_NAT4], -- c->nat_bitnr[val - IA64_REG_R4]); -- break; -- -- case IA64_INSN_MOVE_STACKED_NAT: -- if ((ret = ia64_get_stacked (c, val, &loc, &nat_loc)) < 0) -- return ret; -- assert (!IA64_IS_REG_LOC (loc)); -- set_nat_info (c, dst, nat_loc, rse_slot_num (IA64_GET_ADDR (loc))); -- break; -- -- case IA64_INSN_MOVE_SCRATCH_NAT: -- loc = ia64_scratch_loc (c, val, NULL); -- nat_loc = ia64_scratch_loc (c, val + (UNW_IA64_NAT - UNW_IA64_GR), -- &nat_bitnr); -- set_nat_info (c, dst, nat_loc, nat_bitnr); -- break; -- } -+ switch (opc) -+ { -+ case IA64_INSN_INC_PSP: -+ c->psp += val; -+ continue; -+ -+ case IA64_INSN_LOAD_PSP: -+ if ((ret = ia64_get (c, c->loc[IA64_REG_PSP], &c->psp)) < 0) -+ return ret; -+ continue; -+ -+ case IA64_INSN_ADD_PSP: -+ loc = IA64_LOC_ADDR (c->psp + val, (val & IA64_LOC_TYPE_FP)); -+ break; -+ -+ case IA64_INSN_ADD_SP: -+ loc = IA64_LOC_ADDR (c->sp + val, (val & IA64_LOC_TYPE_FP)); -+ break; -+ -+ case IA64_INSN_MOVE_NO_NAT: -+ set_nat_info (c, dst, IA64_NULL_LOC, 0); -+ case IA64_INSN_MOVE: -+ loc = c->loc[val]; -+ break; -+ -+ case IA64_INSN_MOVE_SCRATCH_NO_NAT: -+ set_nat_info (c, dst, IA64_NULL_LOC, 0); -+ case IA64_INSN_MOVE_SCRATCH: -+ loc = ia64_scratch_loc (c, val, NULL); -+ break; -+ -+ case IA64_INSN_ADD_PSP_NAT: -+ loc = IA64_LOC_ADDR (c->psp + val, 0); -+ assert (!IA64_IS_REG_LOC (loc)); -+ set_nat_info (c, dst, -+ c->loc[IA64_REG_PRI_UNAT_MEM], -+ ia64_unat_slot_num (IA64_GET_ADDR (loc))); -+ break; -+ -+ case IA64_INSN_ADD_SP_NAT: -+ loc = IA64_LOC_ADDR (c->sp + val, 0); -+ assert (!IA64_IS_REG_LOC (loc)); -+ set_nat_info (c, dst, -+ c->loc[IA64_REG_PRI_UNAT_MEM], -+ ia64_unat_slot_num (IA64_GET_ADDR (loc))); -+ break; -+ -+ case IA64_INSN_MOVE_NAT: -+ loc = c->loc[val]; -+ set_nat_info (c, dst, -+ c->loc[val - IA64_REG_R4 + IA64_REG_NAT4], -+ c->nat_bitnr[val - IA64_REG_R4]); -+ break; -+ -+ case IA64_INSN_MOVE_STACKED_NAT: -+ if ((ret = ia64_get_stacked (c, val, &loc, &nat_loc)) < 0) -+ return ret; -+ assert (!IA64_IS_REG_LOC (loc)); -+ set_nat_info (c, dst, nat_loc, rse_slot_num (IA64_GET_ADDR (loc))); -+ break; -+ -+ case IA64_INSN_MOVE_SCRATCH_NAT: -+ loc = ia64_scratch_loc (c, val, NULL); -+ nat_loc = ia64_scratch_loc (c, val + (UNW_IA64_NAT - UNW_IA64_GR), -+ &nat_bitnr); -+ set_nat_info (c, dst, nat_loc, nat_bitnr); -+ break; -+ } - c->loc[dst] = loc; - } - return 0; -@@ -631,8 +629,8 @@ uncached_find_save_locs (struct cursor *c) - if ((ret = build_script (c, &script)) < 0) - { - if (ret != -UNW_ESTOPUNWIND) -- dprintf ("%s: failed to build unwind script for ip %lx\n", -- __FUNCTION__, (long) c->ip); -+ Dprintf ("%s: failed to build unwind script for ip %lx\n", -+ __FUNCTION__, (long) c->ip); - return ret; - } - return run_script (&script, c); -@@ -658,23 +656,23 @@ ia64_find_save_locs (struct cursor *c) - { - script = script_lookup (cache, c); - Debug (8, "ip %lx %s in script cache\n", (long) c->ip, -- script ? "hit" : "missed"); -+ script ? "hit" : "missed"); - - if (!script || (script->count == 0 && !script->pi.unwind_info)) - { -- if ((ret = ia64_fetch_proc_info (c, c->ip, 1)) < 0) -- goto out; -+ if ((ret = ia64_fetch_proc_info (c, c->ip, 1)) < 0) -+ goto out; - } - - if (!script) - { -- script = script_new (cache, c->ip); -- if (!script) -- { -- dprintf ("%s: failed to create unwind script\n", __FUNCTION__); -- ret = -UNW_EUNSPEC; -- goto out; -- } -+ script = script_new (cache, c->ip); -+ if (!script) -+ { -+ Dprintf ("%s: failed to create unwind script\n", __FUNCTION__); -+ ret = -UNW_EUNSPEC; -+ goto out; -+ } - } - cache->buckets[c->prev_script].hint = script - cache->buckets; - -@@ -688,10 +686,10 @@ ia64_find_save_locs (struct cursor *c) - - if (ret < 0) - { -- if (ret != -UNW_ESTOPUNWIND) -- dprintf ("%s: failed to locate/build unwind script for ip %lx\n", -- __FUNCTION__, (long) c->ip); -- goto out; -+ if (ret != -UNW_ESTOPUNWIND) -+ Dprintf ("%s: failed to locate/build unwind script for ip %lx\n", -+ __FUNCTION__, (long) c->ip); -+ goto out; - } - - ret = run_script (script, c); -@@ -725,7 +723,7 @@ ia64_cache_proc_info (struct cursor *c) - - cache = get_script_cache (c->as, &saved_mask); - if (!cache) -- return ret; /* cache is busy */ -+ return ret; /* cache is busy */ - - /* Re-check to see if a cache entry has been added in the meantime: */ - script = script_lookup (cache, c); -@@ -735,7 +733,7 @@ ia64_cache_proc_info (struct cursor *c) - script = script_new (cache, c->ip); - if (!script) - { -- dprintf ("%s: failed to create unwind script\n", __FUNCTION__); -+ Dprintf ("%s: failed to create unwind script\n", __FUNCTION__); - ret = -UNW_EUNSPEC; - goto out; - } -@@ -756,7 +754,7 @@ ia64_get_cached_proc_info (struct cursor *c) - - cache = get_script_cache (c->as, &saved_mask); - if (!cache) -- return -UNW_ENOINFO; /* cache is busy */ -+ return -UNW_ENOINFO; /* cache is busy */ - { - script = script_lookup (cache, c); - if (script) -diff --git a/frysk-imports/libunwind/src/ia64/Gstep.c b/frysk-imports/libunwind/src/ia64/Gstep.c -index 4390d26..0191f64 100644 ---- a/frysk-imports/libunwind/src/ia64/Gstep.c -+++ b/frysk-imports/libunwind/src/ia64/Gstep.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - static inline int - linux_sigtramp (struct cursor *c, ia64_loc_t prev_cfm_loc, -- unw_word_t *num_regsp) -+ unw_word_t *num_regsp) - { - #if defined(UNW_LOCAL_ONLY) && !defined(__linux) - return -UNW_EINVAL; -@@ -37,8 +37,8 @@ linux_sigtramp (struct cursor *c, ia64_loc_t prev_cfm_loc, - int ret; - - if ((ret = ia64_get (c, IA64_LOC_ADDR (c->sp + 0x10 -- + LINUX_SIGFRAME_ARG2_OFF, 0), -- &sc_addr)) < 0) -+ + LINUX_SIGFRAME_ARG2_OFF, 0), -+ &sc_addr)) < 0) - return ret; - - c->sigcontext_addr = sc_addr; -@@ -47,7 +47,7 @@ linux_sigtramp (struct cursor *c, ia64_loc_t prev_cfm_loc, - && IA64_GET_ADDR (c->loc[IA64_REG_IP]) == sc_addr + LINUX_SC_BR_OFF + 8) - { - /* Linux kernels before 2.4.19 and 2.5.10 had buggy -- unwind info for sigtramp. Fix it up here. */ -+ unwind info for sigtramp. Fix it up here. */ - c->loc[IA64_REG_IP] = IA64_LOC_ADDR (sc_addr + LINUX_SC_IP_OFF, 0); - c->cfm_loc = IA64_LOC_ADDR (sc_addr + LINUX_SC_CFM_OFF, 0); - } -@@ -55,14 +55,14 @@ linux_sigtramp (struct cursor *c, ia64_loc_t prev_cfm_loc, - /* do what can't be described by unwind directives: */ - c->loc[IA64_REG_PFS] = IA64_LOC_ADDR (sc_addr + LINUX_SC_AR_PFS_OFF, 0); - c->ec_loc = prev_cfm_loc; -- *num_regsp = c->cfm & 0x7f; /* size of frame */ -+ *num_regsp = c->cfm & 0x7f; /* size of frame */ - return 0; - #endif - } - - static inline int - linux_interrupt (struct cursor *c, ia64_loc_t prev_cfm_loc, -- unw_word_t *num_regsp, int marker) -+ unw_word_t *num_regsp, int marker) - { - #if defined(UNW_LOCAL_ONLY) && !(defined(__linux) && defined(__KERNEL__)) - return -UNW_EINVAL; -@@ -79,19 +79,19 @@ linux_interrupt (struct cursor *c, ia64_loc_t prev_cfm_loc, - - /* do what can't be described by unwind directives: */ - if (marker == ABI_MARKER_OLD_LINUX_INTERRUPT) -- pfs_loc = IA64_LOC_ADDR (sc_addr + LINUX_OLD_PT_PFS_OFF, 0); -+ pfs_loc = IA64_LOC_ADDR (sc_addr + LINUX_OLD_PT_PFS_OFF, 0); - else -- pfs_loc = IA64_LOC_ADDR (sc_addr + LINUX_PT_PFS_OFF, 0); -+ pfs_loc = IA64_LOC_ADDR (sc_addr + LINUX_PT_PFS_OFF, 0); - c->loc[IA64_REG_PFS] = pfs_loc; - c->ec_loc = prev_cfm_loc; -- *num_regsp = num_regs; /* size of frame */ -+ *num_regsp = num_regs; /* size of frame */ - return 0; - #endif - } - - static inline int - hpux_sigtramp (struct cursor *c, ia64_loc_t prev_cfm_loc, -- unw_word_t *num_regsp) -+ unw_word_t *num_regsp) - { - #if defined(UNW_LOCAL_ONLY) && !defined(__hpux) - return -UNW_EINVAL; -@@ -177,36 +177,36 @@ check_rbs_switch (struct cursor *c) - if (c->pi.flags & UNW_PI_FLAG_IA64_RBS_SWITCH) - { - /* Got ourselves a frame that has saved ar.bspstore, ar.bsp, -- and ar.rnat, so we're all set for rbs-switching: */ -+ and ar.rnat, so we're all set for rbs-switching: */ - if ((ret = ia64_get (c, c->loc[IA64_REG_BSP], &saved_bsp)) < 0 -- || (ret = ia64_get (c, c->loc[IA64_REG_BSPSTORE], &saved_bspstore))) -- return ret; -+ || (ret = ia64_get (c, c->loc[IA64_REG_BSPSTORE], &saved_bspstore))) -+ return ret; - } - else if ((c->abi_marker == ABI_MARKER_LINUX_SIGTRAMP -- || c->abi_marker == ABI_MARKER_OLD_LINUX_SIGTRAMP) -- && !IA64_IS_REG_LOC (c->loc[IA64_REG_BSP]) -- && (IA64_GET_ADDR (c->loc[IA64_REG_BSP]) -- == c->sigcontext_addr + LINUX_SC_AR_BSP_OFF)) -+ || c->abi_marker == ABI_MARKER_OLD_LINUX_SIGTRAMP) -+ && !IA64_IS_REG_LOC (c->loc[IA64_REG_BSP]) -+ && (IA64_GET_ADDR (c->loc[IA64_REG_BSP]) -+ == c->sigcontext_addr + LINUX_SC_AR_BSP_OFF)) - { - /* When Linux delivers a signal on an alternate stack, it -- does things a bit differently from what the unwind -- conventions allow us to describe: instead of saving -- ar.rnat, ar.bsp, and ar.bspstore, it saves the former two -- plus the "loadrs" value. Because of this, we need to -- detect & record a potential rbs-area switch -- manually... */ -+ does things a bit differently from what the unwind -+ conventions allow us to describe: instead of saving -+ ar.rnat, ar.bsp, and ar.bspstore, it saves the former two -+ plus the "loadrs" value. Because of this, we need to -+ detect & record a potential rbs-area switch -+ manually... */ - - /* If ar.bsp has been saved already AND the current bsp is -- not equal to the saved value, then we know for sure that -- we're past the point where the backing store has been -- switched (and before the point where it's restored). */ -+ not equal to the saved value, then we know for sure that -+ we're past the point where the backing store has been -+ switched (and before the point where it's restored). */ - if ((ret = ia64_get (c, IA64_LOC_ADDR (c->sigcontext_addr -- + LINUX_SC_AR_BSP_OFF, 0), -- &saved_bsp) < 0) -- || (ret = ia64_get (c, IA64_LOC_ADDR (c->sigcontext_addr -- + LINUX_SC_LOADRS_OFF, 0), -- &loadrs) < 0)) -- return ret; -+ + LINUX_SC_AR_BSP_OFF, 0), -+ &saved_bsp) < 0) -+ || (ret = ia64_get (c, IA64_LOC_ADDR (c->sigcontext_addr -+ + LINUX_SC_LOADRS_OFF, 0), -+ &loadrs) < 0)) -+ return ret; - loadrs >>= 16; - ndirty = rse_num_regs (c->bsp - loadrs, c->bsp); - saved_bspstore = rse_skip_regs (saved_bsp, -ndirty); -@@ -267,54 +267,54 @@ update_frame_state (struct cursor *c) - { - c->last_abi_marker = c->abi_marker; - switch (ia64_get_abi_marker (c)) -- { -- case ABI_MARKER_LINUX_SIGTRAMP: -- case ABI_MARKER_OLD_LINUX_SIGTRAMP: -- ia64_set_abi (c, ABI_LINUX); -- if ((ret = linux_sigtramp (c, prev_cfm_loc, &num_regs)) < 0) -- return ret; -- break; -- -- case ABI_MARKER_OLD_LINUX_INTERRUPT: -- case ABI_MARKER_LINUX_INTERRUPT: -- ia64_set_abi (c, ABI_LINUX); -- if ((ret = linux_interrupt (c, prev_cfm_loc, &num_regs, -- c->abi_marker)) < 0) -- return ret; -- break; -- -- case ABI_MARKER_HP_UX_SIGTRAMP: -- ia64_set_abi (c, ABI_HPUX); -- if ((ret = hpux_sigtramp (c, prev_cfm_loc, &num_regs)) < 0) -- return ret; -- break; -- -- default: -- Debug (1, "unknown ABI marker: ABI=%u, context=%u\n", -- c->abi_marker >> 8, c->abi_marker & 0xff); -- return -UNW_EINVAL; -- } -+ { -+ case ABI_MARKER_LINUX_SIGTRAMP: -+ case ABI_MARKER_OLD_LINUX_SIGTRAMP: -+ ia64_set_abi (c, ABI_LINUX); -+ if ((ret = linux_sigtramp (c, prev_cfm_loc, &num_regs)) < 0) -+ return ret; -+ break; -+ -+ case ABI_MARKER_OLD_LINUX_INTERRUPT: -+ case ABI_MARKER_LINUX_INTERRUPT: -+ ia64_set_abi (c, ABI_LINUX); -+ if ((ret = linux_interrupt (c, prev_cfm_loc, &num_regs, -+ c->abi_marker)) < 0) -+ return ret; -+ break; -+ -+ case ABI_MARKER_HP_UX_SIGTRAMP: -+ ia64_set_abi (c, ABI_HPUX); -+ if ((ret = hpux_sigtramp (c, prev_cfm_loc, &num_regs)) < 0) -+ return ret; -+ break; -+ -+ default: -+ Debug (1, "unknown ABI marker: ABI=%u, context=%u\n", -+ c->abi_marker >> 8, c->abi_marker & 0xff); -+ return -UNW_EINVAL; -+ } - Debug (12, "sigcontext_addr=%lx (ret=%d)\n", -- (unsigned long) c->sigcontext_addr, ret); -+ (unsigned long) c->sigcontext_addr, ret); - - c->sigcontext_off = c->sigcontext_addr - c->sp; - - /* update the IP cache: */ - if ((ret = ia64_get (c, c->loc[IA64_REG_IP], &ip)) < 0) -- return ret; -+ return ret; - c->ip = ip; - if (ip == 0) -- /* end of frame-chain reached */ -- return 0; -+ /* end of frame-chain reached */ -+ return 0; - } - else -- num_regs = (c->cfm >> 7) & 0x7f; /* size of locals */ -+ num_regs = (c->cfm >> 7) & 0x7f; /* size of locals */ - - if (!IA64_IS_NULL_LOC (c->loc[IA64_REG_BSP])) - { - ret = check_rbs_switch (c); - if (ret < 0) -- return ret; -+ return ret; - } - - c->bsp = rse_skip_regs (c->bsp, -num_regs); -@@ -324,8 +324,8 @@ update_frame_state (struct cursor *c) - - if (c->ip == prev_ip && c->sp == prev_sp && c->bsp == prev_bsp) - { -- dprintf ("%s: ip, sp, and bsp unchanged; stopping here (ip=0x%lx)\n", -- __FUNCTION__, (long) ip); -+ Dprintf ("%s: ip, sp, and bsp unchanged; stopping here (ip=0x%lx)\n", -+ __FUNCTION__, (long) ip); - return -UNW_EBADFRAME; - } - -diff --git a/frysk-imports/libunwind/src/ia64/Gtables.c b/frysk-imports/libunwind/src/ia64/Gtables.c -index c3448c8..6959cae 100644 ---- a/frysk-imports/libunwind/src/ia64/Gtables.c -+++ b/frysk-imports/libunwind/src/ia64/Gtables.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2001-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -74,17 +74,17 @@ read_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *valp, void *arg) - } - - /* Helper macro for reading an ia64_table_entry from remote memory. */ --#define remote_read(addr, member) \ -- (*a->access_mem) (as, (addr) + offsetof (struct ia64_table_entry, \ -- member), &member, 0, arg) -+#define remote_read(addr, member) \ -+ (*a->access_mem) (as, (addr) + offsetof (struct ia64_table_entry, \ -+ member), &member, 0, arg) - - /* Lookup an unwind-table entry in remote memory. Returns 1 if an - entry is found, 0 if no entry is found, negative if an error - occurred reading remote memory. */ - static int - remote_lookup (unw_addr_space_t as, -- unw_word_t table, size_t table_size, unw_word_t rel_ip, -- struct ia64_table_entry *e, void *arg) -+ unw_word_t table, size_t table_size, unw_word_t rel_ip, -+ struct ia64_table_entry *e, void *arg) - { - unw_word_t e_addr = 0, start_offset, end_offset, info_offset; - unw_accessors_t *a = unw_get_accessors (as); -@@ -97,20 +97,20 @@ remote_lookup (unw_addr_space_t as, - mid = (lo + hi) / 2; - e_addr = table + mid * sizeof (struct ia64_table_entry); - if ((ret = remote_read (e_addr, start_offset)) < 0) -- return ret; -+ return ret; - - if (rel_ip < start_offset) -- hi = mid; -+ hi = mid; - else -- { -- if ((ret = remote_read (e_addr, end_offset)) < 0) -- return ret; -- -- if (rel_ip >= end_offset) -- lo = mid + 1; -- else -- break; -- } -+ { -+ if ((ret = remote_read (e_addr, end_offset)) < 0) -+ return ret; -+ -+ if (rel_ip >= end_offset) -+ lo = mid + 1; -+ else -+ break; -+ } - } - if (rel_ip < start_offset || rel_ip >= end_offset) - return 0; -@@ -157,7 +157,7 @@ _Uia64_find_dyn_list (unw_addr_space_t as, unw_dyn_info_t *di, void *arg) - table_size = di->u.ti.table_len * sizeof (di->u.ti.table_data[0]); - segbase = di->u.ti.segbase; - if (table_size < sizeof (struct ia64_table_entry)) -- return 0; -+ return 0; - start_offset = e[0].start_offset; - end_offset = e[0].end_offset; - info_offset = e[0].info_offset; -@@ -165,18 +165,18 @@ _Uia64_find_dyn_list (unw_addr_space_t as, unw_dyn_info_t *di, void *arg) - - case UNW_INFO_FORMAT_REMOTE_TABLE: - { -- unw_accessors_t *a = unw_get_accessors (as); -- unw_word_t e_addr = di->u.rti.table_data; -- -- table_size = di->u.rti.table_len * sizeof (unw_word_t); -- segbase = di->u.rti.segbase; -- if (table_size < sizeof (struct ia64_table_entry)) -- return 0; -- -- if ( (ret = remote_read (e_addr, start_offset) < 0) -- || (ret = remote_read (e_addr, end_offset) < 0) -- || (ret = remote_read (e_addr, info_offset) < 0)) -- return ret; -+ unw_accessors_t *a = unw_get_accessors (as); -+ unw_word_t e_addr = di->u.rti.table_data; -+ -+ table_size = di->u.rti.table_len * sizeof (unw_word_t); -+ segbase = di->u.rti.segbase; -+ if (table_size < sizeof (struct ia64_table_entry)) -+ return 0; -+ -+ if ( (ret = remote_read (e_addr, start_offset) < 0) -+ || (ret = remote_read (e_addr, end_offset) < 0) -+ || (ret = remote_read (e_addr, info_offset) < 0)) -+ return ret; - } - break; - } -@@ -236,11 +236,11 @@ lookup (struct ia64_table_entry *table, size_t table_size, unw_word_t rel_ip) - mid = (lo + hi) / 2; - e = table + mid; - if (rel_ip < e->start_offset) -- hi = mid; -+ hi = mid; - else if (rel_ip >= e->end_offset) -- lo = mid + 1; -+ lo = mid + 1; - else -- break; -+ break; - } - if (rel_ip < e->start_offset || rel_ip >= e->end_offset) - return NULL; -@@ -249,17 +249,20 @@ lookup (struct ia64_table_entry *table, size_t table_size, unw_word_t rel_ip) - - PROTECTED int - unw_search_ia64_unwind_table (unw_addr_space_t as, unw_word_t ip, -- unw_dyn_info_t *di, unw_proc_info_t *pi, -- int need_unwind_info, void *arg) -+ unw_dyn_info_t *di, unw_proc_info_t *pi, -+ int need_unwind_info, void *arg) - { - unw_word_t addr, hdr_addr, info_addr, info_end_addr, hdr, *wp; - const struct ia64_table_entry *e = NULL; - unw_word_t handler_offset, segbase = 0; - int ret, is_local; -+#ifndef UNW_LOCAL_ONLY -+ struct ia64_table_entry ent; -+#endif - - assert ((di->format == UNW_INFO_FORMAT_TABLE -- || di->format == UNW_INFO_FORMAT_REMOTE_TABLE) -- && (ip >= di->start_ip && ip < di->end_ip)); -+ || di->format == UNW_INFO_FORMAT_REMOTE_TABLE) -+ && (ip >= di->start_ip && ip < di->end_ip)); - - pi->flags = 0; - pi->unwind_info = 0; -@@ -269,28 +272,26 @@ unw_search_ia64_unwind_table (unw_addr_space_t as, unw_word_t ip, - { - segbase = di->u.ti.segbase; - e = lookup ((struct ia64_table_entry *) di->u.ti.table_data, -- di->u.ti.table_len * sizeof (unw_word_t), -- ip - segbase); -+ di->u.ti.table_len * sizeof (unw_word_t), -+ ip - segbase); - } - #ifndef UNW_LOCAL_ONLY - else - { -- struct ia64_table_entry ent; -- - segbase = di->u.rti.segbase; - if ((ret = remote_lookup (as, di->u.rti.table_data, -- di->u.rti.table_len * sizeof (unw_word_t), -- ip - segbase, &ent, arg)) < 0) -- return ret; -+ di->u.rti.table_len * sizeof (unw_word_t), -+ ip - segbase, &ent, arg)) < 0) -+ return ret; - if (ret) -- e = &ent; -+ e = &ent; - } - #endif - if (!e) - { - /* IP is inside this table's range, but there is no explicit -- unwind info => use default conventions (i.e., this is NOT an -- error). */ -+ unwind info => use default conventions (i.e., this is NOT an -+ error). */ - memset (pi, 0, sizeof (*pi)); - pi->start_ip = 0; - pi->end_ip = 0; -@@ -315,8 +316,8 @@ unw_search_ia64_unwind_table (unw_addr_space_t as, unw_word_t ip, - if (IA64_UNW_VER (hdr) != 1) - { - Debug (1, "Unknown header version %ld (hdr word=0x%lx @ 0x%lx)\n", -- IA64_UNW_VER (hdr), (unsigned long) hdr, -- (unsigned long) hdr_addr); -+ IA64_UNW_VER (hdr), (unsigned long) hdr, -+ (unsigned long) hdr_addr); - return -UNW_EBADVERSION; - } - -@@ -332,36 +333,36 @@ unw_search_ia64_unwind_table (unw_addr_space_t as, unw_word_t ip, - pi->unwind_info_size = 8 * IA64_UNW_LENGTH (hdr); - - if (is_local) -- pi->unwind_info = (void *) (uintptr_t) info_addr; -+ pi->unwind_info = (void *) (uintptr_t) info_addr; - else -- { -- /* Internalize unwind info. Note: since we're doing this -- only for non-local address spaces, there is no -- signal-safety issue and it is OK to use malloc()/free(). */ -- pi->unwind_info = malloc (8 * IA64_UNW_LENGTH (hdr)); -- if (!pi->unwind_info) -- return -UNW_ENOMEM; -- -- wp = (unw_word_t *) pi->unwind_info; -- for (addr = info_addr; addr < info_end_addr; addr += 8, ++wp) -- { -- if ((ret = read_mem (as, addr, wp, arg)) < 0) -- { -- free (pi->unwind_info); -- return ret; -- } -- } -- } -+ { -+ /* Internalize unwind info. Note: since we're doing this -+ only for non-local address spaces, there is no -+ signal-safety issue and it is OK to use malloc()/free(). */ -+ pi->unwind_info = malloc (8 * IA64_UNW_LENGTH (hdr)); -+ if (!pi->unwind_info) -+ return -UNW_ENOMEM; -+ -+ wp = (unw_word_t *) pi->unwind_info; -+ for (addr = info_addr; addr < info_end_addr; addr += 8, ++wp) -+ { -+ if ((ret = read_mem (as, addr, wp, arg)) < 0) -+ { -+ free (pi->unwind_info); -+ return ret; -+ } -+ } -+ } - } - - if (IA64_UNW_FLAG_EHANDLER (hdr) || IA64_UNW_FLAG_UHANDLER (hdr)) - { - /* read the personality routine address (address is gp-relative): */ - if ((ret = read_mem (as, info_end_addr, &handler_offset, arg)) < 0) -- return ret; -+ return ret; - Debug (4, "handler ptr @ offset=%lx, gp=%lx\n", handler_offset, di->gp); - if ((read_mem (as, handler_offset + di->gp, &pi->handler, arg)) < 0) -- return ret; -+ return ret; - } - pi->lsda = info_end_addr + 8; - pi->gp = di->gp; -@@ -386,7 +387,7 @@ unw_search_ia64_unwind_table (unw_addr_space_t as, unw_word_t ip, - # include - # include - # ifndef __NR_getunwind --# define __NR_getunwind 1215 -+# define __NR_getunwind 1215 - # endif - - static unsigned long -@@ -411,8 +412,8 @@ get_kernel_table (unw_dyn_info_t *di) - ktab = sos_alloc (size); - if (!ktab) - { -- dprintf (__FILE__".%s: failed to allocate %zu bytes", -- __FUNCTION__, size); -+ Dprintf (__FILE__".%s: failed to allocate %zu bytes", -+ __FUNCTION__, size); - return -UNW_ENOMEM; - } - getunwind (ktab, size); -@@ -431,8 +432,8 @@ get_kernel_table (unw_dyn_info_t *di) - di->u.ti.table_data = (unw_word_t *) ktab; - - Debug (16, "found table `%s': [%lx-%lx) segbase=%lx len=%lu\n", -- (char *) di->u.ti.name_ptr, di->start_ip, di->end_ip, -- di->u.ti.segbase, di->u.ti.table_len); -+ (char *) di->u.ti.name_ptr, di->start_ip, di->end_ip, -+ di->u.ti.segbase, di->u.ti.table_len); - return 0; - } - -@@ -477,11 +478,11 @@ callback (struct dl_phdr_info *info, size_t size, void *ptr) - - /* Make sure struct dl_phdr_info is at least as big as we need. */ - if (size < offsetof (struct dl_phdr_info, dlpi_phnum) -- + sizeof (info->dlpi_phnum)) -+ + sizeof (info->dlpi_phnum)) - return -1; - - Debug (16, "checking `%s' (load_base=%lx)\n", -- info->dlpi_name, info->dlpi_addr); -+ info->dlpi_name, info->dlpi_addr); - - phdr = info->dlpi_phdr; - load_base = info->dlpi_addr; -@@ -494,52 +495,52 @@ callback (struct dl_phdr_info *info, size_t size, void *ptr) - for (n = info->dlpi_phnum; --n >= 0; phdr++) - { - if (phdr->p_type == PT_LOAD) -- { -- Elf64_Addr vaddr = phdr->p_vaddr + load_base; -- if (di->u.ti.segbase >= vaddr -- && di->u.ti.segbase < vaddr + phdr->p_memsz) -- p_text = phdr; -- } -+ { -+ Elf64_Addr vaddr = phdr->p_vaddr + load_base; -+ if (di->u.ti.segbase >= vaddr -+ && di->u.ti.segbase < vaddr + phdr->p_memsz) -+ p_text = phdr; -+ } - else if (phdr->p_type == PT_IA_64_UNWIND) -- p_unwind = phdr; -+ p_unwind = phdr; - else if (phdr->p_type == PT_DYNAMIC) -- p_dynamic = phdr; -+ p_dynamic = phdr; - } - if (!p_text || !p_unwind) - return 0; - - if (likely (p_unwind->p_vaddr >= p_text->p_vaddr -- && p_unwind->p_vaddr < p_text->p_vaddr + p_text->p_memsz)) -+ && p_unwind->p_vaddr < p_text->p_vaddr + p_text->p_memsz)) - /* normal case: unwind table is inside text segment */ - segbase = p_text->p_vaddr + load_base; - else - { - /* Special case: unwind table is in some other segment; this -- happens for the Linux kernel's gate DSO, for example. */ -+ happens for the Linux kernel's gate DSO, for example. */ - phdr = info->dlpi_phdr; - for (n = info->dlpi_phnum; --n >= 0; phdr++) -- { -- if (phdr->p_type == PT_LOAD && p_unwind->p_vaddr >= phdr->p_vaddr -- && p_unwind->p_vaddr < phdr->p_vaddr + phdr->p_memsz) -- { -- segbase = phdr->p_vaddr + load_base; -- break; -- } -- } -+ { -+ if (phdr->p_type == PT_LOAD && p_unwind->p_vaddr >= phdr->p_vaddr -+ && p_unwind->p_vaddr < phdr->p_vaddr + phdr->p_memsz) -+ { -+ segbase = phdr->p_vaddr + load_base; -+ break; -+ } -+ } - } - - if (p_dynamic) - { - /* For dynamicly linked executables and shared libraries, -- DT_PLTGOT is the gp value for that object. */ -+ DT_PLTGOT is the gp value for that object. */ - Elf64_Dyn *dyn = (Elf64_Dyn *)(p_dynamic->p_vaddr + load_base); - for (; dyn->d_tag != DT_NULL; ++dyn) -- if (dyn->d_tag == DT_PLTGOT) -- { -- /* On IA-64, _DYNAMIC is writable and GLIBC has relocated it. */ -- di->gp = dyn->d_un.d_ptr; -- break; -- } -+ if (dyn->d_tag == DT_PLTGOT) -+ { -+ /* On IA-64, _DYNAMIC is writable and GLIBC has relocated it. */ -+ di->gp = dyn->d_un.d_ptr; -+ break; -+ } - } - else - /* Otherwise this is a static executable with no _DYNAMIC. -@@ -554,8 +555,8 @@ callback (struct dl_phdr_info *info, size_t size, void *ptr) - di->u.ti.segbase = segbase; - - Debug (16, "found table `%s': segbase=%lx, len=%lu, gp=%lx, " -- "table_data=%p\n", (char *) di->u.ti.name_ptr, di->u.ti.segbase, -- di->u.ti.table_len, di->gp, di->u.ti.table_data); -+ "table_data=%p\n", (char *) di->u.ti.name_ptr, di->u.ti.segbase, -+ di->u.ti.table_len, di->gp, di->u.ti.table_data); - return 1; - } - -@@ -610,7 +611,7 @@ check_callback (struct dl_phdr_info *info, size_t size, void *ptr) - - as->shared_object_removals = info->dlpi_subs; - unw_flush_cache (as, 0, 0); -- return -1; /* indicate that there were removals */ -+ return -1; /* indicate that there were removals */ - # else - return 1; - # endif -@@ -622,9 +623,9 @@ validate_cache (unw_addr_space_t as) - intrmask_t saved_mask; - int ret; - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -+ SIGPROCMASK (SIG_SETMASK, &unwi_full_mask, &saved_mask); - ret = dl_iterate_phdr (check_callback, as); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ SIGPROCMASK (SIG_SETMASK, &saved_mask, NULL); - return ret; - } - -@@ -644,32 +645,32 @@ validate_cache (unw_addr_space_t as) - - HIDDEN int - tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, int need_unwind_info, void *arg) -+ unw_proc_info_t *pi, int need_unwind_info, void *arg) - { - # if defined(HAVE_DL_ITERATE_PHDR) - unw_dyn_info_t di, *dip = &di; - intrmask_t saved_mask; - int ret; - -- di.u.ti.segbase = ip; /* this is cheap... */ -+ di.u.ti.segbase = ip; /* this is cheap... */ - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -+ SIGPROCMASK (SIG_SETMASK, &unwi_full_mask, &saved_mask); - ret = dl_iterate_phdr (callback, &di); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ SIGPROCMASK (SIG_SETMASK, &saved_mask, NULL); - - if (ret <= 0) - { - if (!kernel_table.u.ti.table_data) -- { -- if ((ret = get_kernel_table (&kernel_table)) < 0) -- return ret; -- } -+ { -+ if ((ret = get_kernel_table (&kernel_table)) < 0) -+ return ret; -+ } - if (ip < kernel_table.start_ip || ip >= kernel_table.end_ip) -- return -UNW_ENOINFO; -+ return -UNW_ENOINFO; - dip = &kernel_table; - } - # elif defined(HAVE_DLMODINFO) --# define UNWIND_TBL_32BIT 0x8000000000000000 -+# define UNWIND_TBL_32BIT 0x8000000000000000 - struct load_module_desc lmd; - unw_dyn_info_t di, *dip = &di; - struct unwind_header -@@ -687,7 +688,7 @@ tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip, - di.start_ip = lmd.text_base; - di.end_ip = lmd.text_base + lmd.text_size; - di.gp = lmd.linkage_ptr; -- di.u.ti.name_ptr = 0; /* no obvious table-name available */ -+ di.u.ti.name_ptr = 0; /* no obvious table-name available */ - di.u.ti.segbase = lmd.text_base; - - uhdr = (struct unwind_header *) lmd.unwind_base; -@@ -696,7 +697,7 @@ tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip, - && (uhdr->header_version & ~UNWIND_TBL_32BIT) != 2) - { - Debug (1, "encountered unknown unwind header version %ld\n", -- (long) (uhdr->header_version & ~UNWIND_TBL_32BIT)); -+ (long) (uhdr->header_version & ~UNWIND_TBL_32BIT)); - return -UNW_EBADVERSION; - } - if (uhdr->header_version & UNWIND_TBL_32BIT) -@@ -707,11 +708,11 @@ tdep_find_proc_info (unw_addr_space_t as, unw_word_t ip, - - di.u.ti.table_data = (unw_word_t *) (di.u.ti.segbase + uhdr->start_offset); - di.u.ti.table_len = ((uhdr->end_offset - uhdr->start_offset) -- / sizeof (unw_word_t)); -+ / sizeof (unw_word_t)); - - Debug (16, "found table `%s': segbase=%lx, len=%lu, gp=%lx, " -- "table_data=%p\n", (char *) di.u.ti.name_ptr, di.u.ti.segbase, -- di.u.ti.table_len, di.gp, di.u.ti.table_data); -+ "table_data=%p\n", (char *) di.u.ti.name_ptr, di.u.ti.segbase, -+ di.u.ti.table_len, di.gp, di.u.ti.table_data); - # endif - - /* now search the table: */ -diff --git a/frysk-imports/libunwind/src/ia64/Lfind_unwind_table.c b/frysk-imports/libunwind/src/ia64/Lfind_unwind_table.c -new file mode 100644 -index 0000000..68e269f ---- /dev/null -+++ b/frysk-imports/libunwind/src/ia64/Lfind_unwind_table.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gfind_unwind_table.c" -+#endif -diff --git a/frysk-imports/libunwind/src/ia64/init.h b/frysk-imports/libunwind/src/ia64/init.h -index d6a1b22..6628a1d 100644 ---- a/frysk-imports/libunwind/src/ia64/init.h -+++ b/frysk-imports/libunwind/src/ia64/init.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -29,35 +29,33 @@ static ALWAYS_INLINE int - common_init (struct cursor *c, unw_word_t sp, unw_word_t bsp) - { - unw_word_t bspstore, rbs_base; -- uint8_t *natp; - int ret; - - if (c->as->caching_policy != UNW_CACHE_NONE) - /* ensure cache doesn't have any stale contents: */ - ia64_validate_cache (c->as, c->as_arg); - -- c->cfm_loc = IA64_REG_LOC (c, UNW_IA64_CFM); -- c->loc[IA64_REG_BSP] = IA64_NULL_LOC; -- c->loc[IA64_REG_BSPSTORE] = IA64_REG_LOC (c, UNW_IA64_AR_BSPSTORE); -- c->loc[IA64_REG_PFS] = IA64_REG_LOC (c, UNW_IA64_AR_PFS); -- c->loc[IA64_REG_RNAT] = IA64_REG_LOC (c, UNW_IA64_AR_RNAT); -- c->loc[IA64_REG_IP] = IA64_REG_LOC (c, UNW_IA64_IP); -+ c->cfm_loc = IA64_REG_LOC (c, UNW_IA64_CFM); -+ c->loc[IA64_REG_BSP] = IA64_NULL_LOC; -+ c->loc[IA64_REG_BSPSTORE] = IA64_REG_LOC (c, UNW_IA64_AR_BSPSTORE); -+ c->loc[IA64_REG_PFS] = IA64_REG_LOC (c, UNW_IA64_AR_PFS); -+ c->loc[IA64_REG_RNAT] = IA64_REG_LOC (c, UNW_IA64_AR_RNAT); -+ c->loc[IA64_REG_IP] = IA64_REG_LOC (c, UNW_IA64_IP); - c->loc[IA64_REG_PRI_UNAT_MEM] = IA64_NULL_LOC; /* no primary UNaT location */ -- c->loc[IA64_REG_UNAT] = IA64_REG_LOC (c, UNW_IA64_AR_UNAT); -- c->loc[IA64_REG_PR] = IA64_REG_LOC (c, UNW_IA64_PR); -- c->loc[IA64_REG_LC] = IA64_REG_LOC (c, UNW_IA64_AR_LC); -- c->loc[IA64_REG_FPSR] = IA64_REG_LOC (c, UNW_IA64_AR_FPSR); -+ c->loc[IA64_REG_UNAT] = IA64_REG_LOC (c, UNW_IA64_AR_UNAT); -+ c->loc[IA64_REG_PR] = IA64_REG_LOC (c, UNW_IA64_PR); -+ c->loc[IA64_REG_LC] = IA64_REG_LOC (c, UNW_IA64_AR_LC); -+ c->loc[IA64_REG_FPSR] = IA64_REG_LOC (c, UNW_IA64_AR_FPSR); - - c->loc[IA64_REG_R4] = IA64_REG_LOC (c, UNW_IA64_GR + 4); - c->loc[IA64_REG_R5] = IA64_REG_LOC (c, UNW_IA64_GR + 5); - c->loc[IA64_REG_R6] = IA64_REG_LOC (c, UNW_IA64_GR + 6); - c->loc[IA64_REG_R7] = IA64_REG_LOC (c, UNW_IA64_GR + 7); - -- natp = c->nat_bitnr; -- c->loc[IA64_REG_NAT4] = IA64_REG_NAT_LOC (c, UNW_IA64_NAT + 4, &natp[0]); -- c->loc[IA64_REG_NAT5] = IA64_REG_NAT_LOC (c, UNW_IA64_NAT + 5, &natp[1]); -- c->loc[IA64_REG_NAT6] = IA64_REG_NAT_LOC (c, UNW_IA64_NAT + 6, &natp[2]); -- c->loc[IA64_REG_NAT7] = IA64_REG_NAT_LOC (c, UNW_IA64_NAT + 7, &natp[3]); -+ c->loc[IA64_REG_NAT4] = IA64_REG_NAT_LOC (c, UNW_IA64_NAT + 4, &c->nat_bitnr[0]); -+ c->loc[IA64_REG_NAT5] = IA64_REG_NAT_LOC (c, UNW_IA64_NAT + 5, &c->nat_bitnr[1]); -+ c->loc[IA64_REG_NAT6] = IA64_REG_NAT_LOC (c, UNW_IA64_NAT + 6, &c->nat_bitnr[2]); -+ c->loc[IA64_REG_NAT7] = IA64_REG_NAT_LOC (c, UNW_IA64_NAT + 7, &c->nat_bitnr[3]); - - c->loc[IA64_REG_B1] = IA64_REG_LOC (c, UNW_IA64_BR + 1); - c->loc[IA64_REG_B2] = IA64_REG_LOC (c, UNW_IA64_BR + 2); -@@ -117,8 +115,8 @@ common_init (struct cursor *c, unw_word_t sp, unw_word_t bsp) - c->rbs_area[0].size = bspstore - rbs_base; - c->rbs_area[0].rnat_loc = IA64_REG_LOC (c, UNW_IA64_AR_RNAT); - Debug (10, "initial rbs-area: [0x%llx-0x%llx), rnat@%s\n", -- (long long) rbs_base, (long long) c->rbs_area[0].end, -- ia64_strloc (c->rbs_area[0].rnat_loc)); -+ (long long) rbs_base, (long long) c->rbs_area[0].end, -+ ia64_strloc (c->rbs_area[0].rnat_loc)); - - c->pi.flags = 0; - -diff --git a/frysk-imports/libunwind/src/ia64/mk_Gcursor_i.c b/frysk-imports/libunwind/src/ia64/mk_Gcursor_i.c -index 51cb0f4..67b14d5 100644 ---- a/frysk-imports/libunwind/src/ia64/mk_Gcursor_i.c -+++ b/frysk-imports/libunwind/src/ia64/mk_Gcursor_i.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -25,82 +25,41 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* Utility to generate cursor_i.h. */ - --#include -- - #include "libunwind_i.h" - - #ifdef offsetof - # undef offsetof - #endif - --#define offsetof(type,field) ((char *) &((type *) 0)->field - (char *) 0) -- --static struct -- { -- const char name[256]; -- unsigned long value; -- } --tab[] = -- { -- { "IP_OFF", offsetof (struct cursor, ip) }, -- { "PR_OFF", offsetof (struct cursor, pr) }, -- { "BSP_OFF", offsetof (struct cursor, bsp) }, -- { "PSP_OFF", offsetof (struct cursor, psp) }, -- { "PFS_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_PFS]) }, -- { "RNAT_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_RNAT]) }, -- { "UNAT_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_UNAT]) }, -- { "LC_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_LC]) }, -- { "FPSR_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_FPSR]) }, -- { "B1_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B1]) }, -- { "B2_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B2]) }, -- { "B3_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B3]) }, -- { "B4_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B4]) }, -- { "B5_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B5]) }, -- { "F2_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F2]) }, -- { "F3_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F3]) }, -- { "F4_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F4]) }, -- { "F5_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F5]) }, -- { "FR_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F16]) }, -- { "LOC_SIZE", -- (offsetof (struct cursor, loc[1]) - offsetof (struct cursor, loc[0])) -- }, -- { "SIGCONTEXT_ADDR_OFF", offsetof (struct cursor, sigcontext_addr) }, --}; -+#define offsetof(type,field) ((char *) &((type *) 0)->field - (char *) 0) - --static const char *tabs = "\t\t\t\t\t\t\t\t\t\t"; -+#define OFFSET(sym, offset) \ -+ asm volatile("\n->" #sym " %0" : : "i" (offset)) - - int --main (int argc, char **argv) -+main (void) - { -- const char *space; -- int i, num_tabs; -- size_t len; -- -- printf ("#ifndef cursor_i_h\n"); -- printf ("#define cursor_i_h\n\n"); -- -- printf ("/*\n * DO NOT MODIFY\n *\n * This file was generated by " -- "%s.\n *\n */\n\n", argv[0]); -- -- for (i = 0; i < (int) (sizeof (tab) / sizeof (tab[0])); ++i) -- { -- if (tab[i].name[0] == '\0') -- printf ("\n"); -- else -- { -- len = strlen (tab[i].name); -- -- num_tabs = (40 - len) / 8; -- if (num_tabs <= 0) -- space = " "; -- else -- space = strchr(tabs, '\0') - (40 - len) / 8; -- -- printf ("#define %s%s%lu\t/* 0x%lx */\n", -- tab[i].name, space, tab[i].value, tab[i].value); -- } -- } -- -- printf ("\n#endif /* cursor_i_h */\n"); -+ OFFSET("IP_OFF", offsetof (struct cursor, ip)); -+ OFFSET("PR_OFF", offsetof (struct cursor, pr)); -+ OFFSET("BSP_OFF", offsetof (struct cursor, bsp)); -+ OFFSET("PSP_OFF", offsetof (struct cursor, psp)); -+ OFFSET("PFS_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_PFS])); -+ OFFSET("RNAT_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_RNAT])); -+ OFFSET("UNAT_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_UNAT])); -+ OFFSET("LC_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_LC])); -+ OFFSET("FPSR_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_FPSR])); -+ OFFSET("B1_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B1])); -+ OFFSET("B2_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B2])); -+ OFFSET("B3_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B3])); -+ OFFSET("B4_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B4])); -+ OFFSET("B5_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_B5])); -+ OFFSET("F2_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F2])); -+ OFFSET("F3_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F3])); -+ OFFSET("F4_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F4])); -+ OFFSET("F5_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F5])); -+ OFFSET("FR_LOC_OFF", offsetof (struct cursor, loc[IA64_REG_F16])); -+ OFFSET("LOC_SIZE", -+ (offsetof (struct cursor, loc[1]) - offsetof (struct cursor, loc[0]))); -+ OFFSET("SIGCONTEXT_ADDR_OFF", offsetof (struct cursor, sigcontext_addr)); - return 0; - } -diff --git a/frysk-imports/libunwind/src/ia64/mk_cursor_i b/frysk-imports/libunwind/src/ia64/mk_cursor_i -new file mode 100755 -index 0000000..9211f91 ---- /dev/null -+++ b/frysk-imports/libunwind/src/ia64/mk_cursor_i -@@ -0,0 +1,7 @@ -+#!/bin/sh -+test -z "$1" && exit 1 -+echo "/* GENERATED */" -+echo "#ifndef cursor_i_h" -+echo "#define cursor_i_h" -+sed -ne 's/^->"\(\S*\)" \(\d*\)/#define \1 \2/p' < $1 || exit $? -+echo "#endif" -diff --git a/frysk-imports/libunwind/src/ia64/offsets.h b/frysk-imports/libunwind/src/ia64/offsets.h -index b169933..5ab7f8b 100644 ---- a/frysk-imports/libunwind/src/ia64/offsets.h -+++ b/frysk-imports/libunwind/src/ia64/offsets.h -@@ -6,132 +6,132 @@ - number, siginfo pointer, and sigcontext pointer passed to the - signal handler. We use this to locate the sigcontext pointer. */ - --#define LINUX_SIGFRAME_ARG2_OFF 0x10 -+#define LINUX_SIGFRAME_ARG2_OFF 0x10 - --#define LINUX_SC_FLAGS_OFF 0x000 --#define LINUX_SC_NAT_OFF 0x008 --#define LINUX_SC_STACK_OFF 0x010 --#define LINUX_SC_IP_OFF 0x028 --#define LINUX_SC_CFM_OFF 0x030 --#define LINUX_SC_UM_OFF 0x038 --#define LINUX_SC_AR_RSC_OFF 0x040 --#define LINUX_SC_AR_BSP_OFF 0x048 --#define LINUX_SC_AR_RNAT_OFF 0x050 --#define LINUX_SC_AR_CCV 0x058 --#define LINUX_SC_AR_UNAT_OFF 0x060 --#define LINUX_SC_AR_FPSR_OFF 0x068 --#define LINUX_SC_AR_PFS_OFF 0x070 --#define LINUX_SC_AR_LC_OFF 0x078 --#define LINUX_SC_PR_OFF 0x080 --#define LINUX_SC_BR_OFF 0x088 --#define LINUX_SC_GR_OFF 0x0c8 --#define LINUX_SC_FR_OFF 0x1d0 --#define LINUX_SC_RBS_BASE_OFF 0x9d0 --#define LINUX_SC_LOADRS_OFF 0x9d8 --#define LINUX_SC_AR_CSD_OFF 0x9e0 --#define LINUX_SC_AR_SSD_OFF 0x9e8 --#define LINUX_SC_MASK 0xa50 -+#define LINUX_SC_FLAGS_OFF 0x000 -+#define LINUX_SC_NAT_OFF 0x008 -+#define LINUX_SC_STACK_OFF 0x010 -+#define LINUX_SC_IP_OFF 0x028 -+#define LINUX_SC_CFM_OFF 0x030 -+#define LINUX_SC_UM_OFF 0x038 -+#define LINUX_SC_AR_RSC_OFF 0x040 -+#define LINUX_SC_AR_BSP_OFF 0x048 -+#define LINUX_SC_AR_RNAT_OFF 0x050 -+#define LINUX_SC_AR_CCV 0x058 -+#define LINUX_SC_AR_UNAT_OFF 0x060 -+#define LINUX_SC_AR_FPSR_OFF 0x068 -+#define LINUX_SC_AR_PFS_OFF 0x070 -+#define LINUX_SC_AR_LC_OFF 0x078 -+#define LINUX_SC_PR_OFF 0x080 -+#define LINUX_SC_BR_OFF 0x088 -+#define LINUX_SC_GR_OFF 0x0c8 -+#define LINUX_SC_FR_OFF 0x1d0 -+#define LINUX_SC_RBS_BASE_OFF 0x9d0 -+#define LINUX_SC_LOADRS_OFF 0x9d8 -+#define LINUX_SC_AR_CSD_OFF 0x9e0 -+#define LINUX_SC_AR_SSD_OFF 0x9e8 -+#define LINUX_SC_MASK 0xa50 - - /* Layout of old Linux kernel interrupt frame (struct pt_regs). */ - --#define LINUX_OLD_PT_IPSR_OFF 0x000 --#define LINUX_OLD_PT_IIP_OFF 0x008 --#define LINUX_OLD_PT_IFS_OFF 0x010 --#define LINUX_OLD_PT_UNAT_OFF 0x018 --#define LINUX_OLD_PT_PFS_OFF 0x020 --#define LINUX_OLD_PT_RSC_OFF 0x028 --#define LINUX_OLD_PT_RNAT_OFF 0x030 -+#define LINUX_OLD_PT_IPSR_OFF 0x000 -+#define LINUX_OLD_PT_IIP_OFF 0x008 -+#define LINUX_OLD_PT_IFS_OFF 0x010 -+#define LINUX_OLD_PT_UNAT_OFF 0x018 -+#define LINUX_OLD_PT_PFS_OFF 0x020 -+#define LINUX_OLD_PT_RSC_OFF 0x028 -+#define LINUX_OLD_PT_RNAT_OFF 0x030 - #define LINUX_OLD_PT_BSPSTORE_OFF 0x038 --#define LINUX_OLD_PT_PR_OFF 0x040 --#define LINUX_OLD_PT_B6_OFF 0x048 --#define LINUX_OLD_PT_LOADRS_OFF 0x050 --#define LINUX_OLD_PT_R1_OFF 0x058 --#define LINUX_OLD_PT_R2_OFF 0x060 --#define LINUX_OLD_PT_R3_OFF 0x068 --#define LINUX_OLD_PT_R12_OFF 0x070 --#define LINUX_OLD_PT_R13_OFF 0x078 --#define LINUX_OLD_PT_R14_OFF 0x080 --#define LINUX_OLD_PT_R15_OFF 0x088 --#define LINUX_OLD_PT_R8_OFF 0x090 --#define LINUX_OLD_PT_R9_OFF 0x098 --#define LINUX_OLD_PT_R10_OFF 0x0a0 --#define LINUX_OLD_PT_R11_OFF 0x0a8 --#define LINUX_OLD_PT_R16_OFF 0x0b0 --#define LINUX_OLD_PT_R17_OFF 0x0b8 --#define LINUX_OLD_PT_R18_OFF 0x0c0 --#define LINUX_OLD_PT_R19_OFF 0x0c8 --#define LINUX_OLD_PT_R20_OFF 0x0d0 --#define LINUX_OLD_PT_R21_OFF 0x0d8 --#define LINUX_OLD_PT_R22_OFF 0x0e0 --#define LINUX_OLD_PT_R23_OFF 0x0e8 --#define LINUX_OLD_PT_R24_OFF 0x0f0 --#define LINUX_OLD_PT_R25_OFF 0x0f8 --#define LINUX_OLD_PT_R26_OFF 0x100 --#define LINUX_OLD_PT_R27_OFF 0x108 --#define LINUX_OLD_PT_R28_OFF 0x110 --#define LINUX_OLD_PT_R29_OFF 0x118 --#define LINUX_OLD_PT_R30_OFF 0x120 --#define LINUX_OLD_PT_R31_OFF 0x128 --#define LINUX_OLD_PT_CCV_OFF 0x130 --#define LINUX_OLD_PT_FPSR_OFF 0x138 --#define LINUX_OLD_PT_B0_OFF 0x140 --#define LINUX_OLD_PT_B7_OFF 0x148 --#define LINUX_OLD_PT_F6_OFF 0x150 --#define LINUX_OLD_PT_F7_OFF 0x160 --#define LINUX_OLD_PT_F8_OFF 0x170 --#define LINUX_OLD_PT_F9_OFF 0x180 -+#define LINUX_OLD_PT_PR_OFF 0x040 -+#define LINUX_OLD_PT_B6_OFF 0x048 -+#define LINUX_OLD_PT_LOADRS_OFF 0x050 -+#define LINUX_OLD_PT_R1_OFF 0x058 -+#define LINUX_OLD_PT_R2_OFF 0x060 -+#define LINUX_OLD_PT_R3_OFF 0x068 -+#define LINUX_OLD_PT_R12_OFF 0x070 -+#define LINUX_OLD_PT_R13_OFF 0x078 -+#define LINUX_OLD_PT_R14_OFF 0x080 -+#define LINUX_OLD_PT_R15_OFF 0x088 -+#define LINUX_OLD_PT_R8_OFF 0x090 -+#define LINUX_OLD_PT_R9_OFF 0x098 -+#define LINUX_OLD_PT_R10_OFF 0x0a0 -+#define LINUX_OLD_PT_R11_OFF 0x0a8 -+#define LINUX_OLD_PT_R16_OFF 0x0b0 -+#define LINUX_OLD_PT_R17_OFF 0x0b8 -+#define LINUX_OLD_PT_R18_OFF 0x0c0 -+#define LINUX_OLD_PT_R19_OFF 0x0c8 -+#define LINUX_OLD_PT_R20_OFF 0x0d0 -+#define LINUX_OLD_PT_R21_OFF 0x0d8 -+#define LINUX_OLD_PT_R22_OFF 0x0e0 -+#define LINUX_OLD_PT_R23_OFF 0x0e8 -+#define LINUX_OLD_PT_R24_OFF 0x0f0 -+#define LINUX_OLD_PT_R25_OFF 0x0f8 -+#define LINUX_OLD_PT_R26_OFF 0x100 -+#define LINUX_OLD_PT_R27_OFF 0x108 -+#define LINUX_OLD_PT_R28_OFF 0x110 -+#define LINUX_OLD_PT_R29_OFF 0x118 -+#define LINUX_OLD_PT_R30_OFF 0x120 -+#define LINUX_OLD_PT_R31_OFF 0x128 -+#define LINUX_OLD_PT_CCV_OFF 0x130 -+#define LINUX_OLD_PT_FPSR_OFF 0x138 -+#define LINUX_OLD_PT_B0_OFF 0x140 -+#define LINUX_OLD_PT_B7_OFF 0x148 -+#define LINUX_OLD_PT_F6_OFF 0x150 -+#define LINUX_OLD_PT_F7_OFF 0x160 -+#define LINUX_OLD_PT_F8_OFF 0x170 -+#define LINUX_OLD_PT_F9_OFF 0x180 - - /* Layout of new Linux kernel interrupt frame (struct pt_regs). */ - --#define LINUX_PT_B6_OFF 0 --#define LINUX_PT_B7_OFF 8 --#define LINUX_PT_CSD_OFF 16 --#define LINUX_PT_SSD_OFF 24 --#define LINUX_PT_R8_OFF 32 --#define LINUX_PT_R9_OFF 40 --#define LINUX_PT_R10_OFF 48 --#define LINUX_PT_R11_OFF 56 --#define LINUX_PT_IPSR_OFF 64 --#define LINUX_PT_IIP_OFF 72 --#define LINUX_PT_IFS_OFF 80 --#define LINUX_PT_UNAT_OFF 88 --#define LINUX_PT_PFS_OFF 96 --#define LINUX_PT_RSC_OFF 104 --#define LINUX_PT_RNAT_OFF 112 --#define LINUX_PT_BSPSTORE_OFF 120 --#define LINUX_PT_PR_OFF 128 --#define LINUX_PT_B0_OFF 136 --#define LINUX_PT_LOADRS_OFF 144 --#define LINUX_PT_R1_OFF 152 --#define LINUX_PT_R12_OFF 160 --#define LINUX_PT_R13_OFF 168 --#define LINUX_PT_FPSR_OFF 176 --#define LINUX_PT_R15_OFF 184 --#define LINUX_PT_R14_OFF 192 --#define LINUX_PT_R2_OFF 200 --#define LINUX_PT_R3_OFF 208 --#define LINUX_PT_R16_OFF 216 --#define LINUX_PT_R17_OFF 224 --#define LINUX_PT_R18_OFF 232 --#define LINUX_PT_R19_OFF 240 --#define LINUX_PT_R20_OFF 248 --#define LINUX_PT_R21_OFF 256 --#define LINUX_PT_R22_OFF 264 --#define LINUX_PT_R23_OFF 272 --#define LINUX_PT_R24_OFF 280 --#define LINUX_PT_R25_OFF 288 --#define LINUX_PT_R26_OFF 296 --#define LINUX_PT_R27_OFF 304 --#define LINUX_PT_R28_OFF 312 --#define LINUX_PT_R29_OFF 320 --#define LINUX_PT_R30_OFF 328 --#define LINUX_PT_R31_OFF 336 --#define LINUX_PT_CCV_OFF 344 --#define LINUX_PT_F6_OFF 352 --#define LINUX_PT_F7_OFF 368 --#define LINUX_PT_F8_OFF 384 --#define LINUX_PT_F9_OFF 400 --#define LINUX_PT_F10_OFF 416 --#define LINUX_PT_F11_OFF 432 -+#define LINUX_PT_B6_OFF 0 -+#define LINUX_PT_B7_OFF 8 -+#define LINUX_PT_CSD_OFF 16 -+#define LINUX_PT_SSD_OFF 24 -+#define LINUX_PT_R8_OFF 32 -+#define LINUX_PT_R9_OFF 40 -+#define LINUX_PT_R10_OFF 48 -+#define LINUX_PT_R11_OFF 56 -+#define LINUX_PT_IPSR_OFF 64 -+#define LINUX_PT_IIP_OFF 72 -+#define LINUX_PT_IFS_OFF 80 -+#define LINUX_PT_UNAT_OFF 88 -+#define LINUX_PT_PFS_OFF 96 -+#define LINUX_PT_RSC_OFF 104 -+#define LINUX_PT_RNAT_OFF 112 -+#define LINUX_PT_BSPSTORE_OFF 120 -+#define LINUX_PT_PR_OFF 128 -+#define LINUX_PT_B0_OFF 136 -+#define LINUX_PT_LOADRS_OFF 144 -+#define LINUX_PT_R1_OFF 152 -+#define LINUX_PT_R12_OFF 160 -+#define LINUX_PT_R13_OFF 168 -+#define LINUX_PT_FPSR_OFF 176 -+#define LINUX_PT_R15_OFF 184 -+#define LINUX_PT_R14_OFF 192 -+#define LINUX_PT_R2_OFF 200 -+#define LINUX_PT_R3_OFF 208 -+#define LINUX_PT_R16_OFF 216 -+#define LINUX_PT_R17_OFF 224 -+#define LINUX_PT_R18_OFF 232 -+#define LINUX_PT_R19_OFF 240 -+#define LINUX_PT_R20_OFF 248 -+#define LINUX_PT_R21_OFF 256 -+#define LINUX_PT_R22_OFF 264 -+#define LINUX_PT_R23_OFF 272 -+#define LINUX_PT_R24_OFF 280 -+#define LINUX_PT_R25_OFF 288 -+#define LINUX_PT_R26_OFF 296 -+#define LINUX_PT_R27_OFF 304 -+#define LINUX_PT_R28_OFF 312 -+#define LINUX_PT_R29_OFF 320 -+#define LINUX_PT_R30_OFF 328 -+#define LINUX_PT_R31_OFF 336 -+#define LINUX_PT_CCV_OFF 344 -+#define LINUX_PT_F6_OFF 352 -+#define LINUX_PT_F7_OFF 368 -+#define LINUX_PT_F8_OFF 384 -+#define LINUX_PT_F9_OFF 400 -+#define LINUX_PT_F10_OFF 416 -+#define LINUX_PT_F11_OFF 432 - --#define LINUX_PT_P_NONSYS 5 /* must match pNonSys in entry.h */ -+#define LINUX_PT_P_NONSYS 5 /* must match pNonSys in entry.h */ -diff --git a/frysk-imports/libunwind/src/ia64/regname.c b/frysk-imports/libunwind/src/ia64/regname.c -index 4936a3d..8753e52 100644 ---- a/frysk-imports/libunwind/src/ia64/regname.c -+++ b/frysk-imports/libunwind/src/ia64/regname.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -42,142 +42,142 @@ purpose. */ - /* Maintain the register names as a single string to keep the number - of dynamic relocations in the shared object to a minimum. */ - --#define regname_len 9 --#define regname_str \ -- "r0\0\0\0\0\0\0\0r1\0\0\0\0\0\0\0r2\0\0\0\0\0\0\0r3\0\0\0\0\0\0\0" \ -- "r4\0\0\0\0\0\0\0r5\0\0\0\0\0\0\0r6\0\0\0\0\0\0\0r7\0\0\0\0\0\0\0" \ -- "r8\0\0\0\0\0\0\0r9\0\0\0\0\0\0\0r10\0\0\0\0\0\0r11\0\0\0\0\0\0" \ -- "r12\0\0\0\0\0\0r13\0\0\0\0\0\0r14\0\0\0\0\0\0r15\0\0\0\0\0\0" \ -- "r16\0\0\0\0\0\0r17\0\0\0\0\0\0r18\0\0\0\0\0\0r19\0\0\0\0\0\0" \ -- "r20\0\0\0\0\0\0r21\0\0\0\0\0\0r22\0\0\0\0\0\0r23\0\0\0\0\0\0" \ -- "r24\0\0\0\0\0\0r25\0\0\0\0\0\0r26\0\0\0\0\0\0r27\0\0\0\0\0\0" \ -- "r28\0\0\0\0\0\0r29\0\0\0\0\0\0r30\0\0\0\0\0\0r31\0\0\0\0\0\0" \ -- "r32\0\0\0\0\0\0r33\0\0\0\0\0\0r34\0\0\0\0\0\0r35\0\0\0\0\0\0" \ -- "r36\0\0\0\0\0\0r37\0\0\0\0\0\0r38\0\0\0\0\0\0r39\0\0\0\0\0\0" \ -- "r40\0\0\0\0\0\0r41\0\0\0\0\0\0r42\0\0\0\0\0\0r43\0\0\0\0\0\0" \ -- "r44\0\0\0\0\0\0r45\0\0\0\0\0\0r46\0\0\0\0\0\0r47\0\0\0\0\0\0" \ -- "r48\0\0\0\0\0\0r49\0\0\0\0\0\0r50\0\0\0\0\0\0r51\0\0\0\0\0\0" \ -- "r52\0\0\0\0\0\0r53\0\0\0\0\0\0r54\0\0\0\0\0\0r55\0\0\0\0\0\0" \ -- "r56\0\0\0\0\0\0r57\0\0\0\0\0\0r58\0\0\0\0\0\0r59\0\0\0\0\0\0" \ -- "r60\0\0\0\0\0\0r61\0\0\0\0\0\0r62\0\0\0\0\0\0r63\0\0\0\0\0\0" \ -- "r64\0\0\0\0\0\0r65\0\0\0\0\0\0r66\0\0\0\0\0\0r67\0\0\0\0\0\0" \ -- "r68\0\0\0\0\0\0r69\0\0\0\0\0\0r70\0\0\0\0\0\0r71\0\0\0\0\0\0" \ -- "r72\0\0\0\0\0\0r73\0\0\0\0\0\0r74\0\0\0\0\0\0r75\0\0\0\0\0\0" \ -- "r76\0\0\0\0\0\0r77\0\0\0\0\0\0r78\0\0\0\0\0\0r79\0\0\0\0\0\0" \ -- "r80\0\0\0\0\0\0r81\0\0\0\0\0\0r82\0\0\0\0\0\0r83\0\0\0\0\0\0" \ -- "r84\0\0\0\0\0\0r85\0\0\0\0\0\0r86\0\0\0\0\0\0r87\0\0\0\0\0\0" \ -- "r88\0\0\0\0\0\0r89\0\0\0\0\0\0r90\0\0\0\0\0\0r91\0\0\0\0\0\0" \ -- "r92\0\0\0\0\0\0r93\0\0\0\0\0\0r94\0\0\0\0\0\0r95\0\0\0\0\0\0" \ -- "r96\0\0\0\0\0\0r97\0\0\0\0\0\0r98\0\0\0\0\0\0r99\0\0\0\0\0\0" \ -- "r100\0\0\0\0\0r101\0\0\0\0\0r102\0\0\0\0\0r103\0\0\0\0\0" \ -- "r104\0\0\0\0\0r105\0\0\0\0\0r106\0\0\0\0\0r107\0\0\0\0\0" \ -- "r108\0\0\0\0\0r109\0\0\0\0\0r110\0\0\0\0\0r111\0\0\0\0\0" \ -- "r112\0\0\0\0\0r113\0\0\0\0\0r114\0\0\0\0\0r115\0\0\0\0\0" \ -- "r116\0\0\0\0\0r117\0\0\0\0\0r118\0\0\0\0\0r119\0\0\0\0\0" \ -- "r120\0\0\0\0\0r121\0\0\0\0\0r122\0\0\0\0\0r123\0\0\0\0\0" \ -- "r124\0\0\0\0\0r125\0\0\0\0\0r126\0\0\0\0\0r127\0\0\0\0\0" \ -- "nat0\0\0\0\0\0nat1\0\0\0\0\0nat2\0\0\0\0\0nat3\0\0\0\0\0" \ -- "nat4\0\0\0\0\0nat5\0\0\0\0\0nat6\0\0\0\0\0nat7\0\0\0\0\0" \ -- "nat8\0\0\0\0\0nat9\0\0\0\0\0nat10\0\0\0\0nat11\0\0\0\0" \ -- "nat12\0\0\0\0nat13\0\0\0\0nat14\0\0\0\0nat15\0\0\0\0" \ -- "nat16\0\0\0\0nat17\0\0\0\0nat18\0\0\0\0nat19\0\0\0\0" \ -- "nat20\0\0\0\0nat21\0\0\0\0nat22\0\0\0\0nat23\0\0\0\0" \ -- "nat24\0\0\0\0nat25\0\0\0\0nat26\0\0\0\0nat27\0\0\0\0" \ -- "nat28\0\0\0\0nat29\0\0\0\0nat30\0\0\0\0nat31\0\0\0\0" \ -- "nat32\0\0\0\0nat33\0\0\0\0nat34\0\0\0\0nat35\0\0\0\0" \ -- "nat36\0\0\0\0nat37\0\0\0\0nat38\0\0\0\0nat39\0\0\0\0" \ -- "nat40\0\0\0\0nat41\0\0\0\0nat42\0\0\0\0nat43\0\0\0\0" \ -- "nat44\0\0\0\0nat45\0\0\0\0nat46\0\0\0\0nat47\0\0\0\0" \ -- "nat48\0\0\0\0nat49\0\0\0\0nat50\0\0\0\0nat51\0\0\0\0" \ -- "nat52\0\0\0\0nat53\0\0\0\0nat54\0\0\0\0nat55\0\0\0\0" \ -- "nat56\0\0\0\0nat57\0\0\0\0nat58\0\0\0\0nat59\0\0\0\0" \ -- "nat60\0\0\0\0nat61\0\0\0\0nat62\0\0\0\0nat63\0\0\0\0" \ -- "nat64\0\0\0\0nat65\0\0\0\0nat66\0\0\0\0nat67\0\0\0\0" \ -- "nat68\0\0\0\0nat69\0\0\0\0nat70\0\0\0\0nat71\0\0\0\0" \ -- "nat72\0\0\0\0nat73\0\0\0\0nat74\0\0\0\0nat75\0\0\0\0" \ -- "nat76\0\0\0\0nat77\0\0\0\0nat78\0\0\0\0nat79\0\0\0\0" \ -- "nat80\0\0\0\0nat81\0\0\0\0nat82\0\0\0\0nat83\0\0\0\0" \ -- "nat84\0\0\0\0nat85\0\0\0\0nat86\0\0\0\0nat87\0\0\0\0" \ -- "nat88\0\0\0\0nat89\0\0\0\0nat90\0\0\0\0nat91\0\0\0\0" \ -- "nat92\0\0\0\0nat93\0\0\0\0nat94\0\0\0\0nat95\0\0\0\0" \ -- "nat96\0\0\0\0nat97\0\0\0\0nat98\0\0\0\0nat99\0\0\0\0" \ -- "nat100\0\0\0nat101\0\0\0nat102\0\0\0nat103\0\0\0" \ -- "nat104\0\0\0nat105\0\0\0nat106\0\0\0nat107\0\0\0" \ -- "nat108\0\0\0nat109\0\0\0nat110\0\0\0nat111\0\0\0" \ -- "nat112\0\0\0nat113\0\0\0nat114\0\0\0nat115\0\0\0" \ -- "nat116\0\0\0nat117\0\0\0nat118\0\0\0nat119\0\0\0" \ -- "nat120\0\0\0nat121\0\0\0nat122\0\0\0nat123\0\0\0" \ -- "nat124\0\0\0nat125\0\0\0nat126\0\0\0nat127\0\0\0" \ -- "f0\0\0\0\0\0\0\0f1\0\0\0\0\0\0\0f2\0\0\0\0\0\0\0f3\0\0\0\0\0\0\0" \ -- "f4\0\0\0\0\0\0\0f5\0\0\0\0\0\0\0f6\0\0\0\0\0\0\0f7\0\0\0\0\0\0\0" \ -- "f8\0\0\0\0\0\0\0f9\0\0\0\0\0\0\0f10\0\0\0\0\0\0f11\0\0\0\0\0\0" \ -- "f12\0\0\0\0\0\0f13\0\0\0\0\0\0f14\0\0\0\0\0\0f15\0\0\0\0\0\0" \ -- "f16\0\0\0\0\0\0f17\0\0\0\0\0\0f18\0\0\0\0\0\0f19\0\0\0\0\0\0" \ -- "f20\0\0\0\0\0\0f21\0\0\0\0\0\0f22\0\0\0\0\0\0f23\0\0\0\0\0\0" \ -- "f24\0\0\0\0\0\0f25\0\0\0\0\0\0f26\0\0\0\0\0\0f27\0\0\0\0\0\0" \ -- "f28\0\0\0\0\0\0f29\0\0\0\0\0\0f30\0\0\0\0\0\0f31\0\0\0\0\0\0" \ -- "f32\0\0\0\0\0\0f33\0\0\0\0\0\0f34\0\0\0\0\0\0f35\0\0\0\0\0\0" \ -- "f36\0\0\0\0\0\0f37\0\0\0\0\0\0f38\0\0\0\0\0\0f39\0\0\0\0\0\0" \ -- "f40\0\0\0\0\0\0f41\0\0\0\0\0\0f42\0\0\0\0\0\0f43\0\0\0\0\0\0" \ -- "f44\0\0\0\0\0\0f45\0\0\0\0\0\0f46\0\0\0\0\0\0f47\0\0\0\0\0\0" \ -- "f48\0\0\0\0\0\0f49\0\0\0\0\0\0f50\0\0\0\0\0\0f51\0\0\0\0\0\0" \ -- "f52\0\0\0\0\0\0f53\0\0\0\0\0\0f54\0\0\0\0\0\0f55\0\0\0\0\0\0" \ -- "f56\0\0\0\0\0\0f57\0\0\0\0\0\0f58\0\0\0\0\0\0f59\0\0\0\0\0\0" \ -- "f60\0\0\0\0\0\0f61\0\0\0\0\0\0f62\0\0\0\0\0\0f63\0\0\0\0\0\0" \ -- "f64\0\0\0\0\0\0f65\0\0\0\0\0\0f66\0\0\0\0\0\0f67\0\0\0\0\0\0" \ -- "f68\0\0\0\0\0\0f69\0\0\0\0\0\0f70\0\0\0\0\0\0f71\0\0\0\0\0\0" \ -- "f72\0\0\0\0\0\0f73\0\0\0\0\0\0f74\0\0\0\0\0\0f75\0\0\0\0\0\0" \ -- "f76\0\0\0\0\0\0f77\0\0\0\0\0\0f78\0\0\0\0\0\0f79\0\0\0\0\0\0" \ -- "f80\0\0\0\0\0\0f81\0\0\0\0\0\0f82\0\0\0\0\0\0f83\0\0\0\0\0\0" \ -- "f84\0\0\0\0\0\0f85\0\0\0\0\0\0f86\0\0\0\0\0\0f87\0\0\0\0\0\0" \ -- "f88\0\0\0\0\0\0f89\0\0\0\0\0\0f90\0\0\0\0\0\0f91\0\0\0\0\0\0" \ -- "f92\0\0\0\0\0\0f93\0\0\0\0\0\0f94\0\0\0\0\0\0f95\0\0\0\0\0\0" \ -- "f96\0\0\0\0\0\0f97\0\0\0\0\0\0f98\0\0\0\0\0\0f99\0\0\0\0\0\0" \ -- "f100\0\0\0\0\0f101\0\0\0\0\0f102\0\0\0\0\0f103\0\0\0\0\0" \ -- "f104\0\0\0\0\0f105\0\0\0\0\0f106\0\0\0\0\0f107\0\0\0\0\0" \ -- "f108\0\0\0\0\0f109\0\0\0\0\0f110\0\0\0\0\0f111\0\0\0\0\0" \ -- "f112\0\0\0\0\0f113\0\0\0\0\0f114\0\0\0\0\0f115\0\0\0\0\0" \ -- "f116\0\0\0\0\0f117\0\0\0\0\0f118\0\0\0\0\0f119\0\0\0\0\0" \ -- "f120\0\0\0\0\0f121\0\0\0\0\0f122\0\0\0\0\0f123\0\0\0\0\0" \ -- "f124\0\0\0\0\0f125\0\0\0\0\0f126\0\0\0\0\0f127\0\0\0\0\0" \ -- "ar0\0\0\0\0\0\0ar1\0\0\0\0\0\0ar2\0\0\0\0\0\0ar3\0\0\0\0\0\0" \ -- "ar4\0\0\0\0\0\0ar5\0\0\0\0\0\0ar6\0\0\0\0\0\0ar7\0\0\0\0\0\0" \ -- "ar8\0\0\0\0\0\0ar9\0\0\0\0\0\0ar10\0\0\0\0\0ar11\0\0\0\0\0" \ -- "ar12\0\0\0\0\0ar13\0\0\0\0\0ar14\0\0\0\0\0ar15\0\0\0\0\0" \ -- "rsc\0\0\0\0\0\0bsp\0\0\0\0\0\0bspstore\0rnat\0\0\0\0\0" \ -- "ar20\0\0\0\0\0ar21\0\0\0\0\0ar22\0\0\0\0\0ar23\0\0\0\0\0" \ -- "ar24\0\0\0\0\0ar25\0\0\0\0\0ar26\0\0\0\0\0ar27\0\0\0\0\0" \ -- "ar28\0\0\0\0\0ar29\0\0\0\0\0ar30\0\0\0\0\0ar31\0\0\0\0\0" \ -- "ccv\0\0\0\0\0\0ar33\0\0\0\0\0ar34\0\0\0\0\0ar35\0\0\0\0\0" \ -- "unat\0\0\0\0\0ar37\0\0\0\0\0ar38\0\0\0\0\0ar39\0\0\0\0\0" \ -- "fpsr\0\0\0\0\0ar41\0\0\0\0\0ar42\0\0\0\0\0ar43\0\0\0\0\0" \ -- "ar44\0\0\0\0\0ar45\0\0\0\0\0ar46\0\0\0\0\0ar47\0\0\0\0\0" \ -- "ar48\0\0\0\0\0ar49\0\0\0\0\0ar50\0\0\0\0\0ar51\0\0\0\0\0" \ -- "ar52\0\0\0\0\0ar53\0\0\0\0\0ar54\0\0\0\0\0ar55\0\0\0\0\0" \ -- "ar56\0\0\0\0\0ar57\0\0\0\0\0ar58\0\0\0\0\0ar59\0\0\0\0\0" \ -- "ar60\0\0\0\0\0ar61\0\0\0\0\0ar62\0\0\0\0\0ar63\0\0\0\0\0" \ -- "pfs\0\0\0\0\0\0lc\0\0\0\0\0\0\0ec\0\0\0\0\0\0\0ar67\0\0\0\0\0" \ -- "ar68\0\0\0\0\0ar69\0\0\0\0\0ar70\0\0\0\0\0ar71\0\0\0\0\0" \ -- "ar72\0\0\0\0\0ar73\0\0\0\0\0ar74\0\0\0\0\0ar75\0\0\0\0\0" \ -- "ar76\0\0\0\0\0ar77\0\0\0\0\0ar78\0\0\0\0\0ar79\0\0\0\0\0" \ -- "ar80\0\0\0\0\0ar81\0\0\0\0\0ar82\0\0\0\0\0ar83\0\0\0\0\0" \ -- "ar84\0\0\0\0\0ar85\0\0\0\0\0ar86\0\0\0\0\0ar87\0\0\0\0\0" \ -- "ar88\0\0\0\0\0ar89\0\0\0\0\0ar90\0\0\0\0\0ar91\0\0\0\0\0" \ -- "ar92\0\0\0\0\0ar93\0\0\0\0\0ar94\0\0\0\0\0ar95\0\0\0\0\0" \ -- "ar96\0\0\0\0\0ar97\0\0\0\0\0ar98\0\0\0\0\0ar99\0\0\0\0\0" \ -- "ar100\0\0\0\0ar101\0\0\0\0ar102\0\0\0\0ar103\0\0\0\0" \ -- "ar104\0\0\0\0ar105\0\0\0\0ar106\0\0\0\0ar107\0\0\0\0" \ -- "ar108\0\0\0\0ar109\0\0\0\0ar110\0\0\0\0ar111\0\0\0\0" \ -- "ar112\0\0\0\0ar113\0\0\0\0ar114\0\0\0\0ar115\0\0\0\0" \ -- "ar116\0\0\0\0ar117\0\0\0\0ar118\0\0\0\0ar119\0\0\0\0" \ -- "ar120\0\0\0\0ar121\0\0\0\0ar122\0\0\0\0ar123\0\0\0\0" \ -- "ar124\0\0\0\0ar125\0\0\0\0ar126\0\0\0\0ar127\0\0\0\0" \ -- "rp\0\0\0\0\0\0\0b1\0\0\0\0\0\0\0b2\0\0\0\0\0\0\0b3\0\0\0\0\0\0\0" \ -- "b4\0\0\0\0\0\0\0b5\0\0\0\0\0\0\0b6\0\0\0\0\0\0\0b7\0\0\0\0\0\0\0" \ -- "pr\0\0\0\0\0\0\0cfm\0\0\0\0\0\0bsp\0\0\0\0\0\0ip\0\0\0\0\0\0\0" \ -+#define regname_len 9 -+#define regname_str \ -+ "r0\0\0\0\0\0\0\0r1\0\0\0\0\0\0\0r2\0\0\0\0\0\0\0r3\0\0\0\0\0\0\0" \ -+ "r4\0\0\0\0\0\0\0r5\0\0\0\0\0\0\0r6\0\0\0\0\0\0\0r7\0\0\0\0\0\0\0" \ -+ "r8\0\0\0\0\0\0\0r9\0\0\0\0\0\0\0r10\0\0\0\0\0\0r11\0\0\0\0\0\0" \ -+ "r12\0\0\0\0\0\0r13\0\0\0\0\0\0r14\0\0\0\0\0\0r15\0\0\0\0\0\0" \ -+ "r16\0\0\0\0\0\0r17\0\0\0\0\0\0r18\0\0\0\0\0\0r19\0\0\0\0\0\0" \ -+ "r20\0\0\0\0\0\0r21\0\0\0\0\0\0r22\0\0\0\0\0\0r23\0\0\0\0\0\0" \ -+ "r24\0\0\0\0\0\0r25\0\0\0\0\0\0r26\0\0\0\0\0\0r27\0\0\0\0\0\0" \ -+ "r28\0\0\0\0\0\0r29\0\0\0\0\0\0r30\0\0\0\0\0\0r31\0\0\0\0\0\0" \ -+ "r32\0\0\0\0\0\0r33\0\0\0\0\0\0r34\0\0\0\0\0\0r35\0\0\0\0\0\0" \ -+ "r36\0\0\0\0\0\0r37\0\0\0\0\0\0r38\0\0\0\0\0\0r39\0\0\0\0\0\0" \ -+ "r40\0\0\0\0\0\0r41\0\0\0\0\0\0r42\0\0\0\0\0\0r43\0\0\0\0\0\0" \ -+ "r44\0\0\0\0\0\0r45\0\0\0\0\0\0r46\0\0\0\0\0\0r47\0\0\0\0\0\0" \ -+ "r48\0\0\0\0\0\0r49\0\0\0\0\0\0r50\0\0\0\0\0\0r51\0\0\0\0\0\0" \ -+ "r52\0\0\0\0\0\0r53\0\0\0\0\0\0r54\0\0\0\0\0\0r55\0\0\0\0\0\0" \ -+ "r56\0\0\0\0\0\0r57\0\0\0\0\0\0r58\0\0\0\0\0\0r59\0\0\0\0\0\0" \ -+ "r60\0\0\0\0\0\0r61\0\0\0\0\0\0r62\0\0\0\0\0\0r63\0\0\0\0\0\0" \ -+ "r64\0\0\0\0\0\0r65\0\0\0\0\0\0r66\0\0\0\0\0\0r67\0\0\0\0\0\0" \ -+ "r68\0\0\0\0\0\0r69\0\0\0\0\0\0r70\0\0\0\0\0\0r71\0\0\0\0\0\0" \ -+ "r72\0\0\0\0\0\0r73\0\0\0\0\0\0r74\0\0\0\0\0\0r75\0\0\0\0\0\0" \ -+ "r76\0\0\0\0\0\0r77\0\0\0\0\0\0r78\0\0\0\0\0\0r79\0\0\0\0\0\0" \ -+ "r80\0\0\0\0\0\0r81\0\0\0\0\0\0r82\0\0\0\0\0\0r83\0\0\0\0\0\0" \ -+ "r84\0\0\0\0\0\0r85\0\0\0\0\0\0r86\0\0\0\0\0\0r87\0\0\0\0\0\0" \ -+ "r88\0\0\0\0\0\0r89\0\0\0\0\0\0r90\0\0\0\0\0\0r91\0\0\0\0\0\0" \ -+ "r92\0\0\0\0\0\0r93\0\0\0\0\0\0r94\0\0\0\0\0\0r95\0\0\0\0\0\0" \ -+ "r96\0\0\0\0\0\0r97\0\0\0\0\0\0r98\0\0\0\0\0\0r99\0\0\0\0\0\0" \ -+ "r100\0\0\0\0\0r101\0\0\0\0\0r102\0\0\0\0\0r103\0\0\0\0\0" \ -+ "r104\0\0\0\0\0r105\0\0\0\0\0r106\0\0\0\0\0r107\0\0\0\0\0" \ -+ "r108\0\0\0\0\0r109\0\0\0\0\0r110\0\0\0\0\0r111\0\0\0\0\0" \ -+ "r112\0\0\0\0\0r113\0\0\0\0\0r114\0\0\0\0\0r115\0\0\0\0\0" \ -+ "r116\0\0\0\0\0r117\0\0\0\0\0r118\0\0\0\0\0r119\0\0\0\0\0" \ -+ "r120\0\0\0\0\0r121\0\0\0\0\0r122\0\0\0\0\0r123\0\0\0\0\0" \ -+ "r124\0\0\0\0\0r125\0\0\0\0\0r126\0\0\0\0\0r127\0\0\0\0\0" \ -+ "nat0\0\0\0\0\0nat1\0\0\0\0\0nat2\0\0\0\0\0nat3\0\0\0\0\0" \ -+ "nat4\0\0\0\0\0nat5\0\0\0\0\0nat6\0\0\0\0\0nat7\0\0\0\0\0" \ -+ "nat8\0\0\0\0\0nat9\0\0\0\0\0nat10\0\0\0\0nat11\0\0\0\0" \ -+ "nat12\0\0\0\0nat13\0\0\0\0nat14\0\0\0\0nat15\0\0\0\0" \ -+ "nat16\0\0\0\0nat17\0\0\0\0nat18\0\0\0\0nat19\0\0\0\0" \ -+ "nat20\0\0\0\0nat21\0\0\0\0nat22\0\0\0\0nat23\0\0\0\0" \ -+ "nat24\0\0\0\0nat25\0\0\0\0nat26\0\0\0\0nat27\0\0\0\0" \ -+ "nat28\0\0\0\0nat29\0\0\0\0nat30\0\0\0\0nat31\0\0\0\0" \ -+ "nat32\0\0\0\0nat33\0\0\0\0nat34\0\0\0\0nat35\0\0\0\0" \ -+ "nat36\0\0\0\0nat37\0\0\0\0nat38\0\0\0\0nat39\0\0\0\0" \ -+ "nat40\0\0\0\0nat41\0\0\0\0nat42\0\0\0\0nat43\0\0\0\0" \ -+ "nat44\0\0\0\0nat45\0\0\0\0nat46\0\0\0\0nat47\0\0\0\0" \ -+ "nat48\0\0\0\0nat49\0\0\0\0nat50\0\0\0\0nat51\0\0\0\0" \ -+ "nat52\0\0\0\0nat53\0\0\0\0nat54\0\0\0\0nat55\0\0\0\0" \ -+ "nat56\0\0\0\0nat57\0\0\0\0nat58\0\0\0\0nat59\0\0\0\0" \ -+ "nat60\0\0\0\0nat61\0\0\0\0nat62\0\0\0\0nat63\0\0\0\0" \ -+ "nat64\0\0\0\0nat65\0\0\0\0nat66\0\0\0\0nat67\0\0\0\0" \ -+ "nat68\0\0\0\0nat69\0\0\0\0nat70\0\0\0\0nat71\0\0\0\0" \ -+ "nat72\0\0\0\0nat73\0\0\0\0nat74\0\0\0\0nat75\0\0\0\0" \ -+ "nat76\0\0\0\0nat77\0\0\0\0nat78\0\0\0\0nat79\0\0\0\0" \ -+ "nat80\0\0\0\0nat81\0\0\0\0nat82\0\0\0\0nat83\0\0\0\0" \ -+ "nat84\0\0\0\0nat85\0\0\0\0nat86\0\0\0\0nat87\0\0\0\0" \ -+ "nat88\0\0\0\0nat89\0\0\0\0nat90\0\0\0\0nat91\0\0\0\0" \ -+ "nat92\0\0\0\0nat93\0\0\0\0nat94\0\0\0\0nat95\0\0\0\0" \ -+ "nat96\0\0\0\0nat97\0\0\0\0nat98\0\0\0\0nat99\0\0\0\0" \ -+ "nat100\0\0\0nat101\0\0\0nat102\0\0\0nat103\0\0\0" \ -+ "nat104\0\0\0nat105\0\0\0nat106\0\0\0nat107\0\0\0" \ -+ "nat108\0\0\0nat109\0\0\0nat110\0\0\0nat111\0\0\0" \ -+ "nat112\0\0\0nat113\0\0\0nat114\0\0\0nat115\0\0\0" \ -+ "nat116\0\0\0nat117\0\0\0nat118\0\0\0nat119\0\0\0" \ -+ "nat120\0\0\0nat121\0\0\0nat122\0\0\0nat123\0\0\0" \ -+ "nat124\0\0\0nat125\0\0\0nat126\0\0\0nat127\0\0\0" \ -+ "f0\0\0\0\0\0\0\0f1\0\0\0\0\0\0\0f2\0\0\0\0\0\0\0f3\0\0\0\0\0\0\0" \ -+ "f4\0\0\0\0\0\0\0f5\0\0\0\0\0\0\0f6\0\0\0\0\0\0\0f7\0\0\0\0\0\0\0" \ -+ "f8\0\0\0\0\0\0\0f9\0\0\0\0\0\0\0f10\0\0\0\0\0\0f11\0\0\0\0\0\0" \ -+ "f12\0\0\0\0\0\0f13\0\0\0\0\0\0f14\0\0\0\0\0\0f15\0\0\0\0\0\0" \ -+ "f16\0\0\0\0\0\0f17\0\0\0\0\0\0f18\0\0\0\0\0\0f19\0\0\0\0\0\0" \ -+ "f20\0\0\0\0\0\0f21\0\0\0\0\0\0f22\0\0\0\0\0\0f23\0\0\0\0\0\0" \ -+ "f24\0\0\0\0\0\0f25\0\0\0\0\0\0f26\0\0\0\0\0\0f27\0\0\0\0\0\0" \ -+ "f28\0\0\0\0\0\0f29\0\0\0\0\0\0f30\0\0\0\0\0\0f31\0\0\0\0\0\0" \ -+ "f32\0\0\0\0\0\0f33\0\0\0\0\0\0f34\0\0\0\0\0\0f35\0\0\0\0\0\0" \ -+ "f36\0\0\0\0\0\0f37\0\0\0\0\0\0f38\0\0\0\0\0\0f39\0\0\0\0\0\0" \ -+ "f40\0\0\0\0\0\0f41\0\0\0\0\0\0f42\0\0\0\0\0\0f43\0\0\0\0\0\0" \ -+ "f44\0\0\0\0\0\0f45\0\0\0\0\0\0f46\0\0\0\0\0\0f47\0\0\0\0\0\0" \ -+ "f48\0\0\0\0\0\0f49\0\0\0\0\0\0f50\0\0\0\0\0\0f51\0\0\0\0\0\0" \ -+ "f52\0\0\0\0\0\0f53\0\0\0\0\0\0f54\0\0\0\0\0\0f55\0\0\0\0\0\0" \ -+ "f56\0\0\0\0\0\0f57\0\0\0\0\0\0f58\0\0\0\0\0\0f59\0\0\0\0\0\0" \ -+ "f60\0\0\0\0\0\0f61\0\0\0\0\0\0f62\0\0\0\0\0\0f63\0\0\0\0\0\0" \ -+ "f64\0\0\0\0\0\0f65\0\0\0\0\0\0f66\0\0\0\0\0\0f67\0\0\0\0\0\0" \ -+ "f68\0\0\0\0\0\0f69\0\0\0\0\0\0f70\0\0\0\0\0\0f71\0\0\0\0\0\0" \ -+ "f72\0\0\0\0\0\0f73\0\0\0\0\0\0f74\0\0\0\0\0\0f75\0\0\0\0\0\0" \ -+ "f76\0\0\0\0\0\0f77\0\0\0\0\0\0f78\0\0\0\0\0\0f79\0\0\0\0\0\0" \ -+ "f80\0\0\0\0\0\0f81\0\0\0\0\0\0f82\0\0\0\0\0\0f83\0\0\0\0\0\0" \ -+ "f84\0\0\0\0\0\0f85\0\0\0\0\0\0f86\0\0\0\0\0\0f87\0\0\0\0\0\0" \ -+ "f88\0\0\0\0\0\0f89\0\0\0\0\0\0f90\0\0\0\0\0\0f91\0\0\0\0\0\0" \ -+ "f92\0\0\0\0\0\0f93\0\0\0\0\0\0f94\0\0\0\0\0\0f95\0\0\0\0\0\0" \ -+ "f96\0\0\0\0\0\0f97\0\0\0\0\0\0f98\0\0\0\0\0\0f99\0\0\0\0\0\0" \ -+ "f100\0\0\0\0\0f101\0\0\0\0\0f102\0\0\0\0\0f103\0\0\0\0\0" \ -+ "f104\0\0\0\0\0f105\0\0\0\0\0f106\0\0\0\0\0f107\0\0\0\0\0" \ -+ "f108\0\0\0\0\0f109\0\0\0\0\0f110\0\0\0\0\0f111\0\0\0\0\0" \ -+ "f112\0\0\0\0\0f113\0\0\0\0\0f114\0\0\0\0\0f115\0\0\0\0\0" \ -+ "f116\0\0\0\0\0f117\0\0\0\0\0f118\0\0\0\0\0f119\0\0\0\0\0" \ -+ "f120\0\0\0\0\0f121\0\0\0\0\0f122\0\0\0\0\0f123\0\0\0\0\0" \ -+ "f124\0\0\0\0\0f125\0\0\0\0\0f126\0\0\0\0\0f127\0\0\0\0\0" \ -+ "ar0\0\0\0\0\0\0ar1\0\0\0\0\0\0ar2\0\0\0\0\0\0ar3\0\0\0\0\0\0" \ -+ "ar4\0\0\0\0\0\0ar5\0\0\0\0\0\0ar6\0\0\0\0\0\0ar7\0\0\0\0\0\0" \ -+ "ar8\0\0\0\0\0\0ar9\0\0\0\0\0\0ar10\0\0\0\0\0ar11\0\0\0\0\0" \ -+ "ar12\0\0\0\0\0ar13\0\0\0\0\0ar14\0\0\0\0\0ar15\0\0\0\0\0" \ -+ "rsc\0\0\0\0\0\0bsp\0\0\0\0\0\0bspstore\0rnat\0\0\0\0\0" \ -+ "ar20\0\0\0\0\0ar21\0\0\0\0\0ar22\0\0\0\0\0ar23\0\0\0\0\0" \ -+ "ar24\0\0\0\0\0ar25\0\0\0\0\0ar26\0\0\0\0\0ar27\0\0\0\0\0" \ -+ "ar28\0\0\0\0\0ar29\0\0\0\0\0ar30\0\0\0\0\0ar31\0\0\0\0\0" \ -+ "ccv\0\0\0\0\0\0ar33\0\0\0\0\0ar34\0\0\0\0\0ar35\0\0\0\0\0" \ -+ "unat\0\0\0\0\0ar37\0\0\0\0\0ar38\0\0\0\0\0ar39\0\0\0\0\0" \ -+ "fpsr\0\0\0\0\0ar41\0\0\0\0\0ar42\0\0\0\0\0ar43\0\0\0\0\0" \ -+ "ar44\0\0\0\0\0ar45\0\0\0\0\0ar46\0\0\0\0\0ar47\0\0\0\0\0" \ -+ "ar48\0\0\0\0\0ar49\0\0\0\0\0ar50\0\0\0\0\0ar51\0\0\0\0\0" \ -+ "ar52\0\0\0\0\0ar53\0\0\0\0\0ar54\0\0\0\0\0ar55\0\0\0\0\0" \ -+ "ar56\0\0\0\0\0ar57\0\0\0\0\0ar58\0\0\0\0\0ar59\0\0\0\0\0" \ -+ "ar60\0\0\0\0\0ar61\0\0\0\0\0ar62\0\0\0\0\0ar63\0\0\0\0\0" \ -+ "pfs\0\0\0\0\0\0lc\0\0\0\0\0\0\0ec\0\0\0\0\0\0\0ar67\0\0\0\0\0" \ -+ "ar68\0\0\0\0\0ar69\0\0\0\0\0ar70\0\0\0\0\0ar71\0\0\0\0\0" \ -+ "ar72\0\0\0\0\0ar73\0\0\0\0\0ar74\0\0\0\0\0ar75\0\0\0\0\0" \ -+ "ar76\0\0\0\0\0ar77\0\0\0\0\0ar78\0\0\0\0\0ar79\0\0\0\0\0" \ -+ "ar80\0\0\0\0\0ar81\0\0\0\0\0ar82\0\0\0\0\0ar83\0\0\0\0\0" \ -+ "ar84\0\0\0\0\0ar85\0\0\0\0\0ar86\0\0\0\0\0ar87\0\0\0\0\0" \ -+ "ar88\0\0\0\0\0ar89\0\0\0\0\0ar90\0\0\0\0\0ar91\0\0\0\0\0" \ -+ "ar92\0\0\0\0\0ar93\0\0\0\0\0ar94\0\0\0\0\0ar95\0\0\0\0\0" \ -+ "ar96\0\0\0\0\0ar97\0\0\0\0\0ar98\0\0\0\0\0ar99\0\0\0\0\0" \ -+ "ar100\0\0\0\0ar101\0\0\0\0ar102\0\0\0\0ar103\0\0\0\0" \ -+ "ar104\0\0\0\0ar105\0\0\0\0ar106\0\0\0\0ar107\0\0\0\0" \ -+ "ar108\0\0\0\0ar109\0\0\0\0ar110\0\0\0\0ar111\0\0\0\0" \ -+ "ar112\0\0\0\0ar113\0\0\0\0ar114\0\0\0\0ar115\0\0\0\0" \ -+ "ar116\0\0\0\0ar117\0\0\0\0ar118\0\0\0\0ar119\0\0\0\0" \ -+ "ar120\0\0\0\0ar121\0\0\0\0ar122\0\0\0\0ar123\0\0\0\0" \ -+ "ar124\0\0\0\0ar125\0\0\0\0ar126\0\0\0\0ar127\0\0\0\0" \ -+ "rp\0\0\0\0\0\0\0b1\0\0\0\0\0\0\0b2\0\0\0\0\0\0\0b3\0\0\0\0\0\0\0" \ -+ "b4\0\0\0\0\0\0\0b5\0\0\0\0\0\0\0b6\0\0\0\0\0\0\0b7\0\0\0\0\0\0\0" \ -+ "pr\0\0\0\0\0\0\0cfm\0\0\0\0\0\0bsp\0\0\0\0\0\0ip\0\0\0\0\0\0\0" \ - "sp\0\0\0\0\0\0\0" - --#define NREGS ((int) (sizeof (regname_str) - 1) / regname_len) -+#define NREGS ((int) (sizeof (regname_str) - 1) / regname_len) - - PROTECTED const char * - unw_regname (unw_regnum_t reg) -diff --git a/frysk-imports/libunwind/src/ia64/regs.h b/frysk-imports/libunwind/src/ia64/regs.h -index 1e748bb..a22a818 100644 ---- a/frysk-imports/libunwind/src/ia64/regs.h -+++ b/frysk-imports/libunwind/src/ia64/regs.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -40,9 +40,9 @@ rotate_gr (struct cursor *c, int reg) - preg = reg; - else - { -- preg = reg + rrb_gr; /* apply rotation */ -+ preg = reg + rrb_gr; /* apply rotation */ - if ((unsigned) (preg - 32) >= sor) -- preg -= sor; /* wrap around */ -+ preg -= sor; /* wrap around */ - } - if (sor) - Debug (15, "sor=%u rrb.gr=%u, r%d -> r%d\n", sor, rrb_gr, reg, preg); -@@ -60,12 +60,12 @@ rotate_fr (struct cursor *c, int reg) - - rrb_fr = (c->cfm >> 25) & 0x7f; - if (reg < 32) -- preg = reg; /* register not part of the rotating partition */ -+ preg = reg; /* register not part of the rotating partition */ - else - { -- preg = reg + rrb_fr; /* apply rotation */ -+ preg = reg + rrb_fr; /* apply rotation */ - if (preg > 127) -- preg -= 96; /* wrap around */ -+ preg -= 96; /* wrap around */ - } - if (rrb_fr) - Debug (15, "rrb.fr=%u, f%d -> f%d\n", rrb_fr, reg, preg); -diff --git a/frysk-imports/libunwind/src/ia64/ucontext_i.h b/frysk-imports/libunwind/src/ia64/ucontext_i.h -index 34171fd..ea32c8a 100644 ---- a/frysk-imports/libunwind/src/ia64/ucontext_i.h -+++ b/frysk-imports/libunwind/src/ia64/ucontext_i.h -@@ -25,44 +25,44 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - /* Constants shared between setcontext() and getcontext(). Don't - install this header file. */ - --#define SIG_BLOCK 0 --#define SIG_UNBLOCK 1 --#define SIG_SETMASK 2 -+#define SIG_BLOCK 0 -+#define SIG_UNBLOCK 1 -+#define SIG_SETMASK 2 - --#define IA64_SC_FLAG_SYNCHRONOUS_BIT 63 -+#define IA64_SC_FLAG_SYNCHRONOUS_BIT 63 - - #define SC_FLAGS 0x000 --#define SC_NAT 0x008 --#define SC_BSP 0x048 --#define SC_RNAT 0x050 --#define SC_UNAT 0x060 --#define SC_FPSR 0x068 --#define SC_PFS 0x070 --#define SC_LC 0x078 --#define SC_PR 0x080 --#define SC_BR 0x088 --#define SC_GR 0x0c8 --#define SC_FR 0x1d0 --#define SC_MASK 0x9d0 -+#define SC_NAT 0x008 -+#define SC_BSP 0x048 -+#define SC_RNAT 0x050 -+#define SC_UNAT 0x060 -+#define SC_FPSR 0x068 -+#define SC_PFS 0x070 -+#define SC_LC 0x078 -+#define SC_PR 0x080 -+#define SC_BR 0x088 -+#define SC_GR 0x0c8 -+#define SC_FR 0x1d0 -+#define SC_MASK 0x9d0 - - --#define rTMP r10 --#define rPOS r11 --#define rCPOS r14 --#define rNAT r15 --#define rFLAGS r16 -+#define rTMP r10 -+#define rPOS r11 -+#define rCPOS r14 -+#define rNAT r15 -+#define rFLAGS r16 - --#define rB5 r18 --#define rB4 r19 --#define rB3 r20 --#define rB2 r21 --#define rB1 r22 --#define rB0 r23 --#define rRSC r24 --#define rBSP r25 --#define rRNAT r26 --#define rUNAT r27 --#define rFPSR r28 --#define rPFS r29 --#define rLC r30 --#define rPR r31 -+#define rB5 r18 -+#define rB4 r19 -+#define rB3 r20 -+#define rB2 r21 -+#define rB1 r22 -+#define rB0 r23 -+#define rRSC r24 -+#define rBSP r25 -+#define rRNAT r26 -+#define rUNAT r27 -+#define rFPSR r28 -+#define rPFS r29 -+#define rLC r30 -+#define rPR r31 -diff --git a/frysk-imports/libunwind/src/ia64/unwind_decoder.h b/frysk-imports/libunwind/src/ia64/unwind_decoder.h -index f12c21d..7fd4174 100644 ---- a/frysk-imports/libunwind/src/ia64/unwind_decoder.h -+++ b/frysk-imports/libunwind/src/ia64/unwind_decoder.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -33,55 +33,55 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - * macros/constants before including this file: - * - * Types: -- * unw_word Unsigned integer type with at least 64 bits -+ * unw_word Unsigned integer type with at least 64 bits - * - * Register names: -- * UNW_REG_BSP -- * UNW_REG_BSPSTORE -- * UNW_REG_FPSR -- * UNW_REG_LC -- * UNW_REG_PFS -- * UNW_REG_PR -- * UNW_REG_RNAT -- * UNW_REG_PSP -- * UNW_REG_RP -- * UNW_REG_UNAT -+ * UNW_REG_BSP -+ * UNW_REG_BSPSTORE -+ * UNW_REG_FPSR -+ * UNW_REG_LC -+ * UNW_REG_PFS -+ * UNW_REG_PR -+ * UNW_REG_RNAT -+ * UNW_REG_PSP -+ * UNW_REG_RP -+ * UNW_REG_UNAT - * - * Decoder action macros: -- * UNW_DEC_BAD_CODE(code) -- * UNW_DEC_ABI(fmt,abi,context,arg) -- * UNW_DEC_BR_GR(fmt,brmask,gr,arg) -- * UNW_DEC_BR_MEM(fmt,brmask,arg) -- * UNW_DEC_COPY_STATE(fmt,label,arg) -- * UNW_DEC_EPILOGUE(fmt,t,ecount,arg) -- * UNW_DEC_FRGR_MEM(fmt,grmask,frmask,arg) -- * UNW_DEC_FR_MEM(fmt,frmask,arg) -- * UNW_DEC_GR_GR(fmt,grmask,gr,arg) -- * UNW_DEC_GR_MEM(fmt,grmask,arg) -- * UNW_DEC_LABEL_STATE(fmt,label,arg) -- * UNW_DEC_MEM_STACK_F(fmt,t,size,arg) -- * UNW_DEC_MEM_STACK_V(fmt,t,arg) -- * UNW_DEC_PRIUNAT_GR(fmt,r,arg) -- * UNW_DEC_PRIUNAT_WHEN_GR(fmt,t,arg) -- * UNW_DEC_PRIUNAT_WHEN_MEM(fmt,t,arg) -- * UNW_DEC_PRIUNAT_WHEN_PSPREL(fmt,pspoff,arg) -- * UNW_DEC_PRIUNAT_WHEN_SPREL(fmt,spoff,arg) -- * UNW_DEC_PROLOGUE(fmt,body,rlen,arg) -- * UNW_DEC_PROLOGUE_GR(fmt,rlen,mask,grsave,arg) -- * UNW_DEC_REG_PSPREL(fmt,reg,pspoff,arg) -- * UNW_DEC_REG_REG(fmt,src,dst,arg) -- * UNW_DEC_REG_SPREL(fmt,reg,spoff,arg) -- * UNW_DEC_REG_WHEN(fmt,reg,t,arg) -- * UNW_DEC_RESTORE(fmt,t,abreg,arg) -- * UNW_DEC_RESTORE_P(fmt,qp,t,abreg,arg) -- * UNW_DEC_SPILL_BASE(fmt,pspoff,arg) -- * UNW_DEC_SPILL_MASK(fmt,imaskp,arg) -- * UNW_DEC_SPILL_PSPREL(fmt,t,abreg,pspoff,arg) -- * UNW_DEC_SPILL_PSPREL_P(fmt,qp,t,abreg,pspoff,arg) -- * UNW_DEC_SPILL_REG(fmt,t,abreg,x,ytreg,arg) -- * UNW_DEC_SPILL_REG_P(fmt,qp,t,abreg,x,ytreg,arg) -- * UNW_DEC_SPILL_SPREL(fmt,t,abreg,spoff,arg) -- * UNW_DEC_SPILL_SPREL_P(fmt,qp,t,abreg,pspoff,arg) -+ * UNW_DEC_BAD_CODE(code) -+ * UNW_DEC_ABI(fmt,abi,context,arg) -+ * UNW_DEC_BR_GR(fmt,brmask,gr,arg) -+ * UNW_DEC_BR_MEM(fmt,brmask,arg) -+ * UNW_DEC_COPY_STATE(fmt,label,arg) -+ * UNW_DEC_EPILOGUE(fmt,t,ecount,arg) -+ * UNW_DEC_FRGR_MEM(fmt,grmask,frmask,arg) -+ * UNW_DEC_FR_MEM(fmt,frmask,arg) -+ * UNW_DEC_GR_GR(fmt,grmask,gr,arg) -+ * UNW_DEC_GR_MEM(fmt,grmask,arg) -+ * UNW_DEC_LABEL_STATE(fmt,label,arg) -+ * UNW_DEC_MEM_STACK_F(fmt,t,size,arg) -+ * UNW_DEC_MEM_STACK_V(fmt,t,arg) -+ * UNW_DEC_PRIUNAT_GR(fmt,r,arg) -+ * UNW_DEC_PRIUNAT_WHEN_GR(fmt,t,arg) -+ * UNW_DEC_PRIUNAT_WHEN_MEM(fmt,t,arg) -+ * UNW_DEC_PRIUNAT_WHEN_PSPREL(fmt,pspoff,arg) -+ * UNW_DEC_PRIUNAT_WHEN_SPREL(fmt,spoff,arg) -+ * UNW_DEC_PROLOGUE(fmt,body,rlen,arg) -+ * UNW_DEC_PROLOGUE_GR(fmt,rlen,mask,grsave,arg) -+ * UNW_DEC_REG_PSPREL(fmt,reg,pspoff,arg) -+ * UNW_DEC_REG_REG(fmt,src,dst,arg) -+ * UNW_DEC_REG_SPREL(fmt,reg,spoff,arg) -+ * UNW_DEC_REG_WHEN(fmt,reg,t,arg) -+ * UNW_DEC_RESTORE(fmt,t,abreg,arg) -+ * UNW_DEC_RESTORE_P(fmt,qp,t,abreg,arg) -+ * UNW_DEC_SPILL_BASE(fmt,pspoff,arg) -+ * UNW_DEC_SPILL_MASK(fmt,imaskp,arg) -+ * UNW_DEC_SPILL_PSPREL(fmt,t,abreg,pspoff,arg) -+ * UNW_DEC_SPILL_PSPREL_P(fmt,qp,t,abreg,pspoff,arg) -+ * UNW_DEC_SPILL_REG(fmt,t,abreg,x,ytreg,arg) -+ * UNW_DEC_SPILL_REG_P(fmt,qp,t,abreg,x,ytreg,arg) -+ * UNW_DEC_SPILL_SPREL(fmt,t,abreg,spoff,arg) -+ * UNW_DEC_SPILL_SPREL_P(fmt,qp,t,abreg,pspoff,arg) - */ - - static unw_word -@@ -96,7 +96,7 @@ unw_decode_uleb128 (unsigned char **dpp) - byte = *bp++; - result |= (byte & 0x7f) << shift; - if ((byte & 0x80) == 0) -- break; -+ break; - shift += 7; - } - *dpp = bp; -@@ -114,9 +114,9 @@ unw_decode_x1 (unsigned char *dp, unsigned char code, void *arg) - off = unw_decode_uleb128 (&dp); - abreg = (byte1 & 0x7f); - if (byte1 & 0x80) -- UNW_DEC_SPILL_SPREL(X1, t, abreg, off, arg); -+ UNW_DEC_SPILL_SPREL(X1, t, abreg, off, arg); - else -- UNW_DEC_SPILL_PSPREL(X1, t, abreg, off, arg); -+ UNW_DEC_SPILL_PSPREL(X1, t, abreg, off, arg); - return dp; - } - -@@ -232,7 +232,7 @@ unw_decode_p2_p5 (unsigned char *dp, unsigned char code, void *arg) - unsigned char byte1 = *dp++; - - UNW_DEC_BR_GR(P2, ((code & 0xf) << 1) | ((byte1 >> 7) & 1), -- (byte1 & 0x7f), arg); -+ (byte1 & 0x7f), arg); - } - else if ((code & 0x08) == 0) - { -@@ -241,21 +241,21 @@ unw_decode_p2_p5 (unsigned char *dp, unsigned char code, void *arg) - r = ((code & 0x7) << 1) | ((byte1 >> 7) & 1); - dst = (byte1 & 0x7f); - switch (r) -- { -- case 0: UNW_DEC_REG_GR(P3, UNW_REG_PSP, dst, arg); break; -- case 1: UNW_DEC_REG_GR(P3, UNW_REG_RP, dst, arg); break; -- case 2: UNW_DEC_REG_GR(P3, UNW_REG_PFS, dst, arg); break; -- case 3: UNW_DEC_REG_GR(P3, UNW_REG_PR, dst, arg); break; -- case 4: UNW_DEC_REG_GR(P3, UNW_REG_UNAT, dst, arg); break; -- case 5: UNW_DEC_REG_GR(P3, UNW_REG_LC, dst, arg); break; -- case 6: UNW_DEC_RP_BR(P3, dst, arg); break; -- case 7: UNW_DEC_REG_GR(P3, UNW_REG_RNAT, dst, arg); break; -- case 8: UNW_DEC_REG_GR(P3, UNW_REG_BSP, dst, arg); break; -- case 9: UNW_DEC_REG_GR(P3, UNW_REG_BSPSTORE, dst, arg); break; -- case 10: UNW_DEC_REG_GR(P3, UNW_REG_FPSR, dst, arg); break; -- case 11: UNW_DEC_PRIUNAT_GR(P3, dst, arg); break; -- default: UNW_DEC_BAD_CODE(r); break; -- } -+ { -+ case 0: UNW_DEC_REG_GR(P3, UNW_REG_PSP, dst, arg); break; -+ case 1: UNW_DEC_REG_GR(P3, UNW_REG_RP, dst, arg); break; -+ case 2: UNW_DEC_REG_GR(P3, UNW_REG_PFS, dst, arg); break; -+ case 3: UNW_DEC_REG_GR(P3, UNW_REG_PR, dst, arg); break; -+ case 4: UNW_DEC_REG_GR(P3, UNW_REG_UNAT, dst, arg); break; -+ case 5: UNW_DEC_REG_GR(P3, UNW_REG_LC, dst, arg); break; -+ case 6: UNW_DEC_RP_BR(P3, dst, arg); break; -+ case 7: UNW_DEC_REG_GR(P3, UNW_REG_RNAT, dst, arg); break; -+ case 8: UNW_DEC_REG_GR(P3, UNW_REG_BSP, dst, arg); break; -+ case 9: UNW_DEC_REG_GR(P3, UNW_REG_BSPSTORE, dst, arg); break; -+ case 10: UNW_DEC_REG_GR(P3, UNW_REG_FPSR, dst, arg); break; -+ case 11: UNW_DEC_PRIUNAT_GR(P3, dst, arg); break; -+ default: UNW_DEC_BAD_CODE(r); break; -+ } - } - else if ((code & 0x7) == 0) - UNW_DEC_SPILL_MASK(P4, dp, arg); -@@ -297,90 +297,90 @@ unw_decode_p7_p10 (unsigned char *dp, unsigned char code, void *arg) - r = (code & 0xf); - t = unw_decode_uleb128 (&dp); - switch (r) -- { -- case 0: -- size = unw_decode_uleb128 (&dp); -- UNW_DEC_MEM_STACK_F(P7, t, size, arg); -- break; -- -- case 1: UNW_DEC_MEM_STACK_V(P7, t, arg); break; -- case 2: UNW_DEC_SPILL_BASE(P7, t, arg); break; -- case 3: UNW_DEC_REG_SPREL(P7, UNW_REG_PSP, t, arg); break; -- case 4: UNW_DEC_REG_WHEN(P7, UNW_REG_RP, t, arg); break; -- case 5: UNW_DEC_REG_PSPREL(P7, UNW_REG_RP, t, arg); break; -- case 6: UNW_DEC_REG_WHEN(P7, UNW_REG_PFS, t, arg); break; -- case 7: UNW_DEC_REG_PSPREL(P7, UNW_REG_PFS, t, arg); break; -- case 8: UNW_DEC_REG_WHEN(P7, UNW_REG_PR, t, arg); break; -- case 9: UNW_DEC_REG_PSPREL(P7, UNW_REG_PR, t, arg); break; -- case 10: UNW_DEC_REG_WHEN(P7, UNW_REG_LC, t, arg); break; -- case 11: UNW_DEC_REG_PSPREL(P7, UNW_REG_LC, t, arg); break; -- case 12: UNW_DEC_REG_WHEN(P7, UNW_REG_UNAT, t, arg); break; -- case 13: UNW_DEC_REG_PSPREL(P7, UNW_REG_UNAT, t, arg); break; -- case 14: UNW_DEC_REG_WHEN(P7, UNW_REG_FPSR, t, arg); break; -- case 15: UNW_DEC_REG_PSPREL(P7, UNW_REG_FPSR, t, arg); break; -- default: UNW_DEC_BAD_CODE(r); break; -- } -+ { -+ case 0: -+ size = unw_decode_uleb128 (&dp); -+ UNW_DEC_MEM_STACK_F(P7, t, size, arg); -+ break; -+ -+ case 1: UNW_DEC_MEM_STACK_V(P7, t, arg); break; -+ case 2: UNW_DEC_SPILL_BASE(P7, t, arg); break; -+ case 3: UNW_DEC_REG_SPREL(P7, UNW_REG_PSP, t, arg); break; -+ case 4: UNW_DEC_REG_WHEN(P7, UNW_REG_RP, t, arg); break; -+ case 5: UNW_DEC_REG_PSPREL(P7, UNW_REG_RP, t, arg); break; -+ case 6: UNW_DEC_REG_WHEN(P7, UNW_REG_PFS, t, arg); break; -+ case 7: UNW_DEC_REG_PSPREL(P7, UNW_REG_PFS, t, arg); break; -+ case 8: UNW_DEC_REG_WHEN(P7, UNW_REG_PR, t, arg); break; -+ case 9: UNW_DEC_REG_PSPREL(P7, UNW_REG_PR, t, arg); break; -+ case 10: UNW_DEC_REG_WHEN(P7, UNW_REG_LC, t, arg); break; -+ case 11: UNW_DEC_REG_PSPREL(P7, UNW_REG_LC, t, arg); break; -+ case 12: UNW_DEC_REG_WHEN(P7, UNW_REG_UNAT, t, arg); break; -+ case 13: UNW_DEC_REG_PSPREL(P7, UNW_REG_UNAT, t, arg); break; -+ case 14: UNW_DEC_REG_WHEN(P7, UNW_REG_FPSR, t, arg); break; -+ case 15: UNW_DEC_REG_PSPREL(P7, UNW_REG_FPSR, t, arg); break; -+ default: UNW_DEC_BAD_CODE(r); break; -+ } - } - else - { - switch (code & 0xf) -- { -- case 0x0: /* p8 */ -- { -- r = *dp++; -- t = unw_decode_uleb128 (&dp); -- switch (r) -- { -- case 1: UNW_DEC_REG_SPREL(P8, UNW_REG_RP, t, arg); break; -- case 2: UNW_DEC_REG_SPREL(P8, UNW_REG_PFS, t, arg); break; -- case 3: UNW_DEC_REG_SPREL(P8, UNW_REG_PR, t, arg); break; -- case 4: UNW_DEC_REG_SPREL(P8, UNW_REG_LC, t, arg); break; -- case 5: UNW_DEC_REG_SPREL(P8, UNW_REG_UNAT, t, arg); break; -- case 6: UNW_DEC_REG_SPREL(P8, UNW_REG_FPSR, t, arg); break; -- case 7: UNW_DEC_REG_WHEN(P8, UNW_REG_BSP, t, arg); break; -- case 8: UNW_DEC_REG_PSPREL(P8, UNW_REG_BSP, t, arg); break; -- case 9: UNW_DEC_REG_SPREL(P8, UNW_REG_BSP, t, arg); break; -- case 10: UNW_DEC_REG_WHEN(P8, UNW_REG_BSPSTORE, t, arg); break; -- case 11: UNW_DEC_REG_PSPREL(P8, UNW_REG_BSPSTORE, t, arg); break; -- case 12: UNW_DEC_REG_SPREL(P8, UNW_REG_BSPSTORE, t, arg); break; -- case 13: UNW_DEC_REG_WHEN(P8, UNW_REG_RNAT, t, arg); break; -- case 14: UNW_DEC_REG_PSPREL(P8, UNW_REG_RNAT, t, arg); break; -- case 15: UNW_DEC_REG_SPREL(P8, UNW_REG_RNAT, t, arg); break; -- case 16: UNW_DEC_PRIUNAT_WHEN_GR(P8, t, arg); break; -- case 17: UNW_DEC_PRIUNAT_PSPREL(P8, t, arg); break; -- case 18: UNW_DEC_PRIUNAT_SPREL(P8, t, arg); break; -- case 19: UNW_DEC_PRIUNAT_WHEN_MEM(P8, t, arg); break; -- default: UNW_DEC_BAD_CODE(r); break; -- } -- } -- break; -- -- case 0x1: -- byte1 = *dp++; byte2 = *dp++; -- UNW_DEC_GR_GR(P9, (byte1 & 0xf), (byte2 & 0x7f), arg); -- break; -- -- case 0xf: /* p10 */ -- byte1 = *dp++; byte2 = *dp++; -- UNW_DEC_ABI(P10, byte1, byte2, arg); -- break; -- -- case 0x9: -- return unw_decode_x1 (dp, code, arg); -- -- case 0xa: -- return unw_decode_x2 (dp, code, arg); -- -- case 0xb: -- return unw_decode_x3 (dp, code, arg); -- -- case 0xc: -- return unw_decode_x4 (dp, code, arg); -- -- default: -- UNW_DEC_BAD_CODE(code); -- break; -- } -+ { -+ case 0x0: /* p8 */ -+ { -+ r = *dp++; -+ t = unw_decode_uleb128 (&dp); -+ switch (r) -+ { -+ case 1: UNW_DEC_REG_SPREL(P8, UNW_REG_RP, t, arg); break; -+ case 2: UNW_DEC_REG_SPREL(P8, UNW_REG_PFS, t, arg); break; -+ case 3: UNW_DEC_REG_SPREL(P8, UNW_REG_PR, t, arg); break; -+ case 4: UNW_DEC_REG_SPREL(P8, UNW_REG_LC, t, arg); break; -+ case 5: UNW_DEC_REG_SPREL(P8, UNW_REG_UNAT, t, arg); break; -+ case 6: UNW_DEC_REG_SPREL(P8, UNW_REG_FPSR, t, arg); break; -+ case 7: UNW_DEC_REG_WHEN(P8, UNW_REG_BSP, t, arg); break; -+ case 8: UNW_DEC_REG_PSPREL(P8, UNW_REG_BSP, t, arg); break; -+ case 9: UNW_DEC_REG_SPREL(P8, UNW_REG_BSP, t, arg); break; -+ case 10: UNW_DEC_REG_WHEN(P8, UNW_REG_BSPSTORE, t, arg); break; -+ case 11: UNW_DEC_REG_PSPREL(P8, UNW_REG_BSPSTORE, t, arg); break; -+ case 12: UNW_DEC_REG_SPREL(P8, UNW_REG_BSPSTORE, t, arg); break; -+ case 13: UNW_DEC_REG_WHEN(P8, UNW_REG_RNAT, t, arg); break; -+ case 14: UNW_DEC_REG_PSPREL(P8, UNW_REG_RNAT, t, arg); break; -+ case 15: UNW_DEC_REG_SPREL(P8, UNW_REG_RNAT, t, arg); break; -+ case 16: UNW_DEC_PRIUNAT_WHEN_GR(P8, t, arg); break; -+ case 17: UNW_DEC_PRIUNAT_PSPREL(P8, t, arg); break; -+ case 18: UNW_DEC_PRIUNAT_SPREL(P8, t, arg); break; -+ case 19: UNW_DEC_PRIUNAT_WHEN_MEM(P8, t, arg); break; -+ default: UNW_DEC_BAD_CODE(r); break; -+ } -+ } -+ break; -+ -+ case 0x1: -+ byte1 = *dp++; byte2 = *dp++; -+ UNW_DEC_GR_GR(P9, (byte1 & 0xf), (byte2 & 0x7f), arg); -+ break; -+ -+ case 0xf: /* p10 */ -+ byte1 = *dp++; byte2 = *dp++; -+ UNW_DEC_ABI(P10, byte1, byte2, arg); -+ break; -+ -+ case 0x9: -+ return unw_decode_x1 (dp, code, arg); -+ -+ case 0xa: -+ return unw_decode_x2 (dp, code, arg); -+ -+ case 0xb: -+ return unw_decode_x3 (dp, code, arg); -+ -+ case 0xc: -+ return unw_decode_x4 (dp, code, arg); -+ -+ default: -+ UNW_DEC_BAD_CODE(code); -+ break; -+ } - } - return dp; - } -@@ -422,9 +422,9 @@ unw_decode_b3_x4 (unsigned char *dp, unsigned char code, void *arg) - { - label = unw_decode_uleb128 (&dp); - if ((code & 0x08) != 0) -- UNW_DEC_COPY_STATE(B4, label, arg); -+ UNW_DEC_COPY_STATE(B4, label, arg); - else -- UNW_DEC_LABEL_STATE(B4, label, arg); -+ UNW_DEC_LABEL_STATE(B4, label, arg); - } - else - switch (code & 0x7) -diff --git a/frysk-imports/libunwind/src/ia64/unwind_i.h b/frysk-imports/libunwind/src/ia64/unwind_i.h -index 4643975..8ccbb46 100644 ---- a/frysk-imports/libunwind/src/ia64/unwind_i.h -+++ b/frysk-imports/libunwind/src/ia64/unwind_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,7 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef unwind_i_h - #define unwind_i_h - --#include -+#include - #include - - #include -@@ -35,17 +35,17 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "libunwind_i.h" - --#define IA64_UNW_VER(x) ((x) >> 48) --#define IA64_UNW_FLAG_MASK ((unw_word_t) 0x0000ffff00000000ULL) --#define IA64_UNW_FLAG_OSMASK ((unw_word_t) 0x0000f00000000000ULL) -+#define IA64_UNW_VER(x) ((x) >> 48) -+#define IA64_UNW_FLAG_MASK ((unw_word_t) 0x0000ffff00000000ULL) -+#define IA64_UNW_FLAG_OSMASK ((unw_word_t) 0x0000f00000000000ULL) - #define IA64_UNW_FLAG_EHANDLER(x) ((x) & (unw_word_t) 0x0000000100000000ULL) - #define IA64_UNW_FLAG_UHANDLER(x) ((x) & (unw_word_t) 0x0000000200000000ULL) --#define IA64_UNW_LENGTH(x) ((x) & (unw_word_t) 0x00000000ffffffffULL) -+#define IA64_UNW_LENGTH(x) ((x) & (unw_word_t) 0x00000000ffffffffULL) - - #ifdef MIN - # undef MIN - #endif --#define MIN(a,b) ((a) < (b) ? (a) : (b)) -+#define MIN(a,b) ((a) < (b) ? (a) : (b)) - - #if !defined(HAVE_SYS_UC_ACCESS_H) && !defined(UNW_REMOTE_ONLY) - -@@ -57,23 +57,23 @@ inlined_uc_addr (ucontext_t *uc, int reg, uint8_t *nat_bitnr) - - switch (reg) - { -- case UNW_IA64_GR + 0: addr = &unw.read_only.r0; break; -- case UNW_IA64_NAT + 0: addr = &unw.read_only.r0; break; -- case UNW_IA64_FR + 0: addr = &unw.read_only.f0; break; -+ case UNW_IA64_GR + 0: addr = &unw.read_only.r0; break; -+ case UNW_IA64_NAT + 0: addr = &unw.read_only.r0; break; -+ case UNW_IA64_FR + 0: addr = &unw.read_only.f0; break; - case UNW_IA64_FR + 1: - if (__BYTE_ORDER == __BIG_ENDIAN) -- addr = &unw.read_only.f1_be; -+ addr = &unw.read_only.f1_be; - else -- addr = &unw.read_only.f1_le; -+ addr = &unw.read_only.f1_le; - break; -- case UNW_IA64_IP: addr = &uc->uc_mcontext.sc_br[0]; break; -- case UNW_IA64_CFM: addr = &uc->uc_mcontext.sc_ar_pfs; break; -- case UNW_IA64_AR_RNAT: addr = &uc->uc_mcontext.sc_ar_rnat; break; -- case UNW_IA64_AR_UNAT: addr = &uc->uc_mcontext.sc_ar_unat; break; -- case UNW_IA64_AR_LC: addr = &uc->uc_mcontext.sc_ar_lc; break; -- case UNW_IA64_AR_FPSR: addr = &uc->uc_mcontext.sc_ar_fpsr; break; -- case UNW_IA64_PR: addr = &uc->uc_mcontext.sc_pr; break; -- case UNW_IA64_AR_BSPSTORE: addr = &uc->uc_mcontext.sc_ar_bsp; break; -+ case UNW_IA64_IP: addr = &uc->uc_mcontext.sc_br[0]; break; -+ case UNW_IA64_CFM: addr = &uc->uc_mcontext.sc_ar_pfs; break; -+ case UNW_IA64_AR_RNAT: addr = &uc->uc_mcontext.sc_ar_rnat; break; -+ case UNW_IA64_AR_UNAT: addr = &uc->uc_mcontext.sc_ar_unat; break; -+ case UNW_IA64_AR_LC: addr = &uc->uc_mcontext.sc_ar_lc; break; -+ case UNW_IA64_AR_FPSR: addr = &uc->uc_mcontext.sc_ar_fpsr; break; -+ case UNW_IA64_PR: addr = &uc->uc_mcontext.sc_pr; break; -+ case UNW_IA64_AR_BSPSTORE: addr = &uc->uc_mcontext.sc_ar_bsp; break; - - case UNW_IA64_GR + 4 ... UNW_IA64_GR + 7: - case UNW_IA64_GR + 12: -@@ -117,41 +117,41 @@ static inline long - ia64_read_only_reg (void *addr) - { - return ((unsigned long) ((char *) addr - (char *) &unw.read_only) -- < sizeof (unw.read_only)); -+ < sizeof (unw.read_only)); - } - - #endif /* !defined(HAVE_SYS_UC_ACCESS_H) && !defined(UNW_REMOTE_ONLY) */ - - /* Bits 0 and 1 of a location are used to encode its type: -- bit 0: set if location uses floating-point format. -- bit 1: set if location is a NaT bit on memory stack. */ -+ bit 0: set if location uses floating-point format. -+ bit 1: set if location is a NaT bit on memory stack. */ - --#define IA64_LOC_TYPE_FP (1 << 0) --#define IA64_LOC_TYPE_MEMSTK_NAT (1 << 1) -+#define IA64_LOC_TYPE_FP (1 << 0) -+#define IA64_LOC_TYPE_MEMSTK_NAT (1 << 1) - - #ifdef UNW_LOCAL_ONLY --#define IA64_LOC_REG(r,t) (((r) << 2) | (t)) --#define IA64_LOC_ADDR(a,t) (((a) & ~0x3) | (t)) --#define IA64_LOC_UC_ADDR(a,t) IA64_LOC_ADDR(a, t) --#define IA64_NULL_LOC (0) -- --#define IA64_GET_REG(l) ((l) >> 2) --#define IA64_GET_ADDR(l) ((l) & ~0x3) --#define IA64_IS_NULL_LOC(l) ((l) == 0) --#define IA64_IS_FP_LOC(l) (((l) & IA64_LOC_TYPE_FP) != 0) --#define IA64_IS_MEMSTK_NAT(l) (((l) & IA64_LOC_TYPE_MEMSTK_NAT) != 0) --#define IA64_IS_REG_LOC(l) 0 --#define IA64_IS_UC_LOC(l) 0 -- --#define IA64_REG_LOC(c,r) ((unw_word_t) uc_addr((c)->as_arg, r, NULL)) --#define IA64_REG_NAT_LOC(c,r,n) ((unw_word_t) uc_addr((c)->as_arg, r, n)) --#define IA64_FPREG_LOC(c,r) \ -- ((unw_word_t) uc_addr((c)->as_arg, (r), NULL) | IA64_LOC_TYPE_FP) -- --# define ia64_find_proc_info(c,ip,n) \ -- tdep_find_proc_info(unw_local_addr_space, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define ia64_put_unwind_info(c, pi) do { ; } while (0) -+#define IA64_LOC_REG(r,t) (((r) << 2) | (t)) -+#define IA64_LOC_ADDR(a,t) (((a) & ~0x3) | (t)) -+#define IA64_LOC_UC_ADDR(a,t) IA64_LOC_ADDR(a, t) -+#define IA64_NULL_LOC (0) -+ -+#define IA64_GET_REG(l) ((l) >> 2) -+#define IA64_GET_ADDR(l) ((l) & ~0x3) -+#define IA64_IS_NULL_LOC(l) ((l) == 0) -+#define IA64_IS_FP_LOC(l) (((l) & IA64_LOC_TYPE_FP) != 0) -+#define IA64_IS_MEMSTK_NAT(l) (((l) & IA64_LOC_TYPE_MEMSTK_NAT) != 0) -+#define IA64_IS_REG_LOC(l) 0 -+#define IA64_IS_UC_LOC(l) 0 -+ -+#define IA64_REG_LOC(c,r) ((unw_word_t) uc_addr((c)->as_arg, r, NULL)) -+#define IA64_REG_NAT_LOC(c,r,n) ((unw_word_t) uc_addr((c)->as_arg, r, n)) -+#define IA64_FPREG_LOC(c,r) \ -+ ((unw_word_t) uc_addr((c)->as_arg, (r), NULL) | IA64_LOC_TYPE_FP) -+ -+# define ia64_find_proc_info(c,ip,n) \ -+ tdep_find_proc_info(unw_local_addr_space, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define ia64_put_unwind_info(c, pi) do { ; } while (0) - - /* Note: the register accessors (ia64_{get,set}{,fp}()) must check for - NULL locations because uc_addr() returns NULL for unsaved -@@ -224,47 +224,47 @@ ia64_put (struct cursor *c, unw_word_t loc, unw_word_t val) - /* Bits 0 and 1 of the second word (w1) of a location are used - to further distinguish what location we're dealing with: - -- bit 0: set if the location is a register -- bit 1: set of the location is accessed via uc_access(3) */ --#define IA64_LOC_TYPE_REG (1 << 0) --#define IA64_LOC_TYPE_UC (1 << 1) -- --#define IA64_LOC_REG(r,t) ((ia64_loc_t) { ((r) << 2) | (t), \ -- IA64_LOC_TYPE_REG }) --#define IA64_LOC_ADDR(a,t) ((ia64_loc_t) { ((a) & ~0x3) | (t), 0 }) --#define IA64_LOC_UC_ADDR(a,t) ((ia64_loc_t) { ((a) & ~0x3) | (t), \ -- IA64_LOC_TYPE_UC }) --#define IA64_LOC_UC_REG(r,a) ((ia64_loc_t) { ((r) << 2), \ -- ((a) | IA64_LOC_TYPE_REG \ -- | IA64_LOC_TYPE_UC) }) --#define IA64_NULL_LOC ((ia64_loc_t) { 0, 0 }) -- --#define IA64_GET_REG(l) ((l).w0 >> 2) --#define IA64_GET_ADDR(l) ((l).w0 & ~0x3) --#define IA64_GET_AUX_ADDR(l) ((l).w1 & ~0x3) --#define IA64_IS_NULL_LOC(l) (((l).w0 | (l).w1) == 0) --#define IA64_IS_FP_LOC(l) (((l).w0 & IA64_LOC_TYPE_FP) != 0) --#define IA64_IS_MEMSTK_NAT(l) (((l).w0 & IA64_LOC_TYPE_MEMSTK_NAT) != 0) --#define IA64_IS_REG_LOC(l) (((l).w1 & IA64_LOC_TYPE_REG) != 0) --#define IA64_IS_UC_LOC(l) (((l).w1 & IA64_LOC_TYPE_UC) != 0) -- --#define IA64_REG_LOC(c,r) IA64_LOC_REG ((r), 0) --#define IA64_REG_NAT_LOC(c,r,n) IA64_LOC_REG ((r), 0) --#define IA64_FPREG_LOC(c,r) IA64_LOC_REG ((r), IA64_LOC_TYPE_FP) -- --# define ia64_find_proc_info(c,ip,n) \ -- (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -- (c)->as_arg) --# define ia64_put_unwind_info(c,pi) \ -- (*(c)->as->acc.put_unwind_info)((c)->as, (pi), (c)->as_arg) -- --#define ia64_uc_access_reg UNW_OBJ(uc_access_reg) --#define ia64_uc_access_fpreg UNW_OBJ(uc_access_fpreg) -+ bit 0: set if the location is a register -+ bit 1: set of the location is accessed via uc_access(3) */ -+#define IA64_LOC_TYPE_REG (1 << 0) -+#define IA64_LOC_TYPE_UC (1 << 1) -+ -+#define IA64_LOC_REG(r,t) ((ia64_loc_t) { ((r) << 2) | (t), \ -+ IA64_LOC_TYPE_REG }) -+#define IA64_LOC_ADDR(a,t) ((ia64_loc_t) { ((a) & ~0x3) | (t), 0 }) -+#define IA64_LOC_UC_ADDR(a,t) ((ia64_loc_t) { ((a) & ~0x3) | (t), \ -+ IA64_LOC_TYPE_UC }) -+#define IA64_LOC_UC_REG(r,a) ((ia64_loc_t) { ((r) << 2), \ -+ ((a) | IA64_LOC_TYPE_REG \ -+ | IA64_LOC_TYPE_UC) }) -+#define IA64_NULL_LOC ((ia64_loc_t) { 0, 0 }) -+ -+#define IA64_GET_REG(l) ((l).w0 >> 2) -+#define IA64_GET_ADDR(l) ((l).w0 & ~0x3) -+#define IA64_GET_AUX_ADDR(l) ((l).w1 & ~0x3) -+#define IA64_IS_NULL_LOC(l) (((l).w0 | (l).w1) == 0) -+#define IA64_IS_FP_LOC(l) (((l).w0 & IA64_LOC_TYPE_FP) != 0) -+#define IA64_IS_MEMSTK_NAT(l) (((l).w0 & IA64_LOC_TYPE_MEMSTK_NAT) != 0) -+#define IA64_IS_REG_LOC(l) (((l).w1 & IA64_LOC_TYPE_REG) != 0) -+#define IA64_IS_UC_LOC(l) (((l).w1 & IA64_LOC_TYPE_UC) != 0) -+ -+#define IA64_REG_LOC(c,r) IA64_LOC_REG ((r), 0) -+#define IA64_REG_NAT_LOC(c,r,n) IA64_LOC_REG ((r), 0) -+#define IA64_FPREG_LOC(c,r) IA64_LOC_REG ((r), IA64_LOC_TYPE_FP) -+ -+# define ia64_find_proc_info(c,ip,n) \ -+ (*(c)->as->acc.find_proc_info)((c)->as, (ip), &(c)->pi, (n), \ -+ (c)->as_arg) -+# define ia64_put_unwind_info(c,pi) \ -+ (*(c)->as->acc.put_unwind_info)((c)->as, (pi), (c)->as_arg) -+ -+#define ia64_uc_access_reg UNW_OBJ(uc_access_reg) -+#define ia64_uc_access_fpreg UNW_OBJ(uc_access_fpreg) - - extern int ia64_uc_access_reg (struct cursor *c, ia64_loc_t loc, -- unw_word_t *valp, int write); -+ unw_word_t *valp, int write); - extern int ia64_uc_access_fpreg (struct cursor *c, ia64_loc_t loc, -- unw_fpreg_t *valp, int write); -+ unw_fpreg_t *valp, int write); - - static inline int - ia64_getfp (struct cursor *c, ia64_loc_t loc, unw_fpreg_t *val) -@@ -283,16 +283,16 @@ ia64_getfp (struct cursor *c, ia64_loc_t loc, unw_fpreg_t *val) - - if (IA64_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, IA64_GET_REG (loc), -- val, 0, c->as_arg); -+ val, 0, c->as_arg); - - addr = IA64_GET_ADDR (loc); - ret = (*c->as->acc.access_mem) (c->as, addr + 0, &val->raw.bits[0], 0, -- c->as_arg); -+ c->as_arg); - if (ret < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 8, &val->raw.bits[1], 0, -- c->as_arg); -+ c->as_arg); - } - - static inline int -@@ -312,16 +312,16 @@ ia64_putfp (struct cursor *c, ia64_loc_t loc, unw_fpreg_t val) - - if (IA64_IS_REG_LOC (loc)) - return (*c->as->acc.access_fpreg) (c->as, IA64_GET_REG (loc), &val, 1, -- c->as_arg); -+ c->as_arg); - - addr = IA64_GET_ADDR (loc); - ret = (*c->as->acc.access_mem) (c->as, addr + 0, &val.raw.bits[0], 1, -- c->as_arg); -+ c->as_arg); - if (ret < 0) - return ret; - - return (*c->as->acc.access_mem) (c->as, addr + 8, &val.raw.bits[1], 1, -- c->as_arg); -+ c->as_arg); - } - - /* Get the 64 data bits from location LOC. If bit 0 is cleared, LOC -@@ -345,12 +345,12 @@ ia64_get (struct cursor *c, ia64_loc_t loc, unw_word_t *val) - - ret = ia64_getfp (c, loc, &tmp); - if (ret < 0) -- return ret; -+ return ret; - - if (c->as->big_endian) -- *val = tmp.raw.bits[1]; -+ *val = tmp.raw.bits[1]; - else -- *val = tmp.raw.bits[0]; -+ *val = tmp.raw.bits[0]; - return 0; - } - -@@ -359,10 +359,10 @@ ia64_get (struct cursor *c, ia64_loc_t loc, unw_word_t *val) - - if (IA64_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg)(c->as, IA64_GET_REG (loc), val, 0, -- c->as_arg); -+ c->as_arg); - else - return (*c->as->acc.access_mem)(c->as, IA64_GET_ADDR (loc), val, 0, -- c->as_arg); -+ c->as_arg); - } - - static inline int -@@ -380,9 +380,9 @@ ia64_put (struct cursor *c, ia64_loc_t loc, unw_word_t val) - - memset (&tmp, 0, sizeof (tmp)); - if (c->as->big_endian) -- tmp.raw.bits[1] = val; -+ tmp.raw.bits[1] = val; - else -- tmp.raw.bits[0] = val; -+ tmp.raw.bits[0] = val; - return ia64_putfp (c, loc, tmp); - } - -@@ -391,10 +391,10 @@ ia64_put (struct cursor *c, ia64_loc_t loc, unw_word_t val) - - if (IA64_IS_REG_LOC (loc)) - return (*c->as->acc.access_reg)(c->as, IA64_GET_REG (loc), &val, 1, -- c->as_arg); -+ c->as_arg); - else - return (*c->as->acc.access_mem)(c->as, IA64_GET_ADDR (loc), &val, 1, -- c->as_arg); -+ c->as_arg); - } - - #endif /* !UNW_LOCAL_ONLY */ -@@ -402,7 +402,7 @@ ia64_put (struct cursor *c, ia64_loc_t loc, unw_word_t val) - struct ia64_unwind_block - { - unw_word_t header; -- unw_word_t desc[0]; /* unwind descriptors */ -+ unw_word_t desc[0]; /* unwind descriptors */ - - /* Personality routine and language-specific data follow behind - descriptors. */ -@@ -410,58 +410,58 @@ struct ia64_unwind_block - - enum ia64_where - { -- IA64_WHERE_NONE, /* register isn't saved at all */ -- IA64_WHERE_GR, /* register is saved in a general register */ -- IA64_WHERE_FR, /* register is saved in a floating-point register */ -- IA64_WHERE_BR, /* register is saved in a branch register */ -- IA64_WHERE_SPREL, /* register is saved on memstack (sp-relative) */ -- IA64_WHERE_PSPREL, /* register is saved on memstack (psp-relative) */ -+ IA64_WHERE_NONE, /* register isn't saved at all */ -+ IA64_WHERE_GR, /* register is saved in a general register */ -+ IA64_WHERE_FR, /* register is saved in a floating-point register */ -+ IA64_WHERE_BR, /* register is saved in a branch register */ -+ IA64_WHERE_SPREL, /* register is saved on memstack (sp-relative) */ -+ IA64_WHERE_PSPREL, /* register is saved on memstack (psp-relative) */ - - /* At the end of each prologue these locations get resolved to - IA64_WHERE_PSPREL and IA64_WHERE_GR, respectively: */ - - IA64_WHERE_SPILL_HOME, /* register is saved in its spill home */ -- IA64_WHERE_GR_SAVE /* register is saved in next general register */ -+ IA64_WHERE_GR_SAVE /* register is saved in next general register */ - }; - --#define IA64_WHEN_NEVER 0x7fffffff -+#define IA64_WHEN_NEVER 0x7fffffff - - struct ia64_reg_info - { -- unw_word_t val; /* save location: register number or offset */ -- enum ia64_where where; /* where the register gets saved */ -- int when; /* when the register gets saved */ -+ unw_word_t val; /* save location: register number or offset */ -+ enum ia64_where where; /* where the register gets saved */ -+ int when; /* when the register gets saved */ - }; - --struct ia64_labeled_state; /* opaque structure */ -+struct ia64_labeled_state; /* opaque structure */ - - struct ia64_reg_state - { - struct ia64_reg_state *next; /* next (outer) element on state stack */ -- struct ia64_reg_info reg[IA64_NUM_PREGS]; /* register save locations */ -+ struct ia64_reg_info reg[IA64_NUM_PREGS]; /* register save locations */ - }; - - struct ia64_state_record - { -- unsigned int first_region : 1; /* is this the first region? */ -- unsigned int done : 1; /* are we done scanning descriptors? */ -- unsigned int any_spills : 1; /* got any register spills? */ -- unsigned int in_body : 1; /* are we inside prologue or body? */ -- uint8_t *imask; /* imask of spill_mask record or NULL */ -+ unsigned int first_region : 1; /* is this the first region? */ -+ unsigned int done : 1; /* are we done scanning descriptors? */ -+ unsigned int any_spills : 1; /* got any register spills? */ -+ unsigned int in_body : 1; /* are we inside prologue or body? */ -+ uint8_t *imask; /* imask of spill_mask record or NULL */ - uint16_t abi_marker; - -- unw_word_t pr_val; /* predicate values */ -- unw_word_t pr_mask; /* predicate mask */ -+ unw_word_t pr_val; /* predicate values */ -+ unw_word_t pr_mask; /* predicate mask */ - -- long spill_offset; /* psp-relative offset for spill base */ -+ long spill_offset; /* psp-relative offset for spill base */ - int region_start; - int region_len; - int when_sp_restored; - int epilogue_count; - int when_target; - -- uint8_t gr_save_loc; /* next save register */ -- uint8_t return_link_reg; /* branch register used as return pointer */ -+ uint8_t gr_save_loc; /* next save register */ -+ uint8_t return_link_reg; /* branch register used as return pointer */ - - struct ia64_labeled_state *labeled_states; - struct ia64_reg_state curr; -@@ -469,65 +469,65 @@ struct ia64_state_record - - struct ia64_labeled_state - { -- struct ia64_labeled_state *next; /* next label (or NULL) */ -- unsigned long label; /* label for this state */ -+ struct ia64_labeled_state *next; /* next label (or NULL) */ -+ unsigned long label; /* label for this state */ - struct ia64_reg_state saved_state; - }; - - /* Convenience macros: */ --#define ia64_make_proc_info UNW_OBJ(make_proc_info) --#define ia64_fetch_proc_info UNW_OBJ(fetch_proc_info) --#define ia64_create_state_record UNW_OBJ(create_state_record) --#define ia64_free_state_record UNW_OBJ(free_state_record) --#define ia64_find_save_locs UNW_OBJ(find_save_locs) --#define ia64_validate_cache UNW_OBJ(ia64_validate_cache) --#define ia64_local_validate_cache UNW_OBJ(ia64_local_validate_cache) --#define ia64_per_thread_cache UNW_OBJ(per_thread_cache) --#define ia64_scratch_loc UNW_OBJ(scratch_loc) --#define ia64_local_resume UNW_OBJ(local_resume) --#define ia64_local_addr_space_init UNW_OBJ(local_addr_space_init) --#define ia64_strloc UNW_OBJ(strloc) --#define ia64_install_cursor UNW_OBJ(install_cursor) --#define rbs_switch UNW_OBJ(rbs_switch) --#define rbs_find_stacked UNW_OBJ(rbs_find_stacked) -+#define ia64_make_proc_info UNW_OBJ(make_proc_info) -+#define ia64_fetch_proc_info UNW_OBJ(fetch_proc_info) -+#define ia64_create_state_record UNW_OBJ(create_state_record) -+#define ia64_free_state_record UNW_OBJ(free_state_record) -+#define ia64_find_save_locs UNW_OBJ(find_save_locs) -+#define ia64_validate_cache UNW_OBJ(ia64_validate_cache) -+#define ia64_local_validate_cache UNW_OBJ(ia64_local_validate_cache) -+#define ia64_per_thread_cache UNW_OBJ(per_thread_cache) -+#define ia64_scratch_loc UNW_OBJ(scratch_loc) -+#define ia64_local_resume UNW_OBJ(local_resume) -+#define ia64_local_addr_space_init UNW_OBJ(local_addr_space_init) -+#define ia64_strloc UNW_OBJ(strloc) -+#define ia64_install_cursor UNW_OBJ(install_cursor) -+#define rbs_switch UNW_OBJ(rbs_switch) -+#define rbs_find_stacked UNW_OBJ(rbs_find_stacked) - - extern int ia64_make_proc_info (struct cursor *c); - extern int ia64_fetch_proc_info (struct cursor *c, unw_word_t ip, -- int need_unwind_info); -+ int need_unwind_info); - /* The proc-info must be valid for IP before this routine can be - called: */ - extern int ia64_create_state_record (struct cursor *c, -- struct ia64_state_record *sr); -+ struct ia64_state_record *sr); - extern int ia64_free_state_record (struct ia64_state_record *sr); - extern int ia64_find_save_locs (struct cursor *c); - extern void ia64_validate_cache (unw_addr_space_t as, void *arg); - extern int ia64_local_validate_cache (unw_addr_space_t as, void *arg); - extern void ia64_local_addr_space_init (void); - extern ia64_loc_t ia64_scratch_loc (struct cursor *c, unw_regnum_t reg, -- uint8_t *nat_bitnr); -+ uint8_t *nat_bitnr); - - extern NORETURN void ia64_install_cursor (struct cursor *c, -- unw_word_t pri_unat, -- unw_word_t *extra, -- unw_word_t bspstore, -- unw_word_t dirty_size, -- unw_word_t *dirty_partition, -- unw_word_t dirty_rnat); -+ unw_word_t pri_unat, -+ unw_word_t *extra, -+ unw_word_t bspstore, -+ unw_word_t dirty_size, -+ unw_word_t *dirty_partition, -+ unw_word_t dirty_rnat); - extern int ia64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -- void *arg); -+ void *arg); - extern int rbs_switch (struct cursor *c, -- unw_word_t saved_bsp, unw_word_t saved_bspstore, -- ia64_loc_t saved_rnat_loc); -+ unw_word_t saved_bsp, unw_word_t saved_bspstore, -+ ia64_loc_t saved_rnat_loc); - extern int rbs_find_stacked (struct cursor *c, unw_word_t regs_to_skip, -- ia64_loc_t *locp, ia64_loc_t *rnat_locp); -+ ia64_loc_t *locp, ia64_loc_t *rnat_locp); - - #ifndef UNW_REMOTE_ONLY - # define NEED_RBS_COVER_AND_FLUSH --# define rbs_cover_and_flush UNW_OBJ(rbs_cover_and_flush) -+# define rbs_cover_and_flush UNW_OBJ(rbs_cover_and_flush) - extern int rbs_cover_and_flush (struct cursor *c, unw_word_t nregs, -- unw_word_t *dirty_partition, -- unw_word_t *dirty_rnat, -- unw_word_t *bspstore); -+ unw_word_t *dirty_partition, -+ unw_word_t *dirty_rnat, -+ unw_word_t *bspstore); - #endif - - /* Warning: ia64_strloc() is for debugging only and it is NOT re-entrant! */ -@@ -554,7 +554,7 @@ rbs_contains (struct rbs_area *rbs, unw_word_t bsp) - take advantage of the fact that -n == ~n + 1. */ - result = bsp - rbs->end > ~rbs->size; - Debug (16, "0x%lx in [0x%lx-0x%lx) => %d\n", -- (long) bsp, (long) (rbs->end - rbs->size), (long) rbs->end, result); -+ (long) bsp, (long) (rbs->end - rbs->size), (long) rbs->end, result); - return result; - } - -@@ -567,9 +567,9 @@ rbs_get_rnat_loc (struct rbs_area *rbs, unw_word_t bsp) - if (rbs_contains (rbs, rnat_addr)) - { - if (rbs_on_uc (rbs)) -- rnat_loc = IA64_LOC_UC_ADDR (rnat_addr, 0); -+ rnat_loc = IA64_LOC_UC_ADDR (rnat_addr, 0); - else -- rnat_loc = IA64_LOC_ADDR (rnat_addr, 0); -+ rnat_loc = IA64_LOC_ADDR (rnat_addr, 0); - } - else - rnat_loc = rbs->rnat_loc; -@@ -587,7 +587,7 @@ rbs_loc (struct rbs_area *rbs, unw_word_t bsp) - - static inline int - ia64_get_stacked (struct cursor *c, unw_word_t reg, -- ia64_loc_t *locp, ia64_loc_t *rnat_locp) -+ ia64_loc_t *locp, ia64_loc_t *rnat_locp) - { - struct rbs_area *rbs = c->rbs_area + c->rbs_curr; - unw_word_t addr, regs_to_skip = reg - 32; -@@ -609,15 +609,15 @@ ia64_get_stacked (struct cursor *c, unw_word_t reg, - /* The UNaT slot # calculation is identical to the one for RNaT slots, - but for readability/clarity, we don't want to use - ia64_rnat_slot_num() directly. */ --#define ia64_unat_slot_num(addr) rse_slot_num(addr) -+#define ia64_unat_slot_num(addr) rse_slot_num(addr) - - /* The following are helper macros which makes it easier for libunwind - to be used in the kernel. They allow the kernel to optimize away - any unused code without littering everything with #ifdefs. */ --#define ia64_is_big_endian(c) ((c)->as->big_endian) --#define ia64_get_abi(c) ((c)->as->abi) --#define ia64_set_abi(c, v) ((c)->as->abi = (v)) --#define ia64_get_abi_marker(c) ((c)->last_abi_marker) -+#define ia64_is_big_endian(c) ((c)->as->big_endian) -+#define ia64_get_abi(c) ((c)->as->abi) -+#define ia64_set_abi(c, v) ((c)->as->abi = (v)) -+#define ia64_get_abi_marker(c) ((c)->last_abi_marker) - - /* XXX should be in glibc: */ - #ifndef IA64_SC_FLAG_ONSTACK -@@ -625,9 +625,9 @@ ia64_get_stacked (struct cursor *c, unw_word_t reg, - # define IA64_SC_FLAG_IN_SYSCALL_BIT 1 /* did signal interrupt a syscall? */ - # define IA64_SC_FLAG_FPH_VALID_BIT 2 /* is state in f[32]-f[127] valid? */ - --# define IA64_SC_FLAG_ONSTACK (1 << IA64_SC_FLAG_ONSTACK_BIT) --# define IA64_SC_FLAG_IN_SYSCALL (1 << IA64_SC_FLAG_IN_SYSCALL_BIT) --# define IA64_SC_FLAG_FPH_VALID (1 << IA64_SC_FLAG_FPH_VALID_BIT) -+# define IA64_SC_FLAG_ONSTACK (1 << IA64_SC_FLAG_ONSTACK_BIT) -+# define IA64_SC_FLAG_IN_SYSCALL (1 << IA64_SC_FLAG_IN_SYSCALL_BIT) -+# define IA64_SC_FLAG_FPH_VALID (1 << IA64_SC_FLAG_FPH_VALID_BIT) - #endif - - #endif /* unwind_i_h */ -diff --git a/frysk-imports/libunwind/src/libunwind-generic.pc.in b/frysk-imports/libunwind/src/libunwind-generic.pc.in -new file mode 100644 -index 0000000..1f3baff ---- /dev/null -+++ b/frysk-imports/libunwind/src/libunwind-generic.pc.in -@@ -0,0 +1,11 @@ -+prefix=@prefix@ -+exec_prefix=@exec_prefix@ -+libdir=@libdir@ -+includedir=@includedir@ -+ -+Name: libunwind-generic -+Description: libunwind generic library -+Version: @VERSION@ -+Requires: libunwind -+Libs: -L${libdir} -lunwind-generic -+Cflags: -I${includedir} -diff --git a/frysk-imports/libunwind/src/mi/Gdestroy_addr_space.c b/frysk-imports/libunwind/src/mi/Gdestroy_addr_space.c -index 83a01b9..719c051 100644 ---- a/frysk-imports/libunwind/src/mi/Gdestroy_addr_space.c -+++ b/frysk-imports/libunwind/src/mi/Gdestroy_addr_space.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/mi/Gdyn-extract.c b/frysk-imports/libunwind/src/mi/Gdyn-extract.c -index 5258839..c8ae7a0 100644 ---- a/frysk-imports/libunwind/src/mi/Gdyn-extract.c -+++ b/frysk-imports/libunwind/src/mi/Gdyn-extract.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,8 +27,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN int - unwi_extract_dynamic_proc_info (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, unw_dyn_info_t *di, -- int need_unwind_info, void *arg) -+ unw_proc_info_t *pi, unw_dyn_info_t *di, -+ int need_unwind_info, void *arg) - { - pi->start_ip = di->start_ip; - pi->end_ip = di->end_ip; -@@ -42,13 +42,14 @@ unwi_extract_dynamic_proc_info (unw_addr_space_t as, unw_word_t ip, - pi->flags = di->u.pi.flags; - pi->unwind_info_size = 0; - if (need_unwind_info) -- pi->unwind_info = di; -+ pi->unwind_info = di; - else -- pi->unwind_info = NULL; -+ pi->unwind_info = NULL; - return 0; - - case UNW_INFO_FORMAT_TABLE: - case UNW_INFO_FORMAT_REMOTE_TABLE: -+ case UNW_INFO_FORMAT_IP_OFFSET: - #ifdef tdep_search_unwind_table - /* call platform-specific search routine: */ - return tdep_search_unwind_table (as, ip, di, pi, need_unwind_info, arg); -diff --git a/frysk-imports/libunwind/src/mi/Gdyn-remote.c b/frysk-imports/libunwind/src/mi/Gdyn-remote.c -index 917a11d..1f029b4 100644 ---- a/frysk-imports/libunwind/src/mi/Gdyn-remote.c -+++ b/frysk-imports/libunwind/src/mi/Gdyn-remote.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -38,7 +38,7 @@ free_regions (unw_dyn_region_info_t *region) - - static int - intern_op (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, -- unw_dyn_op_t *op, void *arg) -+ unw_dyn_op_t *op, void *arg) - { - int ret; - -@@ -53,7 +53,7 @@ intern_op (unw_addr_space_t as, unw_accessors_t *a, unw_word_t *addr, - - static int - intern_regions (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, unw_dyn_region_info_t **regionp, void *arg) -+ unw_word_t *addr, unw_dyn_region_info_t **regionp, void *arg) - { - uint32_t insn_count, op_count, i; - unw_dyn_region_info_t *region; -@@ -63,7 +63,7 @@ intern_regions (unw_addr_space_t as, unw_accessors_t *a, - *regionp = NULL; - - if (!*addr) -- return 0; /* NULL region-list */ -+ return 0; /* NULL region-list */ - - if ((ret = fetchw (as, a, addr, &next_addr, arg)) < 0 - || (ret = fetch32 (as, a, addr, (int32_t *) &insn_count, arg)) < 0 -@@ -98,8 +98,8 @@ intern_regions (unw_addr_space_t as, unw_accessors_t *a, - - static int - intern_array (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, unw_word_t table_len, unw_word_t **table_data, -- void *arg) -+ unw_word_t *addr, unw_word_t table_len, unw_word_t **table_data, -+ void *arg) - { - unw_word_t i, *data = calloc (table_len, WSIZE); - int ret = 0; -@@ -130,18 +130,18 @@ free_dyn_info (unw_dyn_info_t *di) - { - case UNW_INFO_FORMAT_DYNAMIC: - if (di->u.pi.regions) -- { -- free_regions (di->u.pi.regions); -- di->u.pi.regions = NULL; -- } -+ { -+ free_regions (di->u.pi.regions); -+ di->u.pi.regions = NULL; -+ } - break; - - case UNW_INFO_FORMAT_TABLE: - if (di->u.ti.table_data) -- { -- free (di->u.ti.table_data); -- di->u.ti.table_data = NULL; -- } -+ { -+ free (di->u.ti.table_data); -+ di->u.ti.table_data = NULL; -+ } - break; - - case UNW_INFO_FORMAT_REMOTE_TABLE: -@@ -152,7 +152,7 @@ free_dyn_info (unw_dyn_info_t *di) - - static int - intern_dyn_info (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, unw_dyn_info_t *di, void *arg) -+ unw_word_t *addr, unw_dyn_info_t *di, void *arg) - { - unw_word_t first_region; - int ret; -@@ -161,32 +161,32 @@ intern_dyn_info (unw_addr_space_t as, unw_accessors_t *a, - { - case UNW_INFO_FORMAT_DYNAMIC: - if ((ret = fetchw (as, a, addr, &di->u.pi.name_ptr, arg)) < 0 -- || (ret = fetchw (as, a, addr, &di->u.pi.handler, arg)) < 0 -- || (ret = fetch32 (as, a, addr, -- (int32_t *) &di->u.pi.flags, arg)) < 0) -- goto out; -- *addr += 4; /* skip over pad0 */ -+ || (ret = fetchw (as, a, addr, &di->u.pi.handler, arg)) < 0 -+ || (ret = fetch32 (as, a, addr, -+ (int32_t *) &di->u.pi.flags, arg)) < 0) -+ goto out; -+ *addr += 4; /* skip over pad0 */ - if ((ret = fetchw (as, a, addr, &first_region, arg)) < 0 -- || (ret = intern_regions (as, a, &first_region, &di->u.pi.regions, -- arg)) < 0) -- goto out; -+ || (ret = intern_regions (as, a, &first_region, &di->u.pi.regions, -+ arg)) < 0) -+ goto out; - break; - - case UNW_INFO_FORMAT_TABLE: - if ((ret = fetchw (as, a, addr, &di->u.ti.name_ptr, arg)) < 0 -- || (ret = fetchw (as, a, addr, &di->u.ti.segbase, arg)) < 0 -- || (ret = fetchw (as, a, addr, &di->u.ti.table_len, arg)) < 0 -- || (ret = intern_array (as, a, addr, di->u.ti.table_len, -- &di->u.ti.table_data, arg)) < 0) -- goto out; -+ || (ret = fetchw (as, a, addr, &di->u.ti.segbase, arg)) < 0 -+ || (ret = fetchw (as, a, addr, &di->u.ti.table_len, arg)) < 0 -+ || (ret = intern_array (as, a, addr, di->u.ti.table_len, -+ &di->u.ti.table_data, arg)) < 0) -+ goto out; - break; - - case UNW_INFO_FORMAT_REMOTE_TABLE: - if ((ret = fetchw (as, a, addr, &di->u.rti.name_ptr, arg)) < 0 -- || (ret = fetchw (as, a, addr, &di->u.rti.segbase, arg)) < 0 -- || (ret = fetchw (as, a, addr, &di->u.rti.table_len, arg)) < 0 -- || (ret = fetchw (as, a, addr, &di->u.rti.table_data, arg)) < 0) -- goto out; -+ || (ret = fetchw (as, a, addr, &di->u.rti.segbase, arg)) < 0 -+ || (ret = fetchw (as, a, addr, &di->u.rti.table_len, arg)) < 0 -+ || (ret = fetchw (as, a, addr, &di->u.rti.table_data, arg)) < 0) -+ goto out; - break; - - default: -@@ -202,8 +202,8 @@ intern_dyn_info (unw_addr_space_t as, unw_accessors_t *a, - - HIDDEN int - unwi_dyn_remote_find_proc_info (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, -- int need_unwind_info, void *arg) -+ unw_proc_info_t *pi, -+ int need_unwind_info, void *arg) - { - unw_accessors_t *a = unw_get_accessors (as); - unw_word_t dyn_list_addr, addr, next_addr, gen1, gen2, start_ip, end_ip; -@@ -215,9 +215,9 @@ unwi_dyn_remote_find_proc_info (unw_addr_space_t as, unw_word_t ip, - else - { - if ((*a->get_dyn_info_list_addr) (as, &dyn_list_addr, arg) < 0) -- return -UNW_ENOINFO; -+ return -UNW_ENOINFO; - if (as->caching_policy != UNW_CACHE_NONE) -- as->dyn_info_list_addr = dyn_list_addr; -+ as->dyn_info_list_addr = dyn_list_addr; - } - - do -@@ -227,55 +227,55 @@ unwi_dyn_remote_find_proc_info (unw_addr_space_t as, unw_word_t ip, - ret = -UNW_ENOINFO; - - if (fetchw (as, a, &addr, &gen1, arg) < 0 -- || fetchw (as, a, &addr, &next_addr, arg) < 0) -- return ret; -+ || fetchw (as, a, &addr, &next_addr, arg) < 0) -+ return ret; - - for (addr = next_addr; addr != 0; addr = next_addr) -- { -- if (fetchw (as, a, &addr, &next_addr, arg) < 0) -- goto recheck; /* only fail if generation # didn't change */ -+ { -+ if (fetchw (as, a, &addr, &next_addr, arg) < 0) -+ goto recheck; /* only fail if generation # didn't change */ - -- addr += WSIZE; /* skip over prev_addr */ -+ addr += WSIZE; /* skip over prev_addr */ - -- if (fetchw (as, a, &addr, &start_ip, arg) < 0 -- || fetchw (as, a, &addr, &end_ip, arg) < 0) -- goto recheck; /* only fail if generation # didn't change */ -+ if (fetchw (as, a, &addr, &start_ip, arg) < 0 -+ || fetchw (as, a, &addr, &end_ip, arg) < 0) -+ goto recheck; /* only fail if generation # didn't change */ - -- if (ip >= start_ip && ip < end_ip) -- { -- if (!di) -- di = calloc (1, sizeof (*di)); -+ if (ip >= start_ip && ip < end_ip) -+ { -+ if (!di) -+ di = calloc (1, sizeof (*di)); - -- di->start_ip = start_ip; -- di->end_ip = end_ip; -+ di->start_ip = start_ip; -+ di->end_ip = end_ip; - -- if (fetchw (as, a, &addr, &di->gp, arg) < 0 -- || fetch32 (as, a, &addr, &di->format, arg) < 0) -- goto recheck; /* only fail if generation # didn't change */ -+ if (fetchw (as, a, &addr, &di->gp, arg) < 0 -+ || fetch32 (as, a, &addr, &di->format, arg) < 0) -+ goto recheck; /* only fail if generation # didn't change */ - -- addr += 4; /* skip over padding */ -+ addr += 4; /* skip over padding */ - -- if (need_unwind_info -- && intern_dyn_info (as, a, &addr, di, arg) < 0) -- goto recheck; /* only fail if generation # didn't change */ -+ if (need_unwind_info -+ && intern_dyn_info (as, a, &addr, di, arg) < 0) -+ goto recheck; /* only fail if generation # didn't change */ - -- if (unwi_extract_dynamic_proc_info (as, ip, pi, di, -- need_unwind_info, arg) < 0) -- { -- free_dyn_info (di); -- goto recheck; /* only fail if generation # didn't change */ -- } -- ret = 0; /* OK, found it */ -- break; -- } -- } -+ if (unwi_extract_dynamic_proc_info (as, ip, pi, di, -+ need_unwind_info, arg) < 0) -+ { -+ free_dyn_info (di); -+ goto recheck; /* only fail if generation # didn't change */ -+ } -+ ret = 0; /* OK, found it */ -+ break; -+ } -+ } - - /* Re-check generation number to ensure the data we have is -- consistent. */ -+ consistent. */ - recheck: - addr = dyn_list_addr; - if (fetchw (as, a, &addr, &gen2, arg) < 0) -- return ret; -+ return ret; - } - while (gen1 != gen2); - -@@ -287,7 +287,7 @@ unwi_dyn_remote_find_proc_info (unw_addr_space_t as, unw_word_t ip, - - HIDDEN void - unwi_dyn_remote_put_unwind_info (unw_addr_space_t as, unw_proc_info_t *pi, -- void *arg) -+ void *arg) - { - if (!pi->unwind_info) - return; -diff --git a/frysk-imports/libunwind/src/mi/Gfind_dynamic_proc_info.c b/frysk-imports/libunwind/src/mi/Gfind_dynamic_proc_info.c -index 6cf3b42..98d3501 100644 ---- a/frysk-imports/libunwind/src/mi/Gfind_dynamic_proc_info.c -+++ b/frysk-imports/libunwind/src/mi/Gfind_dynamic_proc_info.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -29,7 +29,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - static inline int - local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, -- int need_unwind_info, void *arg) -+ int need_unwind_info, void *arg) - { - return -UNW_ENOINFO; - } -@@ -38,7 +38,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, - - static inline int - local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, -- int need_unwind_info, void *arg) -+ int need_unwind_info, void *arg) - { - unw_dyn_info_list_t *list; - unw_dyn_info_t *di; -@@ -53,7 +53,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, - for (di = list->first; di; di = di->next) - if (ip >= di->start_ip && ip < di->end_ip) - return unwi_extract_dynamic_proc_info (as, ip, pi, di, need_unwind_info, -- arg); -+ arg); - return -UNW_ENOINFO; - } - -@@ -63,7 +63,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, - - static inline int - remote_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, -- int need_unwind_info, void *arg) -+ int need_unwind_info, void *arg) - { - return -UNW_ENOINFO; - } -@@ -72,7 +72,7 @@ remote_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, - - static inline int - remote_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, -- int need_unwind_info, void *arg) -+ int need_unwind_info, void *arg) - { - return unwi_dyn_remote_find_proc_info (as, ip, pi, need_unwind_info, arg); - } -@@ -81,8 +81,8 @@ remote_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, - - HIDDEN int - unwi_find_dynamic_proc_info (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, int need_unwind_info, -- void *arg) -+ unw_proc_info_t *pi, int need_unwind_info, -+ void *arg) - { - if (as == unw_local_addr_space) - return local_find_proc_info (as, ip, pi, need_unwind_info, arg); -diff --git a/frysk-imports/libunwind/src/mi/Gget_accessors.c b/frysk-imports/libunwind/src/mi/Gget_accessors.c -index fb256d7..548c763 100644 ---- a/frysk-imports/libunwind/src/mi/Gget_accessors.c -+++ b/frysk-imports/libunwind/src/mi/Gget_accessors.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002, 2004-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - PROTECTED unw_accessors_t * - unw_get_accessors (unw_addr_space_t as) - { -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - return &as->acc; - } -diff --git a/frysk-imports/libunwind/src/mi/Gget_fpreg.c b/frysk-imports/libunwind/src/mi/Gget_fpreg.c -index a9ae9bf..f2f7405 100644 ---- a/frysk-imports/libunwind/src/mi/Gget_fpreg.c -+++ b/frysk-imports/libunwind/src/mi/Gget_fpreg.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/mi/Gget_proc_info_by_ip.c b/frysk-imports/libunwind/src/mi/Gget_proc_info_by_ip.c -index 4c9de77..c39312d 100644 ---- a/frysk-imports/libunwind/src/mi/Gget_proc_info_by_ip.c -+++ b/frysk-imports/libunwind/src/mi/Gget_proc_info_by_ip.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,7 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - PROTECTED int - unw_get_proc_info_by_ip (unw_addr_space_t as, unw_word_t ip, -- unw_proc_info_t *pi, void *as_arg) -+ unw_proc_info_t *pi, void *as_arg) - { - unw_accessors_t *a = unw_get_accessors (as); - int ret; -diff --git a/frysk-imports/libunwind/src/mi/Gget_proc_name.c b/frysk-imports/libunwind/src/mi/Gget_proc_name.c -index 7251c59..5376f82 100644 ---- a/frysk-imports/libunwind/src/mi/Gget_proc_name.c -+++ b/frysk-imports/libunwind/src/mi/Gget_proc_name.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - static inline int - intern_string (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t addr, char *buf, size_t buf_len, void *arg) -+ unw_word_t addr, char *buf, size_t buf_len, void *arg) - { - size_t i; - int ret; -@@ -36,24 +36,24 @@ intern_string (unw_addr_space_t as, unw_accessors_t *a, - for (i = 0; i < buf_len; ++i) - { - if ((ret = fetch8 (as, a, &addr, (int8_t *) buf + i, arg)) < 0) -- return ret; -+ return ret; - - if (buf[i] == '\0') -- return 0; /* copied full string; return success */ -+ return 0; /* copied full string; return success */ - } -- buf[buf_len - 1] = '\0'; /* ensure string is NUL terminated */ -+ buf[buf_len - 1] = '\0'; /* ensure string is NUL terminated */ - return -UNW_ENOMEM; - } - - static inline int - get_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, void *arg) - { - unw_accessors_t *a = unw_get_accessors (as); - unw_proc_info_t pi; - int ret; - -- buf[0] = '\0'; /* always return a valid string, even if it's empty */ -+ buf[0] = '\0'; /* always return a valid string, even if it's empty */ - - ret = unwi_find_dynamic_proc_info (as, ip, &pi, 1, arg); - if (ret == 0) -@@ -61,25 +61,25 @@ get_proc_name (unw_addr_space_t as, unw_word_t ip, - unw_dyn_info_t *di = pi.unwind_info; - - if (offp) -- *offp = ip - pi.start_ip; -+ *offp = ip - pi.start_ip; - - switch (di->format) -- { -- case UNW_INFO_FORMAT_DYNAMIC: -- ret = intern_string (as, a, di->u.pi.name_ptr, buf, buf_len, arg); -- break; -- -- case UNW_INFO_FORMAT_TABLE: -- case UNW_INFO_FORMAT_REMOTE_TABLE: -- /* XXX should we create a fake name, e.g.: "tablenameN", -- where N is the index of the function in the table??? */ -- ret = -UNW_ENOINFO; -- break; -- -- default: -- ret = -UNW_EINVAL; -- break; -- } -+ { -+ case UNW_INFO_FORMAT_DYNAMIC: -+ ret = intern_string (as, a, di->u.pi.name_ptr, buf, buf_len, arg); -+ break; -+ -+ case UNW_INFO_FORMAT_TABLE: -+ case UNW_INFO_FORMAT_REMOTE_TABLE: -+ /* XXX should we create a fake name, e.g.: "tablenameN", -+ where N is the index of the function in the table??? */ -+ ret = -UNW_ENOINFO; -+ break; -+ -+ default: -+ ret = -UNW_EINVAL; -+ break; -+ } - unwi_put_dynamic_unwind_info (as, &pi, arg); - return ret; - } -@@ -97,10 +97,18 @@ get_proc_name (unw_addr_space_t as, unw_word_t ip, - - PROTECTED int - unw_get_proc_name (unw_cursor_t *cursor, char *buf, size_t buf_len, -- unw_word_t *offp) -+ unw_word_t *offp) - { - struct cursor *c = (struct cursor *) cursor; -- -- return get_proc_name (tdep_get_as (c), tdep_get_ip (c), buf, buf_len, offp, -- tdep_get_as_arg (c)); -+ unw_word_t ip; -+ int error; -+ -+ ip = tdep_get_ip (c); -+ if (c->dwarf.use_prev_instr) -+ --ip; -+ error = get_proc_name (tdep_get_as (c), ip, buf, buf_len, offp, -+ tdep_get_as_arg (c)); -+ if (c->dwarf.use_prev_instr && offp != NULL && error == 0) -+ *offp += 1; -+ return error; - } -diff --git a/frysk-imports/libunwind/src/mi/Gget_reg.c b/frysk-imports/libunwind/src/mi/Gget_reg.c -index 021d913..7c0a5a9 100644 ---- a/frysk-imports/libunwind/src/mi/Gget_reg.c -+++ b/frysk-imports/libunwind/src/mi/Gget_reg.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/mi/Gget_unwind_table.c b/frysk-imports/libunwind/src/mi/Gget_unwind_table.c -index 0223013..102fe83 100644 ---- a/frysk-imports/libunwind/src/mi/Gget_unwind_table.c -+++ b/frysk-imports/libunwind/src/mi/Gget_unwind_table.c -@@ -1,4 +1,5 @@ - // Copyright 2007, 2008, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - - /* This file is part of libunwind. - -@@ -28,14 +29,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - - static int --get_frame_table(unw_word_t ip, unw_proc_info_t *pi, int need_unwind_info, -- unw_accessors_t *eh_frame_accessors, -- unw_word_t eh_frame_hdr_address, -- void *eh_frame_arg) -+get_eh_frame_table(unw_word_t ip, unw_proc_info_t *pi, -+ int need_unwind_info, unw_word_t eh_frame_hdr_address, -+ unw_addr_space_t as, void *eh_frame_arg) - { - int ret; -- unw_addr_space_t as = unw_create_addr_space (eh_frame_accessors, 0); - unw_word_t start = eh_frame_hdr_address; -+ unw_accessors_t *eh_frame_accessors = unw_get_accessors (as); - - // Version - unsigned char version; -@@ -85,32 +85,32 @@ get_frame_table(unw_word_t ip, unw_proc_info_t *pi, int need_unwind_info, - /* two 32-bit values (ip_offset/fde_offset) per table-entry: - For the binary-search table in the eh_frame_hdr, data-relative - means relative to the start of that section... */ -- di.u.rti.table_len = (fde_count * 8) / sizeof (unw_word_t); -+ di.u.rti.table_len = (fde_count * 8) / 4; - di.u.rti.table_data = eh_frame_hdr_address + 12; - di.u.rti.segbase = eh_frame_hdr_address; - - pi->start_ip = 0; - pi->end_ip = 0; -+ - ret = tdep_search_unwind_table (as, ip, &di, pi, need_unwind_info, - eh_frame_arg); - return ret; - } - - static int --get_debug_table(unw_word_t ip, unw_proc_info_t *pi, int need_unwind_info, -- unw_accessors_t *accessors, -- unw_word_t address, -- void *arg) -+get_debug_frame_table(unw_word_t ip, unw_proc_info_t *pi, -+ int need_unwind_info, unw_word_t address, -+ unw_addr_space_t as, void *arg) - { -- unw_addr_space_t as = unw_create_addr_space (accessors, 0); -- -+ fprintf(stderr, "%s: not implemented\n", __func__); -+#if 0 - unw_dyn_info_t di; - di.start_ip = pi->start_ip; - di.end_ip = pi->end_ip; -- di.format = UNW_INFO_FORMAT_TABLE; -+ di.format = UNW_INFO_FORMAT_REMOTE_TABLE; - di.gp = pi->gp; - -- // XXX Should we use the ti struct of the union? -+ // this is wrong - di.u.rti.name_ptr = 0; - di.u.rti.segbase = address; - di.u.rti.table_data = address; -@@ -118,22 +118,27 @@ get_debug_table(unw_word_t ip, unw_proc_info_t *pi, int need_unwind_info, - - pi->start_ip = 0; - pi->end_ip = 0; -+ - return tdep_search_unwind_table (as, ip, &di, pi, need_unwind_info, arg); -+#else -+ return -UNW_ENOINFO; -+#endif - } - - int --unw_get_unwind_table(unw_word_t ip, unw_proc_info_t *pi, int need_unwind_info, -- unw_accessors_t *accessors, -- unw_word_t address, -- void *arg) -+unw_get_unwind_table(unw_word_t ip, unw_proc_info_t *pi, -+ int need_unwind_info, unw_word_t address, -+ unw_addr_space_t as, void *arg) - { -- if (pi->format == UNW_INFO_FORMAT_TABLE) -- return get_debug_table(ip, pi, need_unwind_info, accessors, -- address, arg); -- - if (pi->format == UNW_INFO_FORMAT_REMOTE_TABLE) -- return get_frame_table(ip, pi, need_unwind_info, accessors, -- address, arg); -+ { -+ if (pi->flags & UNW_PI_FLAG_DEBUG_FRAME) -+ return get_debug_frame_table(ip, pi, need_unwind_info, address, -+ as, arg); -+ else -+ return get_eh_frame_table(ip, pi, need_unwind_info, address, -+ as, arg); -+ } - - return -UNW_EINVAL; - } -diff --git a/frysk-imports/libunwind/src/mi/Gput_dynamic_unwind_info.c b/frysk-imports/libunwind/src/mi/Gput_dynamic_unwind_info.c -index 13a9c1a..ca377c9 100644 ---- a/frysk-imports/libunwind/src/mi/Gput_dynamic_unwind_info.c -+++ b/frysk-imports/libunwind/src/mi/Gput_dynamic_unwind_info.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,7 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN void - unwi_put_dynamic_unwind_info (unw_addr_space_t as, unw_proc_info_t *pi, -- void *arg) -+ void *arg) - { - switch (pi->format) - { -@@ -37,7 +37,7 @@ unwi_put_dynamic_unwind_info (unw_addr_space_t as, unw_proc_info_t *pi, - unwi_dyn_remote_put_unwind_info (as, pi, arg); - # else - if (as != unw_local_addr_space) -- unwi_dyn_remote_put_unwind_info (as, pi, arg); -+ unwi_dyn_remote_put_unwind_info (as, pi, arg); - # endif - #endif - break; -diff --git a/frysk-imports/libunwind/src/mi/Gset_caching_policy.c b/frysk-imports/libunwind/src/mi/Gset_caching_policy.c -index 52fc7e5..45ba100 100644 ---- a/frysk-imports/libunwind/src/mi/Gset_caching_policy.c -+++ b/frysk-imports/libunwind/src/mi/Gset_caching_policy.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - PROTECTED int - unw_set_caching_policy (unw_addr_space_t as, unw_caching_policy_t policy) - { -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - #ifndef HAVE___THREAD -@@ -37,7 +37,7 @@ unw_set_caching_policy (unw_addr_space_t as, unw_caching_policy_t policy) - #endif - - if (policy == as->caching_policy) -- return 0; /* no change */ -+ return 0; /* no change */ - - as->caching_policy = policy; - /* Ensure caches are empty (and initialized). */ -diff --git a/frysk-imports/libunwind/src/mi/Gset_fpreg.c b/frysk-imports/libunwind/src/mi/Gset_fpreg.c -index d3b202d..4f2fa7b 100644 ---- a/frysk-imports/libunwind/src/mi/Gset_fpreg.c -+++ b/frysk-imports/libunwind/src/mi/Gset_fpreg.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/mi/Gset_reg.c b/frysk-imports/libunwind/src/mi/Gset_reg.c -index 09fa09a..c9b6e6a 100644 ---- a/frysk-imports/libunwind/src/mi/Gset_reg.c -+++ b/frysk-imports/libunwind/src/mi/Gset_reg.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/mi/_ReadSLEB.c b/frysk-imports/libunwind/src/mi/_ReadSLEB.c -index ce08f33..c041e37 100644 ---- a/frysk-imports/libunwind/src/mi/_ReadSLEB.c -+++ b/frysk-imports/libunwind/src/mi/_ReadSLEB.c -@@ -13,7 +13,7 @@ _ReadSLEB (unsigned char **dpp) - result |= (byte & 0x7f) << shift; - shift += 7; - if ((byte & 0x80) == 0) -- break; -+ break; - } - - if (shift < 8 * sizeof (unw_word_t) && (byte & 0x40) != 0) -diff --git a/frysk-imports/libunwind/src/mi/_ReadULEB.c b/frysk-imports/libunwind/src/mi/_ReadULEB.c -index 8952e63..116f3e1 100644 ---- a/frysk-imports/libunwind/src/mi/_ReadULEB.c -+++ b/frysk-imports/libunwind/src/mi/_ReadULEB.c -@@ -12,7 +12,7 @@ _ReadULEB (unsigned char **dpp) - byte = *bp++; - result |= (byte & 0x7f) << shift; - if ((byte & 0x80) == 0) -- break; -+ break; - shift += 7; - } - *dpp = bp; -diff --git a/frysk-imports/libunwind/src/mi/backtrace.c b/frysk-imports/libunwind/src/mi/backtrace.c -index 46d6c97..c7aa2bd 100644 ---- a/frysk-imports/libunwind/src/mi/backtrace.c -+++ b/frysk-imports/libunwind/src/mi/backtrace.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,31 +27,55 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #define UNW_LOCAL_ONLY - #include -+#include -+#include - - /* See glibc manual for a description of this function. */ - --int --backtrace (void **buffer, int size) -+static ALWAYS_INLINE int -+slow_backtrace (void **buffer, int size, unw_context_t *uc) - { - unw_cursor_t cursor; -- unw_context_t uc; - unw_word_t ip; - int n = 0; - -- unw_getcontext (&uc); -- if (unw_init_local (&cursor, &uc) < 0) -+ if (unlikely (unw_init_local (&cursor, uc) < 0)) - return 0; - - while (unw_step (&cursor) > 0) - { - if (n >= size) -- return n; -+ return n; - - if (unw_get_reg (&cursor, UNW_REG_IP, &ip) < 0) -- return n; -+ return n; - buffer[n++] = (void *) (uintptr_t) ip; - } - return n; - } - -+int -+unw_backtrace (void **buffer, int size) -+{ -+ unw_cursor_t cursor; -+ unw_context_t uc; -+ int n = size; -+ -+ tdep_getcontext_trace (&uc); -+ -+ if (unlikely (unw_init_local (&cursor, &uc) < 0)) -+ return 0; -+ -+ if (unlikely (tdep_trace (&cursor, buffer, &n) < 0)) -+ { -+ unw_getcontext (&uc); -+ return slow_backtrace (buffer, size, &uc); -+ } -+ -+ return n; -+} -+ -+extern int backtrace (void **buffer, int size) -+ WEAK ALIAS(unw_backtrace); -+ - #endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/mi/dyn-cancel.c b/frysk-imports/libunwind/src/mi/dyn-cancel.c -index e784317..9d7472d 100644 ---- a/frysk-imports/libunwind/src/mi/dyn-cancel.c -+++ b/frysk-imports/libunwind/src/mi/dyn-cancel.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/mi/dyn-info-list.c b/frysk-imports/libunwind/src/mi/dyn-info-list.c -index 5a5e30e..1a0790d 100644 ---- a/frysk-imports/libunwind/src/mi/dyn-info-list.c -+++ b/frysk-imports/libunwind/src/mi/dyn-info-list.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/mi/dyn-register.c b/frysk-imports/libunwind/src/mi/dyn-register.c -index a62d696..efdad3d 100644 ---- a/frysk-imports/libunwind/src/mi/dyn-register.c -+++ b/frysk-imports/libunwind/src/mi/dyn-register.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2001-2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -25,7 +25,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "libunwind_i.h" - --HIDDEN pthread_mutex_t _U_dyn_info_list_lock = PTHREAD_MUTEX_INITIALIZER; -+HIDDEN define_lock (_U_dyn_info_list_lock); - - void - _U_dyn_register (unw_dyn_info_t *di) -@@ -37,7 +37,7 @@ _U_dyn_register (unw_dyn_info_t *di) - di->next = _U_dyn_info_list.first; - di->prev = NULL; - if (di->next) -- di->next->prev = di; -+ di->next->prev = di; - _U_dyn_info_list.first = di; - } - mutex_unlock (&_U_dyn_info_list_lock); -diff --git a/frysk-imports/libunwind/src/mi/flush_cache.c b/frysk-imports/libunwind/src/mi/flush_cache.c -index c5650ba..513d135 100644 ---- a/frysk-imports/libunwind/src/mi/flush_cache.c -+++ b/frysk-imports/libunwind/src/mi/flush_cache.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -50,7 +50,7 @@ unw_flush_cache (unw_addr_space_t as, unw_word_t lo, unw_word_t hi) - unw_flush_cache() is allowed to flush more than the requested - range. */ - --#ifdef HAVE_FETCH_AND_ADD1 -+#ifdef HAVE_FETCH_AND_ADD - fetch_and_add1 (&as->cache_generation); - #else - # warning unw_flush_cache(): need a way to atomically increment an integer. -diff --git a/frysk-imports/libunwind/src/mi/init.c b/frysk-imports/libunwind/src/mi/init.c -index 4bf97c4..057027e 100644 ---- a/frysk-imports/libunwind/src/mi/init.c -+++ b/frysk-imports/libunwind/src/mi/init.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/mi/mempool.c b/frysk-imports/libunwind/src/mi/mempool.c -index ef891bf..536b64e 100644 ---- a/frysk-imports/libunwind/src/mi/mempool.c -+++ b/frysk-imports/libunwind/src/mi/mempool.c -@@ -1,6 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2003, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2012 Tommi Rantala - - This file is part of libunwind. - -@@ -25,51 +26,58 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "libunwind_i.h" - --#define MAX_ALIGN (sizeof (long double)) -+/* From GCC docs: ``Gcc also provides a target specific macro -+ * __BIGGEST_ALIGNMENT__, which is the largest alignment ever used for any data -+ * type on the target machine you are compiling for.'' */ -+#ifdef __BIGGEST_ALIGNMENT__ -+# define MAX_ALIGN __BIGGEST_ALIGNMENT__ -+#else -+/* Crude hack to check that MAX_ALIGN is power-of-two. -+ * sizeof(long double) = 12 on i386. */ -+# define MAX_ALIGN_(n) (n < 8 ? 8 : \ -+ n < 16 ? 16 : n) -+# define MAX_ALIGN MAX_ALIGN_(sizeof (long double)) -+#endif - --static char sos_memory[SOS_MEMORY_SIZE]; --static char *sos_memp; -+static char sos_memory[SOS_MEMORY_SIZE] ALIGNED(MAX_ALIGN); -+static size_t sos_memory_freepos; - static size_t pg_size; - - HIDDEN void * - sos_alloc (size_t size) - { -- char *mem; -+ size_t pos; - --#ifdef HAVE_CMPXCHG -- char *old_mem; -+ size = UNW_ALIGN(size, MAX_ALIGN); - -- size = (size + MAX_ALIGN - 1) & -MAX_ALIGN; -- if (!sos_memp) -- cmpxchg_ptr (&sos_memp, 0, sos_memory); -- do -- { -- old_mem = sos_memp; -+#if defined(__GNUC__) && defined(HAVE_FETCH_AND_ADD) -+ /* Assume `sos_memory' is suitably aligned. */ -+ assert(((uintptr_t) &sos_memory[0] & (MAX_ALIGN-1)) == 0); - -- mem = (char *) (((unsigned long) old_mem + MAX_ALIGN - 1) & -MAX_ALIGN); -- mem += size; -- assert (mem < sos_memory + sizeof (sos_memory)); -- } -- while (!cmpxchg_ptr (&sos_memp, old_mem, mem)); -+ pos = fetch_and_add (&sos_memory_freepos, size); - #else - static define_lock (sos_lock); - intrmask_t saved_mask; - -- size = (size + MAX_ALIGN - 1) & -MAX_ALIGN; -- - lock_acquire (&sos_lock, saved_mask); - { -- if (!sos_memp) -- sos_memp = sos_memory; -- -- mem = (char *) (((unsigned long) sos_memp + MAX_ALIGN - 1) & -MAX_ALIGN); -- mem += size; -- assert (mem < sos_memory + sizeof (sos_memory)); -- sos_memp = mem; -+ /* No assumptions about `sos_memory' alignment. */ -+ if (sos_memory_freepos == 0) -+ { -+ unsigned align = UNW_ALIGN((uintptr_t) &sos_memory[0], MAX_ALIGN) -+ - (uintptr_t) &sos_memory[0]; -+ sos_memory_freepos = align; -+ } -+ pos = sos_memory_freepos; -+ sos_memory_freepos += size; - } - lock_release (&sos_lock, saved_mask); - #endif -- return mem; -+ -+ assert (((uintptr_t) &sos_memory[pos] & (MAX_ALIGN-1)) == 0); -+ assert ((pos+size) <= SOS_MEMORY_SIZE); -+ -+ return &sos_memory[pos]; - } - - /* Must be called while holding the mempool lock. */ -@@ -103,14 +111,14 @@ expand (struct mempool *pool) - GET_MEMORY (mem, size); - if (!mem) - { -- size = (pool->obj_size + pg_size - 1) & -pg_size; -+ size = UNW_ALIGN(pool->obj_size, pg_size); - GET_MEMORY (mem, size); - if (!mem) -- { -- /* last chance: try to allocate one object from the SOS memory */ -- size = pool->obj_size; -- mem = sos_alloc (size); -- } -+ { -+ /* last chance: try to allocate one object from the SOS memory */ -+ size = pool->obj_size; -+ mem = sos_alloc (size); -+ } - } - add_memory (pool, mem, size, pool->obj_size); - } -@@ -126,18 +134,18 @@ mempool_init (struct mempool *pool, size_t obj_size, size_t reserve) - lock_init (&pool->lock); - - /* round object-size up to integer multiple of MAX_ALIGN */ -- obj_size = (obj_size + MAX_ALIGN - 1) & -MAX_ALIGN; -+ obj_size = UNW_ALIGN(obj_size, MAX_ALIGN); - - if (!reserve) - { - reserve = pg_size / obj_size / 4; - if (!reserve) -- reserve = 16; -+ reserve = 16; - } - - pool->obj_size = obj_size; - pool->reserve = reserve; -- pool->chunk_size = (2*reserve*obj_size + pg_size - 1) & -pg_size; -+ pool->chunk_size = UNW_ALIGN(2*reserve*obj_size, pg_size); - - expand (pool); - } -diff --git a/frysk-imports/libunwind/src/mi/strerror.c b/frysk-imports/libunwind/src/mi/strerror.c -index ef64716..2cec73d 100644 ---- a/frysk-imports/libunwind/src/mi/strerror.c -+++ b/frysk-imports/libunwind/src/mi/strerror.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 BEA Systems -- Contributed by Thomas Hallgren -+ Contributed by Thomas Hallgren - - This file is part of libunwind. - -@@ -34,18 +34,18 @@ unw_strerror (int err_code) - unw_error_t error = (unw_error_t)-err_code; - switch (error) - { -- case UNW_ESUCCESS: cp = "no error"; break; -- case UNW_EUNSPEC: cp = "unspecified (general) error"; break; -- case UNW_ENOMEM: cp = "out of memory"; break; -- case UNW_EBADREG: cp = "bad register number"; break; -+ case UNW_ESUCCESS: cp = "no error"; break; -+ case UNW_EUNSPEC: cp = "unspecified (general) error"; break; -+ case UNW_ENOMEM: cp = "out of memory"; break; -+ case UNW_EBADREG: cp = "bad register number"; break; - case UNW_EREADONLYREG: cp = "attempt to write read-only register"; break; - case UNW_ESTOPUNWIND: cp = "stop unwinding"; break; - case UNW_EINVALIDIP: cp = "invalid IP"; break; -- case UNW_EBADFRAME: cp = "bad frame"; break; -- case UNW_EINVAL: cp = "unsupported operation or bad value"; break; -+ case UNW_EBADFRAME: cp = "bad frame"; break; -+ case UNW_EINVAL: cp = "unsupported operation or bad value"; break; - case UNW_EBADVERSION: cp = "unwind info has unsupported version"; break; -- case UNW_ENOINFO: cp = "no unwind info found"; break; -- default: cp = "invalid error code"; -+ case UNW_ENOINFO: cp = "no unwind info found"; break; -+ default: cp = "invalid error code"; - } - return cp; - } -diff --git a/frysk-imports/libunwind/src/mips/Gcreate_addr_space.c b/frysk-imports/libunwind/src/mips/Gcreate_addr_space.c -index af084ef..371841d 100644 ---- a/frysk-imports/libunwind/src/mips/Gcreate_addr_space.c -+++ b/frysk-imports/libunwind/src/mips/Gcreate_addr_space.c -@@ -32,14 +32,7 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - #ifdef UNW_LOCAL_ONLY - return NULL; - #else -- unw_addr_space_t as = malloc (sizeof (*as)); -- -- if (!as) -- return NULL; -- -- memset (as, 0, sizeof (*as)); -- -- as->acc = *a; -+ unw_addr_space_t as; - - /* - * MIPS supports only big or little-endian, not weird stuff like -@@ -50,6 +43,14 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - && byte_order != __BIG_ENDIAN) - return NULL; - -+ as = malloc (sizeof (*as)); -+ if (!as) -+ return NULL; -+ -+ memset (as, 0, sizeof (*as)); -+ -+ as->acc = *a; -+ - if (byte_order == 0) - /* use host default: */ - as->big_endian = (__BYTE_ORDER == __BIG_ENDIAN); -diff --git a/frysk-imports/libunwind/src/mips/Gget_save_loc.c b/frysk-imports/libunwind/src/mips/Gget_save_loc.c -index dbccea8..d6075b7 100644 ---- a/frysk-imports/libunwind/src/mips/Gget_save_loc.c -+++ b/frysk-imports/libunwind/src/mips/Gget_save_loc.c -@@ -32,7 +32,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - struct cursor *c = (struct cursor *) cursor; - dwarf_loc_t loc; - -- loc = DWARF_NULL_LOC; /* default to "not saved" */ -+ loc = DWARF_NULL_LOC; /* default to "not saved" */ - - switch (reg) - { -@@ -68,6 +68,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - case UNW_MIPS_R29: - case UNW_MIPS_R30: - case UNW_MIPS_R31: -+ case UNW_MIPS_PC: - loc = c->dwarf.loc[reg - UNW_MIPS_R0]; - break; - -@@ -75,7 +76,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - break; - } - -- memset (sloc, 0, sizeof (sloc)); -+ memset (sloc, 0, sizeof (*sloc)); - - if (DWARF_IS_NULL_LOC (loc)) - { -diff --git a/frysk-imports/libunwind/src/mips/Gglobal.c b/frysk-imports/libunwind/src/mips/Gglobal.c -index 1874a5b..fa9478e 100644 ---- a/frysk-imports/libunwind/src/mips/Gglobal.c -+++ b/frysk-imports/libunwind/src/mips/Gglobal.c -@@ -25,17 +25,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - #include "dwarf_i.h" - --HIDDEN pthread_mutex_t mips_lock = PTHREAD_MUTEX_INITIALIZER; --HIDDEN int tdep_needs_initialization = 1; -- --/* FIXME: I'm pretty sure we don't need this at all for MIPS, but "generic" -- code (include/dwarf_i.h) seems to expect it to be here at present. */ -- --HIDDEN uint8_t dwarf_to_unw_regnum_map[] = -- { -- 0, 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, 28, 29, 30, 31 -- }; -+HIDDEN define_lock (mips_lock); -+HIDDEN int tdep_init_done; - - HIDDEN void - tdep_init (void) -@@ -44,10 +35,9 @@ tdep_init (void) - - sigfillset (&unwi_full_mask); - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- mutex_lock (&mips_lock); -+ lock_acquire (&mips_lock, saved_mask); - { -- if (!tdep_needs_initialization) -+ if (tdep_init_done) - /* another thread else beat us to it... */ - goto out; - -@@ -58,9 +48,8 @@ tdep_init (void) - #ifndef UNW_REMOTE_ONLY - mips_local_addr_space_init (); - #endif -- tdep_needs_initialization = 0; /* signal that we're initialized... */ -+ tdep_init_done = 1; /* signal that we're initialized... */ - } - out: -- mutex_unlock (&mips_lock); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ lock_release (&mips_lock, saved_mask); - } -diff --git a/frysk-imports/libunwind/src/mips/Ginit.c b/frysk-imports/libunwind/src/mips/Ginit.c -index 6ffeabf..8290c40 100644 ---- a/frysk-imports/libunwind/src/mips/Ginit.c -+++ b/frysk-imports/libunwind/src/mips/Ginit.c -@@ -46,6 +46,8 @@ uc_addr (ucontext_t *uc, int reg) - { - if (reg >= UNW_MIPS_R0 && reg < UNW_MIPS_R0 + 32) - return &uc->uc_mcontext.gregs[reg - UNW_MIPS_R0]; -+ else if (reg == UNW_MIPS_PC) -+ return &uc->uc_mcontext.pc; - else - return NULL; - } -@@ -82,7 +84,7 @@ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - - static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -- void *arg) -+ void *arg) - { - *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list; - return 0; -@@ -90,7 +92,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - - static int - access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - if (write) - { -@@ -107,7 +109,7 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - unw_word_t *addr; - ucontext_t *uc = arg; -@@ -138,7 +140,7 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { - ucontext_t *uc = arg; - unw_fpreg_t *addr; -@@ -152,14 +154,14 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - if (write) - { - Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), -- ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); - *(unw_fpreg_t *) (intptr_t) addr = *val; - } - else - { - *val = *(unw_fpreg_t *) (intptr_t) addr; - Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), -- ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); - } - return 0; - -@@ -171,8 +173,8 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - - static int - get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, -- void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) - { - - return elf_w (get_proc_name) (as, getpid (), ip, buf, buf_len, offp); -@@ -200,7 +202,7 @@ mips_local_addr_space_init (void) - local_addr_space.acc.access_mem = access_mem; - local_addr_space.acc.access_reg = access_reg; - local_addr_space.acc.access_fpreg = access_fpreg; -- local_addr_space.acc.resume = 0; /* mips_local_resume? FIXME! */ -+ local_addr_space.acc.resume = NULL; /* mips_local_resume? FIXME! */ - local_addr_space.acc.get_proc_name = get_static_proc_name; - unw_flush_cache (&local_addr_space, 0, 0); - } -diff --git a/frysk-imports/libunwind/src/mips/Ginit_local.c b/frysk-imports/libunwind/src/mips/Ginit_local.c -index 7b2881e..e5e1c5a 100644 ---- a/frysk-imports/libunwind/src/mips/Ginit_local.c -+++ b/frysk-imports/libunwind/src/mips/Ginit_local.c -@@ -40,14 +40,14 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) - { - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = unw_local_addr_space; - c->dwarf.as_arg = uc; -- return common_init (c); -+ return common_init (c, 1); - } - - #endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/mips/Ginit_remote.c b/frysk-imports/libunwind/src/mips/Ginit_remote.c -index 3baf3f6..f284e99 100644 ---- a/frysk-imports/libunwind/src/mips/Ginit_remote.c -+++ b/frysk-imports/libunwind/src/mips/Ginit_remote.c -@@ -33,13 +33,13 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) - #else /* !UNW_LOCAL_ONLY */ - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = as; - c->dwarf.as_arg = as_arg; -- return common_init (c); -+ return common_init (c, 0); - #endif /* !UNW_LOCAL_ONLY */ - } -diff --git a/frysk-imports/libunwind/src/mips/Gis_signal_frame.c b/frysk-imports/libunwind/src/mips/Gis_signal_frame.c -index fef542b..2c9627f 100644 ---- a/frysk-imports/libunwind/src/mips/Gis_signal_frame.c -+++ b/frysk-imports/libunwind/src/mips/Gis_signal_frame.c -@@ -1,4 +1,5 @@ - /* libunwind - a platform-independent unwind library -+ Copyright (C) 2015 Imagination Technologies Limited - Copyright (C) 2008 CodeSourcery - - This file is part of libunwind. -@@ -25,11 +26,53 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - #include - --/* FIXME for MIPS. */ -- - PROTECTED int - unw_is_signal_frame (unw_cursor_t *cursor) - { -- printf ("%s: implement me\n", __FUNCTION__); -- return -UNW_ENOINFO; -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t w0, w1, ip; -+ unw_addr_space_t as; -+ unw_accessors_t *a; -+ void *arg; -+ int ret; -+ -+ as = c->dwarf.as; -+ a = unw_get_accessors (as); -+ arg = c->dwarf.as_arg; -+ -+ ip = c->dwarf.ip; -+ -+ /* syscall */ -+ if ((ret = (*a->access_mem) (as, ip + 4, &w1, 0, arg)) < 0) -+ return 0; -+ if ((w1 & 0xffffffff) != 0x0c) -+ return 0; -+ -+ /* li v0, 0x1061 (rt) or li v0, 0x1017 */ -+ if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0) -+ return 0; -+ -+ switch (c->dwarf.as->abi) -+ { -+ case UNW_MIPS_ABI_O32: -+ switch (w0 & 0xffffffff) -+ { -+ case 0x24021061: -+ return 1; -+ case 0x24021017: -+ return 2; -+ default: -+ return 0; -+ } -+ case UNW_MIPS_ABI_N64: -+ switch (w0 & 0xffffffff) -+ { -+ case 0x2402145b: -+ return 1; -+ default: -+ return 0; -+ } -+ default: -+ return 0; -+ } - } -diff --git a/frysk-imports/libunwind/src/mips/Gregs.c b/frysk-imports/libunwind/src/mips/Gregs.c -index 9f37299..2697776 100644 ---- a/frysk-imports/libunwind/src/mips/Gregs.c -+++ b/frysk-imports/libunwind/src/mips/Gregs.c -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN int - tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -- int write) -+ int write) - { - dwarf_loc_t loc = DWARF_NULL_LOC; - -@@ -69,6 +69,10 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - loc = c->dwarf.loc[reg - UNW_MIPS_R0]; - break; - -+ case UNW_MIPS_PC: -+ loc = c->dwarf.loc[reg]; -+ break; -+ - case UNW_MIPS_CFA: - if (write) - return -UNW_EREADONLYREG; -@@ -92,7 +96,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - HIDDEN int - tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -- int write) -+ int write) - { - Debug (1, "bad register number %u\n", reg); - return -UNW_EBADREG; -diff --git a/frysk-imports/libunwind/src/mips/Gstep.c b/frysk-imports/libunwind/src/mips/Gstep.c -index bafeef1..0a0b9c2 100644 ---- a/frysk-imports/libunwind/src/mips/Gstep.c -+++ b/frysk-imports/libunwind/src/mips/Gstep.c -@@ -1,4 +1,5 @@ - /* libunwind - a platform-independent unwind library -+ Copyright (C) 2015 Imagination Technologies Limited - Copyright (C) 2008 CodeSourcery - - This file is part of libunwind. -@@ -26,16 +27,99 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "offsets.h" - - PROTECTED int --unw_step (unw_cursor_t *cursor) -+unw_handle_signal_frame (unw_cursor_t *cursor) - { - struct cursor *c = (struct cursor *) cursor; -+ unw_word_t sc_addr, sp, sp_addr = c->dwarf.cfa; -+ unw_word_t ra, fp; - int ret; - -- Debug (1, "(cursor=%p)\n", c); -+ switch (unw_is_signal_frame (cursor)) { -+ case 1: -+ sc_addr = sp_addr + LINUX_SF_TRAMP_SIZE + sizeof (siginfo_t) + -+ LINUX_UC_MCONTEXT_OFF; -+ break; -+ case 2: -+ sc_addr = sp_addr + LINUX_UC_MCONTEXT_OFF; -+ break; -+ default: -+ return -UNW_EUNSPEC; -+ } -+ -+ if (tdep_big_endian(c->dwarf.as)) -+ sc_addr += 4; -+ -+ c->sigcontext_addr = sc_addr; -+ -+ /* Update the dwarf cursor. */ -+ c->dwarf.loc[UNW_MIPS_R0] = DWARF_LOC (sc_addr + LINUX_SC_R0_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R1] = DWARF_LOC (sc_addr + LINUX_SC_R1_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R2] = DWARF_LOC (sc_addr + LINUX_SC_R2_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R3] = DWARF_LOC (sc_addr + LINUX_SC_R3_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R4] = DWARF_LOC (sc_addr + LINUX_SC_R4_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R5] = DWARF_LOC (sc_addr + LINUX_SC_R5_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R6] = DWARF_LOC (sc_addr + LINUX_SC_R6_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R7] = DWARF_LOC (sc_addr + LINUX_SC_R7_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R8] = DWARF_LOC (sc_addr + LINUX_SC_R8_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R9] = DWARF_LOC (sc_addr + LINUX_SC_R9_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R10] = DWARF_LOC (sc_addr + LINUX_SC_R10_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R11] = DWARF_LOC (sc_addr + LINUX_SC_R11_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R12] = DWARF_LOC (sc_addr + LINUX_SC_R12_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R13] = DWARF_LOC (sc_addr + LINUX_SC_R13_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R14] = DWARF_LOC (sc_addr + LINUX_SC_R14_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R15] = DWARF_LOC (sc_addr + LINUX_SC_R15_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R16] = DWARF_LOC (sc_addr + LINUX_SC_R16_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R17] = DWARF_LOC (sc_addr + LINUX_SC_R17_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R18] = DWARF_LOC (sc_addr + LINUX_SC_R18_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R19] = DWARF_LOC (sc_addr + LINUX_SC_R19_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R20] = DWARF_LOC (sc_addr + LINUX_SC_R20_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R21] = DWARF_LOC (sc_addr + LINUX_SC_R21_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R22] = DWARF_LOC (sc_addr + LINUX_SC_R22_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R23] = DWARF_LOC (sc_addr + LINUX_SC_R23_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R24] = DWARF_LOC (sc_addr + LINUX_SC_R24_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R25] = DWARF_LOC (sc_addr + LINUX_SC_R25_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R26] = DWARF_LOC (sc_addr + LINUX_SC_R26_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R27] = DWARF_LOC (sc_addr + LINUX_SC_R27_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R28] = DWARF_LOC (sc_addr + LINUX_SC_R28_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R29] = DWARF_LOC (sc_addr + LINUX_SC_R29_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R30] = DWARF_LOC (sc_addr + LINUX_SC_R30_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_R31] = DWARF_LOC (sc_addr + LINUX_SC_R31_OFF, 0); -+ c->dwarf.loc[UNW_MIPS_PC] = DWARF_LOC (sc_addr + LINUX_SC_PC_OFF, 0); -+ -+ /* Set SP/CFA and PC/IP. */ -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_MIPS_R29], &c->dwarf.cfa); -+ -+ if ((ret = dwarf_get(&c->dwarf, DWARF_LOC(sc_addr + LINUX_SC_PC_OFF, 0), -+ &c->dwarf.ip)) < 0) -+ return ret; -+ -+ if ((ret = dwarf_get(&c->dwarf, DWARF_LOC(sc_addr + LINUX_SC_R31_OFF, 0), -+ &ra)) < 0) -+ return ret; -+ if ((ret = dwarf_get(&c->dwarf, DWARF_LOC(sc_addr + LINUX_SC_R30_OFF, 0), -+ &fp)) < 0) -+ return ret; -+ -+ Debug (2, "SH (ip=0x%016llx, ra=0x%016llx, sp=0x%016llx, fp=0x%016llx)\n", -+ (unsigned long long)c->dwarf.ip, (unsigned long long)ra, -+ (unsigned long long)c->dwarf.cfa, (unsigned long long)fp); -+ -+ c->dwarf.pi_valid = 0; -+ c->dwarf.use_prev_instr = 0; -+ -+ return 1; -+} -+ -+PROTECTED int -+unw_step (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; - -- /* Try DWARF-based unwinding... this is the only method likely to work for -- MIPS. */ -- ret = dwarf_step (&c->dwarf); -+ ret = unw_handle_signal_frame (cursor); -+ if (ret < 0) -+ /* Not a signal frame, try DWARF-based unwinding. */ -+ ret = dwarf_step (&c->dwarf); - - if (unlikely (ret == -UNW_ESTOPUNWIND)) - return ret; -diff --git a/frysk-imports/libunwind/src/mips/getcontext.S b/frysk-imports/libunwind/src/mips/getcontext.S -index ad9e1f0..d1dbd57 100644 ---- a/frysk-imports/libunwind/src/mips/getcontext.S -+++ b/frysk-imports/libunwind/src/mips/getcontext.S -@@ -1,5 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala - - This file is part of libunwind. - -@@ -37,8 +38,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - sw $X, (LINUX_UC_MCONTEXT_GREGS + 8 * X + OFFSET) ($4); \ - sra $1, $X, 31; \ - sw $1, (LINUX_UC_MCONTEXT_GREGS + 8 * X + 4 - OFFSET) ($4) -+/* Yes, we save the return address to PC. */ -+# define SPC \ -+ sw $31, (LINUX_UC_MCONTEXT_PC + OFFSET) ($4); \ -+ sra $1, $31, 31; \ -+ sw $1, (LINUX_UC_MCONTEXT_PC + 4 - OFFSET) ($4) - #else - # define SREG(X) sd $X, (LINUX_UC_MCONTEXT_GREGS + 8 * X) ($4) -+# define SPC sd $31, (LINUX_UC_MCONTEXT_PC) ($4) - #endif - - .global _Umips_getcontext -@@ -79,6 +86,7 @@ _Umips_getcontext: - SREG (29) - SREG (30) - SREG (31) -+ SPC - li $2, 0 - j $31 - -diff --git a/frysk-imports/libunwind/src/mips/init.h b/frysk-imports/libunwind/src/mips/init.h -index 98956d4..74c3ab9 100644 ---- a/frysk-imports/libunwind/src/mips/init.h -+++ b/frysk-imports/libunwind/src/mips/init.h -@@ -25,7 +25,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - - static inline int --common_init (struct cursor *c) -+common_init (struct cursor *c, unsigned use_prev_instr) - { - int ret, i; - -@@ -34,12 +34,14 @@ common_init (struct cursor *c) - for (i = 32; i < DWARF_NUM_PRESERVED_REGS; ++i) - c->dwarf.loc[i] = DWARF_NULL_LOC; - -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[31], &c->dwarf.ip); -+ c->dwarf.loc[UNW_MIPS_PC] = DWARF_REG_LOC (&c->dwarf, UNW_MIPS_PC); -+ -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_MIPS_PC], &c->dwarf.ip); - if (ret < 0) - return ret; - - ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_MIPS_R29), -- &c->dwarf.cfa); -+ &c->dwarf.cfa); - if (ret < 0) - return ret; - -@@ -47,6 +49,8 @@ common_init (struct cursor *c) - - c->dwarf.args_size = 0; - c->dwarf.ret_addr_column = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; - c->dwarf.pi_valid = 0; - c->dwarf.pi_is_dynamic = 0; - c->dwarf.hint = 0; -diff --git a/frysk-imports/libunwind/src/mips/offsets.h b/frysk-imports/libunwind/src/mips/offsets.h -index 8040f6a..b506051 100644 ---- a/frysk-imports/libunwind/src/mips/offsets.h -+++ b/frysk-imports/libunwind/src/mips/offsets.h -@@ -9,31 +9,78 @@ - - /* Offsets for MIPS Linux "ucontext_t": */ - -+/* First 24 bytes in sigframe are argument save space and padding for -+what used to be signal trampolines. Ref: arch/mips/kernel/signal.c */ -+#define LINUX_SF_TRAMP_SIZE 0x18 -+ - #if _MIPS_SIM == _ABIO32 - --# define LINUX_UC_FLAGS_OFF 0x0 --# define LINUX_UC_LINK_OFF 0x4 --# define LINUX_UC_STACK_OFF 0x8 --# define LINUX_UC_MCONTEXT_OFF 0x18 --# define LINUX_UC_SIGMASK_OFF 0x268 --# define LINUX_UC_MCONTEXT_GREGS 0x28 -+# define LINUX_UC_FLAGS_OFF 0x0 -+# define LINUX_UC_LINK_OFF 0x4 -+# define LINUX_UC_STACK_OFF 0x8 -+# define LINUX_UC_MCONTEXT_OFF 0x18 -+# define LINUX_UC_SIGMASK_OFF 0x268 -+# define LINUX_UC_MCONTEXT_PC 0x20 -+# define LINUX_UC_MCONTEXT_GREGS 0x28 - - #elif _MIPS_SIM == _ABIN32 - --# define LINUX_UC_FLAGS_OFF 0x0 --# define LINUX_UC_LINK_OFF 0x4 --# define LINUX_UC_STACK_OFF 0x8 --# define LINUX_UC_MCONTEXT_OFF 0x18 --# define LINUX_UC_SIGMASK_OFF 0x270 --# define LINUX_UC_MCONTEXT_GREGS 0x18 -+# define LINUX_UC_FLAGS_OFF 0x0 -+# define LINUX_UC_LINK_OFF 0x4 -+# define LINUX_UC_STACK_OFF 0x8 -+# define LINUX_UC_MCONTEXT_OFF 0x18 -+# define LINUX_UC_SIGMASK_OFF 0x270 -+# define LINUX_UC_MCONTEXT_PC 0x258 -+# define LINUX_UC_MCONTEXT_GREGS 0x18 - - #elif _MIPS_SIM == _ABI64 - --# define LINUX_UC_FLAGS_OFF 0x0 --# define LINUX_UC_LINK_OFF 0x8 --# define LINUX_UC_STACK_OFF 0x10 --# define LINUX_UC_MCONTEXT_OFF 0x28 --# define LINUX_UC_SIGMASK_OFF 0x280 --# define LINUX_UC_MCONTEXT_GREGS 0x28 -+# define LINUX_UC_FLAGS_OFF 0x0 -+# define LINUX_UC_LINK_OFF 0x8 -+# define LINUX_UC_STACK_OFF 0x10 -+# define LINUX_UC_MCONTEXT_OFF 0x28 -+# define LINUX_UC_SIGMASK_OFF 0x280 -+# define LINUX_UC_MCONTEXT_PC 0x268 -+# define LINUX_UC_MCONTEXT_GREGS 0x28 -+ -+#else -+ -+#error Unsupported ABI - - #endif -+ -+#define LINUX_SC_R0_OFF (LINUX_UC_MCONTEXT_GREGS - LINUX_UC_MCONTEXT_OFF) -+#define LINUX_SC_R1_OFF (LINUX_SC_R0_OFF + 1*8) -+#define LINUX_SC_R2_OFF (LINUX_SC_R0_OFF + 2*8) -+#define LINUX_SC_R3_OFF (LINUX_SC_R0_OFF + 3*8) -+#define LINUX_SC_R4_OFF (LINUX_SC_R0_OFF + 4*8) -+#define LINUX_SC_R5_OFF (LINUX_SC_R0_OFF + 5*8) -+#define LINUX_SC_R6_OFF (LINUX_SC_R0_OFF + 6*8) -+#define LINUX_SC_R7_OFF (LINUX_SC_R0_OFF + 7*8) -+#define LINUX_SC_R8_OFF (LINUX_SC_R0_OFF + 8*8) -+#define LINUX_SC_R9_OFF (LINUX_SC_R0_OFF + 9*8) -+#define LINUX_SC_R10_OFF (LINUX_SC_R0_OFF + 10*8) -+#define LINUX_SC_R11_OFF (LINUX_SC_R0_OFF + 11*8) -+#define LINUX_SC_R12_OFF (LINUX_SC_R0_OFF + 12*8) -+#define LINUX_SC_R13_OFF (LINUX_SC_R0_OFF + 13*8) -+#define LINUX_SC_R14_OFF (LINUX_SC_R0_OFF + 14*8) -+#define LINUX_SC_R15_OFF (LINUX_SC_R0_OFF + 15*8) -+#define LINUX_SC_R16_OFF (LINUX_SC_R0_OFF + 16*8) -+#define LINUX_SC_R17_OFF (LINUX_SC_R0_OFF + 17*8) -+#define LINUX_SC_R18_OFF (LINUX_SC_R0_OFF + 18*8) -+#define LINUX_SC_R19_OFF (LINUX_SC_R0_OFF + 19*8) -+#define LINUX_SC_R20_OFF (LINUX_SC_R0_OFF + 20*8) -+#define LINUX_SC_R21_OFF (LINUX_SC_R0_OFF + 21*8) -+#define LINUX_SC_R22_OFF (LINUX_SC_R0_OFF + 22*8) -+#define LINUX_SC_R23_OFF (LINUX_SC_R0_OFF + 23*8) -+#define LINUX_SC_R24_OFF (LINUX_SC_R0_OFF + 24*8) -+#define LINUX_SC_R25_OFF (LINUX_SC_R0_OFF + 25*8) -+#define LINUX_SC_R26_OFF (LINUX_SC_R0_OFF + 26*8) -+#define LINUX_SC_R27_OFF (LINUX_SC_R0_OFF + 27*8) -+#define LINUX_SC_R28_OFF (LINUX_SC_R0_OFF + 28*8) -+#define LINUX_SC_R29_OFF (LINUX_SC_R0_OFF + 29*8) -+#define LINUX_SC_R30_OFF (LINUX_SC_R0_OFF + 30*8) -+#define LINUX_SC_R31_OFF (LINUX_SC_R0_OFF + 31*8) -+ -+#define LINUX_SC_SP_OFF LINUX_SC_R29_OFF -+#define LINUX_SC_PC_OFF (LINUX_UC_MCONTEXT_PC - LINUX_UC_MCONTEXT_OFF) -diff --git a/frysk-imports/libunwind/src/mips/regname.c b/frysk-imports/libunwind/src/mips/regname.c -index 94000d4..a4a6334 100644 ---- a/frysk-imports/libunwind/src/mips/regname.c -+++ b/frysk-imports/libunwind/src/mips/regname.c -@@ -41,6 +41,8 @@ unw_regname (unw_regnum_t reg) - { - if (reg < (unw_regnum_t) ARRAY_SIZE (regname)) - return regname[reg]; -+ else if (reg == UNW_MIPS_PC) -+ return "pc"; - else - return "???"; - } -diff --git a/frysk-imports/libunwind/src/mips/unwind_i.h b/frysk-imports/libunwind/src/mips/unwind_i.h -index faf3237..3382dcf 100644 ---- a/frysk-imports/libunwind/src/mips/unwind_i.h -+++ b/frysk-imports/libunwind/src/mips/unwind_i.h -@@ -25,23 +25,18 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef unwind_i_h - #define unwind_i_h - --#include - #include - - #include - - #include "libunwind_i.h" - --/* --#define x86_lock UNW_OBJ(lock) --#define x86_local_resume UNW_OBJ(local_resume) --#define x86_local_addr_space_init UNW_OBJ(local_addr_space_init) --#define x86_scratch_loc UNW_OBJ(scratch_loc) -+#define mips_lock UNW_OBJ(lock) -+#define mips_local_resume UNW_OBJ(local_resume) -+#define mips_local_addr_space_init UNW_OBJ(local_addr_space_init) - --extern int x86_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -- void *arg); --extern dwarf_loc_t x86_scratch_loc (struct cursor *c, unw_regnum_t reg); --*/ -+extern int mips_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -+ void *arg); - - extern void mips_local_addr_space_init (void); - -diff --git a/frysk-imports/libunwind/src/os-freebsd.c b/frysk-imports/libunwind/src/os-freebsd.c -new file mode 100644 -index 0000000..1aa1e07 ---- /dev/null -+++ b/frysk-imports/libunwind/src/os-freebsd.c -@@ -0,0 +1,145 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010 Konstantin Belousov -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "libunwind_i.h" -+ -+static void * -+get_mem(size_t sz) -+{ -+ void *res; -+ -+ res = mmap(NULL, sz, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); -+ if (res == MAP_FAILED) -+ return (NULL); -+ return (res); -+} -+ -+static void -+free_mem(void *ptr, size_t sz) -+{ -+ munmap(ptr, sz); -+} -+ -+static int -+get_pid_by_tid(int tid) -+{ -+ int mib[3], error; -+ size_t len, len1; -+ char *buf; -+ struct kinfo_proc *kv; -+ int i, pid; -+ -+ len = 0; -+ mib[0] = CTL_KERN; -+ mib[1] = KERN_PROC; -+ mib[2] = KERN_PROC_ALL; -+ -+ error = sysctl(mib, 3, NULL, &len, NULL, 0); -+ if (error == -1) -+ return (-1); -+ len1 = len * 4 / 3; -+ buf = get_mem(len1); -+ if (buf == NULL) -+ return (-1); -+ len = len1; -+ error = sysctl(mib, 3, buf, &len, NULL, 0); -+ if (error == -1) { -+ free_mem(buf, len1); -+ return (-1); -+ } -+ pid = -1; -+ for (i = 0, kv = (struct kinfo_proc *)buf; i < len / sizeof(*kv); -+ i++, kv++) { -+ if (kv->ki_tid == tid) { -+ pid = kv->ki_pid; -+ break; -+ } -+ } -+ free_mem(buf, len1); -+ return (pid); -+} -+ -+PROTECTED int -+tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -+ unsigned long *segbase, unsigned long *mapoff, char *path, size_t pathlen) -+{ -+ int mib[4], error, ret; -+ size_t len, len1; -+ char *buf, *bp, *eb; -+ struct kinfo_vmentry *kv; -+ -+ len = 0; -+ mib[0] = CTL_KERN; -+ mib[1] = KERN_PROC; -+ mib[2] = KERN_PROC_VMMAP; -+ mib[3] = pid; -+ -+ error = sysctl(mib, 4, NULL, &len, NULL, 0); -+ if (error == -1) { -+ if (errno == ESRCH) { -+ mib[3] = get_pid_by_tid(pid); -+ if (mib[3] != -1) -+ error = sysctl(mib, 4, NULL, &len, NULL, 0); -+ if (error == -1) -+ return (-UNW_EUNSPEC); -+ } else -+ return (-UNW_EUNSPEC); -+ } -+ len1 = len * 4 / 3; -+ buf = get_mem(len1); -+ if (buf == NULL) -+ return (-UNW_EUNSPEC); -+ len = len1; -+ error = sysctl(mib, 4, buf, &len, NULL, 0); -+ if (error == -1) { -+ free_mem(buf, len1); -+ return (-UNW_EUNSPEC); -+ } -+ ret = -UNW_EUNSPEC; -+ for (bp = buf, eb = buf + len; bp < eb; bp += kv->kve_structsize) { -+ kv = (struct kinfo_vmentry *)(uintptr_t)bp; -+ if (ip < kv->kve_start || ip >= kv->kve_end) -+ continue; -+ if (kv->kve_type != KVME_TYPE_VNODE) -+ continue; -+ *segbase = kv->kve_start; -+ *mapoff = kv->kve_offset; -+ if (path) -+ { -+ strncpy(path, kv->kve_path, pathlen); -+ } -+ ret = elf_map_image (ei, kv->kve_path); -+ break; -+ } -+ free_mem(buf, len1); -+ return (ret); -+} -diff --git a/frysk-imports/libunwind/src/os-hpux.c b/frysk-imports/libunwind/src/os-hpux.c -index 586ace2..2ee6fa7 100644 ---- a/frysk-imports/libunwind/src/os-hpux.c -+++ b/frysk-imports/libunwind/src/os-hpux.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -23,9 +23,8 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#ifndef UNW_REMOTE_ONLY -- - #include -+#include - #include - - #include "libunwind_i.h" -@@ -34,10 +33,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN int - tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff) -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen) - { - struct load_module_desc lmd; -- const char *path; -+ const char *path2; - - if (pid != getpid ()) - { -@@ -49,15 +49,19 @@ tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, - return -UNW_ENOINFO; - - *segbase = lmd.text_base; -- *mapoff = 0; /* XXX fix me? */ -+ *mapoff = 0; /* XXX fix me? */ - -- path = dlgetname (&lmd, sizeof (lmd), NULL, 0, 0); -- if (!path) -+ path2 = dlgetname (&lmd, sizeof (lmd), NULL, 0, 0); -+ if (!path2) - return -UNW_ENOINFO; -- -+ if (path) -+ { -+ strncpy(path, path2, pathlen); -+ path[pathlen - 1] = '\0'; -+ if (strcmp(path, path2) != 0) -+ Debug(1, "buffer size (%d) not big enough to hold path\n", pathlen); -+ } - Debug(1, "segbase=%lx, mapoff=%lx, path=%s\n", *segbase, *mapoff, path); - - return elf_map_image (ei, path); - } -- --#endif /* UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/os-linux.c b/frysk-imports/libunwind/src/os-linux.c -index ae37d8f..1cc9ba5 100644 ---- a/frysk-imports/libunwind/src/os-linux.c -+++ b/frysk-imports/libunwind/src/os-linux.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -23,8 +23,6 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#ifndef UNW_REMOTE_ONLY -- - #include - #include - -@@ -33,26 +31,33 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - PROTECTED int - tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -- unsigned long *segbase, unsigned long *mapoff) -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen) - { - struct map_iterator mi; -- char path[PATH_MAX]; -- int found = 0; -+ int found = 0, rc; - unsigned long hi; - -- maps_init (&mi, pid); -- while (maps_next (&mi, segbase, &hi, mapoff, path, sizeof (path))) -+ if (maps_init (&mi, pid) < 0) -+ return -1; -+ -+ while (maps_next (&mi, segbase, &hi, mapoff)) - if (ip >= *segbase && ip < hi) - { -- found = 1; -- break; -+ found = 1; -+ break; - } -- maps_close (&mi); - - if (!found) -- return -1; -- -- return elf_map_image (ei, path); -+ { -+ maps_close (&mi); -+ return -1; -+ } -+ if (path) -+ { -+ strncpy(path, mi.path, pathlen); -+ } -+ rc = elf_map_image (ei, mi.path); -+ maps_close (&mi); -+ return rc; - } -- --#endif /* UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/os-linux.h b/frysk-imports/libunwind/src/os-linux.h -index b2c9a8b..3976b38 100644 ---- a/frysk-imports/libunwind/src/os-linux.h -+++ b/frysk-imports/libunwind/src/os-linux.h -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -34,6 +34,7 @@ struct map_iterator - size_t buf_size; - char *buf; - char *buf_end; -+ char *path; - }; - - static inline char * -@@ -61,33 +62,37 @@ ltoa (char *buf, long val) - return buf + len; - } - --static inline void -+static inline int - maps_init (struct map_iterator *mi, pid_t pid) - { -- char path[PATH_MAX], *cp; -+ char path[sizeof ("/proc/0123456789/maps")], *cp; - - memcpy (path, "/proc/", 6); - cp = ltoa (path + 6, pid); -+ assert (cp + 6 < path + sizeof (path)); - memcpy (cp, "/maps", 6); - - mi->fd = open (path, O_RDONLY); -- mi->offset = 0; -- mi->buf_size = 0; -- -- cp = NULL; - if (mi->fd >= 0) - { -- /* Try to allocate a page-sized buffer. If that fails, we'll -- fall back on reading one line at a time. */ -+ /* Try to allocate a page-sized buffer. */ - mi->buf_size = getpagesize (); -- cp = mmap (0, mi->buf_size, PROT_READ | PROT_WRITE, -- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); -+ cp = mmap (NULL, mi->buf_size, PROT_READ | PROT_WRITE, -+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - if (cp == MAP_FAILED) -- cp = NULL; -+ { -+ close(mi->fd); -+ mi->fd = -1; -+ return -1; -+ } - else -- cp += mi->buf_size; -+ { -+ mi->offset = 0; -+ mi->buf = mi->buf_end = cp + mi->buf_size; -+ return 0; -+ } - } -- mi->buf = mi->buf_end = cp; -+ return -1; - } - - static inline char * -@@ -114,13 +119,13 @@ scan_hex (char *cp, unsigned long *valp) - { - digit = *cp; - if ((digit - '0') <= 9) -- digit -= '0'; -+ digit -= '0'; - else if ((digit - 'a') < 6) -- digit -= 'a' - 10; -+ digit -= 'a' - 10; - else if ((digit - 'A') < 6) -- digit -= 'A' - 10; -+ digit -= 'A' - 10; - else -- break; -+ break; - val = (val << 4) | digit; - ++num_digits; - ++cp; -@@ -143,12 +148,12 @@ scan_dec (char *cp, unsigned long *valp) - { - digit = *cp; - if ((digit - '0') <= 9) -- { -- digit -= '0'; -- ++cp; -- } -+ { -+ digit -= '0'; -+ ++cp; -+ } - else -- break; -+ break; - val = (10 * val) + digit; - ++num_digits; - } -@@ -184,8 +189,8 @@ scan_string (char *cp, char *valp, size_t buf_size) - - while (*cp != ' ' && *cp != '\t' && *cp != '\0') - { -- if (i < buf_size - 1) -- valp[i++] = *cp; -+ if ((valp != NULL) && (i < buf_size - 1)) -+ valp[i++] = *cp; - ++cp; - } - if (i == 0 || i >= buf_size) -@@ -196,12 +201,10 @@ scan_string (char *cp, char *valp, size_t buf_size) - - static inline int - maps_next (struct map_iterator *mi, -- unsigned long *low, unsigned long *high, unsigned long *offset, -- char *path, size_t path_size) -+ unsigned long *low, unsigned long *high, unsigned long *offset) - { -- char line[256 + PATH_MAX], perm[16], dash, colon, *cp; -+ char perm[16], dash = 0, colon = 0, *cp; - unsigned long major, minor, inum; -- size_t to_read = 256; /* most lines fit in 256 characters easy */ - ssize_t i, nread; - - if (mi->fd < 0) -@@ -209,80 +212,52 @@ maps_next (struct map_iterator *mi, - - while (1) - { -- if (mi->buf) -- { -- ssize_t bytes_left = mi->buf_end - mi->buf; -- char *eol = NULL; -- -- for (i = 0; i < bytes_left; ++i) -- { -- if (mi->buf[i] == '\n') -- { -- eol = mi->buf + i; -- break; -- } -- else if (mi->buf[i] == '\0') -- break; -- } -- if (!eol) -- { -- /* copy down the remaining bytes, if any */ -- if (bytes_left > 0) -- memmove (mi->buf_end - mi->buf_size, mi->buf, bytes_left); -- -- mi->buf = mi->buf_end - mi->buf_size; -- nread = read (mi->fd, mi->buf + bytes_left, -- mi->buf_size - bytes_left); -- if (nread <= 0) -- return 0; -- else if ((size_t) (nread + bytes_left) < mi->buf_size) -- { -- /* Move contents to the end of the buffer so we -- maintain the invariant that all bytes between -- mi->buf and mi->buf_end are valid. */ -- memmove (mi->buf_end - nread - bytes_left, mi->buf, -- nread + bytes_left); -- mi->buf = mi->buf_end - nread - bytes_left; -- } -- -- eol = mi->buf + bytes_left + nread - 1; -- -- for (i = bytes_left; i < bytes_left + nread; ++i) -- if (mi->buf[i] == '\n') -- { -- eol = mi->buf + i; -- break; -- } -- } -- cp = mi->buf; -- mi->buf = eol + 1; -- *eol = '\0'; -- } -- else -- { -- /* maps_init() wasn't able to allocate a buffer; do it the -- slow way. */ -- lseek (mi->fd, mi->offset, SEEK_SET); -- -- if ((nread = read (mi->fd, line, to_read)) <= 0) -- return 0; -- for (i = 0; i < nread && line[i] != '\n'; ++i) -- /* skip */; -- if (i < nread) -- { -- line[i] = '\0'; -- mi->offset += i + 1; -- } -- else -- { -- if (to_read < sizeof (line)) -- to_read = sizeof (line) - 1; -- else -- mi->offset += nread; /* not supposed to happen... */ -- continue; /* duh, no newline found */ -- } -- cp = line; -- } -+ ssize_t bytes_left = mi->buf_end - mi->buf; -+ char *eol = NULL; -+ -+ for (i = 0; i < bytes_left; ++i) -+ { -+ if (mi->buf[i] == '\n') -+ { -+ eol = mi->buf + i; -+ break; -+ } -+ else if (mi->buf[i] == '\0') -+ break; -+ } -+ if (!eol) -+ { -+ /* copy down the remaining bytes, if any */ -+ if (bytes_left > 0) -+ memmove (mi->buf_end - mi->buf_size, mi->buf, bytes_left); -+ -+ mi->buf = mi->buf_end - mi->buf_size; -+ nread = read (mi->fd, mi->buf + bytes_left, -+ mi->buf_size - bytes_left); -+ if (nread <= 0) -+ return 0; -+ else if ((size_t) (nread + bytes_left) < mi->buf_size) -+ { -+ /* Move contents to the end of the buffer so we -+ maintain the invariant that all bytes between -+ mi->buf and mi->buf_end are valid. */ -+ memmove (mi->buf_end - nread - bytes_left, mi->buf, -+ nread + bytes_left); -+ mi->buf = mi->buf_end - nread - bytes_left; -+ } -+ -+ eol = mi->buf + bytes_left + nread - 1; -+ -+ for (i = bytes_left; i < bytes_left + nread; ++i) -+ if (mi->buf[i] == '\n') -+ { -+ eol = mi->buf + i; -+ break; -+ } -+ } -+ cp = mi->buf; -+ mi->buf = eol + 1; -+ *eol = '\0'; - - /* scan: "LOW-HIGH PERM OFFSET MAJOR:MINOR INUM PATH" */ - cp = scan_hex (cp, low); -@@ -294,9 +269,12 @@ maps_next (struct map_iterator *mi, - cp = scan_char (cp, &colon); - cp = scan_hex (cp, &minor); - cp = scan_dec (cp, &inum); -- cp = scan_string (cp, path, path_size); -- if (!cp || dash != '-' || colon != ':') -- continue; /* skip line with unknown or bad format */ -+ cp = mi->path = skip_whitespace (cp); -+ if (!cp) -+ continue; -+ cp = scan_string (cp, NULL, 0); -+ if (dash != '-' || colon != ':') -+ continue; /* skip line with unknown or bad format */ - return 1; - } - return 0; -@@ -312,7 +290,7 @@ maps_close (struct map_iterator *mi) - if (mi->buf) - { - munmap (mi->buf_end - mi->buf_size, mi->buf_size); -- mi->buf = mi->buf_end = 0; -+ mi->buf = mi->buf_end = NULL; - } - } - -diff --git a/frysk-imports/libunwind/src/os-qnx.c b/frysk-imports/libunwind/src/os-qnx.c -new file mode 100644 -index 0000000..97bc766 ---- /dev/null -+++ b/frysk-imports/libunwind/src/os-qnx.c -@@ -0,0 +1,107 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2013 Garmin International -+ Contributed by Matt Fischer -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+ -+#include "libunwind_i.h" -+ -+struct cb_info -+{ -+ unw_word_t ip; -+ unsigned long segbase; -+ unsigned long offset; -+ const char *path; -+}; -+ -+static int callback(const struct dl_phdr_info *info, size_t size, void *data) -+{ -+ int i; -+ struct cb_info *cbi = (struct cb_info*)data; -+ for(i=0; idlpi_phnum; i++) { -+ int segbase = info->dlpi_addr + info->dlpi_phdr[i].p_vaddr; -+ if(cbi->ip >= segbase && cbi->ip < segbase + info->dlpi_phdr[i].p_memsz) -+ { -+ cbi->path = info->dlpi_name; -+ cbi->offset = info->dlpi_phdr[i].p_offset; -+ cbi->segbase = segbase; -+ return 1; -+ } -+ } -+ -+ return 0; -+} -+ -+PROTECTED int -+tdep_get_elf_image (struct elf_image *ei, pid_t pid, unw_word_t ip, -+ unsigned long *segbase, unsigned long *mapoff, -+ char *path, size_t pathlen) -+{ -+ struct cb_info cbi; -+ int ret = -1; -+ cbi.ip = ip; -+ cbi.segbase = 0; -+ cbi.offset = 0; -+ cbi.path = NULL; -+ -+ /* QNX's support for accessing symbol maps is severely broken. There is -+ a devctl() call that can be made on a proc node (DCMD_PROC_MAPDEBUG) -+ which returns information similar to Linux's /proc//maps -+ node, however the filename that is returned by this call is not an -+ absolute path, and there is no foolproof way to map the filename -+ back to the file that it came from. -+ -+ Therefore, the normal approach for implementing this function, -+ which works equally well for both local and remote unwinding, -+ will not work here. The only type of image lookup which works -+ reliably is locally, using dl_iterate_phdr(). However, the only -+ time that this function is required to look up a remote image is for -+ ptrace support, which doesn't work on QNX anyway. Local unwinding, -+ which is the main case that makes use of this function, will work -+ fine with dl_iterate_phdr(). Therefore, in lieu of any better -+ platform support for remote image lookup, this function has just -+ been implemented in terms of dl_iterate_phdr(). -+ */ -+ -+ if (pid != getpid()) -+ { -+ /* Return an error if an attempt is made to perform remote image lookup */ -+ return -1; -+ } -+ -+ if (dl_iterate_phdr (callback, &cbi) != 0) -+ { -+ if (path) -+ { -+ strncpy (path, cbi.path, pathlen); -+ } -+ -+ *mapoff = cbi.offset; -+ *segbase = cbi.segbase; -+ -+ ret = elf_map_image (ei, cbi.path); -+ } -+ -+ return ret; -+} -diff --git a/frysk-imports/libunwind/src/ppc/Gcreate_addr_space.c b/frysk-imports/libunwind/src/ppc/Gcreate_addr_space.c -deleted file mode 100644 -index 21ec10f..0000000 ---- a/frysk-imports/libunwind/src/ppc/Gcreate_addr_space.c -+++ /dev/null -@@ -1,54 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (C) 2006-2007 IBM -- Contributed by -- Corey Ashford -- Jose Flavio Aguilar Paulino -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include -- --#include -- --PROTECTED unw_addr_space_t --unw_create_addr_space (unw_accessors_t *a, int byte_order) --{ --#ifdef UNW_LOCAL_ONLY -- return NULL; --#else -- unw_addr_space_t as = malloc (sizeof (*as)); -- -- if (!as) -- return NULL; -- -- memset (as, 0, sizeof (*as)); -- -- as->acc = *a; -- -- /* -- * Linux ppc64 supports only big-endian. -- */ -- if (byte_order != 0 && byte_order != __BIG_ENDIAN) -- return NULL; -- return as; --#endif --} -diff --git a/frysk-imports/libunwind/src/ppc/Gfetch_proc_info_post.c b/frysk-imports/libunwind/src/ppc/Gfetch_proc_info_post.c -deleted file mode 100644 -index 778d9ae..0000000 ---- a/frysk-imports/libunwind/src/ppc/Gfetch_proc_info_post.c -+++ /dev/null -@@ -1,51 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (c) 2006 Hewlett-Packard Development Company, L.P. -- Contributed by Jan Kratochvil -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "libunwind_i.h" -- --HIDDEN int --tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip, int need_unwind_info) --{ -- struct cursor *cursor = (struct cursor *) c; -- -- /* Should happen only if `!need_unwind_info'. */ -- if (!c->pi_valid) -- return 0; -- /* Should happen only if `!need_unwind_info'. */ -- if (!c->pi.unwind_info) -- return 0; -- -- /* Reset the value for this frame. */ -- cursor->sigcontext_format = PPC_SCF_NONE; -- -- /* Normal non-signal frames case. */ -- if (!((struct dwarf_cie_info *) c->pi.unwind_info)->signal_frame) -- return 0; -- -- cursor->sigcontext_format = PPC_SCF_LINUX_RT_SIGFRAME; -- cursor->sigcontext_addr = c->cfa + 4; -- -- return 0; --} -diff --git a/frysk-imports/libunwind/src/ppc/Gget_proc_info.c b/frysk-imports/libunwind/src/ppc/Gget_proc_info.c -index 21be70c..29f1db5 100644 ---- a/frysk-imports/libunwind/src/ppc/Gget_proc_info.c -+++ b/frysk-imports/libunwind/src/ppc/Gget_proc_info.c -@@ -29,6 +29,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - PROTECTED int - unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) - { -- /* XXX: empty stub. */ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ ret = dwarf_make_proc_info (&c->dwarf); -+ if (ret < 0) -+ return ret; -+ -+ *pi = c->dwarf.pi; - return 0; - } -diff --git a/frysk-imports/libunwind/src/ppc/Ginit_local.c b/frysk-imports/libunwind/src/ppc/Ginit_local.c -index 2d9ab2c..4ca2b25 100644 ---- a/frysk-imports/libunwind/src/ppc/Ginit_local.c -+++ b/frysk-imports/libunwind/src/ppc/Ginit_local.c -@@ -48,7 +48,7 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) - { - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); -@@ -56,9 +56,9 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) - c->dwarf.as = unw_local_addr_space; - c->dwarf.as_arg = uc; - #ifdef UNW_TARGET_PPC64 -- return common_init_ppc64 (c); -+ return common_init_ppc64 (c, 1); - #else -- return common_init_ppc32 (c); -+ return common_init_ppc32 (c, 1); - #endif - } - -diff --git a/frysk-imports/libunwind/src/ppc/Ginit_remote.c b/frysk-imports/libunwind/src/ppc/Ginit_remote.c -index 66269d2..4ee5402 100644 ---- a/frysk-imports/libunwind/src/ppc/Ginit_remote.c -+++ b/frysk-imports/libunwind/src/ppc/Ginit_remote.c -@@ -41,7 +41,7 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) - #else /* !UNW_LOCAL_ONLY */ - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); -@@ -50,9 +50,9 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) - c->dwarf.as_arg = as_arg; - - #ifdef UNW_TARGET_PPC64 -- return common_init_ppc64(c); -+ return common_init_ppc64 (c, 0); - #elif UNW_TARGET_PPC32 -- return common_init_ppc32 (c); -+ return common_init_ppc32 (c, 0); - #else - #error init_remote :: NO VALID PPC ARCH! - #endif -diff --git a/frysk-imports/libunwind/src/ppc/Gis_signal_frame.c b/frysk-imports/libunwind/src/ppc/Gis_signal_frame.c -index 4154429..e8b6917 100644 ---- a/frysk-imports/libunwind/src/ppc/Gis_signal_frame.c -+++ b/frysk-imports/libunwind/src/ppc/Gis_signal_frame.c -@@ -31,14 +31,14 @@ PROTECTED int - unw_is_signal_frame (unw_cursor_t * cursor) - { - struct cursor *c = (struct cursor *) cursor; -- unw_word_t w0, w1, ip; -+ unw_word_t w0, w1, i0, i1, i2, ip; - unw_addr_space_t as; - unw_accessors_t *a; - void *arg; - int ret; - - as = c->dwarf.as; -- as->validate = 1; /* Don't trust the ip */ -+ as->validate = 1; /* Don't trust the ip */ - arg = c->dwarf.as_arg; - - /* Check if return address points at sigreturn sequence. -@@ -60,7 +60,19 @@ unw_is_signal_frame (unw_cursor_t * cursor) - if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0 - || (ret = (*a->access_mem) (as, ip + 8, &w1, 0, arg)) < 0) - return 0; -- w1 >>= 32; -- return (w0 == 0x38210080380000ac && w1 == 0x44000002); - -+ if (tdep_big_endian (as)) -+ { -+ i0 = w0 >> 32; -+ i1 = w0 & 0xffffffffUL; -+ i2 = w1 >> 32; -+ } -+ else -+ { -+ i0 = w0 & 0xffffffffUL; -+ i1 = w0 >> 32; -+ i2 = w1 & 0xffffffffUL; -+ } -+ -+ return (i0 == 0x38210080 && i1 == 0x380000ac && i2 == 0x44000002); - } -diff --git a/frysk-imports/libunwind/src/ppc/Lcreate_addr_space.c b/frysk-imports/libunwind/src/ppc/Lcreate_addr_space.c -deleted file mode 100644 -index 0f2dc6b..0000000 ---- a/frysk-imports/libunwind/src/ppc/Lcreate_addr_space.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gcreate_addr_space.c" --#endif -diff --git a/frysk-imports/libunwind/src/ppc/Lfetch_proc_info_post.c b/frysk-imports/libunwind/src/ppc/Lfetch_proc_info_post.c -deleted file mode 100644 -index c88239c..0000000 ---- a/frysk-imports/libunwind/src/ppc/Lfetch_proc_info_post.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gfetch_proc_info_post.c" --#endif -diff --git a/frysk-imports/libunwind/src/ppc32/Gcreate_addr_space.c b/frysk-imports/libunwind/src/ppc32/Gcreate_addr_space.c -new file mode 100644 -index 0000000..f5055ec ---- /dev/null -+++ b/frysk-imports/libunwind/src/ppc32/Gcreate_addr_space.c -@@ -0,0 +1,56 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2006-2007 IBM -+ Contributed by -+ Corey Ashford -+ Jose Flavio Aguilar Paulino -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+ -+#include -+ -+PROTECTED unw_addr_space_t -+unw_create_addr_space (unw_accessors_t *a, int byte_order) -+{ -+#ifdef UNW_LOCAL_ONLY -+ return NULL; -+#else -+ unw_addr_space_t as; -+ -+ /* -+ * We support only big-endian on Linux ppc32. -+ */ -+ if (byte_order != 0 && byte_order != __BIG_ENDIAN) -+ return NULL; -+ -+ as = malloc (sizeof (*as)); -+ if (!as) -+ return NULL; -+ -+ memset (as, 0, sizeof (*as)); -+ -+ as->acc = *a; -+ -+ return as; -+#endif -+} -diff --git a/frysk-imports/libunwind/src/ppc32/Gglobal.c b/frysk-imports/libunwind/src/ppc32/Gglobal.c -index c2d4604..a0f80be 100644 ---- a/frysk-imports/libunwind/src/ppc32/Gglobal.c -+++ b/frysk-imports/libunwind/src/ppc32/Gglobal.c -@@ -28,84 +28,84 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - #include "dwarf_i.h" - --HIDDEN pthread_mutex_t ppc32_lock = PTHREAD_MUTEX_INITIALIZER; --HIDDEN int tdep_needs_initialization = 1; -+HIDDEN define_lock (ppc32_lock); -+HIDDEN int tdep_init_done; - - /* The API register numbers are exactly the same as the .eh_frame - registers, for now at least. */ --uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH] = -+HIDDEN const uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH] = - { -- [UNW_PPC32_R0]=UNW_PPC32_R0, -- [UNW_PPC32_R1]=UNW_PPC32_R1, -- [UNW_PPC32_R2]=UNW_PPC32_R2, -- [UNW_PPC32_R3]=UNW_PPC32_R3, -- [UNW_PPC32_R4]=UNW_PPC32_R4, -- [UNW_PPC32_R5]=UNW_PPC32_R5, -- [UNW_PPC32_R6]=UNW_PPC32_R6, -- [UNW_PPC32_R7]=UNW_PPC32_R7, -- [UNW_PPC32_R8]=UNW_PPC32_R8, -- [UNW_PPC32_R9]=UNW_PPC32_R9, -- [UNW_PPC32_R10]=UNW_PPC32_R10, -- [UNW_PPC32_R11]=UNW_PPC32_R11, -- [UNW_PPC32_R12]=UNW_PPC32_R12, -- [UNW_PPC32_R13]=UNW_PPC32_R13, -- [UNW_PPC32_R14]=UNW_PPC32_R14, -- [UNW_PPC32_R15]=UNW_PPC32_R15, -- [UNW_PPC32_R16]=UNW_PPC32_R16, -- [UNW_PPC32_R17]=UNW_PPC32_R17, -- [UNW_PPC32_R18]=UNW_PPC32_R18, -- [UNW_PPC32_R19]=UNW_PPC32_R19, -- [UNW_PPC32_R20]=UNW_PPC32_R20, -- [UNW_PPC32_R21]=UNW_PPC32_R21, -- [UNW_PPC32_R22]=UNW_PPC32_R22, -- [UNW_PPC32_R23]=UNW_PPC32_R23, -- [UNW_PPC32_R24]=UNW_PPC32_R24, -- [UNW_PPC32_R25]=UNW_PPC32_R25, -- [UNW_PPC32_R26]=UNW_PPC32_R26, -- [UNW_PPC32_R27]=UNW_PPC32_R27, -- [UNW_PPC32_R28]=UNW_PPC32_R28, -- [UNW_PPC32_R29]=UNW_PPC32_R29, -- [UNW_PPC32_R30]=UNW_PPC32_R30, -- [UNW_PPC32_R31]=UNW_PPC32_R31, -+ [UNW_PPC32_R0]=UNW_PPC32_R0, -+ [UNW_PPC32_R1]=UNW_PPC32_R1, -+ [UNW_PPC32_R2]=UNW_PPC32_R2, -+ [UNW_PPC32_R3]=UNW_PPC32_R3, -+ [UNW_PPC32_R4]=UNW_PPC32_R4, -+ [UNW_PPC32_R5]=UNW_PPC32_R5, -+ [UNW_PPC32_R6]=UNW_PPC32_R6, -+ [UNW_PPC32_R7]=UNW_PPC32_R7, -+ [UNW_PPC32_R8]=UNW_PPC32_R8, -+ [UNW_PPC32_R9]=UNW_PPC32_R9, -+ [UNW_PPC32_R10]=UNW_PPC32_R10, -+ [UNW_PPC32_R11]=UNW_PPC32_R11, -+ [UNW_PPC32_R12]=UNW_PPC32_R12, -+ [UNW_PPC32_R13]=UNW_PPC32_R13, -+ [UNW_PPC32_R14]=UNW_PPC32_R14, -+ [UNW_PPC32_R15]=UNW_PPC32_R15, -+ [UNW_PPC32_R16]=UNW_PPC32_R16, -+ [UNW_PPC32_R17]=UNW_PPC32_R17, -+ [UNW_PPC32_R18]=UNW_PPC32_R18, -+ [UNW_PPC32_R19]=UNW_PPC32_R19, -+ [UNW_PPC32_R20]=UNW_PPC32_R20, -+ [UNW_PPC32_R21]=UNW_PPC32_R21, -+ [UNW_PPC32_R22]=UNW_PPC32_R22, -+ [UNW_PPC32_R23]=UNW_PPC32_R23, -+ [UNW_PPC32_R24]=UNW_PPC32_R24, -+ [UNW_PPC32_R25]=UNW_PPC32_R25, -+ [UNW_PPC32_R26]=UNW_PPC32_R26, -+ [UNW_PPC32_R27]=UNW_PPC32_R27, -+ [UNW_PPC32_R28]=UNW_PPC32_R28, -+ [UNW_PPC32_R29]=UNW_PPC32_R29, -+ [UNW_PPC32_R30]=UNW_PPC32_R30, -+ [UNW_PPC32_R31]=UNW_PPC32_R31, - -- [UNW_PPC32_CTR]=UNW_PPC32_CTR, -- [UNW_PPC32_XER]=UNW_PPC32_XER, -- [UNW_PPC32_CCR]=UNW_PPC32_CCR, -- [UNW_PPC32_LR]=UNW_PPC32_LR, -- [UNW_PPC32_FPSCR]=UNW_PPC32_FPSCR, -+ [UNW_PPC32_CTR]=UNW_PPC32_CTR, -+ [UNW_PPC32_XER]=UNW_PPC32_XER, -+ [UNW_PPC32_CCR]=UNW_PPC32_CCR, -+ [UNW_PPC32_LR]=UNW_PPC32_LR, -+ [UNW_PPC32_FPSCR]=UNW_PPC32_FPSCR, - -- [UNW_PPC32_F0]=UNW_PPC32_F0, -- [UNW_PPC32_F1]=UNW_PPC32_F1, -- [UNW_PPC32_F2]=UNW_PPC32_F2, -- [UNW_PPC32_F3]=UNW_PPC32_F3, -- [UNW_PPC32_F4]=UNW_PPC32_F4, -- [UNW_PPC32_F5]=UNW_PPC32_F5, -- [UNW_PPC32_F6]=UNW_PPC32_F6, -- [UNW_PPC32_F7]=UNW_PPC32_F7, -- [UNW_PPC32_F8]=UNW_PPC32_F8, -- [UNW_PPC32_F9]=UNW_PPC32_F9, -- [UNW_PPC32_F10]=UNW_PPC32_F10, -- [UNW_PPC32_F11]=UNW_PPC32_F11, -- [UNW_PPC32_F12]=UNW_PPC32_F12, -- [UNW_PPC32_F13]=UNW_PPC32_F13, -- [UNW_PPC32_F14]=UNW_PPC32_F14, -- [UNW_PPC32_F15]=UNW_PPC32_F15, -- [UNW_PPC32_F16]=UNW_PPC32_F16, -- [UNW_PPC32_F17]=UNW_PPC32_F17, -- [UNW_PPC32_F18]=UNW_PPC32_F18, -- [UNW_PPC32_F19]=UNW_PPC32_F19, -- [UNW_PPC32_F20]=UNW_PPC32_F20, -- [UNW_PPC32_F21]=UNW_PPC32_F21, -- [UNW_PPC32_F22]=UNW_PPC32_F22, -- [UNW_PPC32_F23]=UNW_PPC32_F23, -- [UNW_PPC32_F24]=UNW_PPC32_F24, -- [UNW_PPC32_F25]=UNW_PPC32_F25, -- [UNW_PPC32_F26]=UNW_PPC32_F26, -- [UNW_PPC32_F27]=UNW_PPC32_F27, -- [UNW_PPC32_F28]=UNW_PPC32_F28, -- [UNW_PPC32_F29]=UNW_PPC32_F29, -- [UNW_PPC32_F30]=UNW_PPC32_F30, -- [UNW_PPC32_F31]=UNW_PPC32_F31, -+ [UNW_PPC32_F0]=UNW_PPC32_F0, -+ [UNW_PPC32_F1]=UNW_PPC32_F1, -+ [UNW_PPC32_F2]=UNW_PPC32_F2, -+ [UNW_PPC32_F3]=UNW_PPC32_F3, -+ [UNW_PPC32_F4]=UNW_PPC32_F4, -+ [UNW_PPC32_F5]=UNW_PPC32_F5, -+ [UNW_PPC32_F6]=UNW_PPC32_F6, -+ [UNW_PPC32_F7]=UNW_PPC32_F7, -+ [UNW_PPC32_F8]=UNW_PPC32_F8, -+ [UNW_PPC32_F9]=UNW_PPC32_F9, -+ [UNW_PPC32_F10]=UNW_PPC32_F10, -+ [UNW_PPC32_F11]=UNW_PPC32_F11, -+ [UNW_PPC32_F12]=UNW_PPC32_F12, -+ [UNW_PPC32_F13]=UNW_PPC32_F13, -+ [UNW_PPC32_F14]=UNW_PPC32_F14, -+ [UNW_PPC32_F15]=UNW_PPC32_F15, -+ [UNW_PPC32_F16]=UNW_PPC32_F16, -+ [UNW_PPC32_F17]=UNW_PPC32_F17, -+ [UNW_PPC32_F18]=UNW_PPC32_F18, -+ [UNW_PPC32_F19]=UNW_PPC32_F19, -+ [UNW_PPC32_F20]=UNW_PPC32_F20, -+ [UNW_PPC32_F21]=UNW_PPC32_F21, -+ [UNW_PPC32_F22]=UNW_PPC32_F22, -+ [UNW_PPC32_F23]=UNW_PPC32_F23, -+ [UNW_PPC32_F24]=UNW_PPC32_F24, -+ [UNW_PPC32_F25]=UNW_PPC32_F25, -+ [UNW_PPC32_F26]=UNW_PPC32_F26, -+ [UNW_PPC32_F27]=UNW_PPC32_F27, -+ [UNW_PPC32_F28]=UNW_PPC32_F28, -+ [UNW_PPC32_F29]=UNW_PPC32_F29, -+ [UNW_PPC32_F30]=UNW_PPC32_F30, -+ [UNW_PPC32_F31]=UNW_PPC32_F31, - }; - - HIDDEN void -@@ -115,10 +115,9 @@ tdep_init (void) - - sigfillset (&unwi_full_mask); - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- mutex_lock (&ppc32_lock); -+ lock_acquire (&ppc32_lock, saved_mask); - { -- if (!tdep_needs_initialization) -+ if (tdep_init_done) - /* another thread else beat us to it... */ - goto out; - -@@ -129,9 +128,8 @@ tdep_init (void) - #ifndef UNW_REMOTE_ONLY - ppc32_local_addr_space_init (); - #endif -- tdep_needs_initialization = 0; /* signal that we're initialized... */ -+ tdep_init_done = 1; /* signal that we're initialized... */ - } - out: -- mutex_unlock (&ppc32_lock); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ lock_release (&ppc32_lock, saved_mask); - } -diff --git a/frysk-imports/libunwind/src/ppc32/Ginit.c b/frysk-imports/libunwind/src/ppc32/Ginit.c -index 47c66f1..f2e6e82 100644 ---- a/frysk-imports/libunwind/src/ppc32/Ginit.c -+++ b/frysk-imports/libunwind/src/ppc32/Ginit.c -@@ -42,11 +42,6 @@ static struct unw_addr_space local_addr_space; - - PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; - -- --#define PAGE_SIZE 4096 --#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1)) -- -- - static void * - uc_addr (ucontext_t *uc, int reg) - { -@@ -65,22 +60,22 @@ uc_addr (ucontext_t *uc, int reg) - unsigned gregs_idx; - - switch (reg) -- { -- case UNW_PPC32_CTR: -- gregs_idx = CTR_IDX; -- break; -- case UNW_PPC32_LR: -- gregs_idx = LINK_IDX; -- break; -- case UNW_PPC32_XER: -- gregs_idx = XER_IDX; -- break; -- case UNW_PPC32_CCR: -- gregs_idx = CCR_IDX; -- break; -- default: -- return NULL; -- } -+ { -+ case UNW_PPC32_CTR: -+ gregs_idx = CTR_IDX; -+ break; -+ case UNW_PPC32_LR: -+ gregs_idx = LINK_IDX; -+ break; -+ case UNW_PPC32_XER: -+ gregs_idx = XER_IDX; -+ break; -+ case UNW_PPC32_CCR: -+ gregs_idx = CCR_IDX; -+ break; -+ default: -+ return NULL; -+ } - addr = &uc->uc_mcontext.uc_regs->gregs[gregs_idx]; - } - return addr; -@@ -94,7 +89,7 @@ tdep_uc_addr (ucontext_t *uc, int reg) - return uc_addr (uc, reg); - } - --# endif /* UNW_LOCAL_ONLY */ -+# endif /* UNW_LOCAL_ONLY */ - - HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -@@ -107,7 +102,7 @@ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - - static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -- void *arg) -+ void *arg) - { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; - return 0; -@@ -115,7 +110,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - - static int - access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - if (write) - { -@@ -132,7 +127,7 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, -- int write, void *arg) -+ int write, void *arg) - { - unw_word_t *addr; - ucontext_t *uc = arg; -@@ -164,7 +159,7 @@ badreg: - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { - ucontext_t *uc = arg; - unw_fpreg_t *addr; -@@ -196,8 +191,8 @@ badreg: - - static int - get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, -- void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) - { - return _Uelf32_get_proc_name (as, getpid (), ip, buf, buf_len, offp); - } -diff --git a/frysk-imports/libunwind/src/ppc32/Gregs.c b/frysk-imports/libunwind/src/ppc32/Gregs.c -index 92be321..9344455 100644 ---- a/frysk-imports/libunwind/src/ppc32/Gregs.c -+++ b/frysk-imports/libunwind/src/ppc32/Gregs.c -@@ -29,7 +29,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN int - tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -- int write) -+ int write) - { - struct dwarf_loc loc; - -@@ -37,19 +37,19 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - { - case UNW_TDEP_IP: - if (write) -- { -- c->dwarf.ip = *valp; /* update the IP cache */ -- if (c->dwarf.pi_valid && (*valp < c->dwarf.pi.start_ip -- || *valp >= c->dwarf.pi.end_ip)) -- c->dwarf.pi_valid = 0; /* new IP outside of current proc */ -- } -+ { -+ c->dwarf.ip = *valp; /* update the IP cache */ -+ if (c->dwarf.pi_valid && (*valp < c->dwarf.pi.start_ip -+ || *valp >= c->dwarf.pi.end_ip)) -+ c->dwarf.pi_valid = 0; /* new IP outside of current proc */ -+ } - else -- *valp = c->dwarf.ip; -+ *valp = c->dwarf.ip; - return 0; - - case UNW_TDEP_SP: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - *valp = c->dwarf.cfa; - return 0; - -@@ -72,7 +72,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - HIDDEN int - tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -- int write) -+ int write) - { - struct dwarf_loc loc; - -diff --git a/frysk-imports/libunwind/src/ppc32/Gresume.c b/frysk-imports/libunwind/src/ppc32/Gresume.c -index 5446c98..955d061 100644 ---- a/frysk-imports/libunwind/src/ppc32/Gresume.c -+++ b/frysk-imports/libunwind/src/ppc32/Gresume.c -@@ -73,5 +73,5 @@ unw_resume (unw_cursor_t *cursor) - return ret; - - return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -- c->dwarf.as_arg); -+ c->dwarf.as_arg); - } -diff --git a/frysk-imports/libunwind/src/ppc32/Gstep.c b/frysk-imports/libunwind/src/ppc32/Gstep.c -index d146e82..8506a61 100644 ---- a/frysk-imports/libunwind/src/ppc32/Gstep.c -+++ b/frysk-imports/libunwind/src/ppc32/Gstep.c -@@ -80,48 +80,48 @@ unw_step (unw_cursor_t * cursor) - if (unlikely (ret < 0)) - { - if (likely (!unw_is_signal_frame (cursor))) -- { -- /* DWARF unwinding failed. As of 09/26/2006, gcc in 64-bit mode -- produces the mandatory level of traceback record in the code, but -- I get the impression that this is transitory, that eventually gcc -- will not produce any traceback records at all. So, for now, we -- won't bother to try to find and use these records. -- -- We can, however, attempt to unwind the frame by using the callback -- chain. This is very crude, however, and won't be able to unwind -- any registers besides the IP, SP, and LR . */ -- -- back_chain_offset = ((void *) &dummy.back_chain - (void *) &dummy); -- lr_save_offset = ((void *) &dummy.lr_save - (void *) &dummy); -- -- back_chain_loc = DWARF_LOC (c->dwarf.cfa + back_chain_offset, 0); -- -- if ((ret = -- dwarf_get (&c->dwarf, back_chain_loc, &c->dwarf.cfa)) < 0) -- { -- Debug -- ("Unable to retrieve CFA from back chain in stack frame - %d\n", -- ret); -- return ret; -- } -- if (c->dwarf.cfa == 0) -- /* Unless the cursor or stack is corrupt or uninitialized we've most -- likely hit the top of the stack */ -- return 0; -- -- lr_save_loc = DWARF_LOC (c->dwarf.cfa + lr_save_offset, 0); -- -- if ((ret = dwarf_get (&c->dwarf, lr_save_loc, &c->dwarf.ip)) < 0) -- { -- Debug -- ("Unable to retrieve IP from lr save in stack frame - %d\n", -- ret); -- return ret; -- } -- ret = 1; -- } -+ { -+ /* DWARF unwinding failed. As of 09/26/2006, gcc in 64-bit mode -+ produces the mandatory level of traceback record in the code, but -+ I get the impression that this is transitory, that eventually gcc -+ will not produce any traceback records at all. So, for now, we -+ won't bother to try to find and use these records. -+ -+ We can, however, attempt to unwind the frame by using the callback -+ chain. This is very crude, however, and won't be able to unwind -+ any registers besides the IP, SP, and LR . */ -+ -+ back_chain_offset = ((void *) &dummy.back_chain - (void *) &dummy); -+ lr_save_offset = ((void *) &dummy.lr_save - (void *) &dummy); -+ -+ back_chain_loc = DWARF_LOC (c->dwarf.cfa + back_chain_offset, 0); -+ -+ if ((ret = -+ dwarf_get (&c->dwarf, back_chain_loc, &c->dwarf.cfa)) < 0) -+ { -+ Debug (2, -+ "Unable to retrieve CFA from back chain in stack frame - %d\n", -+ ret); -+ return ret; -+ } -+ if (c->dwarf.cfa == 0) -+ /* Unless the cursor or stack is corrupt or uninitialized we've most -+ likely hit the top of the stack */ -+ return 0; -+ -+ lr_save_loc = DWARF_LOC (c->dwarf.cfa + lr_save_offset, 0); -+ -+ if ((ret = dwarf_get (&c->dwarf, lr_save_loc, &c->dwarf.ip)) < 0) -+ { -+ Debug (2, -+ "Unable to retrieve IP from lr save in stack frame - %d\n", -+ ret); -+ return ret; -+ } -+ ret = 1; -+ } - else -- { -+ { - /* Find the sigcontext record by taking the CFA and adjusting by - the dummy signal frame size. - -@@ -132,178 +132,178 @@ unw_step (unw_cursor_t * cursor) - following code will likely cause a seg fault or other crash - condition. */ - -- unw_word_t ucontext = c->dwarf.cfa + __SIGNAL_FRAMESIZE; -- -- Debug (1, "signal frame, skip over trampoline\n"); -- -- c->sigcontext_format = PPC_SCF_LINUX_RT_SIGFRAME; -- c->sigcontext_addr = ucontext; -- -- sp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0); -- ip_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_LINK, 0); -- -- ret = dwarf_get (&c->dwarf, sp_loc, &c->dwarf.cfa); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- ret = dwarf_get (&c->dwarf, ip_loc, &c->dwarf.ip); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- -- /* Instead of just restoring the non-volatile registers, do all -- of the registers for now. This will incur a performance hit, -- but it's rare enough not to cause too much of a problem, and -- might be useful in some cases. */ -- c->dwarf.loc[UNW_PPC32_R0] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R0, 0); -- c->dwarf.loc[UNW_PPC32_R1] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0); -- c->dwarf.loc[UNW_PPC32_R2] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R2, 0); -- c->dwarf.loc[UNW_PPC32_R3] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R3, 0); -- c->dwarf.loc[UNW_PPC32_R4] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R4, 0); -- c->dwarf.loc[UNW_PPC32_R5] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R5, 0); -- c->dwarf.loc[UNW_PPC32_R6] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R6, 0); -- c->dwarf.loc[UNW_PPC32_R7] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R7, 0); -- c->dwarf.loc[UNW_PPC32_R8] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R8, 0); -- c->dwarf.loc[UNW_PPC32_R9] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R9, 0); -- c->dwarf.loc[UNW_PPC32_R10] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R10, 0); -- c->dwarf.loc[UNW_PPC32_R11] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R11, 0); -- c->dwarf.loc[UNW_PPC32_R12] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R12, 0); -- c->dwarf.loc[UNW_PPC32_R13] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R13, 0); -- c->dwarf.loc[UNW_PPC32_R14] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R14, 0); -- c->dwarf.loc[UNW_PPC32_R15] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R15, 0); -- c->dwarf.loc[UNW_PPC32_R16] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R16, 0); -- c->dwarf.loc[UNW_PPC32_R17] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R17, 0); -- c->dwarf.loc[UNW_PPC32_R18] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R18, 0); -- c->dwarf.loc[UNW_PPC32_R19] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R19, 0); -- c->dwarf.loc[UNW_PPC32_R20] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R20, 0); -- c->dwarf.loc[UNW_PPC32_R21] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R21, 0); -- c->dwarf.loc[UNW_PPC32_R22] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R22, 0); -- c->dwarf.loc[UNW_PPC32_R23] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R23, 0); -- c->dwarf.loc[UNW_PPC32_R24] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R24, 0); -- c->dwarf.loc[UNW_PPC32_R25] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R25, 0); -- c->dwarf.loc[UNW_PPC32_R26] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R26, 0); -- c->dwarf.loc[UNW_PPC32_R27] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R27, 0); -- c->dwarf.loc[UNW_PPC32_R28] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R28, 0); -- c->dwarf.loc[UNW_PPC32_R29] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R29, 0); -- c->dwarf.loc[UNW_PPC32_R30] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R30, 0); -- c->dwarf.loc[UNW_PPC32_R31] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R31, 0); -- -- c->dwarf.loc[UNW_PPC32_LR] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_LINK, 0); -- c->dwarf.loc[UNW_PPC32_CTR] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CTR, 0); -- -- /* This CR0 assignment is probably wrong. There are 8 dwarf columns -- assigned to the CR registers, but only one CR register in the -- mcontext structure */ -- c->dwarf.loc[UNW_PPC32_CCR] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CCR, 0); -- c->dwarf.loc[UNW_PPC32_XER] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_XER, 0); -- -- c->dwarf.loc[UNW_PPC32_F0] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R0, 0); -- c->dwarf.loc[UNW_PPC32_F1] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R1, 0); -- c->dwarf.loc[UNW_PPC32_F2] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R2, 0); -- c->dwarf.loc[UNW_PPC32_F3] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R3, 0); -- c->dwarf.loc[UNW_PPC32_F4] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R4, 0); -- c->dwarf.loc[UNW_PPC32_F5] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R5, 0); -- c->dwarf.loc[UNW_PPC32_F6] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R6, 0); -- c->dwarf.loc[UNW_PPC32_F7] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R7, 0); -- c->dwarf.loc[UNW_PPC32_F8] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R8, 0); -- c->dwarf.loc[UNW_PPC32_F9] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R9, 0); -- c->dwarf.loc[UNW_PPC32_F10] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R10, 0); -- c->dwarf.loc[UNW_PPC32_F11] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R11, 0); -- c->dwarf.loc[UNW_PPC32_F12] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R12, 0); -- c->dwarf.loc[UNW_PPC32_F13] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R13, 0); -- c->dwarf.loc[UNW_PPC32_F14] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R14, 0); -- c->dwarf.loc[UNW_PPC32_F15] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R15, 0); -- c->dwarf.loc[UNW_PPC32_F16] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R16, 0); -- c->dwarf.loc[UNW_PPC32_F17] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R17, 0); -- c->dwarf.loc[UNW_PPC32_F18] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R18, 0); -- c->dwarf.loc[UNW_PPC32_F19] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R19, 0); -- c->dwarf.loc[UNW_PPC32_F20] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R20, 0); -- c->dwarf.loc[UNW_PPC32_F21] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R21, 0); -- c->dwarf.loc[UNW_PPC32_F22] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R22, 0); -- c->dwarf.loc[UNW_PPC32_F23] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R23, 0); -- c->dwarf.loc[UNW_PPC32_F24] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R24, 0); -- c->dwarf.loc[UNW_PPC32_F25] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R25, 0); -- c->dwarf.loc[UNW_PPC32_F26] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R26, 0); -- c->dwarf.loc[UNW_PPC32_F27] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R27, 0); -- c->dwarf.loc[UNW_PPC32_F28] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R28, 0); -- c->dwarf.loc[UNW_PPC32_F29] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R29, 0); -- c->dwarf.loc[UNW_PPC32_F30] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R30, 0); -- c->dwarf.loc[UNW_PPC32_F31] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R31, 0); -- -- ret = 1; -- } -+ unw_word_t ucontext = c->dwarf.cfa + __SIGNAL_FRAMESIZE; -+ -+ Debug (1, "signal frame, skip over trampoline\n"); -+ -+ c->sigcontext_format = PPC_SCF_LINUX_RT_SIGFRAME; -+ c->sigcontext_addr = ucontext; -+ -+ sp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0); -+ ip_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_LINK, 0); -+ -+ ret = dwarf_get (&c->dwarf, sp_loc, &c->dwarf.cfa); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ ret = dwarf_get (&c->dwarf, ip_loc, &c->dwarf.ip); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ -+ /* Instead of just restoring the non-volatile registers, do all -+ of the registers for now. This will incur a performance hit, -+ but it's rare enough not to cause too much of a problem, and -+ might be useful in some cases. */ -+ c->dwarf.loc[UNW_PPC32_R0] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R0, 0); -+ c->dwarf.loc[UNW_PPC32_R1] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0); -+ c->dwarf.loc[UNW_PPC32_R2] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R2, 0); -+ c->dwarf.loc[UNW_PPC32_R3] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R3, 0); -+ c->dwarf.loc[UNW_PPC32_R4] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R4, 0); -+ c->dwarf.loc[UNW_PPC32_R5] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R5, 0); -+ c->dwarf.loc[UNW_PPC32_R6] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R6, 0); -+ c->dwarf.loc[UNW_PPC32_R7] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R7, 0); -+ c->dwarf.loc[UNW_PPC32_R8] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R8, 0); -+ c->dwarf.loc[UNW_PPC32_R9] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R9, 0); -+ c->dwarf.loc[UNW_PPC32_R10] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R10, 0); -+ c->dwarf.loc[UNW_PPC32_R11] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R11, 0); -+ c->dwarf.loc[UNW_PPC32_R12] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R12, 0); -+ c->dwarf.loc[UNW_PPC32_R13] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R13, 0); -+ c->dwarf.loc[UNW_PPC32_R14] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R14, 0); -+ c->dwarf.loc[UNW_PPC32_R15] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R15, 0); -+ c->dwarf.loc[UNW_PPC32_R16] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R16, 0); -+ c->dwarf.loc[UNW_PPC32_R17] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R17, 0); -+ c->dwarf.loc[UNW_PPC32_R18] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R18, 0); -+ c->dwarf.loc[UNW_PPC32_R19] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R19, 0); -+ c->dwarf.loc[UNW_PPC32_R20] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R20, 0); -+ c->dwarf.loc[UNW_PPC32_R21] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R21, 0); -+ c->dwarf.loc[UNW_PPC32_R22] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R22, 0); -+ c->dwarf.loc[UNW_PPC32_R23] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R23, 0); -+ c->dwarf.loc[UNW_PPC32_R24] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R24, 0); -+ c->dwarf.loc[UNW_PPC32_R25] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R25, 0); -+ c->dwarf.loc[UNW_PPC32_R26] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R26, 0); -+ c->dwarf.loc[UNW_PPC32_R27] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R27, 0); -+ c->dwarf.loc[UNW_PPC32_R28] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R28, 0); -+ c->dwarf.loc[UNW_PPC32_R29] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R29, 0); -+ c->dwarf.loc[UNW_PPC32_R30] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R30, 0); -+ c->dwarf.loc[UNW_PPC32_R31] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R31, 0); -+ -+ c->dwarf.loc[UNW_PPC32_LR] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_LINK, 0); -+ c->dwarf.loc[UNW_PPC32_CTR] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CTR, 0); -+ -+ /* This CR0 assignment is probably wrong. There are 8 dwarf columns -+ assigned to the CR registers, but only one CR register in the -+ mcontext structure */ -+ c->dwarf.loc[UNW_PPC32_CCR] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CCR, 0); -+ c->dwarf.loc[UNW_PPC32_XER] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_XER, 0); -+ -+ c->dwarf.loc[UNW_PPC32_F0] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R0, 0); -+ c->dwarf.loc[UNW_PPC32_F1] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R1, 0); -+ c->dwarf.loc[UNW_PPC32_F2] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R2, 0); -+ c->dwarf.loc[UNW_PPC32_F3] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R3, 0); -+ c->dwarf.loc[UNW_PPC32_F4] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R4, 0); -+ c->dwarf.loc[UNW_PPC32_F5] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R5, 0); -+ c->dwarf.loc[UNW_PPC32_F6] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R6, 0); -+ c->dwarf.loc[UNW_PPC32_F7] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R7, 0); -+ c->dwarf.loc[UNW_PPC32_F8] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R8, 0); -+ c->dwarf.loc[UNW_PPC32_F9] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R9, 0); -+ c->dwarf.loc[UNW_PPC32_F10] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R10, 0); -+ c->dwarf.loc[UNW_PPC32_F11] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R11, 0); -+ c->dwarf.loc[UNW_PPC32_F12] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R12, 0); -+ c->dwarf.loc[UNW_PPC32_F13] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R13, 0); -+ c->dwarf.loc[UNW_PPC32_F14] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R14, 0); -+ c->dwarf.loc[UNW_PPC32_F15] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R15, 0); -+ c->dwarf.loc[UNW_PPC32_F16] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R16, 0); -+ c->dwarf.loc[UNW_PPC32_F17] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R17, 0); -+ c->dwarf.loc[UNW_PPC32_F18] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R18, 0); -+ c->dwarf.loc[UNW_PPC32_F19] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R19, 0); -+ c->dwarf.loc[UNW_PPC32_F20] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R20, 0); -+ c->dwarf.loc[UNW_PPC32_F21] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R21, 0); -+ c->dwarf.loc[UNW_PPC32_F22] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R22, 0); -+ c->dwarf.loc[UNW_PPC32_F23] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R23, 0); -+ c->dwarf.loc[UNW_PPC32_F24] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R24, 0); -+ c->dwarf.loc[UNW_PPC32_F25] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R25, 0); -+ c->dwarf.loc[UNW_PPC32_F26] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R26, 0); -+ c->dwarf.loc[UNW_PPC32_F27] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R27, 0); -+ c->dwarf.loc[UNW_PPC32_F28] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R28, 0); -+ c->dwarf.loc[UNW_PPC32_F29] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R29, 0); -+ c->dwarf.loc[UNW_PPC32_F30] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R30, 0); -+ c->dwarf.loc[UNW_PPC32_F31] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R31, 0); -+ -+ ret = 1; -+ } - } - return ret; - } -diff --git a/frysk-imports/libunwind/src/ppc32/Lcreate_addr_space.c b/frysk-imports/libunwind/src/ppc32/Lcreate_addr_space.c -new file mode 100644 -index 0000000..0f2dc6b ---- /dev/null -+++ b/frysk-imports/libunwind/src/ppc32/Lcreate_addr_space.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gcreate_addr_space.c" -+#endif -diff --git a/frysk-imports/libunwind/src/ppc32/get_func_addr.c b/frysk-imports/libunwind/src/ppc32/get_func_addr.c -index 14797c9..66ff795 100644 ---- a/frysk-imports/libunwind/src/ppc32/get_func_addr.c -+++ b/frysk-imports/libunwind/src/ppc32/get_func_addr.c -@@ -29,7 +29,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - int - tdep_get_func_addr (unw_addr_space_t as, unw_word_t symbol_val_addr, -- unw_word_t *real_func_addr) -+ unw_word_t *real_func_addr) - { - *real_func_addr = symbol_val_addr; - return 0; -diff --git a/frysk-imports/libunwind/src/ppc32/init.h b/frysk-imports/libunwind/src/ppc32/init.h -index 8badb17..e8bb3ba 100644 ---- a/frysk-imports/libunwind/src/ppc32/init.h -+++ b/frysk-imports/libunwind/src/ppc32/init.h -@@ -30,7 +30,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - /* Here is the "common" init, for remote and local debuging" */ - - static inline int --common_init_ppc32 (struct cursor *c) -+common_init_ppc32 (struct cursor *c, unsigned use_prev_instr) - { - int ret; - int i; -@@ -53,7 +53,7 @@ common_init_ppc32 (struct cursor *c) - return ret; - - ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_PPC32_R1), -- &c->dwarf.cfa); -+ &c->dwarf.cfa); - if (ret < 0) - return ret; - -@@ -62,6 +62,8 @@ common_init_ppc32 (struct cursor *c) - - c->dwarf.args_size = 0; - c->dwarf.ret_addr_column = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; - c->dwarf.pi_valid = 0; - c->dwarf.pi_is_dynamic = 0; - c->dwarf.hint = 0; -diff --git a/frysk-imports/libunwind/src/ppc32/ucontext_i.h b/frysk-imports/libunwind/src/ppc32/ucontext_i.h -index b6fb860..c6ba806 100644 ---- a/frysk-imports/libunwind/src/ppc32/ucontext_i.h -+++ b/frysk-imports/libunwind/src/ppc32/ucontext_i.h -@@ -26,96 +26,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef ucontext_i_h - #define ucontext_i_h - -+#include "compiler.h" - #include - --/* FRYSK LOCAL - since we are compiling on different architectures -- use use local (renamed) definitions from --http://www.linux-foundation.org/spec/refspecs/LSB_3.0.0/LSB-PPC32/LSB-PPC32.html --*/ --struct local_pt_regs --{ -- unsigned long int gpr[32]; -- unsigned long int nip; -- unsigned long int msr; -- unsigned long int orig_gpr3; -- unsigned long int ctr; -- unsigned long int link; -- unsigned long int xer; -- unsigned long int ccr; -- unsigned long int mq; -- unsigned long int trap; -- unsigned long int dar; -- unsigned long int dsisr; -- unsigned long int result; --} -- ; --typedef struct local_libc_vrstate --{ -- unsigned int vrregs[128]; -- unsigned int vrsave; -- unsigned int _pad[2]; -- unsigned int vscr; --} --local_vrregset_t __attribute__ ((__aligned__ (16))); -- --#define NGREG 48 -- --typedef unsigned long int local_gregset_t[48]; -- --typedef struct local_libc_fpstate --{ -- double fpregs[32]; -- double fpscr; -- int _pad[2]; --} --local_fpregset_t; -- --typedef struct --{ -- local_gregset_t gregs; -- local_fpregset_t fpregs; -- local_vrregset_t vrregs; --} --local_mcontext_t; -- --union local_uc_regs_ptr --{ -- struct local_pt_regs *regs; -- local_mcontext_t *uc_regs; --} -- ; -- --typedef struct local_ucontext --{ -- unsigned long int uc_flags; -- struct ucontext *uc_link; -- stack_t uc_stack; -- int uc_pad[7]; -- union local_uc_regs_ptr uc_mcontext; -- sigset_t uc_sigmask; -- char uc_reg_space[sizeof (mcontext_t) + 12]; --} --local_ucontext_t; --/* END FRYSK LOCAL */ -- -- - /* These values were derived by reading - /usr/src/linux-2.6.18-1.8/arch/um/include/sysdep-ppc/ptrace.h and - /usr/src/linux-2.6.18-1.8/arch/powerpc/kernel/ppc32.h - */ - --//#define NIP_IDX 32 --#define CTR_IDX 32 --#define XER_IDX 33 --#define CCR_IDX 34 --#define MSR_IDX 35 --//#define MQ_IDX 36 --#define LINK_IDX 36 -+//#define NIP_IDX 32 -+#define CTR_IDX 32 -+#define XER_IDX 33 -+#define CCR_IDX 34 -+#define MSR_IDX 35 -+//#define MQ_IDX 36 -+#define LINK_IDX 36 - - /* These are dummy structures used only for obtaining the offsets of the - various structure members. */ --static local_ucontext_t dmy_ctxt; --static local_vrregset_t dmy_vrregset; -+static ucontext_t dmy_ctxt UNUSED; - - #define UC_MCONTEXT_GREGS_R0 ((void *)&dmy_ctxt.uc_mcontext.uc_regs->gregs[0] - (void *)&dmy_ctxt) - #define UC_MCONTEXT_GREGS_R1 ((void *)&dmy_ctxt.uc_mcontext.uc_regs->gregs[1] - (void *)&dmy_ctxt) -diff --git a/frysk-imports/libunwind/src/ppc32/unwind_i.h b/frysk-imports/libunwind/src/ppc32/unwind_i.h -index c3c3a57..ad32d05 100644 ---- a/frysk-imports/libunwind/src/ppc32/unwind_i.h -+++ b/frysk-imports/libunwind/src/ppc32/unwind_i.h -@@ -28,7 +28,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef unwind_i_h - #define unwind_i_h - --#include - #include - - #include -@@ -36,12 +35,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - #include - --#define ppc32_lock UNW_OBJ(lock) --#define ppc32_local_resume UNW_OBJ(local_resume) --#define ppc32_local_addr_space_init UNW_OBJ(local_addr_space_init) -+#define ppc32_lock UNW_OBJ(lock) -+#define ppc32_local_resume UNW_OBJ(local_resume) -+#define ppc32_local_addr_space_init UNW_OBJ(local_addr_space_init) - - extern void ppc32_local_addr_space_init (void); - extern int ppc32_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -- void *arg); -+ void *arg); - - #endif /* unwind_i_h */ -diff --git a/frysk-imports/libunwind/src/ppc64/Gcreate_addr_space.c b/frysk-imports/libunwind/src/ppc64/Gcreate_addr_space.c -index f67c78f..686653a 100644 ---- a/frysk-imports/libunwind/src/ppc64/Gcreate_addr_space.c -+++ b/frysk-imports/libunwind/src/ppc64/Gcreate_addr_space.c -@@ -27,7 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include - --#include "unwind_i.h" -+#include - - PROTECTED unw_addr_space_t - unw_create_addr_space (unw_accessors_t *a, int byte_order) -@@ -35,8 +35,17 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - #ifdef UNW_LOCAL_ONLY - return NULL; - #else -- unw_addr_space_t as = malloc (sizeof (*as)); -+ unw_addr_space_t as; - -+ /* -+ * We support both big- and little-endian on Linux ppc64. -+ */ -+ if (byte_order != 0 -+ && byte_order != __LITTLE_ENDIAN -+ && byte_order != __BIG_ENDIAN) -+ return NULL; -+ -+ as = malloc (sizeof (*as)); - if (!as) - return NULL; - -@@ -44,11 +53,19 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - - as->acc = *a; - -- /* -- * Linux ppc64 supports only big-endian. -- */ -- if (byte_order != 0 && byte_order != __BIG_ENDIAN) -- return NULL; -+ if (byte_order == 0) -+ /* use host default: */ -+ as->big_endian = (__BYTE_ORDER == __BIG_ENDIAN); -+ else -+ as->big_endian = (byte_order == __BIG_ENDIAN); -+ -+ /* FIXME! There is no way to specify the ABI. -+ Default to ELFv1 on big-endian and ELFv2 on little-endian. */ -+ if (as->big_endian) -+ as->abi = UNW_PPC64_ABI_ELFv1; -+ else -+ as->abi = UNW_PPC64_ABI_ELFv2; -+ - return as; - #endif - } -diff --git a/frysk-imports/libunwind/src/ppc64/Gget_proc_info.c b/frysk-imports/libunwind/src/ppc64/Gget_proc_info.c -deleted file mode 100644 -index 9bd9af6..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Gget_proc_info.c -+++ /dev/null -@@ -1,34 +0,0 @@ --/* libunwind - a platform-independent unwind library -- -- Copied from src/x86_64/, modified slightly (or made empty stubs) for -- building frysk successfully on ppc64, by Wu Zhou -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "unwind_i.h" -- --PROTECTED int --unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) --{ -- /* XXX: empty stub. */ -- return 0; --} -diff --git a/frysk-imports/libunwind/src/ppc64/Gget_save_loc.c b/frysk-imports/libunwind/src/ppc64/Gget_save_loc.c -deleted file mode 100644 -index 56d2905..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Gget_save_loc.c -+++ /dev/null -@@ -1,34 +0,0 @@ --/* libunwind - a platform-independent unwind library -- -- Copied from src/x86_64/, modified slightly (or made empty stubs) for -- building frysk successfully on ppc64, by Wu Zhou -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "unwind_i.h" -- --PROTECTED int --unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) --{ -- /* XXX: empty stub. */ -- return 0; --} -diff --git a/frysk-imports/libunwind/src/ppc64/Gglobal.c b/frysk-imports/libunwind/src/ppc64/Gglobal.c -index 1506b00..9d0b0f5 100644 ---- a/frysk-imports/libunwind/src/ppc64/Gglobal.c -+++ b/frysk-imports/libunwind/src/ppc64/Gglobal.c -@@ -28,131 +28,131 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - #include "dwarf_i.h" - --HIDDEN pthread_mutex_t ppc64_lock = PTHREAD_MUTEX_INITIALIZER; --HIDDEN int tdep_needs_initialization = 1; -+HIDDEN define_lock (ppc64_lock); -+HIDDEN int tdep_init_done; - - /* The API register numbers are exactly the same as the .eh_frame - registers, for now at least. */ --uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH] = -+HIDDEN const uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH] = - { -- [UNW_PPC64_R0]=UNW_PPC64_R0, -- [UNW_PPC64_R1]=UNW_PPC64_R1, -- [UNW_PPC64_R2]=UNW_PPC64_R2, -- [UNW_PPC64_R3]=UNW_PPC64_R3, -- [UNW_PPC64_R4]=UNW_PPC64_R4, -- [UNW_PPC64_R5]=UNW_PPC64_R5, -- [UNW_PPC64_R6]=UNW_PPC64_R6, -- [UNW_PPC64_R7]=UNW_PPC64_R7, -- [UNW_PPC64_R8]=UNW_PPC64_R8, -- [UNW_PPC64_R9]=UNW_PPC64_R9, -- [UNW_PPC64_R10]=UNW_PPC64_R10, -- [UNW_PPC64_R11]=UNW_PPC64_R11, -- [UNW_PPC64_R12]=UNW_PPC64_R12, -- [UNW_PPC64_R13]=UNW_PPC64_R13, -- [UNW_PPC64_R14]=UNW_PPC64_R14, -- [UNW_PPC64_R15]=UNW_PPC64_R15, -- [UNW_PPC64_R16]=UNW_PPC64_R16, -- [UNW_PPC64_R17]=UNW_PPC64_R17, -- [UNW_PPC64_R18]=UNW_PPC64_R18, -- [UNW_PPC64_R19]=UNW_PPC64_R19, -- [UNW_PPC64_R20]=UNW_PPC64_R20, -- [UNW_PPC64_R21]=UNW_PPC64_R21, -- [UNW_PPC64_R22]=UNW_PPC64_R22, -- [UNW_PPC64_R23]=UNW_PPC64_R23, -- [UNW_PPC64_R24]=UNW_PPC64_R24, -- [UNW_PPC64_R25]=UNW_PPC64_R25, -- [UNW_PPC64_R26]=UNW_PPC64_R26, -- [UNW_PPC64_R27]=UNW_PPC64_R27, -- [UNW_PPC64_R28]=UNW_PPC64_R28, -- [UNW_PPC64_R29]=UNW_PPC64_R29, -- [UNW_PPC64_R30]=UNW_PPC64_R30, -- [UNW_PPC64_R31]=UNW_PPC64_R31, -- -- [UNW_PPC64_F0]=UNW_PPC64_F0, -- [UNW_PPC64_F1]=UNW_PPC64_F1, -- [UNW_PPC64_F2]=UNW_PPC64_F2, -- [UNW_PPC64_F3]=UNW_PPC64_F3, -- [UNW_PPC64_F4]=UNW_PPC64_F4, -- [UNW_PPC64_F5]=UNW_PPC64_F5, -- [UNW_PPC64_F6]=UNW_PPC64_F6, -- [UNW_PPC64_F7]=UNW_PPC64_F7, -- [UNW_PPC64_F8]=UNW_PPC64_F8, -- [UNW_PPC64_F9]=UNW_PPC64_F9, -- [UNW_PPC64_F10]=UNW_PPC64_F10, -- [UNW_PPC64_F11]=UNW_PPC64_F11, -- [UNW_PPC64_F12]=UNW_PPC64_F12, -- [UNW_PPC64_F13]=UNW_PPC64_F13, -- [UNW_PPC64_F14]=UNW_PPC64_F14, -- [UNW_PPC64_F15]=UNW_PPC64_F15, -- [UNW_PPC64_F16]=UNW_PPC64_F16, -- [UNW_PPC64_F17]=UNW_PPC64_F17, -- [UNW_PPC64_F18]=UNW_PPC64_F18, -- [UNW_PPC64_F19]=UNW_PPC64_F19, -- [UNW_PPC64_F20]=UNW_PPC64_F20, -- [UNW_PPC64_F21]=UNW_PPC64_F21, -- [UNW_PPC64_F22]=UNW_PPC64_F22, -- [UNW_PPC64_F23]=UNW_PPC64_F23, -- [UNW_PPC64_F24]=UNW_PPC64_F24, -- [UNW_PPC64_F25]=UNW_PPC64_F25, -- [UNW_PPC64_F26]=UNW_PPC64_F26, -- [UNW_PPC64_F27]=UNW_PPC64_F27, -- [UNW_PPC64_F28]=UNW_PPC64_F28, -- [UNW_PPC64_F29]=UNW_PPC64_F29, -- [UNW_PPC64_F30]=UNW_PPC64_F30, -- [UNW_PPC64_F31]=UNW_PPC64_F31, -- -- [UNW_PPC64_LR]=UNW_PPC64_LR, -- [UNW_PPC64_CTR]=UNW_PPC64_CTR, -- [UNW_PPC64_ARG_POINTER]=UNW_PPC64_ARG_POINTER, -- -- [UNW_PPC64_CR0]=UNW_PPC64_CR0, -- [UNW_PPC64_CR1]=UNW_PPC64_CR1, -- [UNW_PPC64_CR2]=UNW_PPC64_CR2, -- [UNW_PPC64_CR3]=UNW_PPC64_CR3, -- [UNW_PPC64_CR4]=UNW_PPC64_CR4, -- [UNW_PPC64_CR5]=UNW_PPC64_CR5, -- [UNW_PPC64_CR6]=UNW_PPC64_CR6, -- [UNW_PPC64_CR7]=UNW_PPC64_CR7, -- -- [UNW_PPC64_XER]=UNW_PPC64_XER, -- -- [UNW_PPC64_V0]=UNW_PPC64_V0, -- [UNW_PPC64_V1]=UNW_PPC64_V1, -- [UNW_PPC64_V2]=UNW_PPC64_V2, -- [UNW_PPC64_V3]=UNW_PPC64_V3, -- [UNW_PPC64_V4]=UNW_PPC64_V4, -- [UNW_PPC64_V5]=UNW_PPC64_V5, -- [UNW_PPC64_V6]=UNW_PPC64_V6, -- [UNW_PPC64_V7]=UNW_PPC64_V7, -- [UNW_PPC64_V8]=UNW_PPC64_V8, -- [UNW_PPC64_V9]=UNW_PPC64_V9, -- [UNW_PPC64_V10]=UNW_PPC64_V10, -- [UNW_PPC64_V11]=UNW_PPC64_V11, -- [UNW_PPC64_V12]=UNW_PPC64_V12, -- [UNW_PPC64_V13]=UNW_PPC64_V13, -- [UNW_PPC64_V14]=UNW_PPC64_V14, -- [UNW_PPC64_V15]=UNW_PPC64_V15, -- [UNW_PPC64_V16]=UNW_PPC64_V16, -- [UNW_PPC64_V17]=UNW_PPC64_V17, -- [UNW_PPC64_V18]=UNW_PPC64_V18, -- [UNW_PPC64_V19]=UNW_PPC64_V19, -- [UNW_PPC64_V20]=UNW_PPC64_V20, -- [UNW_PPC64_V21]=UNW_PPC64_V21, -- [UNW_PPC64_V22]=UNW_PPC64_V22, -- [UNW_PPC64_V23]=UNW_PPC64_V23, -- [UNW_PPC64_V24]=UNW_PPC64_V24, -- [UNW_PPC64_V25]=UNW_PPC64_V25, -- [UNW_PPC64_V26]=UNW_PPC64_V26, -- [UNW_PPC64_V27]=UNW_PPC64_V27, -- [UNW_PPC64_V28]=UNW_PPC64_V28, -- [UNW_PPC64_V29]=UNW_PPC64_V29, -- [UNW_PPC64_V30]=UNW_PPC64_V30, -- [UNW_PPC64_V31]=UNW_PPC64_V31, -- -- [UNW_PPC64_VRSAVE]=UNW_PPC64_VRSAVE, -- [UNW_PPC64_VSCR]=UNW_PPC64_VSCR, -- [UNW_PPC64_SPE_ACC]=UNW_PPC64_SPE_ACC, -- [UNW_PPC64_SPEFSCR]=UNW_PPC64_SPEFSCR, -+ [UNW_PPC64_R0]=UNW_PPC64_R0, -+ [UNW_PPC64_R1]=UNW_PPC64_R1, -+ [UNW_PPC64_R2]=UNW_PPC64_R2, -+ [UNW_PPC64_R3]=UNW_PPC64_R3, -+ [UNW_PPC64_R4]=UNW_PPC64_R4, -+ [UNW_PPC64_R5]=UNW_PPC64_R5, -+ [UNW_PPC64_R6]=UNW_PPC64_R6, -+ [UNW_PPC64_R7]=UNW_PPC64_R7, -+ [UNW_PPC64_R8]=UNW_PPC64_R8, -+ [UNW_PPC64_R9]=UNW_PPC64_R9, -+ [UNW_PPC64_R10]=UNW_PPC64_R10, -+ [UNW_PPC64_R11]=UNW_PPC64_R11, -+ [UNW_PPC64_R12]=UNW_PPC64_R12, -+ [UNW_PPC64_R13]=UNW_PPC64_R13, -+ [UNW_PPC64_R14]=UNW_PPC64_R14, -+ [UNW_PPC64_R15]=UNW_PPC64_R15, -+ [UNW_PPC64_R16]=UNW_PPC64_R16, -+ [UNW_PPC64_R17]=UNW_PPC64_R17, -+ [UNW_PPC64_R18]=UNW_PPC64_R18, -+ [UNW_PPC64_R19]=UNW_PPC64_R19, -+ [UNW_PPC64_R20]=UNW_PPC64_R20, -+ [UNW_PPC64_R21]=UNW_PPC64_R21, -+ [UNW_PPC64_R22]=UNW_PPC64_R22, -+ [UNW_PPC64_R23]=UNW_PPC64_R23, -+ [UNW_PPC64_R24]=UNW_PPC64_R24, -+ [UNW_PPC64_R25]=UNW_PPC64_R25, -+ [UNW_PPC64_R26]=UNW_PPC64_R26, -+ [UNW_PPC64_R27]=UNW_PPC64_R27, -+ [UNW_PPC64_R28]=UNW_PPC64_R28, -+ [UNW_PPC64_R29]=UNW_PPC64_R29, -+ [UNW_PPC64_R30]=UNW_PPC64_R30, -+ [UNW_PPC64_R31]=UNW_PPC64_R31, -+ -+ [UNW_PPC64_F0]=UNW_PPC64_F0, -+ [UNW_PPC64_F1]=UNW_PPC64_F1, -+ [UNW_PPC64_F2]=UNW_PPC64_F2, -+ [UNW_PPC64_F3]=UNW_PPC64_F3, -+ [UNW_PPC64_F4]=UNW_PPC64_F4, -+ [UNW_PPC64_F5]=UNW_PPC64_F5, -+ [UNW_PPC64_F6]=UNW_PPC64_F6, -+ [UNW_PPC64_F7]=UNW_PPC64_F7, -+ [UNW_PPC64_F8]=UNW_PPC64_F8, -+ [UNW_PPC64_F9]=UNW_PPC64_F9, -+ [UNW_PPC64_F10]=UNW_PPC64_F10, -+ [UNW_PPC64_F11]=UNW_PPC64_F11, -+ [UNW_PPC64_F12]=UNW_PPC64_F12, -+ [UNW_PPC64_F13]=UNW_PPC64_F13, -+ [UNW_PPC64_F14]=UNW_PPC64_F14, -+ [UNW_PPC64_F15]=UNW_PPC64_F15, -+ [UNW_PPC64_F16]=UNW_PPC64_F16, -+ [UNW_PPC64_F17]=UNW_PPC64_F17, -+ [UNW_PPC64_F18]=UNW_PPC64_F18, -+ [UNW_PPC64_F19]=UNW_PPC64_F19, -+ [UNW_PPC64_F20]=UNW_PPC64_F20, -+ [UNW_PPC64_F21]=UNW_PPC64_F21, -+ [UNW_PPC64_F22]=UNW_PPC64_F22, -+ [UNW_PPC64_F23]=UNW_PPC64_F23, -+ [UNW_PPC64_F24]=UNW_PPC64_F24, -+ [UNW_PPC64_F25]=UNW_PPC64_F25, -+ [UNW_PPC64_F26]=UNW_PPC64_F26, -+ [UNW_PPC64_F27]=UNW_PPC64_F27, -+ [UNW_PPC64_F28]=UNW_PPC64_F28, -+ [UNW_PPC64_F29]=UNW_PPC64_F29, -+ [UNW_PPC64_F30]=UNW_PPC64_F30, -+ [UNW_PPC64_F31]=UNW_PPC64_F31, -+ -+ [UNW_PPC64_LR]=UNW_PPC64_LR, -+ [UNW_PPC64_CTR]=UNW_PPC64_CTR, -+ [UNW_PPC64_ARG_POINTER]=UNW_PPC64_ARG_POINTER, -+ -+ [UNW_PPC64_CR0]=UNW_PPC64_CR0, -+ [UNW_PPC64_CR1]=UNW_PPC64_CR1, -+ [UNW_PPC64_CR2]=UNW_PPC64_CR2, -+ [UNW_PPC64_CR3]=UNW_PPC64_CR3, -+ [UNW_PPC64_CR4]=UNW_PPC64_CR4, -+ [UNW_PPC64_CR5]=UNW_PPC64_CR5, -+ [UNW_PPC64_CR6]=UNW_PPC64_CR6, -+ [UNW_PPC64_CR7]=UNW_PPC64_CR7, -+ -+ [UNW_PPC64_XER]=UNW_PPC64_XER, -+ -+ [UNW_PPC64_V0]=UNW_PPC64_V0, -+ [UNW_PPC64_V1]=UNW_PPC64_V1, -+ [UNW_PPC64_V2]=UNW_PPC64_V2, -+ [UNW_PPC64_V3]=UNW_PPC64_V3, -+ [UNW_PPC64_V4]=UNW_PPC64_V4, -+ [UNW_PPC64_V5]=UNW_PPC64_V5, -+ [UNW_PPC64_V6]=UNW_PPC64_V6, -+ [UNW_PPC64_V7]=UNW_PPC64_V7, -+ [UNW_PPC64_V8]=UNW_PPC64_V8, -+ [UNW_PPC64_V9]=UNW_PPC64_V9, -+ [UNW_PPC64_V10]=UNW_PPC64_V10, -+ [UNW_PPC64_V11]=UNW_PPC64_V11, -+ [UNW_PPC64_V12]=UNW_PPC64_V12, -+ [UNW_PPC64_V13]=UNW_PPC64_V13, -+ [UNW_PPC64_V14]=UNW_PPC64_V14, -+ [UNW_PPC64_V15]=UNW_PPC64_V15, -+ [UNW_PPC64_V16]=UNW_PPC64_V16, -+ [UNW_PPC64_V17]=UNW_PPC64_V17, -+ [UNW_PPC64_V18]=UNW_PPC64_V18, -+ [UNW_PPC64_V19]=UNW_PPC64_V19, -+ [UNW_PPC64_V20]=UNW_PPC64_V20, -+ [UNW_PPC64_V21]=UNW_PPC64_V21, -+ [UNW_PPC64_V22]=UNW_PPC64_V22, -+ [UNW_PPC64_V23]=UNW_PPC64_V23, -+ [UNW_PPC64_V24]=UNW_PPC64_V24, -+ [UNW_PPC64_V25]=UNW_PPC64_V25, -+ [UNW_PPC64_V26]=UNW_PPC64_V26, -+ [UNW_PPC64_V27]=UNW_PPC64_V27, -+ [UNW_PPC64_V28]=UNW_PPC64_V28, -+ [UNW_PPC64_V29]=UNW_PPC64_V29, -+ [UNW_PPC64_V30]=UNW_PPC64_V30, -+ [UNW_PPC64_V31]=UNW_PPC64_V31, -+ -+ [UNW_PPC64_VRSAVE]=UNW_PPC64_VRSAVE, -+ [UNW_PPC64_VSCR]=UNW_PPC64_VSCR, -+ [UNW_PPC64_SPE_ACC]=UNW_PPC64_SPE_ACC, -+ [UNW_PPC64_SPEFSCR]=UNW_PPC64_SPEFSCR, - }; - - HIDDEN void -@@ -162,10 +162,9 @@ tdep_init (void) - - sigfillset (&unwi_full_mask); - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- mutex_lock (&ppc64_lock); -+ lock_acquire (&ppc64_lock, saved_mask); - { -- if (!tdep_needs_initialization) -+ if (tdep_init_done) - /* another thread else beat us to it... */ - goto out; - -@@ -176,9 +175,8 @@ tdep_init (void) - #ifndef UNW_REMOTE_ONLY - ppc64_local_addr_space_init (); - #endif -- tdep_needs_initialization = 0; /* signal that we're initialized... */ -+ tdep_init_done = 1; /* signal that we're initialized... */ - } - out: -- mutex_unlock (&ppc64_lock); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ lock_release (&ppc64_lock, saved_mask); - } -diff --git a/frysk-imports/libunwind/src/ppc64/Ginit.c b/frysk-imports/libunwind/src/ppc64/Ginit.c -index 97c9d78..0740961 100644 ---- a/frysk-imports/libunwind/src/ppc64/Ginit.c -+++ b/frysk-imports/libunwind/src/ppc64/Ginit.c -@@ -42,11 +42,6 @@ static struct unw_addr_space local_addr_space; - - PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; - -- --#define PAGE_SIZE 4096 --#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1)) -- -- - static void * - uc_addr (ucontext_t *uc, int reg) - { -@@ -66,25 +61,25 @@ uc_addr (ucontext_t *uc, int reg) - unsigned gregs_idx; - - switch (reg) -- { -- case UNW_PPC64_NIP: -- gregs_idx = NIP_IDX; -- break; -- case UNW_PPC64_CTR: -- gregs_idx = CTR_IDX; -- break; -- case UNW_PPC64_LR: -- gregs_idx = LINK_IDX; -- break; -- case UNW_PPC64_XER: -- gregs_idx = XER_IDX; -- break; -- case UNW_PPC64_CR0: -- gregs_idx = CCR_IDX; -- break; -- default: -- return NULL; -- } -+ { -+ case UNW_PPC64_NIP: -+ gregs_idx = NIP_IDX; -+ break; -+ case UNW_PPC64_CTR: -+ gregs_idx = CTR_IDX; -+ break; -+ case UNW_PPC64_LR: -+ gregs_idx = LINK_IDX; -+ break; -+ case UNW_PPC64_XER: -+ gregs_idx = XER_IDX; -+ break; -+ case UNW_PPC64_CR0: -+ gregs_idx = CCR_IDX; -+ break; -+ default: -+ return NULL; -+ } - addr = &uc->uc_mcontext.gp_regs[gregs_idx]; - } - return addr; -@@ -98,7 +93,7 @@ tdep_uc_addr (ucontext_t *uc, int reg) - return uc_addr (uc, reg); - } - --# endif /* UNW_LOCAL_ONLY */ -+# endif /* UNW_LOCAL_ONLY */ - - HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - -@@ -111,7 +106,7 @@ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - - static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -- void *arg) -+ void *arg) - { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; - return 0; -@@ -119,7 +114,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, - - static int - access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - if (write) - { -@@ -136,14 +131,14 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, -- int write, void *arg) -+ int write, void *arg) - { - unw_word_t *addr; - ucontext_t *uc = arg; - -- if ((unsigned int) (reg - UNW_PPC64_F0) < 32) -+ if (UNW_PPC64_F0 <= reg && reg <= UNW_PPC64_F31) - goto badreg; -- if ((unsigned int) (reg - UNW_PPC64_V0) < 32) -+ if (UNW_PPC64_V0 <= reg && reg <= UNW_PPC64_V31) - goto badreg; - - addr = uc_addr (uc, reg); -@@ -169,12 +164,12 @@ badreg: - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { - ucontext_t *uc = arg; - unw_fpreg_t *addr; - -- if ((unsigned) (reg - UNW_PPC64_F0) < 0) -+ if ((reg - UNW_PPC64_F0) < 0) - goto badreg; - - if ((unsigned) (reg - UNW_PPC64_V0) >= 32) -@@ -205,8 +200,8 @@ badreg: - - static int - get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, -- void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) - { - return _Uelf64_get_proc_name (as, getpid (), ip, buf, buf_len, offp); - } -@@ -215,6 +210,12 @@ HIDDEN void - ppc64_local_addr_space_init (void) - { - memset (&local_addr_space, 0, sizeof (local_addr_space)); -+ local_addr_space.big_endian = (__BYTE_ORDER == __BIG_ENDIAN); -+#if _CALL_ELF == 2 -+ local_addr_space.abi = UNW_PPC64_ABI_ELFv2; -+#else -+ local_addr_space.abi = UNW_PPC64_ABI_ELFv1; -+#endif - local_addr_space.caching_policy = UNW_CACHE_GLOBAL; - local_addr_space.acc.find_proc_info = dwarf_find_proc_info; - local_addr_space.acc.put_unwind_info = put_unwind_info; -diff --git a/frysk-imports/libunwind/src/ppc64/Ginit_local.c b/frysk-imports/libunwind/src/ppc64/Ginit_local.c -deleted file mode 100644 -index 87cd74d..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Ginit_local.c -+++ /dev/null -@@ -1,56 +0,0 @@ --/* libunwind - a platform-independent unwind library -- -- Copied from src/x86_64/, modified slightly (or made empty stubs) for -- building frysk successfully on ppc64, by Wu Zhou -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "unwind_i.h" --#include "init.h" -- --#ifdef UNW_REMOTE_ONLY -- --PROTECTED int --unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) --{ -- /* XXX: empty stub. */ -- return -UNW_EINVAL; --} -- --#else /* !UNW_REMOTE_ONLY */ -- --PROTECTED int --unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) --{ -- struct cursor *c = (struct cursor *) cursor; -- -- if (tdep_needs_initialization) -- tdep_init (); -- -- Debug (1, "(cursor=%p)\n", c); -- -- c->dwarf.as = unw_local_addr_space; -- c->dwarf.as_arg = uc; -- return common_init (c); --} -- --#endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/ppc64/Ginit_remote.c b/frysk-imports/libunwind/src/ppc64/Ginit_remote.c -deleted file mode 100644 -index dc98130..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Ginit_remote.c -+++ /dev/null -@@ -1,48 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (C) 2006-2007 IBM -- Contributed by -- Corey Ashford -- Jose Flavio Aguilar Paulino -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "init.h" --#include "unwind_i.h" -- --PROTECTED int --unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) --{ --#ifdef UNW_LOCAL_ONLY -- return -UNW_EINVAL; --#else /* !UNW_LOCAL_ONLY */ -- struct cursor *c = (struct cursor *) cursor; -- -- if (tdep_needs_initialization) -- tdep_init (); -- -- Debug (1, "(cursor=%p)\n", c); -- -- c->dwarf.as = as; -- c->dwarf.as_arg = as_arg; -- return common_init (c); --#endif /* !UNW_LOCAL_ONLY */ --} -diff --git a/frysk-imports/libunwind/src/ppc64/Gis_signal_frame.c b/frysk-imports/libunwind/src/ppc64/Gis_signal_frame.c -deleted file mode 100644 -index 2fff7e4..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Gis_signal_frame.c -+++ /dev/null -@@ -1,66 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (C) 2006-2007 IBM -- Contributed by -- Corey Ashford -- Jose Flavio Aguilar Paulino -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "unwind_i.h" -- --PROTECTED int --unw_is_signal_frame (unw_cursor_t * cursor) --{ -- struct cursor *c = (struct cursor *) cursor; -- unw_word_t w0, w1, ip; -- unw_addr_space_t as; -- unw_accessors_t *a; -- void *arg; -- int ret; -- -- as = c->dwarf.as; -- as->validate = 1; /* Don't trust the ip */ -- arg = c->dwarf.as_arg; -- -- /* Check if return address points at sigreturn sequence. -- on ppc64 Linux that is (see libc.so): -- 0x38210080 addi r1, r1, 128 // pop the stack -- 0x380000ac li r0, 172 // invoke system service 172 -- 0x44000002 sc -- */ -- -- ip = c->dwarf.ip; -- if (ip == 0) -- return 0; -- -- /* Read up two 8-byte words at the IP. We are only looking at 3 -- consecutive 32-bit words, so the second 8-byte word needs to be -- shifted right by 32 bits (think big-endian) */ -- -- a = unw_get_accessors (as); -- if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0 -- || (ret = (*a->access_mem) (as, ip + 8, &w1, 0, arg)) < 0) -- return 0; -- w1 >>= 32; -- return (w0 == 0x38210080380000ac && w1 == 0x44000002); -- --} -diff --git a/frysk-imports/libunwind/src/ppc64/Gregs.c b/frysk-imports/libunwind/src/ppc64/Gregs.c -index b044504..1cb5d9d 100644 ---- a/frysk-imports/libunwind/src/ppc64/Gregs.c -+++ b/frysk-imports/libunwind/src/ppc64/Gregs.c -@@ -29,42 +29,83 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - HIDDEN int - tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -- int write) -+ int write) - { - struct dwarf_loc loc; - - switch (reg) - { -+ case UNW_PPC64_R0: -+ case UNW_PPC64_R2: -+ case UNW_PPC64_R3: -+ case UNW_PPC64_R4: -+ case UNW_PPC64_R5: -+ case UNW_PPC64_R6: -+ case UNW_PPC64_R7: -+ case UNW_PPC64_R8: -+ case UNW_PPC64_R9: -+ case UNW_PPC64_R10: -+ case UNW_PPC64_R11: -+ case UNW_PPC64_R12: -+ case UNW_PPC64_R13: -+ case UNW_PPC64_R14: -+ case UNW_PPC64_R15: -+ case UNW_PPC64_R16: -+ case UNW_PPC64_R17: -+ case UNW_PPC64_R18: -+ case UNW_PPC64_R19: -+ case UNW_PPC64_R20: -+ case UNW_PPC64_R21: -+ case UNW_PPC64_R22: -+ case UNW_PPC64_R23: -+ case UNW_PPC64_R24: -+ case UNW_PPC64_R25: -+ case UNW_PPC64_R26: -+ case UNW_PPC64_R27: -+ case UNW_PPC64_R28: -+ case UNW_PPC64_R29: -+ case UNW_PPC64_R30: -+ case UNW_PPC64_R31: -+ case UNW_PPC64_LR: -+ case UNW_PPC64_CTR: -+ case UNW_PPC64_CR0: -+ case UNW_PPC64_CR1: -+ case UNW_PPC64_CR2: -+ case UNW_PPC64_CR3: -+ case UNW_PPC64_CR4: -+ case UNW_PPC64_CR5: -+ case UNW_PPC64_CR6: -+ case UNW_PPC64_CR7: -+ case UNW_PPC64_VRSAVE: -+ case UNW_PPC64_VSCR: -+ case UNW_PPC64_SPE_ACC: -+ case UNW_PPC64_SPEFSCR: -+ loc = c->dwarf.loc[reg]; -+ break; -+ - case UNW_TDEP_IP: - if (write) -- { -- c->dwarf.ip = *valp; /* update the IP cache */ -- if (c->dwarf.pi_valid && (*valp < c->dwarf.pi.start_ip -- || *valp >= c->dwarf.pi.end_ip)) -- c->dwarf.pi_valid = 0; /* new IP outside of current proc */ -- } -+ { -+ c->dwarf.ip = *valp; /* update the IP cache */ -+ if (c->dwarf.pi_valid && (*valp < c->dwarf.pi.start_ip -+ || *valp >= c->dwarf.pi.end_ip)) -+ c->dwarf.pi_valid = 0; /* new IP outside of current proc */ -+ } - else -- *valp = c->dwarf.ip; -+ *valp = c->dwarf.ip; - return 0; - - case UNW_TDEP_SP: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - *valp = c->dwarf.cfa; - return 0; - -- - default: -+ return -UNW_EBADREG; - break; - } - -- /* make sure it's not an FP or VR register */ -- if ((((unsigned) (reg - UNW_PPC64_F0)) <= 31) || -- (((unsigned) (reg - UNW_PPC64_V0)) <= 31)) -- return -UNW_EBADREG; -- -- loc = c->dwarf.loc[reg]; -- - if (write) - return dwarf_put (&c->dwarf, loc, *valp); - else -@@ -73,7 +114,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - HIDDEN int - tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -- int write) -+ int write) - { - struct dwarf_loc loc; - -diff --git a/frysk-imports/libunwind/src/ppc64/Gresume.c b/frysk-imports/libunwind/src/ppc64/Gresume.c -index 893ea63..3f850e9 100644 ---- a/frysk-imports/libunwind/src/ppc64/Gresume.c -+++ b/frysk-imports/libunwind/src/ppc64/Gresume.c -@@ -45,7 +45,20 @@ my_rt_sigreturn (void *new_sp) - HIDDEN inline int - ppc64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - { -- /* XXX: empty stub. */ -+ struct cursor *c = (struct cursor *) cursor; -+ ucontext_t *uc = (ucontext_t *)c->dwarf.as_arg; -+ -+ if (unlikely (c->sigcontext_format != PPC_SCF_NONE)) -+ { -+ my_rt_sigreturn(cursor); -+ abort(); -+ } -+ else -+ { -+ Debug (8, "resuming at ip=%llx via setcontext()\n", -+ (unsigned long long) c->dwarf.ip); -+ setcontext (uc); -+ } - return -UNW_EINVAL; - } - -@@ -57,7 +70,28 @@ ppc64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - static inline int - establish_machine_state (struct cursor *c) - { -- /* XXX: empty stub. */ -+ unw_addr_space_t as = c->dwarf.as; -+ void *arg = c->dwarf.as_arg; -+ unw_fpreg_t fpval; -+ unw_word_t val; -+ int reg; -+ -+ Debug (8, "copying out cursor state\n"); -+ -+ for (reg = 0; reg <= UNW_REG_LAST; ++reg) -+ { -+ Debug (16, "copying %s %d\n", unw_regname (reg), reg); -+ if (unw_is_fpreg (reg)) -+ { -+ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -+ as->acc.access_fpreg (as, reg, &fpval, 1, arg); -+ } -+ else -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ as->acc.access_reg (as, reg, &val, 1, arg); -+ } -+ } - return 0; - } - -@@ -73,5 +107,5 @@ unw_resume (unw_cursor_t *cursor) - return ret; - - return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -- c->dwarf.as_arg); -+ c->dwarf.as_arg); - } -diff --git a/frysk-imports/libunwind/src/ppc64/Gstep.c b/frysk-imports/libunwind/src/ppc64/Gstep.c -index 20b22b5..318beee 100644 ---- a/frysk-imports/libunwind/src/ppc64/Gstep.c -+++ b/frysk-imports/libunwind/src/ppc64/Gstep.c -@@ -27,6 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "unwind_i.h" - #include "ucontext_i.h" -+#include "remote.h" - #include - - /* This definition originates in /usr/include/asm-ppc64/ptrace.h, but is -@@ -57,17 +58,10 @@ unw_step (unw_cursor_t * cursor) - stack_frame_t dummy; - unw_word_t back_chain_offset, lr_save_offset, v_regs_ptr; - struct dwarf_loc back_chain_loc, lr_save_loc, sp_loc, ip_loc, v_regs_loc; -- int ret; -+ int ret, i; - - Debug (1, "(cursor=%p, ip=0x%016lx)\n", c, (unsigned long) c->dwarf.ip); - -- if (c->dwarf.ip == 0) -- { -- /* Unless the cursor or stack is corrupt or uninitialized, -- we've most likely hit the top of the stack */ -- return 0; -- } -- - /* Try DWARF-based unwinding... */ - - ret = dwarf_step (&c->dwarf); -@@ -81,48 +75,53 @@ unw_step (unw_cursor_t * cursor) - if (unlikely (ret < 0)) - { - if (likely (!unw_is_signal_frame (cursor))) -- { -- /* DWARF unwinding failed. As of 09/26/2006, gcc in 64-bit mode -- produces the mandatory level of traceback record in the code, but -- I get the impression that this is transitory, that eventually gcc -- will not produce any traceback records at all. So, for now, we -- won't bother to try to find and use these records. -- -- We can, however, attempt to unwind the frame by using the callback -- chain. This is very crude, however, and won't be able to unwind -- any registers besides the IP, SP, and LR . */ -- -- back_chain_offset = ((void *) &dummy.back_chain - (void *) &dummy); -- lr_save_offset = ((void *) &dummy.lr_save - (void *) &dummy); -- -- back_chain_loc = DWARF_LOC (c->dwarf.cfa + back_chain_offset, 0); -- -- if ((ret = -- dwarf_get (&c->dwarf, back_chain_loc, &c->dwarf.cfa)) < 0) -- { -- Debug -- ("Unable to retrieve CFA from back chain in stack frame - %d\n", -- ret); -- return ret; -- } -- if (c->dwarf.cfa == 0) -- /* Unless the cursor or stack is corrupt or uninitialized we've most -- likely hit the top of the stack */ -- return 0; -- -- lr_save_loc = DWARF_LOC (c->dwarf.cfa + lr_save_offset, 0); -- -- if ((ret = dwarf_get (&c->dwarf, lr_save_loc, &c->dwarf.ip)) < 0) -- { -- Debug -- ("Unable to retrieve IP from lr save in stack frame - %d\n", -- ret); -- return ret; -- } -- ret = 1; -- } -+ { -+ /* DWARF unwinding failed. As of 09/26/2006, gcc in 64-bit mode -+ produces the mandatory level of traceback record in the code, but -+ I get the impression that this is transitory, that eventually gcc -+ will not produce any traceback records at all. So, for now, we -+ won't bother to try to find and use these records. -+ -+ We can, however, attempt to unwind the frame by using the callback -+ chain. This is very crude, however, and won't be able to unwind -+ any registers besides the IP, SP, and LR . */ -+ -+ back_chain_offset = ((void *) &dummy.back_chain - (void *) &dummy); -+ lr_save_offset = ((void *) &dummy.lr_save - (void *) &dummy); -+ -+ back_chain_loc = DWARF_LOC (c->dwarf.cfa + back_chain_offset, 0); -+ -+ if ((ret = -+ dwarf_get (&c->dwarf, back_chain_loc, &c->dwarf.cfa)) < 0) -+ { -+ Debug (2, -+ "Unable to retrieve CFA from back chain in stack frame - %d\n", -+ ret); -+ return ret; -+ } -+ if (c->dwarf.cfa == 0) -+ /* Unless the cursor or stack is corrupt or uninitialized we've most -+ likely hit the top of the stack */ -+ return 0; -+ -+ lr_save_loc = DWARF_LOC (c->dwarf.cfa + lr_save_offset, 0); -+ -+ if ((ret = dwarf_get (&c->dwarf, lr_save_loc, &c->dwarf.ip)) < 0) -+ { -+ Debug (2, -+ "Unable to retrieve IP from lr save in stack frame - %d\n", -+ ret); -+ return ret; -+ } -+ -+ /* Mark all registers unsaved */ -+ for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) -+ c->dwarf.loc[i] = DWARF_NULL_LOC; -+ -+ ret = 1; -+ } - else -- { -+ { - /* Find the sigcontext record by taking the CFA and adjusting by - the dummy signal frame size. - -@@ -133,304 +132,335 @@ unw_step (unw_cursor_t * cursor) - following code will likely cause a seg fault or other crash - condition. */ - -- unw_word_t ucontext = c->dwarf.cfa + __SIGNAL_FRAMESIZE; -- -- Debug (1, "signal frame, skip over trampoline\n"); -- -- c->sigcontext_format = PPC_SCF_LINUX_RT_SIGFRAME; -- c->sigcontext_addr = ucontext; -- -- sp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0); -- ip_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_NIP, 0); -- -- ret = dwarf_get (&c->dwarf, sp_loc, &c->dwarf.cfa); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- ret = dwarf_get (&c->dwarf, ip_loc, &c->dwarf.ip); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- -- /* Instead of just restoring the non-volatile registers, do all -- of the registers for now. This will incur a performance hit, -- but it's rare enough not to cause too much of a problem, and -- might be useful in some cases. */ -- c->dwarf.loc[UNW_PPC64_R0] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R0, 0); -- c->dwarf.loc[UNW_PPC64_R1] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0); -- c->dwarf.loc[UNW_PPC64_R2] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R2, 0); -- c->dwarf.loc[UNW_PPC64_R3] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R3, 0); -- c->dwarf.loc[UNW_PPC64_R4] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R4, 0); -- c->dwarf.loc[UNW_PPC64_R5] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R5, 0); -- c->dwarf.loc[UNW_PPC64_R6] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R6, 0); -- c->dwarf.loc[UNW_PPC64_R7] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R7, 0); -- c->dwarf.loc[UNW_PPC64_R8] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R8, 0); -- c->dwarf.loc[UNW_PPC64_R9] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R9, 0); -- c->dwarf.loc[UNW_PPC64_R10] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R10, 0); -- c->dwarf.loc[UNW_PPC64_R11] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R11, 0); -- c->dwarf.loc[UNW_PPC64_R12] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R12, 0); -- c->dwarf.loc[UNW_PPC64_R13] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R13, 0); -- c->dwarf.loc[UNW_PPC64_R14] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R14, 0); -- c->dwarf.loc[UNW_PPC64_R15] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R15, 0); -- c->dwarf.loc[UNW_PPC64_R16] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R16, 0); -- c->dwarf.loc[UNW_PPC64_R17] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R17, 0); -- c->dwarf.loc[UNW_PPC64_R18] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R18, 0); -- c->dwarf.loc[UNW_PPC64_R19] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R19, 0); -- c->dwarf.loc[UNW_PPC64_R20] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R20, 0); -- c->dwarf.loc[UNW_PPC64_R21] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R21, 0); -- c->dwarf.loc[UNW_PPC64_R22] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R22, 0); -- c->dwarf.loc[UNW_PPC64_R23] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R23, 0); -- c->dwarf.loc[UNW_PPC64_R24] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R24, 0); -- c->dwarf.loc[UNW_PPC64_R25] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R25, 0); -- c->dwarf.loc[UNW_PPC64_R26] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R26, 0); -- c->dwarf.loc[UNW_PPC64_R27] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R27, 0); -- c->dwarf.loc[UNW_PPC64_R28] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R28, 0); -- c->dwarf.loc[UNW_PPC64_R29] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R29, 0); -- c->dwarf.loc[UNW_PPC64_R30] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R30, 0); -- c->dwarf.loc[UNW_PPC64_R31] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R31, 0); -- -- c->dwarf.loc[UNW_PPC64_LR] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_LINK, 0); -- c->dwarf.loc[UNW_PPC64_CTR] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CTR, 0); -- /* This CR0 assignment is probably wrong. There are 8 dwarf columns -- assigned to the CR registers, but only one CR register in the -- mcontext structure */ -- c->dwarf.loc[UNW_PPC64_CR0] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CCR, 0); -- c->dwarf.loc[UNW_PPC64_XER] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_XER, 0); -- c->dwarf.loc[UNW_PPC64_NIP] = -- DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_NIP, 0); -- -- /* TODO: Is there a way of obtaining the value of the -- pseudo frame pointer (which is sp + some fixed offset, I -- assume), based on the contents of the ucontext record -- structure? For now, set this loc to null. */ -- c->dwarf.loc[UNW_PPC64_FRAME_POINTER] = DWARF_NULL_LOC; -- -- c->dwarf.loc[UNW_PPC64_F0] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R0, 0); -- c->dwarf.loc[UNW_PPC64_F1] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R1, 0); -- c->dwarf.loc[UNW_PPC64_F2] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R2, 0); -- c->dwarf.loc[UNW_PPC64_F3] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R3, 0); -- c->dwarf.loc[UNW_PPC64_F4] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R4, 0); -- c->dwarf.loc[UNW_PPC64_F5] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R5, 0); -- c->dwarf.loc[UNW_PPC64_F6] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R6, 0); -- c->dwarf.loc[UNW_PPC64_F7] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R7, 0); -- c->dwarf.loc[UNW_PPC64_F8] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R8, 0); -- c->dwarf.loc[UNW_PPC64_F9] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R9, 0); -- c->dwarf.loc[UNW_PPC64_F10] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R10, 0); -- c->dwarf.loc[UNW_PPC64_F11] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R11, 0); -- c->dwarf.loc[UNW_PPC64_F12] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R12, 0); -- c->dwarf.loc[UNW_PPC64_F13] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R13, 0); -- c->dwarf.loc[UNW_PPC64_F14] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R14, 0); -- c->dwarf.loc[UNW_PPC64_F15] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R15, 0); -- c->dwarf.loc[UNW_PPC64_F16] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R16, 0); -- c->dwarf.loc[UNW_PPC64_F17] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R17, 0); -- c->dwarf.loc[UNW_PPC64_F18] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R18, 0); -- c->dwarf.loc[UNW_PPC64_F19] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R19, 0); -- c->dwarf.loc[UNW_PPC64_F20] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R20, 0); -- c->dwarf.loc[UNW_PPC64_F21] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R21, 0); -- c->dwarf.loc[UNW_PPC64_F22] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R22, 0); -- c->dwarf.loc[UNW_PPC64_F23] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R23, 0); -- c->dwarf.loc[UNW_PPC64_F24] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R24, 0); -- c->dwarf.loc[UNW_PPC64_F25] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R25, 0); -- c->dwarf.loc[UNW_PPC64_F26] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R26, 0); -- c->dwarf.loc[UNW_PPC64_F27] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R27, 0); -- c->dwarf.loc[UNW_PPC64_F28] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R28, 0); -- c->dwarf.loc[UNW_PPC64_F29] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R29, 0); -- c->dwarf.loc[UNW_PPC64_F30] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R30, 0); -- c->dwarf.loc[UNW_PPC64_F31] = -- DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R31, 0); -- /* Note that there is no .eh_section register column for the -- FPSCR register. I don't know why this is. */ -- -- v_regs_loc = DWARF_LOC (ucontext + UC_MCONTEXT_V_REGS, 0); -- ret = dwarf_get (&c->dwarf, v_regs_loc, &v_regs_ptr); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- if (v_regs_ptr != 0) -- { -- /* The v_regs_ptr is not null. Set all of the AltiVec locs */ -- -- c->dwarf.loc[UNW_PPC64_V0] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R0, 0); -- c->dwarf.loc[UNW_PPC64_V1] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R1, 0); -- c->dwarf.loc[UNW_PPC64_V2] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R2, 0); -- c->dwarf.loc[UNW_PPC64_V3] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R3, 0); -- c->dwarf.loc[UNW_PPC64_V4] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R4, 0); -- c->dwarf.loc[UNW_PPC64_V5] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R5, 0); -- c->dwarf.loc[UNW_PPC64_V6] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R6, 0); -- c->dwarf.loc[UNW_PPC64_V7] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R7, 0); -- c->dwarf.loc[UNW_PPC64_V8] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R8, 0); -- c->dwarf.loc[UNW_PPC64_V9] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R9, 0); -- c->dwarf.loc[UNW_PPC64_V10] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R10, 0); -- c->dwarf.loc[UNW_PPC64_V11] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R11, 0); -- c->dwarf.loc[UNW_PPC64_V12] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R12, 0); -- c->dwarf.loc[UNW_PPC64_V13] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R13, 0); -- c->dwarf.loc[UNW_PPC64_V14] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R14, 0); -- c->dwarf.loc[UNW_PPC64_V15] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R15, 0); -- c->dwarf.loc[UNW_PPC64_V16] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R16, 0); -- c->dwarf.loc[UNW_PPC64_V17] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R17, 0); -- c->dwarf.loc[UNW_PPC64_V18] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R18, 0); -- c->dwarf.loc[UNW_PPC64_V19] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R19, 0); -- c->dwarf.loc[UNW_PPC64_V20] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R20, 0); -- c->dwarf.loc[UNW_PPC64_V21] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R21, 0); -- c->dwarf.loc[UNW_PPC64_V22] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R22, 0); -- c->dwarf.loc[UNW_PPC64_V23] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R23, 0); -- c->dwarf.loc[UNW_PPC64_V24] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R24, 0); -- c->dwarf.loc[UNW_PPC64_V25] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R25, 0); -- c->dwarf.loc[UNW_PPC64_V26] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R26, 0); -- c->dwarf.loc[UNW_PPC64_V27] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R27, 0); -- c->dwarf.loc[UNW_PPC64_V28] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R28, 0); -- c->dwarf.loc[UNW_PPC64_V29] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R29, 0); -- c->dwarf.loc[UNW_PPC64_V30] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R30, 0); -- c->dwarf.loc[UNW_PPC64_V31] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R31, 0); -- c->dwarf.loc[UNW_PPC64_VRSAVE] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_VRSAVE, 0); -- c->dwarf.loc[UNW_PPC64_VSCR] = -- DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_VSCR, 0); -- } -- else -- { -- c->dwarf.loc[UNW_PPC64_V0] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V1] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V2] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V3] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V4] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V5] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V6] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V7] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V8] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V9] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V10] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V11] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V12] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V13] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V14] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V15] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V16] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V17] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V18] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V19] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V20] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V21] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V22] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V23] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V24] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V25] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V26] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V27] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V28] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V29] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V30] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_V31] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_VRSAVE] = DWARF_NULL_LOC; -- c->dwarf.loc[UNW_PPC64_VSCR] = DWARF_NULL_LOC; -- } -- ret = 1; -- } -+ unw_word_t ucontext = c->dwarf.cfa + __SIGNAL_FRAMESIZE; -+ -+ Debug (1, "signal frame, skip over trampoline\n"); -+ -+ c->sigcontext_format = PPC_SCF_LINUX_RT_SIGFRAME; -+ c->sigcontext_addr = ucontext; -+ -+ sp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0); -+ ip_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_NIP, 0); -+ -+ ret = dwarf_get (&c->dwarf, sp_loc, &c->dwarf.cfa); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ ret = dwarf_get (&c->dwarf, ip_loc, &c->dwarf.ip); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ -+ /* Instead of just restoring the non-volatile registers, do all -+ of the registers for now. This will incur a performance hit, -+ but it's rare enough not to cause too much of a problem, and -+ might be useful in some cases. */ -+ c->dwarf.loc[UNW_PPC64_R0] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R0, 0); -+ c->dwarf.loc[UNW_PPC64_R1] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R1, 0); -+ c->dwarf.loc[UNW_PPC64_R2] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R2, 0); -+ c->dwarf.loc[UNW_PPC64_R3] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R3, 0); -+ c->dwarf.loc[UNW_PPC64_R4] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R4, 0); -+ c->dwarf.loc[UNW_PPC64_R5] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R5, 0); -+ c->dwarf.loc[UNW_PPC64_R6] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R6, 0); -+ c->dwarf.loc[UNW_PPC64_R7] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R7, 0); -+ c->dwarf.loc[UNW_PPC64_R8] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R8, 0); -+ c->dwarf.loc[UNW_PPC64_R9] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R9, 0); -+ c->dwarf.loc[UNW_PPC64_R10] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R10, 0); -+ c->dwarf.loc[UNW_PPC64_R11] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R11, 0); -+ c->dwarf.loc[UNW_PPC64_R12] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R12, 0); -+ c->dwarf.loc[UNW_PPC64_R13] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R13, 0); -+ c->dwarf.loc[UNW_PPC64_R14] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R14, 0); -+ c->dwarf.loc[UNW_PPC64_R15] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R15, 0); -+ c->dwarf.loc[UNW_PPC64_R16] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R16, 0); -+ c->dwarf.loc[UNW_PPC64_R17] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R17, 0); -+ c->dwarf.loc[UNW_PPC64_R18] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R18, 0); -+ c->dwarf.loc[UNW_PPC64_R19] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R19, 0); -+ c->dwarf.loc[UNW_PPC64_R20] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R20, 0); -+ c->dwarf.loc[UNW_PPC64_R21] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R21, 0); -+ c->dwarf.loc[UNW_PPC64_R22] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R22, 0); -+ c->dwarf.loc[UNW_PPC64_R23] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R23, 0); -+ c->dwarf.loc[UNW_PPC64_R24] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R24, 0); -+ c->dwarf.loc[UNW_PPC64_R25] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R25, 0); -+ c->dwarf.loc[UNW_PPC64_R26] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R26, 0); -+ c->dwarf.loc[UNW_PPC64_R27] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R27, 0); -+ c->dwarf.loc[UNW_PPC64_R28] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R28, 0); -+ c->dwarf.loc[UNW_PPC64_R29] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R29, 0); -+ c->dwarf.loc[UNW_PPC64_R30] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R30, 0); -+ c->dwarf.loc[UNW_PPC64_R31] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R31, 0); -+ -+ c->dwarf.loc[UNW_PPC64_LR] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_LINK, 0); -+ c->dwarf.loc[UNW_PPC64_CTR] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CTR, 0); -+ /* This CR0 assignment is probably wrong. There are 8 dwarf columns -+ assigned to the CR registers, but only one CR register in the -+ mcontext structure */ -+ c->dwarf.loc[UNW_PPC64_CR0] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_CCR, 0); -+ c->dwarf.loc[UNW_PPC64_XER] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_XER, 0); -+ c->dwarf.loc[UNW_PPC64_NIP] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_NIP, 0); -+ -+ /* TODO: Is there a way of obtaining the value of the -+ pseudo frame pointer (which is sp + some fixed offset, I -+ assume), based on the contents of the ucontext record -+ structure? For now, set this loc to null. */ -+ c->dwarf.loc[UNW_PPC64_FRAME_POINTER] = DWARF_NULL_LOC; -+ -+ c->dwarf.loc[UNW_PPC64_F0] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R0, 0); -+ c->dwarf.loc[UNW_PPC64_F1] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R1, 0); -+ c->dwarf.loc[UNW_PPC64_F2] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R2, 0); -+ c->dwarf.loc[UNW_PPC64_F3] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R3, 0); -+ c->dwarf.loc[UNW_PPC64_F4] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R4, 0); -+ c->dwarf.loc[UNW_PPC64_F5] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R5, 0); -+ c->dwarf.loc[UNW_PPC64_F6] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R6, 0); -+ c->dwarf.loc[UNW_PPC64_F7] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R7, 0); -+ c->dwarf.loc[UNW_PPC64_F8] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R8, 0); -+ c->dwarf.loc[UNW_PPC64_F9] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R9, 0); -+ c->dwarf.loc[UNW_PPC64_F10] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R10, 0); -+ c->dwarf.loc[UNW_PPC64_F11] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R11, 0); -+ c->dwarf.loc[UNW_PPC64_F12] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R12, 0); -+ c->dwarf.loc[UNW_PPC64_F13] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R13, 0); -+ c->dwarf.loc[UNW_PPC64_F14] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R14, 0); -+ c->dwarf.loc[UNW_PPC64_F15] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R15, 0); -+ c->dwarf.loc[UNW_PPC64_F16] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R16, 0); -+ c->dwarf.loc[UNW_PPC64_F17] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R17, 0); -+ c->dwarf.loc[UNW_PPC64_F18] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R18, 0); -+ c->dwarf.loc[UNW_PPC64_F19] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R19, 0); -+ c->dwarf.loc[UNW_PPC64_F20] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R20, 0); -+ c->dwarf.loc[UNW_PPC64_F21] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R21, 0); -+ c->dwarf.loc[UNW_PPC64_F22] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R22, 0); -+ c->dwarf.loc[UNW_PPC64_F23] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R23, 0); -+ c->dwarf.loc[UNW_PPC64_F24] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R24, 0); -+ c->dwarf.loc[UNW_PPC64_F25] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R25, 0); -+ c->dwarf.loc[UNW_PPC64_F26] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R26, 0); -+ c->dwarf.loc[UNW_PPC64_F27] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R27, 0); -+ c->dwarf.loc[UNW_PPC64_F28] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R28, 0); -+ c->dwarf.loc[UNW_PPC64_F29] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R29, 0); -+ c->dwarf.loc[UNW_PPC64_F30] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R30, 0); -+ c->dwarf.loc[UNW_PPC64_F31] = -+ DWARF_LOC (ucontext + UC_MCONTEXT_FREGS_R31, 0); -+ /* Note that there is no .eh_section register column for the -+ FPSCR register. I don't know why this is. */ -+ -+ v_regs_loc = DWARF_LOC (ucontext + UC_MCONTEXT_V_REGS, 0); -+ ret = dwarf_get (&c->dwarf, v_regs_loc, &v_regs_ptr); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ if (v_regs_ptr != 0) -+ { -+ /* The v_regs_ptr is not null. Set all of the AltiVec locs */ -+ -+ c->dwarf.loc[UNW_PPC64_V0] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R0, 0); -+ c->dwarf.loc[UNW_PPC64_V1] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R1, 0); -+ c->dwarf.loc[UNW_PPC64_V2] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R2, 0); -+ c->dwarf.loc[UNW_PPC64_V3] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R3, 0); -+ c->dwarf.loc[UNW_PPC64_V4] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R4, 0); -+ c->dwarf.loc[UNW_PPC64_V5] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R5, 0); -+ c->dwarf.loc[UNW_PPC64_V6] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R6, 0); -+ c->dwarf.loc[UNW_PPC64_V7] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R7, 0); -+ c->dwarf.loc[UNW_PPC64_V8] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R8, 0); -+ c->dwarf.loc[UNW_PPC64_V9] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R9, 0); -+ c->dwarf.loc[UNW_PPC64_V10] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R10, 0); -+ c->dwarf.loc[UNW_PPC64_V11] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R11, 0); -+ c->dwarf.loc[UNW_PPC64_V12] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R12, 0); -+ c->dwarf.loc[UNW_PPC64_V13] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R13, 0); -+ c->dwarf.loc[UNW_PPC64_V14] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R14, 0); -+ c->dwarf.loc[UNW_PPC64_V15] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R15, 0); -+ c->dwarf.loc[UNW_PPC64_V16] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R16, 0); -+ c->dwarf.loc[UNW_PPC64_V17] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R17, 0); -+ c->dwarf.loc[UNW_PPC64_V18] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R18, 0); -+ c->dwarf.loc[UNW_PPC64_V19] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R19, 0); -+ c->dwarf.loc[UNW_PPC64_V20] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R20, 0); -+ c->dwarf.loc[UNW_PPC64_V21] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R21, 0); -+ c->dwarf.loc[UNW_PPC64_V22] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R22, 0); -+ c->dwarf.loc[UNW_PPC64_V23] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R23, 0); -+ c->dwarf.loc[UNW_PPC64_V24] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R24, 0); -+ c->dwarf.loc[UNW_PPC64_V25] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R25, 0); -+ c->dwarf.loc[UNW_PPC64_V26] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R26, 0); -+ c->dwarf.loc[UNW_PPC64_V27] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R27, 0); -+ c->dwarf.loc[UNW_PPC64_V28] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R28, 0); -+ c->dwarf.loc[UNW_PPC64_V29] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R29, 0); -+ c->dwarf.loc[UNW_PPC64_V30] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R30, 0); -+ c->dwarf.loc[UNW_PPC64_V31] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_R31, 0); -+ c->dwarf.loc[UNW_PPC64_VRSAVE] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_VRSAVE, 0); -+ c->dwarf.loc[UNW_PPC64_VSCR] = -+ DWARF_LOC (v_regs_ptr + UC_MCONTEXT_VREGS_VSCR, 0); -+ } -+ else -+ { -+ c->dwarf.loc[UNW_PPC64_V0] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V1] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V2] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V3] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V4] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V5] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V6] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V7] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V8] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V9] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V10] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V11] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V12] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V13] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V14] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V15] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V16] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V17] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V18] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V19] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V20] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V21] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V22] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V23] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V24] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V25] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V26] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V27] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V28] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V29] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V30] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_V31] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_VRSAVE] = DWARF_NULL_LOC; -+ c->dwarf.loc[UNW_PPC64_VSCR] = DWARF_NULL_LOC; -+ } -+ ret = 1; -+ } - } -+ -+ if (c->dwarf.ip == 0) -+ { -+ /* Unless the cursor or stack is corrupt or uninitialized, -+ we've most likely hit the top of the stack */ -+ Debug (2, "returning 0\n"); -+ return 0; -+ } -+ -+ // on ppc64, R2 register is used as pointer to TOC -+ // section which is used for symbol lookup in PIC code -+ // ppc64 linker generates "ld r2, 40(r1)" (ELFv1) or -+ // "ld r2, 24(r1)" (ELFv2) instruction after each -+ // @plt call. We need restore R2, but only for @plt calls -+ { -+ unw_word_t ip = c->dwarf.ip; -+ unw_addr_space_t as = c->dwarf.as; -+ unw_accessors_t *a = unw_get_accessors (as); -+ void *arg = c->dwarf.as_arg; -+ uint32_t toc_save = (as->abi == UNW_PPC64_ABI_ELFv2)? 24 : 40; -+ int32_t inst; -+ -+ if (fetch32 (as, a, &ip, &inst, arg) >= 0 -+ && (uint32_t)inst == (0xE8410000U + toc_save)) -+ { -+ // @plt call, restoring R2 from CFA+toc_save -+ c->dwarf.loc[UNW_PPC64_R2] = DWARF_LOC(c->dwarf.cfa + toc_save, 0); -+ } -+ } -+ -+ Debug (2, "returning %d with last return statement\n", ret); - return ret; - } -diff --git a/frysk-imports/libunwind/src/ppc64/Lget_proc_info.c b/frysk-imports/libunwind/src/ppc64/Lget_proc_info.c -deleted file mode 100644 -index 69028b0..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Lget_proc_info.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gget_proc_info.c" --#endif -diff --git a/frysk-imports/libunwind/src/ppc64/Lget_save_loc.c b/frysk-imports/libunwind/src/ppc64/Lget_save_loc.c -deleted file mode 100644 -index 9ea048a..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Lget_save_loc.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gget_save_loc.c" --#endif -diff --git a/frysk-imports/libunwind/src/ppc64/Linit_local.c b/frysk-imports/libunwind/src/ppc64/Linit_local.c -deleted file mode 100644 -index 68a1687..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Linit_local.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Ginit_local.c" --#endif -diff --git a/frysk-imports/libunwind/src/ppc64/Linit_remote.c b/frysk-imports/libunwind/src/ppc64/Linit_remote.c -deleted file mode 100644 -index 58cb04a..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Linit_remote.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Ginit_remote.c" --#endif -diff --git a/frysk-imports/libunwind/src/ppc64/Lis_signal_frame.c b/frysk-imports/libunwind/src/ppc64/Lis_signal_frame.c -deleted file mode 100644 -index b9a7c4f..0000000 ---- a/frysk-imports/libunwind/src/ppc64/Lis_signal_frame.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gis_signal_frame.c" --#endif -diff --git a/frysk-imports/libunwind/src/ppc64/get_func_addr.c b/frysk-imports/libunwind/src/ppc64/get_func_addr.c -index a9c828d..13abb7d 100644 ---- a/frysk-imports/libunwind/src/ppc64/get_func_addr.c -+++ b/frysk-imports/libunwind/src/ppc64/get_func_addr.c -@@ -29,17 +29,23 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - int - tdep_get_func_addr (unw_addr_space_t as, unw_word_t addr, -- unw_word_t *entry_point) -+ unw_word_t *entry_point) - { -- unw_accessors_t *a; -- int ret; -- -- a = unw_get_accessors (as); -- /* Entry-point is stored in the 1st word of the function descriptor. -- In case that changes in the future, we'd have to update the line -- below and read the word at addr + offset: */ -- ret = (*a->access_mem) (as, addr, entry_point, 0, NULL); -- if (ret < 0) -- return ret; -+ if (as->abi == UNW_PPC64_ABI_ELFv1) -+ { -+ unw_accessors_t *a; -+ int ret; -+ -+ a = unw_get_accessors (as); -+ /* Entry-point is stored in the 1st word of the function descriptor. -+ In case that changes in the future, we'd have to update the line -+ below and read the word at addr + offset: */ -+ ret = (*a->access_mem) (as, addr, entry_point, 0, NULL); -+ if (ret < 0) -+ return ret; -+ } -+ else -+ *entry_point = addr; -+ - return 0; - } -diff --git a/frysk-imports/libunwind/src/ppc64/init.h b/frysk-imports/libunwind/src/ppc64/init.h -index 886f14c..22376e7 100644 ---- a/frysk-imports/libunwind/src/ppc64/init.h -+++ b/frysk-imports/libunwind/src/ppc64/init.h -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - - static inline int --common_init_ppc64 (struct cursor *c) -+common_init_ppc64 (struct cursor *c, unsigned use_prev_instr) - { - int ret; - int i; -@@ -63,7 +63,7 @@ common_init_ppc64 (struct cursor *c) - return ret; - - ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_PPC64_R1), -- &c->dwarf.cfa); -+ &c->dwarf.cfa); - if (ret < 0) - return ret; - -@@ -72,6 +72,8 @@ common_init_ppc64 (struct cursor *c) - - c->dwarf.args_size = 0; - c->dwarf.ret_addr_column = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; - c->dwarf.pi_valid = 0; - c->dwarf.pi_is_dynamic = 0; - c->dwarf.hint = 0; -diff --git a/frysk-imports/libunwind/src/ppc64/longjmp.S b/frysk-imports/libunwind/src/ppc64/longjmp.S -deleted file mode 100644 -index 0482ea1..0000000 ---- a/frysk-imports/libunwind/src/ppc64/longjmp.S -+++ /dev/null -@@ -1,35 +0,0 @@ --/* libunwind - a platform-independent unwind library -- -- Copied from src/x86_64/, modified slightly (or made empty stubs) for -- building frysk successfully on ppc64, by Wu Zhou -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- -- .globl _UI_longjmp_cont -- -- .type _UI_longjmp_cont, @function --_UI_longjmp_cont: -- .size _UI_longjmp_cont, .-_UI_longjmp_cont --#ifdef __linux__ -- /* We do not need executable stack. */ -- .section .note.GNU-stack,"",@progbits --#endif -diff --git a/frysk-imports/libunwind/src/ppc64/regname.c b/frysk-imports/libunwind/src/ppc64/regname.c -index 7d64834..3e3a141 100644 ---- a/frysk-imports/libunwind/src/ppc64/regname.c -+++ b/frysk-imports/libunwind/src/ppc64/regname.c -@@ -149,6 +149,9 @@ static const char *regname[] = - [UNW_PPC64_SPE_ACC]="SPE_ACC", - [UNW_PPC64_SPEFSCR]="SPEFSCR", - -+ [UNW_PPC64_FRAME_POINTER]="FRAME_POINTER", -+ [UNW_PPC64_NIP]="NIP", -+ - }; - - PROTECTED const char * -diff --git a/frysk-imports/libunwind/src/ppc64/setcontext.S b/frysk-imports/libunwind/src/ppc64/setcontext.S -index b54378a..ffc2500 100644 ---- a/frysk-imports/libunwind/src/ppc64/setcontext.S -+++ b/frysk-imports/libunwind/src/ppc64/setcontext.S -@@ -1,7 +1,7 @@ - .global _UI_setcontext - - _UI_setcontext: -- retq -+ blr - - #ifdef __linux__ - /* We do not need executable stack. */ -diff --git a/frysk-imports/libunwind/src/ppc64/siglongjmp.S b/frysk-imports/libunwind/src/ppc64/siglongjmp.S -deleted file mode 100644 -index 701a39a..0000000 ---- a/frysk-imports/libunwind/src/ppc64/siglongjmp.S -+++ /dev/null -@@ -1,31 +0,0 @@ --/* libunwind - a platform-independent unwind library -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- -- .globl _UI_siglongjmp_cont -- -- _UI_siglongjmp_cont: -- --#ifdef __linux__ -- /* We do not need executable stack. */ -- .section .note.GNU-stack,"",@progbits --#endif -diff --git a/frysk-imports/libunwind/src/ppc64/ucontext_i.h b/frysk-imports/libunwind/src/ppc64/ucontext_i.h -index 5999e9a..2ddfdb8 100644 ---- a/frysk-imports/libunwind/src/ppc64/ucontext_i.h -+++ b/frysk-imports/libunwind/src/ppc64/ucontext_i.h -@@ -28,83 +28,31 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include - --/* FRYSK LOCAL - since we are compiling on different architectures -- use use local (renamed) definitions from --http://www.linux-foundation.org/spec/refspecs/LSB_3.0.0/LSB-PPC64/LSB-PPC64.html --*/ --typedef struct local_libc_vscr --{ -- int __pad[3]; -- int vscr_word; --} --local_vscr_t; --typedef struct local_libc_vrstate --{ -- unsigned int vrregs[128]; -- local_vscr_t vscr; -- unsigned int vrsave; -- unsigned int __pad[3]; --} --local_vrregset_t __attribute__ ((__aligned__ (16))); -- --#define NGREG 48 -- --typedef unsigned long int local_gregset_t[48]; -- --typedef double local_fpregset_t[33]; -- --typedef struct --{ -- unsigned long int __unused[4]; -- int signal; -- int pad0; -- unsigned long int handler; -- unsigned long int oldmask; -- struct pt_regs *regs; -- local_gregset_t gp_regs; -- local_fpregset_t fp_regs; -- local_vrregset_t *v_regs; -- long int vmx_reserve[69]; --} --local_mcontext_t; -- --typedef struct local_ucontext --{ -- unsigned long int uc_flags; -- struct local_ucontext *uc_link; -- stack_t uc_stack; -- sigset_t uc_sigmask; -- local_mcontext_t uc_mcontext; --} --local_ucontext_t; --/* END FRYSK LOCAL */ -- -- - /* These values were derived by reading - /usr/src/linux-2.6.18-1.8/arch/um/include/sysdep-ppc/ptrace.h and - /usr/src/linux-2.6.18-1.8/arch/powerpc/kernel/ppc32.h - */ - --#define NIP_IDX 32 --#define MSR_IDX 33 --#define ORIG_GPR3_IDX 34 --#define CTR_IDX 35 --#define LINK_IDX 36 --#define XER_IDX 37 --#define CCR_IDX 38 --#define SOFTE_IDX 39 --#define TRAP_IDX 40 --#define DAR_IDX 41 --#define DSISR_IDX 42 --#define RESULT_IDX 43 -+#define NIP_IDX 32 -+#define MSR_IDX 33 -+#define ORIG_GPR3_IDX 34 -+#define CTR_IDX 35 -+#define LINK_IDX 36 -+#define XER_IDX 37 -+#define CCR_IDX 38 -+#define SOFTE_IDX 39 -+#define TRAP_IDX 40 -+#define DAR_IDX 41 -+#define DSISR_IDX 42 -+#define RESULT_IDX 43 - - #define VSCR_IDX 32 - #define VRSAVE_IDX 33 - - /* These are dummy structures used only for obtaining the offsets of the - various structure members. */ --static local_ucontext_t dmy_ctxt; --static local_vrregset_t dmy_vrregset; -+static ucontext_t dmy_ctxt; -+static vrregset_t dmy_vrregset; - - #define UC_MCONTEXT_GREGS_R0 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[0] - (void *)&dmy_ctxt) - #define UC_MCONTEXT_GREGS_R1 ((void *)&dmy_ctxt.uc_mcontext.gp_regs[1] - (void *)&dmy_ctxt) -diff --git a/frysk-imports/libunwind/src/ppc64/unwind_i.h b/frysk-imports/libunwind/src/ppc64/unwind_i.h -index 056dc16..26bbc2d 100644 ---- a/frysk-imports/libunwind/src/ppc64/unwind_i.h -+++ b/frysk-imports/libunwind/src/ppc64/unwind_i.h -@@ -28,7 +28,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef unwind_i_h - #define unwind_i_h - --#include - #include - - #include -@@ -36,16 +35,16 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - #include - --#define ppc64_lock UNW_OBJ(lock) --#define ppc64_local_resume UNW_OBJ(local_resume) --#define ppc64_local_addr_space_init UNW_OBJ(local_addr_space_init) -+#define ppc64_lock UNW_OBJ(lock) -+#define ppc64_local_resume UNW_OBJ(local_resume) -+#define ppc64_local_addr_space_init UNW_OBJ(local_addr_space_init) - #if 0 --#define ppc64_scratch_loc UNW_OBJ(scratch_loc) -+#define ppc64_scratch_loc UNW_OBJ(scratch_loc) - #endif - - extern void ppc64_local_addr_space_init (void); - extern int ppc64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -- void *arg); -+ void *arg); - #if 0 - extern dwarf_loc_t ppc64_scratch_loc (struct cursor *c, unw_regnum_t reg); - #endif -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_access_fpreg.c b/frysk-imports/libunwind/src/ptrace/_UPT_access_fpreg.c -index 28e0892..e90ec47 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_access_fpreg.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_access_fpreg.c -@@ -1,6 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2010 Konstantin Belousov - - This file is part of libunwind. - -@@ -25,16 +26,17 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "_UPT_internal.h" - -+#if HAVE_DECL_PTRACE_POKEUSER || HAVE_TTRACE - int - _UPT_access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { - unw_word_t *wp = (unw_word_t *) val; - struct UPT_info *ui = arg; - pid_t pid = ui->pid; - int i; - -- if ((unsigned) reg >= sizeof (_UPT_reg_offset) / sizeof (_UPT_reg_offset[0])) -+ if ((unsigned) reg >= ARRAY_SIZE (_UPT_reg_offset)) - return -UNW_EBADREG; - - errno = 0; -@@ -42,25 +44,62 @@ _UPT_access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - for (i = 0; i < (int) (sizeof (*val) / sizeof (wp[i])); ++i) - { - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- ptrace (PTRACE_POKEUSER, pid, _UPT_reg_offset[reg] + i * sizeof(wp[i]), -- wp[i]); -+ ptrace (PTRACE_POKEUSER, pid, _UPT_reg_offset[reg] + i * sizeof(wp[i]), -+ wp[i]); - #endif -- if (errno) -- return -UNW_EBADREG; -+ if (errno) -+ return -UNW_EBADREG; - } - else - for (i = 0; i < (int) (sizeof (*val) / sizeof (wp[i])); ++i) - { - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- wp[i] = ptrace (PTRACE_PEEKUSER, pid, -- _UPT_reg_offset[reg] + i * sizeof(wp[i]), 0); -+ wp[i] = ptrace (PTRACE_PEEKUSER, pid, -+ _UPT_reg_offset[reg] + i * sizeof(wp[i]), 0); - #endif -- if (errno) -- return -UNW_EBADREG; -+ if (errno) -+ return -UNW_EBADREG; - } - return 0; - } -+#elif HAVE_DECL_PT_GETFPREGS -+int -+_UPT_access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -+ int write, void *arg) -+{ -+ struct UPT_info *ui = arg; -+ pid_t pid = ui->pid; -+ fpregset_t fpreg; -+ -+ if ((unsigned) reg >= ARRAY_SIZE (_UPT_reg_offset)) -+ return -UNW_EBADREG; -+ -+ if (ptrace(PT_GETFPREGS, pid, (caddr_t)&fpreg, 0) == -1) -+ return -UNW_EBADREG; -+ if (write) { -+#if defined(__amd64__) -+ memcpy(&fpreg.fpr_xacc[reg], val, sizeof(unw_fpreg_t)); -+#elif defined(__i386__) -+ memcpy(&fpreg.fpr_acc[reg], val, sizeof(unw_fpreg_t)); -+#else -+#error Fix me -+#endif -+ if (ptrace(PT_SETFPREGS, pid, (caddr_t)&fpreg, 0) == -1) -+ return -UNW_EBADREG; -+ } else -+#if defined(__amd64__) -+ memcpy(val, &fpreg.fpr_xacc[reg], sizeof(unw_fpreg_t)); -+#elif defined(__i386__) -+ memcpy(val, &fpreg.fpr_acc[reg], sizeof(unw_fpreg_t)); -+#else -+#error Fix me -+#endif -+ return 0; -+} -+#else -+#error Fix me -+#endif -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_access_mem.c b/frysk-imports/libunwind/src/ptrace/_UPT_access_mem.c -index 6900c19..ab93ce3 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_access_mem.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_access_mem.c -@@ -1,6 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2010 Konstantin Belousov - - This file is part of libunwind. - -@@ -25,11 +26,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "_UPT_internal.h" - -+#if HAVE_DECL_PTRACE_POKEDATA || HAVE_TTRACE - int - _UPT_access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, -- int write, void *arg) -+ int write, void *arg) - { - struct UPT_info *ui = arg; -+ if (!ui) -+ return -UNW_EINVAL; -+ - pid_t pid = ui->pid; - - errno = 0; -@@ -37,23 +42,49 @@ _UPT_access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, - { - Debug (16, "mem[%lx] <- %lx\n", (long) addr, (long) *val); - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else - ptrace (PTRACE_POKEDATA, pid, addr, *val); - if (errno) -- return -UNW_EINVAL; -+ return -UNW_EINVAL; - #endif - } - else - { - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else - *val = ptrace (PTRACE_PEEKDATA, pid, addr, 0); - if (errno) -- return -UNW_EINVAL; -+ return -UNW_EINVAL; - #endif - Debug (16, "mem[%lx] -> %lx\n", (long) addr, (long) *val); - } - return 0; - } -+#elif HAVE_DECL_PT_IO -+int -+_UPT_access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, -+ int write, void *arg) -+{ -+ struct UPT_info *ui = arg; -+ if (!ui) -+ return -UNW_EINVAL; -+ pid_t pid = ui->pid; -+ struct ptrace_io_desc iod; -+ -+ iod.piod_offs = (void *)addr; -+ iod.piod_addr = val; -+ iod.piod_len = sizeof(*val); -+ iod.piod_op = write ? PIOD_WRITE_D : PIOD_READ_D; -+ if (write) -+ Debug (16, "mem[%lx] <- %lx\n", (long) addr, (long) *val); -+ if (ptrace(PT_IO, pid, (caddr_t)&iod, 0) == -1) -+ return -UNW_EINVAL; -+ if (!write) -+ Debug (16, "mem[%lx] -> %lx\n", (long) addr, (long) *val); -+ return 0; -+} -+#else -+#error Fix me -+#endif -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_access_reg.c b/frysk-imports/libunwind/src/ptrace/_UPT_access_reg.c -index 60e006b..ae71608 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_access_reg.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_access_reg.c -@@ -1,6 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2010 Konstantin Belousov - - This file is part of libunwind. - -@@ -33,14 +34,17 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - # include "tdep-ia64/rse.h" - #endif - -+#if HAVE_DECL_PTRACE_POKEUSER || HAVE_TTRACE - int - _UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, -- int write, void *arg) -+ int write, void *arg) - { - struct UPT_info *ui = arg; - pid_t pid = ui->pid; - - #if UNW_DEBUG -+ Debug(16, "using pokeuser: reg: %s [%u], val: %lx, write: %d\n", unw_regname(reg), (unsigned) reg, (long) val, write); -+ - if (write) - Debug (16, "%s <- %lx\n", unw_regname (reg), (long) *val); - #endif -@@ -54,189 +58,201 @@ _UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, - mask = ((unw_word_t) 1) << (reg - UNW_IA64_NAT); - errno = 0; - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else - nat_bits = ptrace (PTRACE_PEEKUSER, pid, PT_NAT_BITS, 0); - if (errno) -- goto badreg; -+ goto badreg; - #endif - - if (write) -- { -- if (*val) -- nat_bits |= mask; -- else -- nat_bits &= ~mask; -+ { -+ if (*val) -+ nat_bits |= mask; -+ else -+ nat_bits &= ~mask; - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- ptrace (PTRACE_POKEUSER, pid, PT_NAT_BITS, nat_bits); -- if (errno) -- goto badreg; -+ errno = 0; -+ ptrace (PTRACE_POKEUSER, pid, PT_NAT_BITS, nat_bits); -+ if (errno) -+ goto badreg; - #endif -- } -+ } - goto out; - } - else - switch (reg) - { - case UNW_IA64_GR + 0: -- if (write) -- goto badreg; -- *val = 0; -- return 0; -+ if (write) -+ goto badreg; -+ *val = 0; -+ return 0; - - case UNW_REG_IP: -- { -- unsigned long ip, psr; -+ { -+ unsigned long ip, psr; - -- /* distribute bundle-addr. & slot-number across PT_IIP & PT_IPSR. */ -+ /* distribute bundle-addr. & slot-number across PT_IIP & PT_IPSR. */ - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- psr = ptrace (PTRACE_PEEKUSER, pid, PT_CR_IPSR, 0); -- if (errno) -- goto badreg; --#endif -- if (write) -- { -- ip = *val & ~0xfUL; -- psr = (psr & ~0x3UL << 41) | (*val & 0x3); -+ errno = 0; -+ psr = ptrace (PTRACE_PEEKUSER, pid, PT_CR_IPSR, 0); -+ if (errno) -+ goto badreg; -+#endif -+ if (write) -+ { -+ ip = *val & ~0xfUL; -+ psr = (psr & ~0x3UL << 41) | (*val & 0x3); - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- ptrace (PTRACE_POKEUSER, pid, PT_CR_IIP, ip); -- ptrace (PTRACE_POKEUSER, pid, PT_CR_IPSR, psr); -- if (errno) -- goto badreg; --#endif -- } -- else -- { -+ errno = 0; -+ ptrace (PTRACE_POKEUSER, pid, PT_CR_IIP, ip); -+ ptrace (PTRACE_POKEUSER, pid, PT_CR_IPSR, psr); -+ if (errno) -+ goto badreg; -+#endif -+ } -+ else -+ { - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- ip = ptrace (PTRACE_PEEKUSER, pid, PT_CR_IIP, 0); -- if (errno) -- goto badreg; -+ errno = 0; -+ ip = ptrace (PTRACE_PEEKUSER, pid, PT_CR_IIP, 0); -+ if (errno) -+ goto badreg; - #endif -- *val = ip + ((psr >> 41) & 0x3); -- } -- goto out; -- } -+ *val = ip + ((psr >> 41) & 0x3); -+ } -+ goto out; -+ } - - case UNW_IA64_AR_BSPSTORE: -- reg = UNW_IA64_AR_BSP; -- break; -+ reg = UNW_IA64_AR_BSP; -+ break; - - case UNW_IA64_AR_BSP: - case UNW_IA64_BSP: -- { -- unsigned long sof, cfm, bsp; -+ { -+ unsigned long sof, cfm, bsp; - - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- /* Account for the fact that ptrace() expects bsp to point -- _after_ the current register frame. */ -- errno = 0; -- cfm = ptrace (PTRACE_PEEKUSER, pid, PT_CFM, 0); -- if (errno) -- goto badreg; --#endif -- sof = (cfm & 0x7f); -- -- if (write) -- { -- bsp = rse_skip_regs (*val, sof); -+ /* Account for the fact that ptrace() expects bsp to point -+ _after_ the current register frame. */ -+ errno = 0; -+ cfm = ptrace (PTRACE_PEEKUSER, pid, PT_CFM, 0); -+ if (errno) -+ goto badreg; -+#endif -+ sof = (cfm & 0x7f); -+ -+ if (write) -+ { -+ bsp = rse_skip_regs (*val, sof); - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- ptrace (PTRACE_POKEUSER, pid, PT_AR_BSP, bsp); -- if (errno) -- goto badreg; --#endif -- } -- else -- { -+ errno = 0; -+ ptrace (PTRACE_POKEUSER, pid, PT_AR_BSP, bsp); -+ if (errno) -+ goto badreg; -+#endif -+ } -+ else -+ { - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- bsp = ptrace (PTRACE_PEEKUSER, pid, PT_AR_BSP, 0); -- if (errno) -- goto badreg; -+ errno = 0; -+ bsp = ptrace (PTRACE_PEEKUSER, pid, PT_AR_BSP, 0); -+ if (errno) -+ goto badreg; - #endif -- *val = rse_skip_regs (bsp, -sof); -- } -- goto out; -- } -+ *val = rse_skip_regs (bsp, -sof); -+ } -+ goto out; -+ } - - case UNW_IA64_CFM: -- /* If we change CFM, we need to adjust ptrace's notion of bsp -- accordingly, so that the real bsp remains unchanged. */ -- if (write) -- { -- unsigned long new_sof, old_sof, cfm, bsp; -+ /* If we change CFM, we need to adjust ptrace's notion of bsp -+ accordingly, so that the real bsp remains unchanged. */ -+ if (write) -+ { -+ unsigned long new_sof, old_sof, cfm, bsp; - - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- bsp = ptrace (PTRACE_PEEKUSER, pid, PT_AR_BSP, 0); -- cfm = ptrace (PTRACE_PEEKUSER, pid, PT_CFM, 0); --#endif -- if (errno) -- goto badreg; -- old_sof = (cfm & 0x7f); -- new_sof = (*val & 0x7f); -- if (old_sof != new_sof) -- { -- bsp = rse_skip_regs (bsp, -old_sof + new_sof); -+ errno = 0; -+ bsp = ptrace (PTRACE_PEEKUSER, pid, PT_AR_BSP, 0); -+ cfm = ptrace (PTRACE_PEEKUSER, pid, PT_CFM, 0); -+#endif -+ if (errno) -+ goto badreg; -+ old_sof = (cfm & 0x7f); -+ new_sof = (*val & 0x7f); -+ if (old_sof != new_sof) -+ { -+ bsp = rse_skip_regs (bsp, -old_sof + new_sof); - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- ptrace (PTRACE_POKEUSER, pid, PT_AR_BSP, 0); -- if (errno) -- goto badreg; -+ errno = 0; -+ ptrace (PTRACE_POKEUSER, pid, PT_AR_BSP, 0); -+ if (errno) -+ goto badreg; - #endif -- } -+ } - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else -- errno = 0; -- ptrace (PTRACE_POKEUSER, pid, PT_CFM, *val); -- if (errno) -- goto badreg; --#endif -- goto out; -- } -- break; -- } -+ errno = 0; -+ ptrace (PTRACE_POKEUSER, pid, PT_CFM, *val); -+ if (errno) -+ goto badreg; - #endif -+ goto out; -+ } -+ break; -+ } -+#endif /* End of IA64 */ - -- if ((unsigned) reg >= sizeof (_UPT_reg_offset) / sizeof (_UPT_reg_offset[0])) -+ if ((unsigned) reg >= ARRAY_SIZE (_UPT_reg_offset)) - { -+#if UNW_DEBUG -+ Debug(2, "register out of range: >= %zu / %zu\n", sizeof(_UPT_reg_offset), sizeof(_UPT_reg_offset[0])); -+#endif - errno = EINVAL; - goto badreg; - } - - #ifdef HAVE_TTRACE --# warning No support for ttrace() yet. -+# warning No support for ttrace() yet. - #else - errno = 0; - if (write) - ptrace (PTRACE_POKEUSER, pid, _UPT_reg_offset[reg], *val); -- else -+ else { -+#if UNW_DEBUG -+ Debug(16, "ptrace PEEKUSER pid: %lu , reg: %lu , offs: %lu\n", (unsigned long)pid, (unsigned long)reg, -+ (unsigned long)_UPT_reg_offset[reg]); -+#endif - *val = ptrace (PTRACE_PEEKUSER, pid, _UPT_reg_offset[reg], 0); -- if (errno) -+ } -+ if (errno) { -+#if UNW_DEBUG -+ Debug(2, "ptrace failure\n"); -+#endif - goto badreg; -+ } - #endif - - #ifdef UNW_TARGET_IA64 -@@ -244,11 +260,50 @@ _UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, - #endif - #if UNW_DEBUG - if (!write) -- Debug (16, "%s -> %lx\n", unw_regname (reg), (long) *val); -+ Debug (16, "%s[%u] -> %lx\n", unw_regname (reg), (unsigned) reg, (long) *val); -+#endif -+ return 0; -+ -+ badreg: -+ Debug (1, "bad register %s [%u] (error: %s)\n", unw_regname(reg), reg, strerror (errno)); -+ return -UNW_EBADREG; -+} -+#elif HAVE_DECL_PT_GETREGS -+int -+_UPT_access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, -+ int write, void *arg) -+{ -+ struct UPT_info *ui = arg; -+ pid_t pid = ui->pid; -+ gregset_t regs; -+ char *r; -+ -+#if UNW_DEBUG -+ Debug(16, "using getregs: reg: %s [%u], val: %lx, write: %u\n", unw_regname(reg), (unsigned) reg, (long) val, write); -+ -+ if (write) -+ Debug (16, "%s [%u] <- %lx\n", unw_regname (reg), (unsigned) reg, (long) *val); - #endif -+ if ((unsigned) reg >= ARRAY_SIZE (_UPT_reg_offset)) -+ { -+ errno = EINVAL; -+ goto badreg; -+ } -+ r = (char *)®s + _UPT_reg_offset[reg]; -+ if (ptrace(PT_GETREGS, pid, (caddr_t)®s, 0) == -1) -+ goto badreg; -+ if (write) { -+ memcpy(r, val, sizeof(unw_word_t)); -+ if (ptrace(PT_SETREGS, pid, (caddr_t)®s, 0) == -1) -+ goto badreg; -+ } else -+ memcpy(val, r, sizeof(unw_word_t)); - return 0; - - badreg: -- Debug (1, "bad register number %u (error: %s)\n", reg, strerror (errno)); -+ Debug (1, "bad register %s [%u] (error: %s)\n", unw_regname(reg), reg, strerror (errno)); - return -UNW_EBADREG; - } -+#else -+#error Port me -+#endif -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_accessors.c b/frysk-imports/libunwind/src/ptrace/_UPT_accessors.c -index 3feb60b..3190e78 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_accessors.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_accessors.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,12 +27,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - PROTECTED unw_accessors_t _UPT_accessors = - { -- .find_proc_info = _UPT_find_proc_info, -- .put_unwind_info = _UPT_put_unwind_info, -- .get_dyn_info_list_addr = _UPT_get_dyn_info_list_addr, -- .access_mem = _UPT_access_mem, -- .access_reg = _UPT_access_reg, -- .access_fpreg = _UPT_access_fpreg, -- .resume = _UPT_resume, -- .get_proc_name = _UPT_get_proc_name -+ .find_proc_info = _UPT_find_proc_info, -+ .put_unwind_info = _UPT_put_unwind_info, -+ .get_dyn_info_list_addr = _UPT_get_dyn_info_list_addr, -+ .access_mem = _UPT_access_mem, -+ .access_reg = _UPT_access_reg, -+ .access_fpreg = _UPT_access_fpreg, -+ .resume = _UPT_resume, -+ .get_proc_name = _UPT_get_proc_name - }; -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_create.c b/frysk-imports/libunwind/src/ptrace/_UPT_create.c -index 2a4427b..dd59e97 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_create.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_create.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -37,5 +37,10 @@ _UPT_create (pid_t pid) - - memset (ui, 0, sizeof (*ui)); - ui->pid = pid; -+ ui->edi.di_cache.format = -1; -+ ui->edi.di_debug.format = -1; -+#if UNW_TARGET_IA64 -+ ui->edi.ktab.format = -1; -+#endif - return ui; - } -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_destroy.c b/frysk-imports/libunwind/src/ptrace/_UPT_destroy.c -index 52cf543..edb664c 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_destroy.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_destroy.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,7 +26,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "_UPT_internal.h" - - void --_UPT_destroy (void *ui) -+_UPT_destroy (void *ptr) - { -- free (ui); -+ struct UPT_info *ui = (struct UPT_info *) ptr; -+ invalidate_edi (&ui->edi); -+ free (ptr); - } -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_elf.c b/frysk-imports/libunwind/src/ptrace/_UPT_elf.c -index cf0480f..efc43b5 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_elf.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_elf.c -@@ -1,5 +1,5 @@ - /* We need to get a separate copy of the ELF-code into - libunwind-ptrace since it cannot (and must not) have any ELF - dependencies on libunwind. */ --#include "libunwind_i.h" /* get ELFCLASS defined */ -+#include "libunwind_i.h" /* get ELFCLASS defined */ - #include "../elfxx.c" -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_find_proc_info.c b/frysk-imports/libunwind/src/ptrace/_UPT_find_proc_info.c -index 9f4ed38..d2a37ea 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_find_proc_info.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_find_proc_info.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -32,367 +32,114 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "_UPT_internal.h" - --#if UNW_TARGET_IA64 -- --#include "elf64.h" -- --static unw_word_t --find_gp (struct UPT_info *ui, Elf64_Phdr *pdyn, Elf64_Addr load_base) --{ -- Elf64_Off soff, str_soff; -- Elf64_Ehdr *ehdr = ui->ei.image; -- Elf64_Shdr *shdr; -- Elf64_Shdr *str_shdr; -- Elf64_Addr gp = 0; -- char *strtab; -- int i; -- -- if (pdyn) -- { -- /* If we have a PT_DYNAMIC program header, fetch the gp-value -- from the DT_PLTGOT entry. */ -- Elf64_Dyn *dyn = (Elf64_Dyn *) (pdyn->p_offset + (char *) ui->ei.image); -- for (; dyn->d_tag != DT_NULL; ++dyn) -- if (dyn->d_tag == DT_PLTGOT) -- { -- gp = (Elf64_Addr) dyn->d_un.d_ptr + load_base; -- goto done; -- } -- } -- -- /* Without a PT_DYAMIC header, lets try to look for a non-empty .opd -- section. If there is such a section, we know it's full of -- function descriptors, and we can simply pick up the gp from the -- second word of the first entry in this table. */ -- -- soff = ehdr->e_shoff; -- str_soff = soff + (ehdr->e_shstrndx * ehdr->e_shentsize); -- -- if (soff + ehdr->e_shnum * ehdr->e_shentsize > ui->ei.size) -- { -- Debug (1, "section table outside of image? (%lu > %lu)", -- soff + ehdr->e_shnum * ehdr->e_shentsize, -- ui->ei.size); -- goto done; -- } -- -- shdr = (Elf64_Shdr *) ((char *) ui->ei.image + soff); -- str_shdr = (Elf64_Shdr *) ((char *) ui->ei.image + str_soff); -- strtab = (char *) ui->ei.image + str_shdr->sh_offset; -- for (i = 0; i < ehdr->e_shnum; ++i) -- { -- if (strcmp (strtab + shdr->sh_name, ".opd") == 0 -- && shdr->sh_size >= 16) -- { -- gp = ((Elf64_Addr *) ((char *) ui->ei.image + shdr->sh_offset))[1]; -- goto done; -- } -- shdr = (Elf64_Shdr *) (((char *) shdr) + ehdr->e_shentsize); -- } -- -- done: -- Debug (16, "image at %p, gp = %lx\n", ui->ei.image, gp); -- return gp; --} -- --HIDDEN unw_dyn_info_t * --_UPTi_find_unwind_table (struct UPT_info *ui, unw_addr_space_t as, -- char *path, unw_word_t segbase, unw_word_t mapoff) --{ -- Elf64_Phdr *phdr, *ptxt = NULL, *punw = NULL, *pdyn = NULL; -- Elf64_Ehdr *ehdr; -- int i; -- -- if (!_Uelf64_valid_object (&ui->ei)) -- return NULL; -- -- ehdr = ui->ei.image; -- phdr = (Elf64_Phdr *) ((char *) ui->ei.image + ehdr->e_phoff); -- -- for (i = 0; i < ehdr->e_phnum; ++i) -- { -- switch (phdr[i].p_type) -- { -- case PT_LOAD: -- if (phdr[i].p_offset == mapoff) -- ptxt = phdr + i; -- break; -- -- case PT_IA_64_UNWIND: -- punw = phdr + i; -- break; -- -- case PT_DYNAMIC: -- pdyn = phdr + i; -- break; -- -- default: -- break; -- } -- } -- if (!ptxt || !punw) -- return NULL; -- -- ui->di_cache.start_ip = segbase; -- ui->di_cache.end_ip = ui->di_cache.start_ip + ptxt->p_memsz; -- ui->di_cache.gp = find_gp (ui, pdyn, segbase - ptxt->p_vaddr); -- ui->di_cache.format = UNW_INFO_FORMAT_TABLE; -- ui->di_cache.u.ti.name_ptr = 0; -- ui->di_cache.u.ti.segbase = segbase; -- ui->di_cache.u.ti.table_len = punw->p_memsz / sizeof (unw_word_t); -- ui->di_cache.u.ti.table_data = (unw_word_t *) -- ((char *) ui->ei.image + (punw->p_vaddr - ptxt->p_vaddr)); -- return &ui->di_cache; --} -- --#elif UNW_TARGET_X86 || UNW_TARGET_X86_64 || UNW_TARGET_HPPA || UNW_TARGET_PPC64 -- --#include "dwarf-eh.h" --#include "dwarf_i.h" -- --/* We need our own instance of dwarf_read_encoded_pointer() here since -- the one in dwarf/Gpe.c is not (and should not be) exported. */ --int --dwarf_read_encoded_pointer (unw_addr_space_t as, unw_accessors_t *a, -- unw_word_t *addr, unsigned char encoding, -- const unw_proc_info_t *pi, -- unw_word_t *valp, void *arg) --{ -- return dwarf_read_encoded_pointer_inlined (as, a, addr, encoding, -- pi, valp, arg); --} -- --HIDDEN unw_dyn_info_t * --_UPTi_find_unwind_table (struct UPT_info *ui, unw_addr_space_t as, -- char *path, unw_word_t segbase, unw_word_t mapoff) --{ -- Elf_W(Phdr) *phdr, *ptxt = NULL, *peh_hdr = NULL, *pdyn = NULL; -- unw_word_t addr, eh_frame_start, fde_count, load_base; -- struct dwarf_eh_frame_hdr *hdr; -- unw_proc_info_t pi; -- unw_accessors_t *a; -- Elf_W(Ehdr) *ehdr; -- int i, ret; -- -- /* XXX: Much of this code is Linux/LSB-specific. */ -- -- if (!elf_w(valid_object) (&ui->ei)) -- return NULL; -- -- ehdr = ui->ei.image; -- phdr = (Elf_W(Phdr) *) ((char *) ui->ei.image + ehdr->e_phoff); -- -- for (i = 0; i < ehdr->e_phnum; ++i) -- { -- switch (phdr[i].p_type) -- { -- case PT_LOAD: -- if (phdr[i].p_offset == mapoff) -- ptxt = phdr + i; -- break; -- -- case PT_GNU_EH_FRAME: -- peh_hdr = phdr + i; -- break; -- -- case PT_DYNAMIC: -- pdyn = phdr + i; -- break; -- -- default: -- break; -- } -- } -- if (!ptxt || !peh_hdr) -- return NULL; -- -- if (pdyn) -- { -- /* For dynamicly linked executables and shared libraries, -- DT_PLTGOT is the value that data-relative addresses are -- relative to for that object. We call this the "gp". */ -- Elf_W(Dyn) *dyn = (Elf_W(Dyn) *)(pdyn->p_offset -- + (char *) ui->ei.image); -- for (; dyn->d_tag != DT_NULL; ++dyn) -- if (dyn->d_tag == DT_PLTGOT) -- { -- /* Assume that _DYNAMIC is writable and GLIBC has -- relocated it (true for x86 at least). */ -- ui->di_cache.gp = dyn->d_un.d_ptr; -- break; -- } -- } -- else -- /* Otherwise this is a static executable with no _DYNAMIC. Assume -- that data-relative addresses are relative to 0, i.e., -- absolute. */ -- ui->di_cache.gp = 0; -- -- hdr = (struct dwarf_eh_frame_hdr *) (peh_hdr->p_offset -- + (char *) ui->ei.image); -- if (hdr->version != DW_EH_VERSION) -- { -- Debug (1, "table `%s' has unexpected version %d\n", -- path, hdr->version); -- return 0; -- } -- -- a = unw_get_accessors (unw_local_addr_space); -- addr = (unw_word_t) (hdr + 1); -- -- /* Fill in a dummy proc_info structure. We just need to fill in -- enough to ensure that dwarf_read_encoded_pointer() can do it's -- job. Since we don't have a procedure-context at this point, all -- we have to do is fill in the global-pointer. */ -- memset (&pi, 0, sizeof (pi)); -- pi.gp = ui->di_cache.gp; -- -- /* (Optionally) read eh_frame_ptr: */ -- if ((ret = dwarf_read_encoded_pointer (unw_local_addr_space, a, -- &addr, hdr->eh_frame_ptr_enc, &pi, -- &eh_frame_start, NULL)) < 0) -- return NULL; -- -- /* (Optionally) read fde_count: */ -- if ((ret = dwarf_read_encoded_pointer (unw_local_addr_space, a, -- &addr, hdr->fde_count_enc, &pi, -- &fde_count, NULL)) < 0) -- return NULL; -- -- if (hdr->table_enc != (DW_EH_PE_datarel | DW_EH_PE_sdata4)) -- { -- abort (); --#if 0 -- /* If there is no search table or it has an unsupported -- encoding, fall back on linear search. */ -- if (hdr->table_enc == DW_EH_PE_omit) -- Debug (4, "table `%s' lacks search table; doing linear search\n", -- info->dlpi_name); -- else -- Debug (4, "table `%s' has encoding 0x%x; doing linear search\n", -- info->dlpi_name, hdr->table_enc); -- -- eh_frame_end = max_load_addr; /* XXX can we do better? */ -- -- if (hdr->fde_count_enc == DW_EH_PE_omit) -- fde_count = ~0UL; -- if (hdr->eh_frame_ptr_enc == DW_EH_PE_omit) -- abort (); -- -- cb_data->single_fde = 1; -- return linear_search (unw_local_addr_space, ip, -- eh_frame_start, eh_frame_end, fde_count, -- pi, need_unwind_info, NULL); --#endif -- } -- -- load_base = segbase - ptxt->p_vaddr; -- -- ui->di_cache.start_ip = segbase; -- ui->di_cache.end_ip = ui->di_cache.start_ip + ptxt->p_memsz; -- ui->di_cache.format = UNW_INFO_FORMAT_REMOTE_TABLE; -- ui->di_cache.u.rti.name_ptr = 0; -- /* two 32-bit values (ip_offset/fde_offset) per table-entry: */ -- ui->di_cache.u.rti.table_len = (fde_count * 8) / sizeof (unw_word_t); -- ui->di_cache.u.rti.table_data = ((load_base + peh_hdr->p_vaddr) -- + (addr - (unw_word_t) ui->ei.image -- - peh_hdr->p_offset)); -- -- /* For the binary-search table in the eh_frame_hdr, data-relative -- means relative to the start of that section... */ -- ui->di_cache.u.rti.segbase = ((load_base + peh_hdr->p_vaddr) -- + ((unw_word_t) hdr - (unw_word_t) ui->ei.image -- - peh_hdr->p_offset)); -- -- return &ui->di_cache; --} -- --#endif /* UNW_TARGET_X86 || UNW_TARGET_X86_64 || UNW_TARGET_HPPA*/ -- --static unw_dyn_info_t * --get_unwind_info (struct UPT_info *ui, unw_addr_space_t as, unw_word_t ip) -+static int -+get_unwind_info (struct elf_dyn_info *edi, pid_t pid, unw_addr_space_t as, unw_word_t ip) - { - unsigned long segbase, mapoff; - char path[PATH_MAX]; -- unw_dyn_info_t *di; - - #if UNW_TARGET_IA64 && defined(__linux) -- if (!ui->ktab.start_ip && _Uia64_get_kernel_table (&ui->ktab) < 0) -- return NULL; -+ if (!edi->ktab.start_ip && _Uia64_get_kernel_table (&edi->ktab) < 0) -+ return -UNW_ENOINFO; - -- if (ip >= ui->ktab.start_ip && ip < ui->ktab.end_ip) -- return &ui->ktab; -+ if (edi->ktab.format != -1 && ip >= edi->ktab.start_ip && ip < edi->ktab.end_ip) -+ return 0; - #endif - -- if (ip >= ui->di_cache.start_ip && ip < ui->di_cache.end_ip) -- return &ui->di_cache; -+ if ((edi->di_cache.format != -1 -+ && ip >= edi->di_cache.start_ip && ip < edi->di_cache.end_ip) -+#if UNW_TARGET_ARM -+ || (edi->di_debug.format != -1 -+ && ip >= edi->di_arm.start_ip && ip < edi->di_arm.end_ip) -+#endif -+ || (edi->di_debug.format != -1 -+ && ip >= edi->di_debug.start_ip && ip < edi->di_debug.end_ip)) -+ return 0; - -- if (ui->ei.image) -- { -- munmap (ui->ei.image, ui->ei.size); -- ui->ei.image = NULL; -- ui->ei.size = 0; -+ invalidate_edi(edi); - -- /* invalidate the cache: */ -- ui->di_cache.start_ip = ui->di_cache.end_ip = 0; -- } -- -- if (tdep_get_elf_image (&ui->ei, ui->pid, ip, &segbase, &mapoff) < 0) -- return NULL; -+ if (tdep_get_elf_image (&edi->ei, pid, ip, &segbase, &mapoff, path, -+ sizeof(path)) < 0) -+ return -UNW_ENOINFO; - - /* Here, SEGBASE is the starting-address of the (mmap'ped) segment - which covers the IP we're looking for. */ -- di = _UPTi_find_unwind_table (ui, as, path, segbase, mapoff); -- if (!di -- /* This can happen in corner cases where dynamically generated -- code falls into the same page that contains the data-segment -- and the page-offset of the code is within the first page of -- the executable. */ -- || ip < di->start_ip || ip >= di->end_ip) -- return NULL; -+ if (tdep_find_unwind_table (edi, as, path, segbase, mapoff, ip) < 0) -+ return -UNW_ENOINFO; - -- return di; -+ /* This can happen in corner cases where dynamically generated -+ code falls into the same page that contains the data-segment -+ and the page-offset of the code is within the first page of -+ the executable. */ -+ if (edi->di_cache.format != -1 -+ && (ip < edi->di_cache.start_ip || ip >= edi->di_cache.end_ip)) -+ edi->di_cache.format = -1; -+ -+ if (edi->di_debug.format != -1 -+ && (ip < edi->di_debug.start_ip || ip >= edi->di_debug.end_ip)) -+ edi->di_debug.format = -1; -+ -+ if (edi->di_cache.format == -1 -+#if UNW_TARGET_ARM -+ && edi->di_arm.format == -1 -+#endif -+ && edi->di_debug.format == -1) -+ return -UNW_ENOINFO; -+ -+ return 0; - } - - int - _UPT_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi, -- int need_unwind_info, void *arg) -+ int need_unwind_info, void *arg) - { - struct UPT_info *ui = arg; -- unw_dyn_info_t *di; -+ int ret = -UNW_ENOINFO; - -- di = get_unwind_info (ui, as, ip); -- if (!di) -+ if (get_unwind_info (&ui->edi, ui->pid, as, ip) < 0) - return -UNW_ENOINFO; - - #if UNW_TARGET_IA64 -- if (di == &ui->ktab) -+ if (ui->edi.ktab.format != -1) - { - /* The kernel unwind table resides in local memory, so we have -- to use the local address space to search it. Since -- _UPT_put_unwind_info() has no easy way of detecting this -- case, we simply make a copy of the unwind-info, so -- _UPT_put_unwind_info() can always free() the unwind-info -- without ill effects. */ -- int ret = tdep_search_unwind_table (unw_local_addr_space, ip, di, pi, -- need_unwind_info, arg); -+ to use the local address space to search it. Since -+ _UPT_put_unwind_info() has no easy way of detecting this -+ case, we simply make a copy of the unwind-info, so -+ _UPT_put_unwind_info() can always free() the unwind-info -+ without ill effects. */ -+ ret = tdep_search_unwind_table (unw_local_addr_space, ip, &ui->edi.ktab, pi, -+ need_unwind_info, arg); - if (ret >= 0) -- { -- if (!need_unwind_info) -- pi->unwind_info = NULL; -- else -- { -- void *mem = malloc (pi->unwind_info_size); -- -- if (!mem) -- return -UNW_ENOMEM; -- memcpy (mem, pi->unwind_info, pi->unwind_info_size); -- pi->unwind_info = mem; -- } -- } -- return ret; -+ { -+ if (!need_unwind_info) -+ pi->unwind_info = NULL; -+ else -+ { -+ void *mem = malloc (pi->unwind_info_size); -+ -+ if (!mem) -+ return -UNW_ENOMEM; -+ memcpy (mem, pi->unwind_info, pi->unwind_info_size); -+ pi->unwind_info = mem; -+ } -+ } - } -- else - #endif -- return tdep_search_unwind_table (as, ip, di, pi, need_unwind_info, arg); -+ -+ if (ret == -UNW_ENOINFO && ui->edi.di_cache.format != -1) -+ ret = tdep_search_unwind_table (as, ip, &ui->edi.di_cache, -+ pi, need_unwind_info, arg); -+ -+#if UNW_TARGET_ARM -+ if (ret == -UNW_ENOINFO && ui->edi.di_arm.format != -1) -+ ret = tdep_search_unwind_table (as, ip, &ui->edi.di_arm, pi, -+ need_unwind_info, arg); -+#endif -+ -+ if (ret == -UNW_ENOINFO && ui->edi.di_debug.format != -1) -+ ret = tdep_search_unwind_table (as, ip, &ui->edi.di_debug, pi, -+ need_unwind_info, arg); -+ -+ return ret; - } -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c b/frysk-imports/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c -index e0ea2f4..cc5ed04 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_get_dyn_info_list_addr.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -31,47 +31,38 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - static inline int - get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, -- int *countp) -+ int *countp) - { - unsigned long lo, hi, off; - struct UPT_info *ui = arg; - struct map_iterator mi; - char path[PATH_MAX]; -- unw_dyn_info_t *di; - unw_word_t res; - int count = 0; - - maps_init (&mi, ui->pid); -- while (maps_next (&mi, &lo, &hi, &off, path, sizeof (path))) -+ while (maps_next (&mi, &lo, &hi, &off)) - { - if (off) -- continue; -+ continue; - -- if (ui->ei.image) -- { -- munmap (ui->ei.image, ui->ei.size); -- ui->ei.image = NULL; -- ui->ei.size = 0; -- /* invalidate the cache: */ -- ui->di_cache.start_ip = ui->di_cache.end_ip = 0; -- } -+ invalidate_edi(&ui->edi); - -- if (elf_map_image (&ui->ei, path) < 0) -- /* ignore unmappable stuff like "/SYSV00001b58 (deleted)" */ -- continue; -+ if (elf_map_image (&ui->edi.ei, path) < 0) -+ /* ignore unmappable stuff like "/SYSV00001b58 (deleted)" */ -+ continue; - - Debug (16, "checking object %s\n", path); - -- di = _UPTi_find_unwind_table (ui, as, path, lo, off); -- if (di) -- { -- res = _Uia64_find_dyn_list (as, di, arg); -- if (res && count++ == 0) -- { -- Debug (12, "dyn_info_list_addr = 0x%lx\n", (long) res); -- *dil_addr = res; -- } -- } -+ if (tdep_find_unwind_table (&ui->edi, as, path, lo, off, 0) > 0) -+ { -+ res = _Uia64_find_dyn_list (as, &ui->edi.di_cache, arg); -+ if (res && count++ == 0) -+ { -+ Debug (12, "dyn_info_list_addr = 0x%lx\n", (long) res); -+ *dil_addr = res; -+ } -+ } - } - maps_close (&mi); - *countp = count; -@@ -82,7 +73,7 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, - - static inline int - get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, -- int *countp) -+ int *countp) - { - # warning Implement get_list_addr(), please. - *countp = 0; -@@ -93,7 +84,7 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg, - - int - _UPT_get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, -- void *arg) -+ void *arg) - { - int count, ret; - -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_get_proc_name.c b/frysk-imports/libunwind/src/ptrace/_UPT_get_proc_name.c -index 6ac85a0..79c1f38 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_get_proc_name.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_get_proc_name.c -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - int - _UPT_get_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, void *arg) - { - struct UPT_info *ui = arg; - -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_internal.h b/frysk-imports/libunwind/src/ptrace/_UPT_internal.h -index 0577097..5cef257 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_internal.h -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_internal.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,32 +26,34 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef _UPT_internal_h - #define _UPT_internal_h - -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#ifdef HAVE_SYS_TYPES_H -+#include -+#endif -+#ifdef HAVE_SYS_PTRACE_H -+#include -+#endif -+#ifdef HAVE_SYS_PROCFS_H -+#include -+#endif -+ - #include - #include - #include - #include - #include - --#include -- - #include "libunwind_i.h" - - struct UPT_info - { -- pid_t pid; /* the process-id of the child we're unwinding */ -- struct elf_image ei; -- unw_dyn_info_t di_cache; --#if UNW_TARGET_IA64 -- unw_dyn_info_t ktab; --#endif -+ pid_t pid; /* the process-id of the child we're unwinding */ -+ struct elf_dyn_info edi; - }; - --extern int _UPT_reg_offset[UNW_REG_LAST + 1]; -- --extern unw_dyn_info_t *_UPTi_find_unwind_table (struct UPT_info *ui, -- unw_addr_space_t as, -- char *path, -- unw_word_t segbase, -- unw_word_t mapoff); -+extern const int _UPT_reg_offset[UNW_REG_LAST + 1]; - - #endif /* _UPT_internal_h */ -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_put_unwind_info.c b/frysk-imports/libunwind/src/ptrace/_UPT_put_unwind_info.c -index 852dd86..d4b8463 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_put_unwind_info.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_put_unwind_info.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_reg_offset.c b/frysk-imports/libunwind/src/ptrace/_UPT_reg_offset.c -index f586fb7..68461a2 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_reg_offset.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_reg_offset.c -@@ -1,6 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2013 Linaro Limited - - This file is part of libunwind. - -@@ -25,271 +26,575 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "_UPT_internal.h" - -+#include -+ - #ifdef HAVE_ASM_PTRACE_OFFSETS_H - # include - #endif - --int _UPT_reg_offset[UNW_REG_LAST + 1] = -+const int _UPT_reg_offset[UNW_REG_LAST + 1] = - { - #ifdef HAVE_ASM_PTRACE_OFFSETS_H - # ifndef PT_AR_CSD --# define PT_AR_CSD -1 /* this was introduced with rev 2.1 of ia64 */ -+# define PT_AR_CSD -1 /* this was introduced with rev 2.1 of ia64 */ - # endif - -- [UNW_IA64_GR + 0] = -1, [UNW_IA64_GR + 1] = PT_R1, -- [UNW_IA64_GR + 2] = PT_R2, [UNW_IA64_GR + 3] = PT_R3, -- [UNW_IA64_GR + 4] = PT_R4, [UNW_IA64_GR + 5] = PT_R5, -- [UNW_IA64_GR + 6] = PT_R6, [UNW_IA64_GR + 7] = PT_R7, -- [UNW_IA64_GR + 8] = PT_R8, [UNW_IA64_GR + 9] = PT_R9, -- [UNW_IA64_GR + 10] = PT_R10, [UNW_IA64_GR + 11] = PT_R11, -- [UNW_IA64_GR + 12] = PT_R12, [UNW_IA64_GR + 13] = PT_R13, -- [UNW_IA64_GR + 14] = PT_R14, [UNW_IA64_GR + 15] = PT_R15, -- [UNW_IA64_GR + 16] = PT_R16, [UNW_IA64_GR + 17] = PT_R17, -- [UNW_IA64_GR + 18] = PT_R18, [UNW_IA64_GR + 19] = PT_R19, -- [UNW_IA64_GR + 20] = PT_R20, [UNW_IA64_GR + 21] = PT_R21, -- [UNW_IA64_GR + 22] = PT_R22, [UNW_IA64_GR + 23] = PT_R23, -- [UNW_IA64_GR + 24] = PT_R24, [UNW_IA64_GR + 25] = PT_R25, -- [UNW_IA64_GR + 26] = PT_R26, [UNW_IA64_GR + 27] = PT_R27, -- [UNW_IA64_GR + 28] = PT_R28, [UNW_IA64_GR + 29] = PT_R29, -- [UNW_IA64_GR + 30] = PT_R30, [UNW_IA64_GR + 31] = PT_R31, -+ [UNW_IA64_GR + 0] = -1, [UNW_IA64_GR + 1] = PT_R1, -+ [UNW_IA64_GR + 2] = PT_R2, [UNW_IA64_GR + 3] = PT_R3, -+ [UNW_IA64_GR + 4] = PT_R4, [UNW_IA64_GR + 5] = PT_R5, -+ [UNW_IA64_GR + 6] = PT_R6, [UNW_IA64_GR + 7] = PT_R7, -+ [UNW_IA64_GR + 8] = PT_R8, [UNW_IA64_GR + 9] = PT_R9, -+ [UNW_IA64_GR + 10] = PT_R10, [UNW_IA64_GR + 11] = PT_R11, -+ [UNW_IA64_GR + 12] = PT_R12, [UNW_IA64_GR + 13] = PT_R13, -+ [UNW_IA64_GR + 14] = PT_R14, [UNW_IA64_GR + 15] = PT_R15, -+ [UNW_IA64_GR + 16] = PT_R16, [UNW_IA64_GR + 17] = PT_R17, -+ [UNW_IA64_GR + 18] = PT_R18, [UNW_IA64_GR + 19] = PT_R19, -+ [UNW_IA64_GR + 20] = PT_R20, [UNW_IA64_GR + 21] = PT_R21, -+ [UNW_IA64_GR + 22] = PT_R22, [UNW_IA64_GR + 23] = PT_R23, -+ [UNW_IA64_GR + 24] = PT_R24, [UNW_IA64_GR + 25] = PT_R25, -+ [UNW_IA64_GR + 26] = PT_R26, [UNW_IA64_GR + 27] = PT_R27, -+ [UNW_IA64_GR + 28] = PT_R28, [UNW_IA64_GR + 29] = PT_R29, -+ [UNW_IA64_GR + 30] = PT_R30, [UNW_IA64_GR + 31] = PT_R31, - -- [UNW_IA64_NAT+ 0] = -1, [UNW_IA64_NAT+ 1] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 2] = PT_NAT_BITS, [UNW_IA64_NAT+ 3] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 4] = PT_NAT_BITS, [UNW_IA64_NAT+ 5] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 6] = PT_NAT_BITS, [UNW_IA64_NAT+ 7] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 8] = PT_NAT_BITS, [UNW_IA64_NAT+ 9] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 10] = PT_NAT_BITS, [UNW_IA64_NAT+ 11] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 12] = PT_NAT_BITS, [UNW_IA64_NAT+ 13] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 14] = PT_NAT_BITS, [UNW_IA64_NAT+ 15] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 16] = PT_NAT_BITS, [UNW_IA64_NAT+ 17] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 18] = PT_NAT_BITS, [UNW_IA64_NAT+ 19] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 20] = PT_NAT_BITS, [UNW_IA64_NAT+ 21] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 22] = PT_NAT_BITS, [UNW_IA64_NAT+ 23] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 24] = PT_NAT_BITS, [UNW_IA64_NAT+ 25] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 26] = PT_NAT_BITS, [UNW_IA64_NAT+ 27] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 28] = PT_NAT_BITS, [UNW_IA64_NAT+ 29] = PT_NAT_BITS, -- [UNW_IA64_NAT+ 30] = PT_NAT_BITS, [UNW_IA64_NAT+ 31] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 0] = -1, [UNW_IA64_NAT+ 1] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 2] = PT_NAT_BITS, [UNW_IA64_NAT+ 3] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 4] = PT_NAT_BITS, [UNW_IA64_NAT+ 5] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 6] = PT_NAT_BITS, [UNW_IA64_NAT+ 7] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 8] = PT_NAT_BITS, [UNW_IA64_NAT+ 9] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 10] = PT_NAT_BITS, [UNW_IA64_NAT+ 11] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 12] = PT_NAT_BITS, [UNW_IA64_NAT+ 13] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 14] = PT_NAT_BITS, [UNW_IA64_NAT+ 15] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 16] = PT_NAT_BITS, [UNW_IA64_NAT+ 17] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 18] = PT_NAT_BITS, [UNW_IA64_NAT+ 19] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 20] = PT_NAT_BITS, [UNW_IA64_NAT+ 21] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 22] = PT_NAT_BITS, [UNW_IA64_NAT+ 23] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 24] = PT_NAT_BITS, [UNW_IA64_NAT+ 25] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 26] = PT_NAT_BITS, [UNW_IA64_NAT+ 27] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 28] = PT_NAT_BITS, [UNW_IA64_NAT+ 29] = PT_NAT_BITS, -+ [UNW_IA64_NAT+ 30] = PT_NAT_BITS, [UNW_IA64_NAT+ 31] = PT_NAT_BITS, - -- [UNW_IA64_FR + 0] = -1, [UNW_IA64_FR + 1] = -1, -- [UNW_IA64_FR + 2] = PT_F2, [UNW_IA64_FR + 3] = PT_F3, -- [UNW_IA64_FR + 4] = PT_F4, [UNW_IA64_FR + 5] = PT_F5, -- [UNW_IA64_FR + 6] = PT_F6, [UNW_IA64_FR + 7] = PT_F7, -- [UNW_IA64_FR + 8] = PT_F8, [UNW_IA64_FR + 9] = PT_F9, -- [UNW_IA64_FR + 10] = PT_F10, [UNW_IA64_FR + 11] = PT_F11, -- [UNW_IA64_FR + 12] = PT_F12, [UNW_IA64_FR + 13] = PT_F13, -- [UNW_IA64_FR + 14] = PT_F14, [UNW_IA64_FR + 15] = PT_F15, -- [UNW_IA64_FR + 16] = PT_F16, [UNW_IA64_FR + 17] = PT_F17, -- [UNW_IA64_FR + 18] = PT_F18, [UNW_IA64_FR + 19] = PT_F19, -- [UNW_IA64_FR + 20] = PT_F20, [UNW_IA64_FR + 21] = PT_F21, -- [UNW_IA64_FR + 22] = PT_F22, [UNW_IA64_FR + 23] = PT_F23, -- [UNW_IA64_FR + 24] = PT_F24, [UNW_IA64_FR + 25] = PT_F25, -- [UNW_IA64_FR + 26] = PT_F26, [UNW_IA64_FR + 27] = PT_F27, -- [UNW_IA64_FR + 28] = PT_F28, [UNW_IA64_FR + 29] = PT_F29, -- [UNW_IA64_FR + 30] = PT_F30, [UNW_IA64_FR + 31] = PT_F31, -- [UNW_IA64_FR + 32] = PT_F32, [UNW_IA64_FR + 33] = PT_F33, -- [UNW_IA64_FR + 34] = PT_F34, [UNW_IA64_FR + 35] = PT_F35, -- [UNW_IA64_FR + 36] = PT_F36, [UNW_IA64_FR + 37] = PT_F37, -- [UNW_IA64_FR + 38] = PT_F38, [UNW_IA64_FR + 39] = PT_F39, -- [UNW_IA64_FR + 40] = PT_F40, [UNW_IA64_FR + 41] = PT_F41, -- [UNW_IA64_FR + 42] = PT_F42, [UNW_IA64_FR + 43] = PT_F43, -- [UNW_IA64_FR + 44] = PT_F44, [UNW_IA64_FR + 45] = PT_F45, -- [UNW_IA64_FR + 46] = PT_F46, [UNW_IA64_FR + 47] = PT_F47, -- [UNW_IA64_FR + 48] = PT_F48, [UNW_IA64_FR + 49] = PT_F49, -- [UNW_IA64_FR + 50] = PT_F50, [UNW_IA64_FR + 51] = PT_F51, -- [UNW_IA64_FR + 52] = PT_F52, [UNW_IA64_FR + 53] = PT_F53, -- [UNW_IA64_FR + 54] = PT_F54, [UNW_IA64_FR + 55] = PT_F55, -- [UNW_IA64_FR + 56] = PT_F56, [UNW_IA64_FR + 57] = PT_F57, -- [UNW_IA64_FR + 58] = PT_F58, [UNW_IA64_FR + 59] = PT_F59, -- [UNW_IA64_FR + 60] = PT_F60, [UNW_IA64_FR + 61] = PT_F61, -- [UNW_IA64_FR + 62] = PT_F62, [UNW_IA64_FR + 63] = PT_F63, -- [UNW_IA64_FR + 64] = PT_F64, [UNW_IA64_FR + 65] = PT_F65, -- [UNW_IA64_FR + 66] = PT_F66, [UNW_IA64_FR + 67] = PT_F67, -- [UNW_IA64_FR + 68] = PT_F68, [UNW_IA64_FR + 69] = PT_F69, -- [UNW_IA64_FR + 70] = PT_F70, [UNW_IA64_FR + 71] = PT_F71, -- [UNW_IA64_FR + 72] = PT_F72, [UNW_IA64_FR + 73] = PT_F73, -- [UNW_IA64_FR + 74] = PT_F74, [UNW_IA64_FR + 75] = PT_F75, -- [UNW_IA64_FR + 76] = PT_F76, [UNW_IA64_FR + 77] = PT_F77, -- [UNW_IA64_FR + 78] = PT_F78, [UNW_IA64_FR + 79] = PT_F79, -- [UNW_IA64_FR + 80] = PT_F80, [UNW_IA64_FR + 81] = PT_F81, -- [UNW_IA64_FR + 82] = PT_F82, [UNW_IA64_FR + 83] = PT_F83, -- [UNW_IA64_FR + 84] = PT_F84, [UNW_IA64_FR + 85] = PT_F85, -- [UNW_IA64_FR + 86] = PT_F86, [UNW_IA64_FR + 87] = PT_F87, -- [UNW_IA64_FR + 88] = PT_F88, [UNW_IA64_FR + 89] = PT_F89, -- [UNW_IA64_FR + 90] = PT_F90, [UNW_IA64_FR + 91] = PT_F91, -- [UNW_IA64_FR + 92] = PT_F92, [UNW_IA64_FR + 93] = PT_F93, -- [UNW_IA64_FR + 94] = PT_F94, [UNW_IA64_FR + 95] = PT_F95, -- [UNW_IA64_FR + 96] = PT_F96, [UNW_IA64_FR + 97] = PT_F97, -- [UNW_IA64_FR + 98] = PT_F98, [UNW_IA64_FR + 99] = PT_F99, -- [UNW_IA64_FR +100] = PT_F100, [UNW_IA64_FR +101] = PT_F101, -- [UNW_IA64_FR +102] = PT_F102, [UNW_IA64_FR +103] = PT_F103, -- [UNW_IA64_FR +104] = PT_F104, [UNW_IA64_FR +105] = PT_F105, -- [UNW_IA64_FR +106] = PT_F106, [UNW_IA64_FR +107] = PT_F107, -- [UNW_IA64_FR +108] = PT_F108, [UNW_IA64_FR +109] = PT_F109, -- [UNW_IA64_FR +110] = PT_F110, [UNW_IA64_FR +111] = PT_F111, -- [UNW_IA64_FR +112] = PT_F112, [UNW_IA64_FR +113] = PT_F113, -- [UNW_IA64_FR +114] = PT_F114, [UNW_IA64_FR +115] = PT_F115, -- [UNW_IA64_FR +116] = PT_F116, [UNW_IA64_FR +117] = PT_F117, -- [UNW_IA64_FR +118] = PT_F118, [UNW_IA64_FR +119] = PT_F119, -- [UNW_IA64_FR +120] = PT_F120, [UNW_IA64_FR +121] = PT_F121, -- [UNW_IA64_FR +122] = PT_F122, [UNW_IA64_FR +123] = PT_F123, -- [UNW_IA64_FR +124] = PT_F124, [UNW_IA64_FR +125] = PT_F125, -- [UNW_IA64_FR +126] = PT_F126, [UNW_IA64_FR +127] = PT_F127, -+ [UNW_IA64_FR + 0] = -1, [UNW_IA64_FR + 1] = -1, -+ [UNW_IA64_FR + 2] = PT_F2, [UNW_IA64_FR + 3] = PT_F3, -+ [UNW_IA64_FR + 4] = PT_F4, [UNW_IA64_FR + 5] = PT_F5, -+ [UNW_IA64_FR + 6] = PT_F6, [UNW_IA64_FR + 7] = PT_F7, -+ [UNW_IA64_FR + 8] = PT_F8, [UNW_IA64_FR + 9] = PT_F9, -+ [UNW_IA64_FR + 10] = PT_F10, [UNW_IA64_FR + 11] = PT_F11, -+ [UNW_IA64_FR + 12] = PT_F12, [UNW_IA64_FR + 13] = PT_F13, -+ [UNW_IA64_FR + 14] = PT_F14, [UNW_IA64_FR + 15] = PT_F15, -+ [UNW_IA64_FR + 16] = PT_F16, [UNW_IA64_FR + 17] = PT_F17, -+ [UNW_IA64_FR + 18] = PT_F18, [UNW_IA64_FR + 19] = PT_F19, -+ [UNW_IA64_FR + 20] = PT_F20, [UNW_IA64_FR + 21] = PT_F21, -+ [UNW_IA64_FR + 22] = PT_F22, [UNW_IA64_FR + 23] = PT_F23, -+ [UNW_IA64_FR + 24] = PT_F24, [UNW_IA64_FR + 25] = PT_F25, -+ [UNW_IA64_FR + 26] = PT_F26, [UNW_IA64_FR + 27] = PT_F27, -+ [UNW_IA64_FR + 28] = PT_F28, [UNW_IA64_FR + 29] = PT_F29, -+ [UNW_IA64_FR + 30] = PT_F30, [UNW_IA64_FR + 31] = PT_F31, -+ [UNW_IA64_FR + 32] = PT_F32, [UNW_IA64_FR + 33] = PT_F33, -+ [UNW_IA64_FR + 34] = PT_F34, [UNW_IA64_FR + 35] = PT_F35, -+ [UNW_IA64_FR + 36] = PT_F36, [UNW_IA64_FR + 37] = PT_F37, -+ [UNW_IA64_FR + 38] = PT_F38, [UNW_IA64_FR + 39] = PT_F39, -+ [UNW_IA64_FR + 40] = PT_F40, [UNW_IA64_FR + 41] = PT_F41, -+ [UNW_IA64_FR + 42] = PT_F42, [UNW_IA64_FR + 43] = PT_F43, -+ [UNW_IA64_FR + 44] = PT_F44, [UNW_IA64_FR + 45] = PT_F45, -+ [UNW_IA64_FR + 46] = PT_F46, [UNW_IA64_FR + 47] = PT_F47, -+ [UNW_IA64_FR + 48] = PT_F48, [UNW_IA64_FR + 49] = PT_F49, -+ [UNW_IA64_FR + 50] = PT_F50, [UNW_IA64_FR + 51] = PT_F51, -+ [UNW_IA64_FR + 52] = PT_F52, [UNW_IA64_FR + 53] = PT_F53, -+ [UNW_IA64_FR + 54] = PT_F54, [UNW_IA64_FR + 55] = PT_F55, -+ [UNW_IA64_FR + 56] = PT_F56, [UNW_IA64_FR + 57] = PT_F57, -+ [UNW_IA64_FR + 58] = PT_F58, [UNW_IA64_FR + 59] = PT_F59, -+ [UNW_IA64_FR + 60] = PT_F60, [UNW_IA64_FR + 61] = PT_F61, -+ [UNW_IA64_FR + 62] = PT_F62, [UNW_IA64_FR + 63] = PT_F63, -+ [UNW_IA64_FR + 64] = PT_F64, [UNW_IA64_FR + 65] = PT_F65, -+ [UNW_IA64_FR + 66] = PT_F66, [UNW_IA64_FR + 67] = PT_F67, -+ [UNW_IA64_FR + 68] = PT_F68, [UNW_IA64_FR + 69] = PT_F69, -+ [UNW_IA64_FR + 70] = PT_F70, [UNW_IA64_FR + 71] = PT_F71, -+ [UNW_IA64_FR + 72] = PT_F72, [UNW_IA64_FR + 73] = PT_F73, -+ [UNW_IA64_FR + 74] = PT_F74, [UNW_IA64_FR + 75] = PT_F75, -+ [UNW_IA64_FR + 76] = PT_F76, [UNW_IA64_FR + 77] = PT_F77, -+ [UNW_IA64_FR + 78] = PT_F78, [UNW_IA64_FR + 79] = PT_F79, -+ [UNW_IA64_FR + 80] = PT_F80, [UNW_IA64_FR + 81] = PT_F81, -+ [UNW_IA64_FR + 82] = PT_F82, [UNW_IA64_FR + 83] = PT_F83, -+ [UNW_IA64_FR + 84] = PT_F84, [UNW_IA64_FR + 85] = PT_F85, -+ [UNW_IA64_FR + 86] = PT_F86, [UNW_IA64_FR + 87] = PT_F87, -+ [UNW_IA64_FR + 88] = PT_F88, [UNW_IA64_FR + 89] = PT_F89, -+ [UNW_IA64_FR + 90] = PT_F90, [UNW_IA64_FR + 91] = PT_F91, -+ [UNW_IA64_FR + 92] = PT_F92, [UNW_IA64_FR + 93] = PT_F93, -+ [UNW_IA64_FR + 94] = PT_F94, [UNW_IA64_FR + 95] = PT_F95, -+ [UNW_IA64_FR + 96] = PT_F96, [UNW_IA64_FR + 97] = PT_F97, -+ [UNW_IA64_FR + 98] = PT_F98, [UNW_IA64_FR + 99] = PT_F99, -+ [UNW_IA64_FR +100] = PT_F100, [UNW_IA64_FR +101] = PT_F101, -+ [UNW_IA64_FR +102] = PT_F102, [UNW_IA64_FR +103] = PT_F103, -+ [UNW_IA64_FR +104] = PT_F104, [UNW_IA64_FR +105] = PT_F105, -+ [UNW_IA64_FR +106] = PT_F106, [UNW_IA64_FR +107] = PT_F107, -+ [UNW_IA64_FR +108] = PT_F108, [UNW_IA64_FR +109] = PT_F109, -+ [UNW_IA64_FR +110] = PT_F110, [UNW_IA64_FR +111] = PT_F111, -+ [UNW_IA64_FR +112] = PT_F112, [UNW_IA64_FR +113] = PT_F113, -+ [UNW_IA64_FR +114] = PT_F114, [UNW_IA64_FR +115] = PT_F115, -+ [UNW_IA64_FR +116] = PT_F116, [UNW_IA64_FR +117] = PT_F117, -+ [UNW_IA64_FR +118] = PT_F118, [UNW_IA64_FR +119] = PT_F119, -+ [UNW_IA64_FR +120] = PT_F120, [UNW_IA64_FR +121] = PT_F121, -+ [UNW_IA64_FR +122] = PT_F122, [UNW_IA64_FR +123] = PT_F123, -+ [UNW_IA64_FR +124] = PT_F124, [UNW_IA64_FR +125] = PT_F125, -+ [UNW_IA64_FR +126] = PT_F126, [UNW_IA64_FR +127] = PT_F127, - -- [UNW_IA64_AR + 0] = -1, [UNW_IA64_AR + 1] = -1, -- [UNW_IA64_AR + 2] = -1, [UNW_IA64_AR + 3] = -1, -- [UNW_IA64_AR + 4] = -1, [UNW_IA64_AR + 5] = -1, -- [UNW_IA64_AR + 6] = -1, [UNW_IA64_AR + 7] = -1, -- [UNW_IA64_AR + 8] = -1, [UNW_IA64_AR + 9] = -1, -- [UNW_IA64_AR + 10] = -1, [UNW_IA64_AR + 11] = -1, -- [UNW_IA64_AR + 12] = -1, [UNW_IA64_AR + 13] = -1, -- [UNW_IA64_AR + 14] = -1, [UNW_IA64_AR + 15] = -1, -- [UNW_IA64_AR + 16] = PT_AR_RSC, [UNW_IA64_AR + 17] = PT_AR_BSP, -- [UNW_IA64_AR + 18] = PT_AR_BSPSTORE,[UNW_IA64_AR + 19] = PT_AR_RNAT, -- [UNW_IA64_AR + 20] = -1, [UNW_IA64_AR + 21] = -1, -- [UNW_IA64_AR + 22] = -1, [UNW_IA64_AR + 23] = -1, -- [UNW_IA64_AR + 24] = -1, [UNW_IA64_AR + 25] = PT_AR_CSD, -- [UNW_IA64_AR + 26] = -1, [UNW_IA64_AR + 27] = -1, -- [UNW_IA64_AR + 28] = -1, [UNW_IA64_AR + 29] = -1, -- [UNW_IA64_AR + 30] = -1, [UNW_IA64_AR + 31] = -1, -- [UNW_IA64_AR + 32] = PT_AR_CCV, [UNW_IA64_AR + 33] = -1, -- [UNW_IA64_AR + 34] = -1, [UNW_IA64_AR + 35] = -1, -- [UNW_IA64_AR + 36] = PT_AR_UNAT, [UNW_IA64_AR + 37] = -1, -- [UNW_IA64_AR + 38] = -1, [UNW_IA64_AR + 39] = -1, -- [UNW_IA64_AR + 40] = PT_AR_FPSR, [UNW_IA64_AR + 41] = -1, -- [UNW_IA64_AR + 42] = -1, [UNW_IA64_AR + 43] = -1, -- [UNW_IA64_AR + 44] = -1, [UNW_IA64_AR + 45] = -1, -- [UNW_IA64_AR + 46] = -1, [UNW_IA64_AR + 47] = -1, -- [UNW_IA64_AR + 48] = -1, [UNW_IA64_AR + 49] = -1, -- [UNW_IA64_AR + 50] = -1, [UNW_IA64_AR + 51] = -1, -- [UNW_IA64_AR + 52] = -1, [UNW_IA64_AR + 53] = -1, -- [UNW_IA64_AR + 54] = -1, [UNW_IA64_AR + 55] = -1, -- [UNW_IA64_AR + 56] = -1, [UNW_IA64_AR + 57] = -1, -- [UNW_IA64_AR + 58] = -1, [UNW_IA64_AR + 59] = -1, -- [UNW_IA64_AR + 60] = -1, [UNW_IA64_AR + 61] = -1, -- [UNW_IA64_AR + 62] = -1, [UNW_IA64_AR + 63] = -1, -- [UNW_IA64_AR + 64] = PT_AR_PFS, [UNW_IA64_AR + 65] = PT_AR_LC, -- [UNW_IA64_AR + 66] = PT_AR_EC, [UNW_IA64_AR + 67] = -1, -- [UNW_IA64_AR + 68] = -1, [UNW_IA64_AR + 69] = -1, -- [UNW_IA64_AR + 70] = -1, [UNW_IA64_AR + 71] = -1, -- [UNW_IA64_AR + 72] = -1, [UNW_IA64_AR + 73] = -1, -- [UNW_IA64_AR + 74] = -1, [UNW_IA64_AR + 75] = -1, -- [UNW_IA64_AR + 76] = -1, [UNW_IA64_AR + 77] = -1, -- [UNW_IA64_AR + 78] = -1, [UNW_IA64_AR + 79] = -1, -- [UNW_IA64_AR + 80] = -1, [UNW_IA64_AR + 81] = -1, -- [UNW_IA64_AR + 82] = -1, [UNW_IA64_AR + 83] = -1, -- [UNW_IA64_AR + 84] = -1, [UNW_IA64_AR + 85] = -1, -- [UNW_IA64_AR + 86] = -1, [UNW_IA64_AR + 87] = -1, -- [UNW_IA64_AR + 88] = -1, [UNW_IA64_AR + 89] = -1, -- [UNW_IA64_AR + 90] = -1, [UNW_IA64_AR + 91] = -1, -- [UNW_IA64_AR + 92] = -1, [UNW_IA64_AR + 93] = -1, -- [UNW_IA64_AR + 94] = -1, [UNW_IA64_AR + 95] = -1, -- [UNW_IA64_AR + 96] = -1, [UNW_IA64_AR + 97] = -1, -- [UNW_IA64_AR + 98] = -1, [UNW_IA64_AR + 99] = -1, -- [UNW_IA64_AR +100] = -1, [UNW_IA64_AR +101] = -1, -- [UNW_IA64_AR +102] = -1, [UNW_IA64_AR +103] = -1, -- [UNW_IA64_AR +104] = -1, [UNW_IA64_AR +105] = -1, -- [UNW_IA64_AR +106] = -1, [UNW_IA64_AR +107] = -1, -- [UNW_IA64_AR +108] = -1, [UNW_IA64_AR +109] = -1, -- [UNW_IA64_AR +110] = -1, [UNW_IA64_AR +111] = -1, -- [UNW_IA64_AR +112] = -1, [UNW_IA64_AR +113] = -1, -- [UNW_IA64_AR +114] = -1, [UNW_IA64_AR +115] = -1, -- [UNW_IA64_AR +116] = -1, [UNW_IA64_AR +117] = -1, -- [UNW_IA64_AR +118] = -1, [UNW_IA64_AR +119] = -1, -- [UNW_IA64_AR +120] = -1, [UNW_IA64_AR +121] = -1, -- [UNW_IA64_AR +122] = -1, [UNW_IA64_AR +123] = -1, -- [UNW_IA64_AR +124] = -1, [UNW_IA64_AR +125] = -1, -- [UNW_IA64_AR +126] = -1, [UNW_IA64_AR +127] = -1, -+ [UNW_IA64_AR + 0] = -1, [UNW_IA64_AR + 1] = -1, -+ [UNW_IA64_AR + 2] = -1, [UNW_IA64_AR + 3] = -1, -+ [UNW_IA64_AR + 4] = -1, [UNW_IA64_AR + 5] = -1, -+ [UNW_IA64_AR + 6] = -1, [UNW_IA64_AR + 7] = -1, -+ [UNW_IA64_AR + 8] = -1, [UNW_IA64_AR + 9] = -1, -+ [UNW_IA64_AR + 10] = -1, [UNW_IA64_AR + 11] = -1, -+ [UNW_IA64_AR + 12] = -1, [UNW_IA64_AR + 13] = -1, -+ [UNW_IA64_AR + 14] = -1, [UNW_IA64_AR + 15] = -1, -+ [UNW_IA64_AR + 16] = PT_AR_RSC, [UNW_IA64_AR + 17] = PT_AR_BSP, -+ [UNW_IA64_AR + 18] = PT_AR_BSPSTORE,[UNW_IA64_AR + 19] = PT_AR_RNAT, -+ [UNW_IA64_AR + 20] = -1, [UNW_IA64_AR + 21] = -1, -+ [UNW_IA64_AR + 22] = -1, [UNW_IA64_AR + 23] = -1, -+ [UNW_IA64_AR + 24] = -1, [UNW_IA64_AR + 25] = PT_AR_CSD, -+ [UNW_IA64_AR + 26] = -1, [UNW_IA64_AR + 27] = -1, -+ [UNW_IA64_AR + 28] = -1, [UNW_IA64_AR + 29] = -1, -+ [UNW_IA64_AR + 30] = -1, [UNW_IA64_AR + 31] = -1, -+ [UNW_IA64_AR + 32] = PT_AR_CCV, [UNW_IA64_AR + 33] = -1, -+ [UNW_IA64_AR + 34] = -1, [UNW_IA64_AR + 35] = -1, -+ [UNW_IA64_AR + 36] = PT_AR_UNAT, [UNW_IA64_AR + 37] = -1, -+ [UNW_IA64_AR + 38] = -1, [UNW_IA64_AR + 39] = -1, -+ [UNW_IA64_AR + 40] = PT_AR_FPSR, [UNW_IA64_AR + 41] = -1, -+ [UNW_IA64_AR + 42] = -1, [UNW_IA64_AR + 43] = -1, -+ [UNW_IA64_AR + 44] = -1, [UNW_IA64_AR + 45] = -1, -+ [UNW_IA64_AR + 46] = -1, [UNW_IA64_AR + 47] = -1, -+ [UNW_IA64_AR + 48] = -1, [UNW_IA64_AR + 49] = -1, -+ [UNW_IA64_AR + 50] = -1, [UNW_IA64_AR + 51] = -1, -+ [UNW_IA64_AR + 52] = -1, [UNW_IA64_AR + 53] = -1, -+ [UNW_IA64_AR + 54] = -1, [UNW_IA64_AR + 55] = -1, -+ [UNW_IA64_AR + 56] = -1, [UNW_IA64_AR + 57] = -1, -+ [UNW_IA64_AR + 58] = -1, [UNW_IA64_AR + 59] = -1, -+ [UNW_IA64_AR + 60] = -1, [UNW_IA64_AR + 61] = -1, -+ [UNW_IA64_AR + 62] = -1, [UNW_IA64_AR + 63] = -1, -+ [UNW_IA64_AR + 64] = PT_AR_PFS, [UNW_IA64_AR + 65] = PT_AR_LC, -+ [UNW_IA64_AR + 66] = PT_AR_EC, [UNW_IA64_AR + 67] = -1, -+ [UNW_IA64_AR + 68] = -1, [UNW_IA64_AR + 69] = -1, -+ [UNW_IA64_AR + 70] = -1, [UNW_IA64_AR + 71] = -1, -+ [UNW_IA64_AR + 72] = -1, [UNW_IA64_AR + 73] = -1, -+ [UNW_IA64_AR + 74] = -1, [UNW_IA64_AR + 75] = -1, -+ [UNW_IA64_AR + 76] = -1, [UNW_IA64_AR + 77] = -1, -+ [UNW_IA64_AR + 78] = -1, [UNW_IA64_AR + 79] = -1, -+ [UNW_IA64_AR + 80] = -1, [UNW_IA64_AR + 81] = -1, -+ [UNW_IA64_AR + 82] = -1, [UNW_IA64_AR + 83] = -1, -+ [UNW_IA64_AR + 84] = -1, [UNW_IA64_AR + 85] = -1, -+ [UNW_IA64_AR + 86] = -1, [UNW_IA64_AR + 87] = -1, -+ [UNW_IA64_AR + 88] = -1, [UNW_IA64_AR + 89] = -1, -+ [UNW_IA64_AR + 90] = -1, [UNW_IA64_AR + 91] = -1, -+ [UNW_IA64_AR + 92] = -1, [UNW_IA64_AR + 93] = -1, -+ [UNW_IA64_AR + 94] = -1, [UNW_IA64_AR + 95] = -1, -+ [UNW_IA64_AR + 96] = -1, [UNW_IA64_AR + 97] = -1, -+ [UNW_IA64_AR + 98] = -1, [UNW_IA64_AR + 99] = -1, -+ [UNW_IA64_AR +100] = -1, [UNW_IA64_AR +101] = -1, -+ [UNW_IA64_AR +102] = -1, [UNW_IA64_AR +103] = -1, -+ [UNW_IA64_AR +104] = -1, [UNW_IA64_AR +105] = -1, -+ [UNW_IA64_AR +106] = -1, [UNW_IA64_AR +107] = -1, -+ [UNW_IA64_AR +108] = -1, [UNW_IA64_AR +109] = -1, -+ [UNW_IA64_AR +110] = -1, [UNW_IA64_AR +111] = -1, -+ [UNW_IA64_AR +112] = -1, [UNW_IA64_AR +113] = -1, -+ [UNW_IA64_AR +114] = -1, [UNW_IA64_AR +115] = -1, -+ [UNW_IA64_AR +116] = -1, [UNW_IA64_AR +117] = -1, -+ [UNW_IA64_AR +118] = -1, [UNW_IA64_AR +119] = -1, -+ [UNW_IA64_AR +120] = -1, [UNW_IA64_AR +121] = -1, -+ [UNW_IA64_AR +122] = -1, [UNW_IA64_AR +123] = -1, -+ [UNW_IA64_AR +124] = -1, [UNW_IA64_AR +125] = -1, -+ [UNW_IA64_AR +126] = -1, [UNW_IA64_AR +127] = -1, - -- [UNW_IA64_BR + 0] = PT_B0, [UNW_IA64_BR + 1] = PT_B1, -- [UNW_IA64_BR + 2] = PT_B2, [UNW_IA64_BR + 3] = PT_B3, -- [UNW_IA64_BR + 4] = PT_B4, [UNW_IA64_BR + 5] = PT_B5, -- [UNW_IA64_BR + 6] = PT_B6, [UNW_IA64_BR + 7] = PT_B7, -+ [UNW_IA64_BR + 0] = PT_B0, [UNW_IA64_BR + 1] = PT_B1, -+ [UNW_IA64_BR + 2] = PT_B2, [UNW_IA64_BR + 3] = PT_B3, -+ [UNW_IA64_BR + 4] = PT_B4, [UNW_IA64_BR + 5] = PT_B5, -+ [UNW_IA64_BR + 6] = PT_B6, [UNW_IA64_BR + 7] = PT_B7, - -- [UNW_IA64_PR] = PT_PR, -- [UNW_IA64_CFM] = PT_CFM, -- [UNW_IA64_IP] = PT_CR_IIP -+ [UNW_IA64_PR] = PT_PR, -+ [UNW_IA64_CFM] = PT_CFM, -+ [UNW_IA64_IP] = PT_CR_IIP - #elif defined(HAVE_TTRACE) - # warning No support for ttrace() yet. - #elif defined(UNW_TARGET_HPPA) -- [UNW_HPPA_GR + 0] = 0x000, [UNW_HPPA_GR + 1] = 0x004, -- [UNW_HPPA_GR + 2] = 0x008, [UNW_HPPA_GR + 3] = 0x00c, -- [UNW_HPPA_GR + 4] = 0x010, [UNW_HPPA_GR + 5] = 0x014, -- [UNW_HPPA_GR + 6] = 0x018, [UNW_HPPA_GR + 7] = 0x01c, -- [UNW_HPPA_GR + 8] = 0x020, [UNW_HPPA_GR + 9] = 0x024, -- [UNW_HPPA_GR + 10] = 0x028, [UNW_HPPA_GR + 11] = 0x02c, -- [UNW_HPPA_GR + 12] = 0x030, [UNW_HPPA_GR + 13] = 0x034, -- [UNW_HPPA_GR + 14] = 0x038, [UNW_HPPA_GR + 15] = 0x03c, -- [UNW_HPPA_GR + 16] = 0x040, [UNW_HPPA_GR + 17] = 0x044, -- [UNW_HPPA_GR + 18] = 0x048, [UNW_HPPA_GR + 19] = 0x04c, -- [UNW_HPPA_GR + 20] = 0x050, [UNW_HPPA_GR + 21] = 0x054, -- [UNW_HPPA_GR + 22] = 0x058, [UNW_HPPA_GR + 23] = 0x05c, -- [UNW_HPPA_GR + 24] = 0x060, [UNW_HPPA_GR + 25] = 0x064, -- [UNW_HPPA_GR + 26] = 0x068, [UNW_HPPA_GR + 27] = 0x06c, -- [UNW_HPPA_GR + 28] = 0x070, [UNW_HPPA_GR + 29] = 0x074, -- [UNW_HPPA_GR + 30] = 0x078, [UNW_HPPA_GR + 31] = 0x07c, -+ [UNW_HPPA_GR + 0] = 0x000, [UNW_HPPA_GR + 1] = 0x004, -+ [UNW_HPPA_GR + 2] = 0x008, [UNW_HPPA_GR + 3] = 0x00c, -+ [UNW_HPPA_GR + 4] = 0x010, [UNW_HPPA_GR + 5] = 0x014, -+ [UNW_HPPA_GR + 6] = 0x018, [UNW_HPPA_GR + 7] = 0x01c, -+ [UNW_HPPA_GR + 8] = 0x020, [UNW_HPPA_GR + 9] = 0x024, -+ [UNW_HPPA_GR + 10] = 0x028, [UNW_HPPA_GR + 11] = 0x02c, -+ [UNW_HPPA_GR + 12] = 0x030, [UNW_HPPA_GR + 13] = 0x034, -+ [UNW_HPPA_GR + 14] = 0x038, [UNW_HPPA_GR + 15] = 0x03c, -+ [UNW_HPPA_GR + 16] = 0x040, [UNW_HPPA_GR + 17] = 0x044, -+ [UNW_HPPA_GR + 18] = 0x048, [UNW_HPPA_GR + 19] = 0x04c, -+ [UNW_HPPA_GR + 20] = 0x050, [UNW_HPPA_GR + 21] = 0x054, -+ [UNW_HPPA_GR + 22] = 0x058, [UNW_HPPA_GR + 23] = 0x05c, -+ [UNW_HPPA_GR + 24] = 0x060, [UNW_HPPA_GR + 25] = 0x064, -+ [UNW_HPPA_GR + 26] = 0x068, [UNW_HPPA_GR + 27] = 0x06c, -+ [UNW_HPPA_GR + 28] = 0x070, [UNW_HPPA_GR + 29] = 0x074, -+ [UNW_HPPA_GR + 30] = 0x078, [UNW_HPPA_GR + 31] = 0x07c, - -- [UNW_HPPA_FR + 0] = 0x080, [UNW_HPPA_FR + 1] = 0x088, -- [UNW_HPPA_FR + 2] = 0x090, [UNW_HPPA_FR + 3] = 0x098, -- [UNW_HPPA_FR + 4] = 0x0a0, [UNW_HPPA_FR + 5] = 0x0a8, -- [UNW_HPPA_FR + 6] = 0x0b0, [UNW_HPPA_FR + 7] = 0x0b8, -- [UNW_HPPA_FR + 8] = 0x0c0, [UNW_HPPA_FR + 9] = 0x0c8, -- [UNW_HPPA_FR + 10] = 0x0d0, [UNW_HPPA_FR + 11] = 0x0d8, -- [UNW_HPPA_FR + 12] = 0x0e0, [UNW_HPPA_FR + 13] = 0x0e8, -- [UNW_HPPA_FR + 14] = 0x0f0, [UNW_HPPA_FR + 15] = 0x0f8, -- [UNW_HPPA_FR + 16] = 0x100, [UNW_HPPA_FR + 17] = 0x108, -- [UNW_HPPA_FR + 18] = 0x110, [UNW_HPPA_FR + 19] = 0x118, -- [UNW_HPPA_FR + 20] = 0x120, [UNW_HPPA_FR + 21] = 0x128, -- [UNW_HPPA_FR + 22] = 0x130, [UNW_HPPA_FR + 23] = 0x138, -- [UNW_HPPA_FR + 24] = 0x140, [UNW_HPPA_FR + 25] = 0x148, -- [UNW_HPPA_FR + 26] = 0x150, [UNW_HPPA_FR + 27] = 0x158, -- [UNW_HPPA_FR + 28] = 0x160, [UNW_HPPA_FR + 29] = 0x168, -- [UNW_HPPA_FR + 30] = 0x170, [UNW_HPPA_FR + 31] = 0x178, -+ [UNW_HPPA_FR + 0] = 0x080, [UNW_HPPA_FR + 1] = 0x088, -+ [UNW_HPPA_FR + 2] = 0x090, [UNW_HPPA_FR + 3] = 0x098, -+ [UNW_HPPA_FR + 4] = 0x0a0, [UNW_HPPA_FR + 5] = 0x0a8, -+ [UNW_HPPA_FR + 6] = 0x0b0, [UNW_HPPA_FR + 7] = 0x0b8, -+ [UNW_HPPA_FR + 8] = 0x0c0, [UNW_HPPA_FR + 9] = 0x0c8, -+ [UNW_HPPA_FR + 10] = 0x0d0, [UNW_HPPA_FR + 11] = 0x0d8, -+ [UNW_HPPA_FR + 12] = 0x0e0, [UNW_HPPA_FR + 13] = 0x0e8, -+ [UNW_HPPA_FR + 14] = 0x0f0, [UNW_HPPA_FR + 15] = 0x0f8, -+ [UNW_HPPA_FR + 16] = 0x100, [UNW_HPPA_FR + 17] = 0x108, -+ [UNW_HPPA_FR + 18] = 0x110, [UNW_HPPA_FR + 19] = 0x118, -+ [UNW_HPPA_FR + 20] = 0x120, [UNW_HPPA_FR + 21] = 0x128, -+ [UNW_HPPA_FR + 22] = 0x130, [UNW_HPPA_FR + 23] = 0x138, -+ [UNW_HPPA_FR + 24] = 0x140, [UNW_HPPA_FR + 25] = 0x148, -+ [UNW_HPPA_FR + 26] = 0x150, [UNW_HPPA_FR + 27] = 0x158, -+ [UNW_HPPA_FR + 28] = 0x160, [UNW_HPPA_FR + 29] = 0x168, -+ [UNW_HPPA_FR + 30] = 0x170, [UNW_HPPA_FR + 31] = 0x178, - -- [UNW_HPPA_IP] = 0x1a8 /* IAOQ[0] */ -+ [UNW_HPPA_IP] = 0x1a8 /* IAOQ[0] */ - #elif defined(UNW_TARGET_X86) -- [UNW_X86_EAX] = 0x18, -- [UNW_X86_EBX] = 0x00, -- [UNW_X86_ECX] = 0x04, -- [UNW_X86_EDX] = 0x08, -- [UNW_X86_ESI] = 0x0c, -- [UNW_X86_EDI] = 0x10, -- [UNW_X86_EBP] = 0x14, -- [UNW_X86_EIP] = 0x30, -- [UNW_X86_ESP] = 0x3c --/* CS = 0x34, */ --/* DS = 0x1c, */ --/* ES = 0x20, */ --/* FS = 0x24, */ --/* GS = 0x28, */ --/* ORIG_EAX = 0x2c, */ --/* EFLAGS = 0x38, */ --/* SS = 0x40 */ -+#if defined __FreeBSD__ -+#define UNW_R_OFF(R, r) \ -+ [UNW_X86_##R] = offsetof(gregset_t, r_##r), -+ UNW_R_OFF(EAX, eax) -+ UNW_R_OFF(EDX, edx) -+ UNW_R_OFF(ECX, ecx) -+ UNW_R_OFF(EBX, ebx) -+ UNW_R_OFF(ESI, esi) -+ UNW_R_OFF(EDI, edi) -+ UNW_R_OFF(EBP, ebp) -+ UNW_R_OFF(ESP, esp) -+ UNW_R_OFF(EIP, eip) -+// UNW_R_OFF(CS, cs) -+// UNW_R_OFF(EFLAGS, eflags) -+// UNW_R_OFF(SS, ss) -+#elif defined __linux__ -+ [UNW_X86_EAX] = 0x18, -+ [UNW_X86_EBX] = 0x00, -+ [UNW_X86_ECX] = 0x04, -+ [UNW_X86_EDX] = 0x08, -+ [UNW_X86_ESI] = 0x0c, -+ [UNW_X86_EDI] = 0x10, -+ [UNW_X86_EBP] = 0x14, -+ [UNW_X86_EIP] = 0x30, -+ [UNW_X86_ESP] = 0x3c -+/* CS = 0x34, */ -+/* DS = 0x1c, */ -+/* ES = 0x20, */ -+/* FS = 0x24, */ -+/* GS = 0x28, */ -+/* ORIG_EAX = 0x2c, */ -+/* EFLAGS = 0x38, */ -+/* SS = 0x40 */ -+#else -+#error Port me -+#endif - #elif defined(UNW_TARGET_X86_64) -- [UNW_X86_64_RAX] = 0x50, -- [UNW_X86_64_RDX] = 0x60, -- [UNW_X86_64_RCX] = 0x58, -- [UNW_X86_64_RBX] = 0x28, -- [UNW_X86_64_RSI] = 0x68, -- [UNW_X86_64_RDI] = 0x70, -- [UNW_X86_64_RBP] = 0x20, -- [UNW_X86_64_RSP] = 0x98, -- [UNW_X86_64_R8] = 0x48, -- [UNW_X86_64_R9] = 0x40, -- [UNW_X86_64_R10] = 0x38, -- [UNW_X86_64_R11] = 0x30, -- [UNW_X86_64_R12] = 0x18, -- [UNW_X86_64_R13] = 0x10, -- [UNW_X86_64_R14] = 0x08, -- [UNW_X86_64_R15] = 0x00, -- [UNW_X86_64_RIP] = 0x80 --// [UNW_X86_64_CS] = 0x88, --// [UNW_X86_64_EFLAGS] = 0x90, --// [UNW_X86_64_RSP] = 0x98, --// [UNW_X86_64_SS] = 0xa0 --#elif defined(UNW_TARGET_PPC32) --#elif defined(UNW_TARGET_PPC64) -+#if defined __FreeBSD__ -+#define UNW_R_OFF(R, r) \ -+ [UNW_X86_64_##R] = offsetof(gregset_t, r_##r), -+ UNW_R_OFF(RAX, rax) -+ UNW_R_OFF(RDX, rdx) -+ UNW_R_OFF(RCX, rcx) -+ UNW_R_OFF(RBX, rbx) -+ UNW_R_OFF(RSI, rsi) -+ UNW_R_OFF(RDI, rdi) -+ UNW_R_OFF(RBP, rbp) -+ UNW_R_OFF(RSP, rsp) -+ UNW_R_OFF(R8, r8) -+ UNW_R_OFF(R9, r9) -+ UNW_R_OFF(R10, r10) -+ UNW_R_OFF(R11, r11) -+ UNW_R_OFF(R12, r12) -+ UNW_R_OFF(R13, r13) -+ UNW_R_OFF(R14, r14) -+ UNW_R_OFF(R15, r15) -+ UNW_R_OFF(RIP, rip) -+// UNW_R_OFF(CS, cs) -+// UNW_R_OFF(EFLAGS, rflags) -+// UNW_R_OFF(SS, ss) -+#undef UNW_R_OFF -+#elif defined __linux__ -+ [UNW_X86_64_RAX] = 0x50, -+ [UNW_X86_64_RDX] = 0x60, -+ [UNW_X86_64_RCX] = 0x58, -+ [UNW_X86_64_RBX] = 0x28, -+ [UNW_X86_64_RSI] = 0x68, -+ [UNW_X86_64_RDI] = 0x70, -+ [UNW_X86_64_RBP] = 0x20, -+ [UNW_X86_64_RSP] = 0x98, -+ [UNW_X86_64_R8] = 0x48, -+ [UNW_X86_64_R9] = 0x40, -+ [UNW_X86_64_R10] = 0x38, -+ [UNW_X86_64_R11] = 0x30, -+ [UNW_X86_64_R12] = 0x18, -+ [UNW_X86_64_R13] = 0x10, -+ [UNW_X86_64_R14] = 0x08, -+ [UNW_X86_64_R15] = 0x00, -+ [UNW_X86_64_RIP] = 0x80 -+// [UNW_X86_64_CS] = 0x88, -+// [UNW_X86_64_EFLAGS] = 0x90, -+// [UNW_X86_64_RSP] = 0x98, -+// [UNW_X86_64_SS] = 0xa0 -+#else -+#error Port me -+#endif -+#elif defined(UNW_TARGET_PPC32) || defined(UNW_TARGET_PPC64) -+ -+#define UNW_REG_SLOT_SIZE sizeof(unsigned long) -+#define UNW_PPC_R(v) ((v) * UNW_REG_SLOT_SIZE) -+#define UNW_PPC_PT(p) UNW_PPC_R(PT_##p) -+ -+#define UNW_FP_OFF(b, i) \ -+ [UNW_PPC##b##_F##i] = UNW_PPC_R(PT_FPR0 + i * 8/UNW_REG_SLOT_SIZE) -+ -+#define UNW_R_OFF(b, i) \ -+ [UNW_PPC##b##_R##i] = UNW_PPC_R(PT_R##i) -+ -+#define UNW_PPC_REGS(b) \ -+ UNW_R_OFF(b, 0), \ -+ UNW_R_OFF(b, 1), \ -+ UNW_R_OFF(b, 2), \ -+ UNW_R_OFF(b, 3), \ -+ UNW_R_OFF(b, 4), \ -+ UNW_R_OFF(b, 5), \ -+ UNW_R_OFF(b, 6), \ -+ UNW_R_OFF(b, 7), \ -+ UNW_R_OFF(b, 8), \ -+ UNW_R_OFF(b, 9), \ -+ UNW_R_OFF(b, 10), \ -+ UNW_R_OFF(b, 11), \ -+ UNW_R_OFF(b, 12), \ -+ UNW_R_OFF(b, 13), \ -+ UNW_R_OFF(b, 14), \ -+ UNW_R_OFF(b, 15), \ -+ UNW_R_OFF(b, 16), \ -+ UNW_R_OFF(b, 17), \ -+ UNW_R_OFF(b, 18), \ -+ UNW_R_OFF(b, 19), \ -+ UNW_R_OFF(b, 20), \ -+ UNW_R_OFF(b, 21), \ -+ UNW_R_OFF(b, 22), \ -+ UNW_R_OFF(b, 23), \ -+ UNW_R_OFF(b, 24), \ -+ UNW_R_OFF(b, 25), \ -+ UNW_R_OFF(b, 26), \ -+ UNW_R_OFF(b, 27), \ -+ UNW_R_OFF(b, 28), \ -+ UNW_R_OFF(b, 29), \ -+ UNW_R_OFF(b, 30), \ -+ UNW_R_OFF(b, 31), \ -+ \ -+ [UNW_PPC##b##_CTR] = UNW_PPC_PT(CTR), \ -+ [UNW_PPC##b##_XER] = UNW_PPC_PT(XER), \ -+ [UNW_PPC##b##_LR] = UNW_PPC_PT(LNK), \ -+ \ -+ UNW_FP_OFF(b, 0), \ -+ UNW_FP_OFF(b, 1), \ -+ UNW_FP_OFF(b, 2), \ -+ UNW_FP_OFF(b, 3), \ -+ UNW_FP_OFF(b, 4), \ -+ UNW_FP_OFF(b, 5), \ -+ UNW_FP_OFF(b, 6), \ -+ UNW_FP_OFF(b, 7), \ -+ UNW_FP_OFF(b, 8), \ -+ UNW_FP_OFF(b, 9), \ -+ UNW_FP_OFF(b, 10), \ -+ UNW_FP_OFF(b, 11), \ -+ UNW_FP_OFF(b, 12), \ -+ UNW_FP_OFF(b, 13), \ -+ UNW_FP_OFF(b, 14), \ -+ UNW_FP_OFF(b, 15), \ -+ UNW_FP_OFF(b, 16), \ -+ UNW_FP_OFF(b, 17), \ -+ UNW_FP_OFF(b, 18), \ -+ UNW_FP_OFF(b, 19), \ -+ UNW_FP_OFF(b, 20), \ -+ UNW_FP_OFF(b, 21), \ -+ UNW_FP_OFF(b, 22), \ -+ UNW_FP_OFF(b, 23), \ -+ UNW_FP_OFF(b, 24), \ -+ UNW_FP_OFF(b, 25), \ -+ UNW_FP_OFF(b, 26), \ -+ UNW_FP_OFF(b, 27), \ -+ UNW_FP_OFF(b, 28), \ -+ UNW_FP_OFF(b, 29), \ -+ UNW_FP_OFF(b, 30), \ -+ UNW_FP_OFF(b, 31) -+ -+#define UNW_PPC32_REGS \ -+ [UNW_PPC32_FPSCR] = UNW_PPC_PT(FPSCR), \ -+ [UNW_PPC32_CCR] = UNW_PPC_PT(CCR) -+ -+#define UNW_VR_OFF(i) \ -+ [UNW_PPC64_V##i] = UNW_PPC_R(PT_VR0 + i * 2) -+ -+#define UNW_PPC64_REGS \ -+ [UNW_PPC64_NIP] = UNW_PPC_PT(NIP), \ -+ [UNW_PPC64_FRAME_POINTER] = -1, \ -+ [UNW_PPC64_ARG_POINTER] = -1, \ -+ [UNW_PPC64_CR0] = -1, \ -+ [UNW_PPC64_CR1] = -1, \ -+ [UNW_PPC64_CR2] = -1, \ -+ [UNW_PPC64_CR3] = -1, \ -+ [UNW_PPC64_CR4] = -1, \ -+ [UNW_PPC64_CR5] = -1, \ -+ [UNW_PPC64_CR6] = -1, \ -+ [UNW_PPC64_CR7] = -1, \ -+ [UNW_PPC64_VRSAVE] = UNW_PPC_PT(VRSAVE), \ -+ [UNW_PPC64_VSCR] = UNW_PPC_PT(VSCR), \ -+ [UNW_PPC64_SPE_ACC] = -1, \ -+ [UNW_PPC64_SPEFSCR] = -1, \ -+ UNW_VR_OFF(0), \ -+ UNW_VR_OFF(1), \ -+ UNW_VR_OFF(2), \ -+ UNW_VR_OFF(3), \ -+ UNW_VR_OFF(4), \ -+ UNW_VR_OFF(5), \ -+ UNW_VR_OFF(6), \ -+ UNW_VR_OFF(7), \ -+ UNW_VR_OFF(8), \ -+ UNW_VR_OFF(9), \ -+ UNW_VR_OFF(10), \ -+ UNW_VR_OFF(11), \ -+ UNW_VR_OFF(12), \ -+ UNW_VR_OFF(13), \ -+ UNW_VR_OFF(14), \ -+ UNW_VR_OFF(15), \ -+ UNW_VR_OFF(16), \ -+ UNW_VR_OFF(17), \ -+ UNW_VR_OFF(18), \ -+ UNW_VR_OFF(19), \ -+ UNW_VR_OFF(20), \ -+ UNW_VR_OFF(21), \ -+ UNW_VR_OFF(22), \ -+ UNW_VR_OFF(23), \ -+ UNW_VR_OFF(24), \ -+ UNW_VR_OFF(25), \ -+ UNW_VR_OFF(26), \ -+ UNW_VR_OFF(27), \ -+ UNW_VR_OFF(28), \ -+ UNW_VR_OFF(29), \ -+ UNW_VR_OFF(30), \ -+ UNW_VR_OFF(31) -+ -+#if defined(UNW_TARGET_PPC32) -+ UNW_PPC_REGS(32), -+ UNW_PPC32_REGS, -+#else -+ UNW_PPC_REGS(64), -+ UNW_PPC64_REGS, -+#endif -+ - #elif defined(UNW_TARGET_ARM) -+ [UNW_ARM_R0] = 0x00, -+ [UNW_ARM_R1] = 0x04, -+ [UNW_ARM_R2] = 0x08, -+ [UNW_ARM_R3] = 0x0c, -+ [UNW_ARM_R4] = 0x10, -+ [UNW_ARM_R5] = 0x14, -+ [UNW_ARM_R6] = 0x18, -+ [UNW_ARM_R7] = 0x1c, -+ [UNW_ARM_R8] = 0x20, -+ [UNW_ARM_R9] = 0x24, -+ [UNW_ARM_R10] = 0x28, -+ [UNW_ARM_R11] = 0x2c, -+ [UNW_ARM_R12] = 0x30, -+ [UNW_ARM_R13] = 0x34, -+ [UNW_ARM_R14] = 0x38, -+ [UNW_ARM_R15] = 0x3c, - #elif defined(UNW_TARGET_MIPS) -+#elif defined(UNW_TARGET_SH) -+#elif defined(UNW_TARGET_AARCH64) -+ [UNW_AARCH64_X0] = 0x00, -+ [UNW_AARCH64_X1] = 0x08, -+ [UNW_AARCH64_X2] = 0x10, -+ [UNW_AARCH64_X3] = 0x18, -+ [UNW_AARCH64_X4] = 0x20, -+ [UNW_AARCH64_X5] = 0x28, -+ [UNW_AARCH64_X6] = 0x30, -+ [UNW_AARCH64_X7] = 0x38, -+ [UNW_AARCH64_X8] = 0x40, -+ [UNW_AARCH64_X9] = 0x48, -+ [UNW_AARCH64_X10] = 0x50, -+ [UNW_AARCH64_X11] = 0x58, -+ [UNW_AARCH64_X12] = 0x60, -+ [UNW_AARCH64_X13] = 0x68, -+ [UNW_AARCH64_X14] = 0x70, -+ [UNW_AARCH64_X15] = 0x78, -+ [UNW_AARCH64_X16] = 0x80, -+ [UNW_AARCH64_X17] = 0x88, -+ [UNW_AARCH64_X18] = 0x90, -+ [UNW_AARCH64_X19] = 0x98, -+ [UNW_AARCH64_X20] = 0xa0, -+ [UNW_AARCH64_X21] = 0xa8, -+ [UNW_AARCH64_X22] = 0xb0, -+ [UNW_AARCH64_X23] = 0xb8, -+ [UNW_AARCH64_X24] = 0xc0, -+ [UNW_AARCH64_X25] = 0xc8, -+ [UNW_AARCH64_X26] = 0xd0, -+ [UNW_AARCH64_X27] = 0xd8, -+ [UNW_AARCH64_X28] = 0xe0, -+ [UNW_AARCH64_X29] = 0xe8, -+ [UNW_AARCH64_X30] = 0xf0, -+ [UNW_AARCH64_SP] = 0xf8, -+ [UNW_AARCH64_PC] = 0x100, -+ [UNW_AARCH64_PSTATE] = 0x108 -+#elif defined(UNW_TARGET_TILEGX) -+ [UNW_TILEGX_R0] = 0x00, -+ [UNW_TILEGX_R1] = 0x08, -+ [UNW_TILEGX_R2] = 0x10, -+ [UNW_TILEGX_R3] = 0x08, -+ [UNW_TILEGX_R4] = 0x20, -+ [UNW_TILEGX_R5] = 0x28, -+ [UNW_TILEGX_R6] = 0x30, -+ [UNW_TILEGX_R7] = 0x38, -+ [UNW_TILEGX_R8] = 0x40, -+ [UNW_TILEGX_R9] = 0x48, -+ [UNW_TILEGX_R10] = 0x50, -+ [UNW_TILEGX_R11] = 0x58, -+ [UNW_TILEGX_R12] = 0x60, -+ [UNW_TILEGX_R13] = 0x68, -+ [UNW_TILEGX_R14] = 0x70, -+ [UNW_TILEGX_R15] = 0x78, -+ [UNW_TILEGX_R16] = 0x80, -+ [UNW_TILEGX_R17] = 0x88, -+ [UNW_TILEGX_R18] = 0x90, -+ [UNW_TILEGX_R19] = 0x98, -+ [UNW_TILEGX_R20] = 0xa0, -+ [UNW_TILEGX_R21] = 0xa8, -+ [UNW_TILEGX_R22] = 0xb0, -+ [UNW_TILEGX_R23] = 0xb8, -+ [UNW_TILEGX_R24] = 0xc0, -+ [UNW_TILEGX_R25] = 0xc8, -+ [UNW_TILEGX_R26] = 0xd0, -+ [UNW_TILEGX_R27] = 0xd8, -+ [UNW_TILEGX_R28] = 0xe0, -+ [UNW_TILEGX_R29] = 0xe8, -+ [UNW_TILEGX_R30] = 0xf0, -+ [UNW_TILEGX_R31] = 0xf8, -+ [UNW_TILEGX_R32] = 0x100, -+ [UNW_TILEGX_R33] = 0x108, -+ [UNW_TILEGX_R34] = 0x110, -+ [UNW_TILEGX_R35] = 0x118, -+ [UNW_TILEGX_R36] = 0x120, -+ [UNW_TILEGX_R37] = 0x128, -+ [UNW_TILEGX_R38] = 0x130, -+ [UNW_TILEGX_R39] = 0x138, -+ [UNW_TILEGX_R40] = 0x140, -+ [UNW_TILEGX_R41] = 0x148, -+ [UNW_TILEGX_R42] = 0x150, -+ [UNW_TILEGX_R43] = 0x158, -+ [UNW_TILEGX_R44] = 0x160, -+ [UNW_TILEGX_R45] = 0x168, -+ [UNW_TILEGX_R46] = 0x170, -+ [UNW_TILEGX_R47] = 0x178, -+ [UNW_TILEGX_R48] = 0x180, -+ [UNW_TILEGX_R49] = 0x188, -+ [UNW_TILEGX_R50] = 0x190, -+ [UNW_TILEGX_R51] = 0x198, -+ [UNW_TILEGX_R52] = 0x1a0, -+ [UNW_TILEGX_R53] = 0x1a8, -+ [UNW_TILEGX_R54] = 0x1b0, -+ [UNW_TILEGX_R55] = 0x1b8, -+ [UNW_TILEGX_PC] = 0x1a0 - #else - # error Fix me. - #endif -diff --git a/frysk-imports/libunwind/src/ptrace/_UPT_resume.c b/frysk-imports/libunwind/src/ptrace/_UPT_resume.c -index 11242e8..d70a0d4 100644 ---- a/frysk-imports/libunwind/src/ptrace/_UPT_resume.c -+++ b/frysk-imports/libunwind/src/ptrace/_UPT_resume.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -32,7 +32,9 @@ _UPT_resume (unw_addr_space_t as, unw_cursor_t *c, void *arg) - - #ifdef HAVE_TTRACE - # warning No support for ttrace() yet. --#else -+#elif HAVE_DECL_PTRACE_CONT - return ptrace (PTRACE_CONT, ui->pid, 0, 0); -+#elif HAVE_DECL_PT_CONTINUE -+ return ptrace(PT_CONTINUE, ui->pid, (caddr_t)1, 0); - #endif - } -diff --git a/frysk-imports/libunwind/src/ptrace/libunwind-ptrace.pc.in b/frysk-imports/libunwind/src/ptrace/libunwind-ptrace.pc.in -new file mode 100644 -index 0000000..673004b ---- /dev/null -+++ b/frysk-imports/libunwind/src/ptrace/libunwind-ptrace.pc.in -@@ -0,0 +1,11 @@ -+prefix=@prefix@ -+exec_prefix=@exec_prefix@ -+libdir=@libdir@ -+includedir=@includedir@ -+ -+Name: libunwind-ptrace -+Description: libunwind ptrace library -+Version: @VERSION@ -+Requires: libunwind-generic libunwind -+Libs: -L${libdir} -lunwind-ptrace -+Cflags: -I${includedir} -diff --git a/frysk-imports/libunwind/src/setjmp/libunwind-setjmp.pc.in b/frysk-imports/libunwind/src/setjmp/libunwind-setjmp.pc.in -new file mode 100644 -index 0000000..7b71126 ---- /dev/null -+++ b/frysk-imports/libunwind/src/setjmp/libunwind-setjmp.pc.in -@@ -0,0 +1,11 @@ -+prefix=@prefix@ -+exec_prefix=@exec_prefix@ -+libdir=@libdir@ -+includedir=@includedir@ -+ -+Name: libunwind-setjmp -+Description: libunwind setjmp library -+Version: @VERSION@ -+Requires: libunwind -+Libs: -L${libdir} -lunwind-setjmp -+Cflags: -I${includedir} -diff --git a/frysk-imports/libunwind/src/setjmp/longjmp.c b/frysk-imports/libunwind/src/setjmp/longjmp.c -index ca5f1e4..8295a9b 100644 ---- a/frysk-imports/libunwind/src/setjmp/longjmp.c -+++ b/frysk-imports/libunwind/src/setjmp/longjmp.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -25,6 +25,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #define UNW_LOCAL_ONLY - -+#undef _FORTIFY_SOURCE - #include - #include - #include -@@ -34,6 +35,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "jmpbuf.h" - #include "setjmp_i.h" - -+#if defined(__GLIBC__) -+#if __GLIBC_PREREQ(2, 4) -+ -+/* Starting with glibc-2.4, {sig,}setjmp in GLIBC obfuscates the -+ register values in jmp_buf by XORing them with a "random" -+ canary value. -+ -+ This makes it impossible to implement longjmp, as we -+ can never match wp[JB_SP], unless we decode the canary first. -+ -+ Doing so is possible, but doesn't appear to be worth the trouble, -+ so we simply defer to glibc longjmp here. */ -+#define _longjmp __nonworking__longjmp -+#define longjmp __nonworking_longjmp -+static void _longjmp (jmp_buf env, int val); -+static void longjmp (jmp_buf env, int val); -+#endif -+#endif /* __GLIBC__ */ -+ - void - _longjmp (jmp_buf env, int val) - { -@@ -49,34 +69,41 @@ _longjmp (jmp_buf env, int val) - do - { - if (unw_get_reg (&c, UNW_REG_SP, &sp) < 0) -- abort (); -+ abort (); -+#ifdef __FreeBSD__ -+ if (sp != wp[JB_SP] + sizeof(unw_word_t)) -+#else - if (sp != wp[JB_SP]) -- continue; -+#endif -+ continue; - - if (!bsp_match (&c, wp)) -- continue; -+ continue; - - /* found the right frame: */ - - assert (UNW_NUM_EH_REGS >= 2); - - if (unw_set_reg (&c, UNW_REG_EH + 0, wp[JB_RP]) < 0 -- || unw_set_reg (&c, UNW_REG_EH + 1, val) < 0 -- || unw_set_reg (&c, UNW_REG_IP, -- (unw_word_t) (uintptr_t) &_UI_longjmp_cont)) -- abort (); -+ || unw_set_reg (&c, UNW_REG_EH + 1, val) < 0 -+ || unw_set_reg (&c, UNW_REG_IP, -+ (unw_word_t) (uintptr_t) &_UI_longjmp_cont)) -+ abort (); - - unw_resume (&c); - - abort (); - } -- while (unw_step (&c) >= 0); -+ while (unw_step (&c) > 0); - - abort (); - } - - #ifdef __GNUC__ --void longjmp (jmp_buf env, int val) __attribute__ ((alias ("_longjmp"))); -+#define STRINGIFY1(x) #x -+#define STRINGIFY(x) STRINGIFY1(x) -+void longjmp (jmp_buf env, int val) -+ __attribute__ ((alias (STRINGIFY(_longjmp)))); - #else - - void -@@ -85,4 +112,4 @@ longjmp (jmp_buf env, int val) - _longjmp (env, val); - } - --#endif -+#endif /* __GNUC__ */ -diff --git a/frysk-imports/libunwind/src/setjmp/setjmp.c b/frysk-imports/libunwind/src/setjmp/setjmp.c -index feb83f7..bec9fc7 100644 ---- a/frysk-imports/libunwind/src/setjmp/setjmp.c -+++ b/frysk-imports/libunwind/src/setjmp/setjmp.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/setjmp/setjmp_i.h b/frysk-imports/libunwind/src/setjmp/setjmp_i.h -index 1d7ca15..4d91396 100644 ---- a/frysk-imports/libunwind/src/setjmp/setjmp_i.h -+++ b/frysk-imports/libunwind/src/setjmp/setjmp_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -50,20 +50,20 @@ bsp_match (unw_cursor_t *c, unw_word_t *wp) - unw_cursor_t tmp = *c; - - /* The caller of {sig,}setjmp() cannot have a NULL-frame. If we -- see a NULL-frame, we haven't reached the right target yet. -- To have a NULL-frame, the number of locals must be zero and -- the stack-frame must also be empty. */ -+ see a NULL-frame, we haven't reached the right target yet. -+ To have a NULL-frame, the number of locals must be zero and -+ the stack-frame must also be empty. */ - - if (unw_step (&tmp) < 0) -- abort (); -+ abort (); - - if (unw_get_reg (&tmp, UNW_REG_SP, &sp) < 0 -- || unw_get_reg (&tmp, UNW_REG_SP, &prev_sp) < 0) -- abort (); -+ || unw_get_reg (&tmp, UNW_REG_SP, &prev_sp) < 0) -+ abort (); - - if (sp == prev_sp) -- /* got a NULL-frame; keep looking... */ -- return 0; -+ /* got a NULL-frame; keep looking... */ -+ return 0; - } - return 1; - } -@@ -93,7 +93,7 @@ resume_restores_sigmask (unw_cursor_t *c, unw_word_t *wp) - else - { - if (sigprocmask (SIG_BLOCK, NULL, ¤t_mask) < 0) -- abort (); -+ abort (); - mp = ¤t_mask; - } - memcpy (&sc->sc_mask, mp, sizeof (sc->sc_mask)); -diff --git a/frysk-imports/libunwind/src/setjmp/siglongjmp.c b/frysk-imports/libunwind/src/setjmp/siglongjmp.c -index 9a091fa..0e286f6 100644 ---- a/frysk-imports/libunwind/src/setjmp/siglongjmp.c -+++ b/frysk-imports/libunwind/src/setjmp/siglongjmp.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -31,6 +31,28 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "jmpbuf.h" - #include "setjmp_i.h" - -+#if !defined(_NSIG) && defined(_SIG_MAXSIG) -+# define _NSIG (_SIG_MAXSIG - 1) -+#endif -+ -+#if defined(__GLIBC__) -+#if __GLIBC_PREREQ(2, 4) -+ -+/* Starting with glibc-2.4, {sig,}setjmp in GLIBC obfuscates the -+ register values in jmp_buf by XORing them with a "random" -+ canary value. -+ -+ This makes it impossible to implement longjmp, as we -+ can never match wp[JB_SP], unless we decode the canary first. -+ -+ Doing so is possible, but doesn't appear to be worth the trouble, -+ so we simply defer to glibc siglongjmp here. */ -+ -+#define siglongjmp __nonworking_siglongjmp -+static void siglongjmp (sigjmp_buf env, int val) UNUSED; -+#endif -+#endif /* __GLIBC_PREREQ */ -+ - void - siglongjmp (sigjmp_buf env, int val) - { -@@ -48,12 +70,16 @@ siglongjmp (sigjmp_buf env, int val) - do - { - if (unw_get_reg (&c, UNW_REG_SP, &sp) < 0) -- abort (); -+ abort (); -+#ifdef __FreeBSD__ -+ if (sp != wp[JB_SP] + sizeof(unw_word_t)) -+#else - if (sp != wp[JB_SP]) -- continue; -+#endif -+ continue; - - if (!bsp_match (&c, wp)) -- continue; -+ continue; - - /* found the right frame: */ - -@@ -61,34 +87,41 @@ siglongjmp (sigjmp_buf env, int val) - cont = &_UI_longjmp_cont; - - /* Order of evaluation is important here: if unw_resume() -- restores signal mask, we must set it up appropriately, even -- if wp[JB_MASK_SAVED] is FALSE. */ -+ restores signal mask, we must set it up appropriately, even -+ if wp[JB_MASK_SAVED] is FALSE. */ - if (!resume_restores_sigmask (&c, wp) && wp[JB_MASK_SAVED]) -- { -- /* sigmask was saved */ -- if (UNW_NUM_EH_REGS < 4 || _NSIG >= 16 * sizeof (unw_word_t)) -- /* signal mask doesn't fit into EH arguments and we can't -- put it on the stack without overwriting something -- else... */ -- abort (); -- else -- if (unw_set_reg (&c, UNW_REG_EH + 2, wp[JB_MASK]) < 0 -- || (_NSIG > 8 * sizeof (unw_word_t) -- && unw_set_reg (&c, UNW_REG_EH + 3, wp[JB_MASK + 1]) < 0)) -- abort (); -- cont = &_UI_siglongjmp_cont; -- } -+ { -+ /* sigmask was saved */ -+#if defined(__linux__) -+ if (UNW_NUM_EH_REGS < 4 || _NSIG > 16 * sizeof (unw_word_t)) -+ /* signal mask doesn't fit into EH arguments and we can't -+ put it on the stack without overwriting something -+ else... */ -+ abort (); -+ else -+ if (unw_set_reg (&c, UNW_REG_EH + 2, wp[JB_MASK]) < 0 -+ || (_NSIG > 8 * sizeof (unw_word_t) -+ && unw_set_reg (&c, UNW_REG_EH + 3, wp[JB_MASK + 1]) < 0)) -+ abort (); -+#elif defined(__FreeBSD__) -+ if (unw_set_reg (&c, UNW_REG_EH + 2, &wp[JB_MASK]) < 0) -+ abort(); -+#else -+#error Port me -+#endif -+ cont = &_UI_siglongjmp_cont; -+ } - - if (unw_set_reg (&c, UNW_REG_EH + 0, wp[JB_RP]) < 0 -- || unw_set_reg (&c, UNW_REG_EH + 1, val) < 0 -- || unw_set_reg (&c, UNW_REG_IP, (unw_word_t) (uintptr_t) cont)) -- abort (); -+ || unw_set_reg (&c, UNW_REG_EH + 1, val) < 0 -+ || unw_set_reg (&c, UNW_REG_IP, (unw_word_t) (uintptr_t) cont)) -+ abort (); - - unw_resume (&c); - - abort (); - } -- while (unw_step (&c) >= 0); -+ while (unw_step (&c) > 0); - - abort (); - } -diff --git a/frysk-imports/libunwind/src/setjmp/sigsetjmp.c b/frysk-imports/libunwind/src/setjmp/sigsetjmp.c -index 87df5ed..f84935d 100644 ---- a/frysk-imports/libunwind/src/setjmp/sigsetjmp.c -+++ b/frysk-imports/libunwind/src/setjmp/sigsetjmp.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/sh/Gcreate_addr_space.c b/frysk-imports/libunwind/src/sh/Gcreate_addr_space.c -new file mode 100644 -index 0000000..1907d04 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Gcreate_addr_space.c -@@ -0,0 +1,59 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+ -+#include "unwind_i.h" -+ -+PROTECTED unw_addr_space_t -+unw_create_addr_space (unw_accessors_t *a, int byte_order) -+{ -+#ifdef UNW_LOCAL_ONLY -+ return NULL; -+#else -+ unw_addr_space_t as; -+ -+ /* SH supports little-endian and big-endian. */ -+ if (byte_order != 0 && byte_order != __LITTLE_ENDIAN -+ && byte_order != __BIG_ENDIAN) -+ return NULL; -+ -+ as = malloc (sizeof (*as)); -+ if (!as) -+ return NULL; -+ -+ memset (as, 0, sizeof (*as)); -+ -+ as->acc = *a; -+ -+ /* Default to little-endian for SH. */ -+ if (byte_order == 0 || byte_order == __LITTLE_ENDIAN) -+ as->big_endian = 0; -+ else -+ as->big_endian = 1; -+ -+ return as; -+#endif -+} -diff --git a/frysk-imports/libunwind/src/sh/Gget_proc_info.c b/frysk-imports/libunwind/src/sh/Gget_proc_info.c -new file mode 100644 -index 0000000..de9199f ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Gget_proc_info.c -@@ -0,0 +1,39 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ ret = dwarf_make_proc_info (&c->dwarf); -+ if (ret < 0) -+ return ret; -+ -+ *pi = c->dwarf.pi; -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/sh/Gget_save_loc.c b/frysk-imports/libunwind/src/sh/Gget_save_loc.c -new file mode 100644 -index 0000000..7690a80 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Gget_save_loc.c -@@ -0,0 +1,83 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ dwarf_loc_t loc; -+ -+ switch (reg) -+ { -+ case UNW_SH_R0: -+ case UNW_SH_R1: -+ case UNW_SH_R2: -+ case UNW_SH_R3: -+ case UNW_SH_R4: -+ case UNW_SH_R5: -+ case UNW_SH_R6: -+ case UNW_SH_R7: -+ case UNW_SH_R8: -+ case UNW_SH_R9: -+ case UNW_SH_R10: -+ case UNW_SH_R11: -+ case UNW_SH_R12: -+ case UNW_SH_R13: -+ case UNW_SH_R14: -+ case UNW_SH_R15: -+ case UNW_SH_PC: -+ case UNW_SH_PR: -+ loc = c->dwarf.loc[reg]; -+ break; -+ -+ default: -+ loc = DWARF_NULL_LOC; /* default to "not saved" */ -+ break; -+ } -+ -+ memset (sloc, 0, sizeof (*sloc)); -+ -+ if (DWARF_IS_NULL_LOC (loc)) -+ { -+ sloc->type = UNW_SLT_NONE; -+ return 0; -+ } -+ -+#if !defined(UNW_LOCAL_ONLY) -+ if (DWARF_IS_REG_LOC (loc)) -+ { -+ sloc->type = UNW_SLT_REG; -+ sloc->u.regnum = DWARF_GET_LOC (loc); -+ } -+ else -+#endif -+ { -+ sloc->type = UNW_SLT_MEMORY; -+ sloc->u.addr = DWARF_GET_LOC (loc); -+ } -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/sh/Gglobal.c b/frysk-imports/libunwind/src/sh/Gglobal.c -new file mode 100644 -index 0000000..ed27333 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Gglobal.c -@@ -0,0 +1,56 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "dwarf_i.h" -+ -+HIDDEN define_lock (sh_lock); -+HIDDEN int tdep_init_done; -+ -+HIDDEN void -+tdep_init (void) -+{ -+ intrmask_t saved_mask; -+ -+ sigfillset (&unwi_full_mask); -+ -+ lock_acquire (&sh_lock, saved_mask); -+ { -+ if (tdep_init_done) -+ /* another thread else beat us to it... */ -+ goto out; -+ -+ mi_init (); -+ -+ dwarf_init (); -+ -+#ifndef UNW_REMOTE_ONLY -+ sh_local_addr_space_init (); -+#endif -+ tdep_init_done = 1; /* signal that we're initialized... */ -+ } -+ out: -+ lock_release (&sh_lock, saved_mask); -+} -diff --git a/frysk-imports/libunwind/src/sh/Ginit.c b/frysk-imports/libunwind/src/sh/Ginit.c -new file mode 100644 -index 0000000..b380db1 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Ginit.c -@@ -0,0 +1,186 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+ -+#include "unwind_i.h" -+ -+#ifdef UNW_REMOTE_ONLY -+ -+/* unw_local_addr_space is a NULL pointer in this case. */ -+PROTECTED unw_addr_space_t unw_local_addr_space; -+ -+#else /* !UNW_REMOTE_ONLY */ -+ -+static struct unw_addr_space local_addr_space; -+ -+PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; -+ -+static inline void * -+uc_addr (ucontext_t *uc, int reg) -+{ -+ if (reg >= UNW_SH_R0 && reg <= UNW_SH_PR) -+ return &uc->uc_mcontext.gregs[reg]; -+ else -+ return NULL; -+} -+ -+# ifdef UNW_LOCAL_ONLY -+ -+HIDDEN void * -+tdep_uc_addr (ucontext_t *uc, int reg) -+{ -+ return uc_addr (uc, reg); -+} -+ -+# endif /* UNW_LOCAL_ONLY */ -+ -+HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -+ -+/* XXX fix me: there is currently no way to locate the dyn-info list -+ by a remote unwinder. On ia64, this is done via a special -+ unwind-table entry. Perhaps something similar can be done with -+ DWARF2 unwind info. */ -+ -+static void -+put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) -+{ -+ /* it's a no-op */ -+} -+ -+static int -+get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -+ void *arg) -+{ -+ *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; -+ return 0; -+} -+ -+static int -+access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -+ void *arg) -+{ -+ if (write) -+ { -+ Debug (16, "mem[%x] <- %x\n", addr, *val); -+ *(unw_word_t *) addr = *val; -+ } -+ else -+ { -+ *val = *(unw_word_t *) addr; -+ Debug (16, "mem[%x] -> %x\n", addr, *val); -+ } -+ return 0; -+} -+ -+static int -+access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -+ void *arg) -+{ -+ unw_word_t *addr; -+ ucontext_t *uc = arg; -+ -+ if (unw_is_fpreg (reg)) -+ goto badreg; -+ -+ if (!(addr = uc_addr (uc, reg))) -+ goto badreg; -+ -+ if (write) -+ { -+ *(unw_word_t *) addr = *val; -+ Debug (12, "%s <- %x\n", unw_regname (reg), *val); -+ } -+ else -+ { -+ *val = *(unw_word_t *) addr; -+ Debug (12, "%s -> %x\n", unw_regname (reg), *val); -+ } -+ return 0; -+ -+ badreg: -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+} -+ -+static int -+access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -+ int write, void *arg) -+{ -+ ucontext_t *uc = arg; -+ unw_fpreg_t *addr; -+ -+ if (!unw_is_fpreg (reg)) -+ goto badreg; -+ -+ if (!(addr = uc_addr (uc, reg))) -+ goto badreg; -+ -+ if (write) -+ { -+ Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ *(unw_fpreg_t *) addr = *val; -+ } -+ else -+ { -+ *val = *(unw_fpreg_t *) addr; -+ Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ } -+ return 0; -+ -+ badreg: -+ Debug (1, "bad register number %u\n", reg); -+ /* attempt to access a non-preserved register */ -+ return -UNW_EBADREG; -+} -+ -+static int -+get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) -+{ -+ return _Uelf32_get_proc_name (as, getpid (), ip, buf, buf_len, offp); -+} -+ -+HIDDEN void -+sh_local_addr_space_init (void) -+{ -+ memset (&local_addr_space, 0, sizeof (local_addr_space)); -+ local_addr_space.caching_policy = UNW_CACHE_GLOBAL; -+ local_addr_space.acc.find_proc_info = dwarf_find_proc_info; -+ local_addr_space.acc.put_unwind_info = put_unwind_info; -+ local_addr_space.acc.get_dyn_info_list_addr = get_dyn_info_list_addr; -+ local_addr_space.acc.access_mem = access_mem; -+ local_addr_space.acc.access_reg = access_reg; -+ local_addr_space.acc.access_fpreg = access_fpreg; -+ local_addr_space.acc.resume = sh_local_resume; -+ local_addr_space.acc.get_proc_name = get_static_proc_name; -+ unw_flush_cache (&local_addr_space, 0, 0); -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/sh/Ginit_local.c b/frysk-imports/libunwind/src/sh/Ginit_local.c -new file mode 100644 -index 0000000..e1cc30c ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Ginit_local.c -@@ -0,0 +1,55 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright 2011 Linaro Limited -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "init.h" -+ -+#ifdef UNW_REMOTE_ONLY -+ -+PROTECTED int -+unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) -+{ -+ return -UNW_EINVAL; -+} -+ -+#else /* !UNW_REMOTE_ONLY */ -+ -+PROTECTED int -+unw_init_local (unw_cursor_t *cursor, unw_context_t *uc) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ if (!tdep_init_done) -+ tdep_init (); -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ c->dwarf.as = unw_local_addr_space; -+ c->dwarf.as_arg = uc; -+ -+ return common_init (c, 1); -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/sh/Ginit_remote.c b/frysk-imports/libunwind/src/sh/Ginit_remote.c -new file mode 100644 -index 0000000..f284e99 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Ginit_remote.c -@@ -0,0 +1,45 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "init.h" -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) -+{ -+#ifdef UNW_LOCAL_ONLY -+ return -UNW_EINVAL; -+#else /* !UNW_LOCAL_ONLY */ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ if (!tdep_init_done) -+ tdep_init (); -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ c->dwarf.as = as; -+ c->dwarf.as_arg = as_arg; -+ return common_init (c, 0); -+#endif /* !UNW_LOCAL_ONLY */ -+} -diff --git a/frysk-imports/libunwind/src/sh/Gis_signal_frame.c b/frysk-imports/libunwind/src/sh/Gis_signal_frame.c -new file mode 100644 -index 0000000..9719f8e ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Gis_signal_frame.c -@@ -0,0 +1,119 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+/* Disassembly of the Linux VDSO sigreturn functions: -+ -+00000000 <__kernel_sigreturn>: -+ 0: 05 93 mov.w e <__kernel_sigreturn+0xe>,r3 ! 77 -+ 2: 10 c3 trapa #16 -+ 4: 0b 20 or r0,r0 -+ 6: 0b 20 or r0,r0 -+ 8: 0b 20 or r0,r0 -+ a: 0b 20 or r0,r0 -+ c: 0b 20 or r0,r0 -+ e: 77 00 .word 0x0077 -+ 10: 09 00 nop -+ 12: 09 00 nop -+ 14: 09 00 nop -+ 16: 09 00 nop -+ 18: 09 00 nop -+ 1a: 09 00 nop -+ 1c: 09 00 nop -+ 1e: 09 00 nop -+ -+00000020 <__kernel_rt_sigreturn>: -+ 20: 05 93 mov.w 2e <__kernel_rt_sigreturn+0xe>,r3 ! ad -+ 22: 10 c3 trapa #16 -+ 24: 0b 20 or r0,r0 -+ 26: 0b 20 or r0,r0 -+ 28: 0b 20 or r0,r0 -+ 2a: 0b 20 or r0,r0 -+ 2c: 0b 20 or r0,r0 -+ 2e: ad 00 mov.w @(r0,r10),r0 -+ 30: 09 00 nop -+ 32: 09 00 nop -+ 34: 09 00 nop -+ 36: 09 00 nop -+ 38: 09 00 nop -+ 3a: 09 00 nop -+ 3c: 09 00 nop -+ 3e: 09 00 nop -+*/ -+ -+PROTECTED int -+unw_is_signal_frame (unw_cursor_t *cursor) -+{ -+#ifdef __linux__ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t w0, ip; -+ unw_addr_space_t as; -+ unw_accessors_t *a; -+ void *arg; -+ int ret; -+ -+ as = c->dwarf.as; -+ a = unw_get_accessors (as); -+ arg = c->dwarf.as_arg; -+ -+ ip = c->dwarf.ip; -+ -+ ret = (*a->access_mem) (as, ip, &w0, 0, arg); -+ if (ret < 0) -+ return ret; -+ -+ if (w0 != 0xc3109305) -+ return 0; -+ -+ ret = (*a->access_mem) (as, ip+4, &w0, 0, arg); -+ if (ret < 0) -+ return ret; -+ -+ if (w0 != 0x200b200b) -+ return 0; -+ -+ ret = (*a->access_mem) (as, ip+8, &w0, 0, arg); -+ if (ret < 0) -+ return ret; -+ -+ if (w0 != 0x200b200b) -+ return 0; -+ -+ ret = (*a->access_mem) (as, ip+12, &w0, 0, arg); -+ if (ret < 0) -+ return ret; -+ -+ if (w0 == 0x0077200b) -+ return 1; /* non-RT */ -+ else if (w0 == 0x00ad200b) -+ return 2; /* RT */ -+ -+ /* does not look like a signal frame */ -+ return 0; -+ -+#else -+ return -UNW_ENOINFO; -+#endif -+} -diff --git a/frysk-imports/libunwind/src/sh/Gregs.c b/frysk-imports/libunwind/src/sh/Gregs.c -new file mode 100644 -index 0000000..fb4ca74 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Gregs.c -@@ -0,0 +1,79 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+HIDDEN int -+tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -+ int write) -+{ -+ dwarf_loc_t loc = DWARF_NULL_LOC; -+ -+ switch (reg) -+ { -+ case UNW_SH_R0: -+ case UNW_SH_R1: -+ case UNW_SH_R2: -+ case UNW_SH_R3: -+ case UNW_SH_R4: -+ case UNW_SH_R5: -+ case UNW_SH_R6: -+ case UNW_SH_R7: -+ case UNW_SH_R8: -+ case UNW_SH_R9: -+ case UNW_SH_R10: -+ case UNW_SH_R11: -+ case UNW_SH_R12: -+ case UNW_SH_R13: -+ case UNW_SH_R14: -+ case UNW_SH_PC: -+ case UNW_SH_PR: -+ loc = c->dwarf.loc[reg]; -+ break; -+ -+ case UNW_SH_R15: -+ if (write) -+ return -UNW_EREADONLYREG; -+ *valp = c->dwarf.cfa; -+ return 0; -+ -+ default: -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+ } -+ -+ if (write) -+ return dwarf_put (&c->dwarf, loc, *valp); -+ else -+ return dwarf_get (&c->dwarf, loc, valp); -+} -+ -+HIDDEN int -+tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -+ int write) -+{ -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+} -diff --git a/frysk-imports/libunwind/src/sh/Gresume.c b/frysk-imports/libunwind/src/sh/Gresume.c -new file mode 100644 -index 0000000..b14e419 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Gresume.c -@@ -0,0 +1,165 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright 2011 Linaro Limited -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+ -+#ifndef UNW_REMOTE_ONLY -+ -+HIDDEN inline int -+sh_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) -+{ -+#ifdef __linux__ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_tdep_context_t *uc = c->dwarf.as_arg; -+ -+ if (c->sigcontext_format == SH_SCF_NONE) -+ { -+ /* Since there are no signals involved here we restore the non scratch -+ registers only. */ -+ unsigned long regs[8]; -+ regs[0] = uc->uc_mcontext.gregs[8]; -+ regs[1] = uc->uc_mcontext.gregs[9]; -+ regs[2] = uc->uc_mcontext.gregs[10]; -+ regs[3] = uc->uc_mcontext.gregs[11]; -+ regs[4] = uc->uc_mcontext.gregs[12]; -+ regs[5] = uc->uc_mcontext.gregs[13]; -+ regs[6] = uc->uc_mcontext.gregs[14]; -+ regs[7] = uc->uc_mcontext.gregs[15]; -+ unsigned long pc = uc->uc_mcontext.pr; -+ -+ struct regs_overlay { -+ char x[sizeof(regs)]; -+ }; -+ -+ asm volatile ( -+ "mov.l @%0+, r8\n" -+ "mov.l @%0+, r9\n" -+ "mov.l @%0+, r10\n" -+ "mov.l @%0+, r11\n" -+ "mov.l @%0+, r12\n" -+ "mov.l @%0+, r13\n" -+ "mov.l @%0+, r14\n" -+ "mov.l @%0, r15\n" -+ "lds %1, pr\n" -+ "rts\n" -+ "nop\n" -+ : -+ : "r" (regs), -+ "r" (pc), -+ "m" (*(struct regs_overlay *)regs) -+ ); -+ } -+ else -+ { -+ /* In case a signal frame is involved, we're using its trampoline which -+ calls sigreturn. */ -+ struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; -+ sc->sc_regs[0] = uc->uc_mcontext.gregs[0]; -+ sc->sc_regs[1] = uc->uc_mcontext.gregs[1]; -+ sc->sc_regs[2] = uc->uc_mcontext.gregs[2]; -+ sc->sc_regs[3] = uc->uc_mcontext.gregs[3]; -+ sc->sc_regs[4] = uc->uc_mcontext.gregs[4]; -+ sc->sc_regs[5] = uc->uc_mcontext.gregs[5]; -+ sc->sc_regs[6] = uc->uc_mcontext.gregs[6]; -+ sc->sc_regs[7] = uc->uc_mcontext.gregs[7]; -+ sc->sc_regs[8] = uc->uc_mcontext.gregs[8]; -+ sc->sc_regs[9] = uc->uc_mcontext.gregs[9]; -+ sc->sc_regs[10] = uc->uc_mcontext.gregs[10]; -+ sc->sc_regs[11] = uc->uc_mcontext.gregs[11]; -+ sc->sc_regs[12] = uc->uc_mcontext.gregs[12]; -+ sc->sc_regs[13] = uc->uc_mcontext.gregs[13]; -+ sc->sc_regs[14] = uc->uc_mcontext.gregs[14]; -+ sc->sc_regs[15] = uc->uc_mcontext.gregs[15]; -+ sc->sc_pc = uc->uc_mcontext.pc; -+ sc->sc_pr = uc->uc_mcontext.pr; -+ -+ /* Set the SP and the PC in order to continue execution at the modified -+ trampoline which restores the signal mask and the registers. */ -+ asm __volatile__ ( -+ "mov %0, r15\n" -+ "lds %1, pr\n" -+ "rts\n" -+ "nop\n" -+ : -+ : "r" (c->sigcontext_sp), -+ "r" (c->sigcontext_pc) -+ ); -+ } -+ unreachable(); -+#endif -+ return -UNW_EINVAL; -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -+ -+static inline void -+establish_machine_state (struct cursor *c) -+{ -+ unw_addr_space_t as = c->dwarf.as; -+ void *arg = c->dwarf.as_arg; -+ unw_fpreg_t fpval; -+ unw_word_t val; -+ int reg; -+ -+ Debug (8, "copying out cursor state\n"); -+ -+ for (reg = 0; reg <= UNW_REG_LAST; ++reg) -+ { -+ Debug (16, "copying %s %d\n", unw_regname (reg), reg); -+ if (unw_is_fpreg (reg)) -+ { -+ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -+ as->acc.access_fpreg (as, reg, &fpval, 1, arg); -+ } -+ else -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ as->acc.access_reg (as, reg, &val, 1, arg); -+ } -+ } -+} -+ -+PROTECTED int -+unw_resume (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ if (!c->dwarf.ip) -+ { -+ /* This can happen easily when the frame-chain gets truncated -+ due to bad or missing unwind-info. */ -+ Debug (1, "refusing to resume execution at address 0\n"); -+ return -UNW_EINVAL; -+ } -+ -+ establish_machine_state (c); -+ -+ return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -+ c->dwarf.as_arg); -+} -diff --git a/frysk-imports/libunwind/src/sh/Gstep.c b/frysk-imports/libunwind/src/sh/Gstep.c -new file mode 100644 -index 0000000..9bbb5ff ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Gstep.c -@@ -0,0 +1,117 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright 2011 Linaro Limited -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+ -+PROTECTED int -+unw_handle_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ unw_word_t sc_addr, sp, sp_addr = c->dwarf.cfa; -+ struct dwarf_loc sp_loc = DWARF_LOC (sp_addr, 0); -+ -+ if ((ret = dwarf_get (&c->dwarf, sp_loc, &sp)) < 0) -+ return -UNW_EUNSPEC; -+ -+ ret = unw_is_signal_frame (cursor); -+ Debug(1, "unw_is_signal_frame()=%d\n", ret); -+ -+ /* Save the SP and PC to be able to return execution at this point -+ later in time (unw_resume). */ -+ c->sigcontext_sp = c->dwarf.cfa; -+ c->sigcontext_pc = c->dwarf.ip; -+ -+ if (ret == 1) -+ { -+ /* Handle non-RT signal frame. */ -+ c->sigcontext_format = SH_SCF_LINUX_SIGFRAME; -+ sc_addr = sp_addr; -+ } -+ else if (ret == 2) -+ { -+ /* Handle RT signal frame. */ -+ c->sigcontext_format = SH_SCF_LINUX_RT_SIGFRAME; -+ sc_addr = sp_addr + sizeof (siginfo_t) + LINUX_UC_MCONTEXT_OFF; -+ } -+ else -+ return -UNW_EUNSPEC; -+ -+ c->sigcontext_addr = sc_addr; -+ -+ /* Update the dwarf cursor. -+ Set the location of the registers to the corresponding addresses of the -+ uc_mcontext / sigcontext structure contents. */ -+ c->dwarf.loc[UNW_SH_R0] = DWARF_LOC (sc_addr + LINUX_SC_R0_OFF, 0); -+ c->dwarf.loc[UNW_SH_R1] = DWARF_LOC (sc_addr + LINUX_SC_R1_OFF, 0); -+ c->dwarf.loc[UNW_SH_R2] = DWARF_LOC (sc_addr + LINUX_SC_R2_OFF, 0); -+ c->dwarf.loc[UNW_SH_R3] = DWARF_LOC (sc_addr + LINUX_SC_R3_OFF, 0); -+ c->dwarf.loc[UNW_SH_R4] = DWARF_LOC (sc_addr + LINUX_SC_R4_OFF, 0); -+ c->dwarf.loc[UNW_SH_R5] = DWARF_LOC (sc_addr + LINUX_SC_R5_OFF, 0); -+ c->dwarf.loc[UNW_SH_R6] = DWARF_LOC (sc_addr + LINUX_SC_R6_OFF, 0); -+ c->dwarf.loc[UNW_SH_R7] = DWARF_LOC (sc_addr + LINUX_SC_R7_OFF, 0); -+ c->dwarf.loc[UNW_SH_R8] = DWARF_LOC (sc_addr + LINUX_SC_R8_OFF, 0); -+ c->dwarf.loc[UNW_SH_R9] = DWARF_LOC (sc_addr + LINUX_SC_R9_OFF, 0); -+ c->dwarf.loc[UNW_SH_R10] = DWARF_LOC (sc_addr + LINUX_SC_R10_OFF, 0); -+ c->dwarf.loc[UNW_SH_R11] = DWARF_LOC (sc_addr + LINUX_SC_R11_OFF, 0); -+ c->dwarf.loc[UNW_SH_R12] = DWARF_LOC (sc_addr + LINUX_SC_R12_OFF, 0); -+ c->dwarf.loc[UNW_SH_R13] = DWARF_LOC (sc_addr + LINUX_SC_R13_OFF, 0); -+ c->dwarf.loc[UNW_SH_R14] = DWARF_LOC (sc_addr + LINUX_SC_R14_OFF, 0); -+ c->dwarf.loc[UNW_SH_R15] = DWARF_LOC (sc_addr + LINUX_SC_R15_OFF, 0); -+ c->dwarf.loc[UNW_SH_PR] = DWARF_LOC (sc_addr + LINUX_SC_PR_OFF, 0); -+ c->dwarf.loc[UNW_SH_PC] = DWARF_LOC (sc_addr + LINUX_SC_PC_OFF, 0); -+ -+ /* Set SP/CFA and PC/IP. */ -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_SH_R15], &c->dwarf.cfa); -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_SH_PC], &c->dwarf.ip); -+ -+ c->dwarf.pi_valid = 0; -+ -+ return 1; -+} -+ -+PROTECTED int -+unw_step (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ if (unw_is_signal_frame (cursor)) -+ return unw_handle_signal_frame (cursor); -+ -+ ret = dwarf_step (&c->dwarf); -+ -+ if (unlikely (ret == -UNW_ESTOPUNWIND)) -+ return ret; -+ -+ if (unlikely (ret < 0)) -+ return 0; -+ -+ return (c->dwarf.ip == 0) ? 0 : 1; -+} -diff --git a/frysk-imports/libunwind/src/sh/Lcreate_addr_space.c b/frysk-imports/libunwind/src/sh/Lcreate_addr_space.c -new file mode 100644 -index 0000000..0f2dc6b ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Lcreate_addr_space.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gcreate_addr_space.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Lget_proc_info.c b/frysk-imports/libunwind/src/sh/Lget_proc_info.c -new file mode 100644 -index 0000000..69028b0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Lget_proc_info.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gget_proc_info.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Lget_save_loc.c b/frysk-imports/libunwind/src/sh/Lget_save_loc.c -new file mode 100644 -index 0000000..9ea048a ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Lget_save_loc.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gget_save_loc.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Lglobal.c b/frysk-imports/libunwind/src/sh/Lglobal.c -new file mode 100644 -index 0000000..6d7b489 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Lglobal.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gglobal.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Linit.c b/frysk-imports/libunwind/src/sh/Linit.c -new file mode 100644 -index 0000000..e9abfdd ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Linit.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Linit_local.c b/frysk-imports/libunwind/src/sh/Linit_local.c -new file mode 100644 -index 0000000..68a1687 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Linit_local.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit_local.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Linit_remote.c b/frysk-imports/libunwind/src/sh/Linit_remote.c -new file mode 100644 -index 0000000..58cb04a ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Linit_remote.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit_remote.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Lis_signal_frame.c b/frysk-imports/libunwind/src/sh/Lis_signal_frame.c -new file mode 100644 -index 0000000..b9a7c4f ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Lis_signal_frame.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gis_signal_frame.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Lregs.c b/frysk-imports/libunwind/src/sh/Lregs.c -new file mode 100644 -index 0000000..2c9c75c ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Lregs.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gregs.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Lresume.c b/frysk-imports/libunwind/src/sh/Lresume.c -new file mode 100644 -index 0000000..41a8cf0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Lresume.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gresume.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/Lstep.c b/frysk-imports/libunwind/src/sh/Lstep.c -new file mode 100644 -index 0000000..c1ac3c7 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/Lstep.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gstep.c" -+#endif -diff --git a/frysk-imports/libunwind/src/sh/gen-offsets.c b/frysk-imports/libunwind/src/sh/gen-offsets.c -new file mode 100644 -index 0000000..16695a6 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/gen-offsets.c -@@ -0,0 +1,51 @@ -+#include -+#include -+#include -+#include -+ -+#define UC(N,X) \ -+ printf ("#define LINUX_UC_" N "_OFF\t0x%X\n", offsetof (ucontext_t, X)) -+ -+#define SC(N,X) \ -+ printf ("#define LINUX_SC_" N "_OFF\t0x%X\n", offsetof (struct sigcontext, X)) -+ -+int -+main (void) -+{ -+ printf ( -+"/* Linux-specific definitions: */\n\n" -+ -+"/* Define various structure offsets to simplify cross-compilation. */\n\n" -+ -+"/* Offsets for SH Linux \"ucontext_t\": */\n\n"); -+ -+ UC ("FLAGS", uc_flags); -+ UC ("LINK", uc_link); -+ UC ("STACK", uc_stack); -+ UC ("MCONTEXT", uc_mcontext); -+ UC ("SIGMASK", uc_sigmask); -+ -+ printf ("\n/* Offsets for SH Linux \"struct sigcontext\": */\n\n"); -+ -+ SC ("R0", sc_regs[0]); -+ SC ("R1", sc_regs[1]); -+ SC ("R2", sc_regs[2]); -+ SC ("R3", sc_regs[3]); -+ SC ("R4", sc_regs[4]); -+ SC ("R5", sc_regs[5]); -+ SC ("R6", sc_regs[6]); -+ SC ("R7", sc_regs[7]); -+ SC ("R8", sc_regs[8]); -+ SC ("R9", sc_regs[9]); -+ SC ("R10", sc_regs[10]); -+ SC ("R11", sc_regs[11]); -+ SC ("R12", sc_regs[12]); -+ SC ("R13", sc_regs[13]); -+ SC ("R14", sc_regs[14]); -+ SC ("R15", sc_regs[15]); -+ -+ SC ("PC", sc_pc); -+ SC ("PR", sc_pr); -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/sh/init.h b/frysk-imports/libunwind/src/sh/init.h -new file mode 100644 -index 0000000..a180258 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/init.h -@@ -0,0 +1,74 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+static inline int -+common_init (struct cursor *c, unsigned use_prev_instr) -+{ -+ int ret; -+ -+ c->dwarf.loc[UNW_SH_R0] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R0); -+ c->dwarf.loc[UNW_SH_R1] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R1); -+ c->dwarf.loc[UNW_SH_R2] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R2); -+ c->dwarf.loc[UNW_SH_R3] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R3); -+ c->dwarf.loc[UNW_SH_R4] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R4); -+ c->dwarf.loc[UNW_SH_R5] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R5); -+ c->dwarf.loc[UNW_SH_R6] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R6); -+ c->dwarf.loc[UNW_SH_R7] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R7); -+ c->dwarf.loc[UNW_SH_R8] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R8); -+ c->dwarf.loc[UNW_SH_R9] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R9); -+ c->dwarf.loc[UNW_SH_R10] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R10); -+ c->dwarf.loc[UNW_SH_R11] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R11); -+ c->dwarf.loc[UNW_SH_R12] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R12); -+ c->dwarf.loc[UNW_SH_R13] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R13); -+ c->dwarf.loc[UNW_SH_R14] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R14); -+ c->dwarf.loc[UNW_SH_R15] = DWARF_REG_LOC (&c->dwarf, UNW_SH_R15); -+ c->dwarf.loc[UNW_SH_PC] = DWARF_REG_LOC (&c->dwarf, UNW_SH_PC); -+ c->dwarf.loc[UNW_SH_PR] = DWARF_REG_LOC (&c->dwarf, UNW_SH_PR); -+ -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_SH_PC], &c->dwarf.ip); -+ if (ret < 0) -+ return ret; -+ -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[UNW_TDEP_SP], &c->dwarf.cfa); -+ if (ret < 0) -+ return ret; -+ -+ c->sigcontext_format = SH_SCF_NONE; -+ c->sigcontext_addr = 0; -+ c->sigcontext_sp = 0; -+ c->sigcontext_pc = 0; -+ -+ c->dwarf.args_size = 0; -+ c->dwarf.ret_addr_column = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; -+ c->dwarf.pi_valid = 0; -+ c->dwarf.pi_is_dynamic = 0; -+ c->dwarf.hint = 0; -+ c->dwarf.prev_rs = 0; -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/sh/is_fpreg.c b/frysk-imports/libunwind/src/sh/is_fpreg.c -new file mode 100644 -index 0000000..c351f81 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/is_fpreg.c -@@ -0,0 +1,32 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "libunwind_i.h" -+ -+PROTECTED int -+unw_is_fpreg (int regnum) -+{ -+ /* FIXME: Support FP. */ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/sh/offsets.h b/frysk-imports/libunwind/src/sh/offsets.h -new file mode 100644 -index 0000000..b02d8ae ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/offsets.h -@@ -0,0 +1,32 @@ -+/* Linux-specific definitions: */ -+ -+/* Define various structure offsets to simplify cross-compilation. */ -+ -+/* Offsets for SH Linux "ucontext_t": */ -+ -+#define LINUX_UC_FLAGS_OFF 0x0 -+#define LINUX_UC_LINK_OFF 0x4 -+#define LINUX_UC_STACK_OFF 0x8 -+#define LINUX_UC_MCONTEXT_OFF 0x14 -+#define LINUX_UC_SIGMASK_OFF 0xFC -+ -+/* Offsets for SH Linux "struct sigcontext": */ -+ -+#define LINUX_SC_R0_OFF 0x4 -+#define LINUX_SC_R1_OFF 0x8 -+#define LINUX_SC_R2_OFF 0xC -+#define LINUX_SC_R3_OFF 0x10 -+#define LINUX_SC_R4_OFF 0x14 -+#define LINUX_SC_R5_OFF 0x18 -+#define LINUX_SC_R6_OFF 0x1C -+#define LINUX_SC_R7_OFF 0x20 -+#define LINUX_SC_R8_OFF 0x24 -+#define LINUX_SC_R9_OFF 0x28 -+#define LINUX_SC_R10_OFF 0x2C -+#define LINUX_SC_R11_OFF 0x30 -+#define LINUX_SC_R12_OFF 0x34 -+#define LINUX_SC_R13_OFF 0x38 -+#define LINUX_SC_R14_OFF 0x3C -+#define LINUX_SC_R15_OFF 0x40 -+#define LINUX_SC_PC_OFF 0x44 -+#define LINUX_SC_PR_OFF 0x48 -diff --git a/frysk-imports/libunwind/src/sh/regname.c b/frysk-imports/libunwind/src/sh/regname.c -new file mode 100644 -index 0000000..dcab240 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/regname.c -@@ -0,0 +1,56 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+static const char *const regname[] = -+ { -+ [UNW_SH_R0] = "r0", -+ [UNW_SH_R1] = "r1", -+ [UNW_SH_R2] = "r2", -+ [UNW_SH_R3] = "r3", -+ [UNW_SH_R4] = "r4", -+ [UNW_SH_R5] = "r5", -+ [UNW_SH_R6] = "r6", -+ [UNW_SH_R7] = "r7", -+ [UNW_SH_R8] = "r8", -+ [UNW_SH_R9] = "r9", -+ [UNW_SH_R10] = "r10", -+ [UNW_SH_R11] = "r11", -+ [UNW_SH_R12] = "r12", -+ [UNW_SH_R13] = "r13", -+ [UNW_SH_R14] = "r14", -+ [UNW_SH_R15] = "r15", -+ [UNW_SH_PC] = "pc", -+ [UNW_SH_PR] = "pr", -+ }; -+ -+PROTECTED const char * -+unw_regname (unw_regnum_t reg) -+{ -+ if (reg < (unw_regnum_t) ARRAY_SIZE (regname) && regname[reg] != NULL) -+ return regname[reg]; -+ else -+ return "???"; -+} -diff --git a/frysk-imports/libunwind/src/sh/siglongjmp.S b/frysk-imports/libunwind/src/sh/siglongjmp.S -new file mode 100644 -index 0000000..9ca53d1 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/siglongjmp.S -@@ -0,0 +1,8 @@ -+ /* Dummy implementation for now. */ -+ -+ .globl _UI_siglongjmp_cont -+ .globl _UI_longjmp_cont -+ -+_UI_siglongjmp_cont: -+_UI_longjmp_cont: -+ rts -diff --git a/frysk-imports/libunwind/src/sh/unwind_i.h b/frysk-imports/libunwind/src/sh/unwind_i.h -new file mode 100644 -index 0000000..3066d84 ---- /dev/null -+++ b/frysk-imports/libunwind/src/sh/unwind_i.h -@@ -0,0 +1,40 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef unwind_i_h -+#define unwind_i_h -+ -+#include -+ -+#include "libunwind_i.h" -+ -+#define sh_lock UNW_OBJ(lock) -+#define sh_local_resume UNW_OBJ(local_resume) -+#define sh_local_addr_space_init UNW_OBJ(local_addr_space_init) -+ -+extern void sh_local_addr_space_init (void); -+extern int sh_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -+ void *arg); -+ -+#endif /* unwind_i_h */ -diff --git a/frysk-imports/libunwind/src/tilegx/Gcreate_addr_space.c b/frysk-imports/libunwind/src/tilegx/Gcreate_addr_space.c -new file mode 100644 -index 0000000..a2821a3 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Gcreate_addr_space.c -@@ -0,0 +1,65 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+ -+#include "unwind_i.h" -+ -+PROTECTED unw_addr_space_t -+unw_create_addr_space (unw_accessors_t *a, int byte_order) -+{ -+#ifdef UNW_LOCAL_ONLY -+ return NULL; -+#else -+ unw_addr_space_t as = malloc (sizeof (*as)); -+ -+ if (!as) -+ return NULL; -+ -+ memset (as, 0, sizeof (*as)); -+ -+ as->acc = *a; -+ -+ /* -+ * Tilegx supports only big or little-endian, not weird stuff like -+ * PDP_ENDIAN. -+ */ -+ if (byte_order != 0 -+ && byte_order != __LITTLE_ENDIAN -+ && byte_order != __BIG_ENDIAN) -+ return NULL; -+ -+ if (byte_order == 0) -+ /* use host default: */ -+ as->big_endian = (__BYTE_ORDER == __BIG_ENDIAN); -+ else -+ as->big_endian = (byte_order == __BIG_ENDIAN); -+ -+ as->abi = UNW_TILEGX_ABI_N64; -+ as->addr_size = 8; -+ -+ return as; -+#endif -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Gget_proc_info.c b/frysk-imports/libunwind/src/tilegx/Gget_proc_info.c -new file mode 100644 -index 0000000..f82700d ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Gget_proc_info.c -@@ -0,0 +1,48 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ ret = dwarf_make_proc_info (&c->dwarf); -+ -+ if (ret < 0) -+ { -+ /* On Tilegx, some routines i.e. _start() etc has no dwarf info. -+ Just simply mark the end of the frames. */ -+ memset (pi, 0, sizeof (*pi)); -+ pi->start_ip = c->dwarf.ip; -+ pi->end_ip = c->dwarf.ip + 1; -+ return 0; -+ } -+ -+ *pi = c->dwarf.pi; -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Gget_save_loc.c b/frysk-imports/libunwind/src/tilegx/Gget_save_loc.c -new file mode 100644 -index 0000000..ec474e1 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Gget_save_loc.c -@@ -0,0 +1,62 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ dwarf_loc_t loc; -+ -+ loc = DWARF_NULL_LOC; /* default to "not saved" */ -+ -+ if (reg <= UNW_TILEGX_R55) -+ loc = c->dwarf.loc[reg - UNW_TILEGX_R0]; -+ else -+ printf("\nInvalid register!"); -+ -+ memset (sloc, 0, sizeof (*sloc)); -+ -+ if (DWARF_IS_NULL_LOC (loc)) -+ { -+ sloc->type = UNW_SLT_NONE; -+ return 0; -+ } -+ -+#if !defined(UNW_LOCAL_ONLY) -+ if (DWARF_IS_REG_LOC (loc)) -+ { -+ sloc->type = UNW_SLT_REG; -+ sloc->u.regnum = DWARF_GET_LOC (loc); -+ } -+ else -+#endif -+ { -+ sloc->type = UNW_SLT_MEMORY; -+ sloc->u.addr = DWARF_GET_LOC (loc); -+ } -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Gglobal.c b/frysk-imports/libunwind/src/tilegx/Gglobal.c -new file mode 100644 -index 0000000..e18f50a ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Gglobal.c -@@ -0,0 +1,64 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "dwarf_i.h" -+ -+__attribute__((weak)) -+pthread_mutex_t tilegx_lock = PTHREAD_MUTEX_INITIALIZER; -+HIDDEN int tdep_init_done; -+ -+HIDDEN const uint8_t dwarf_to_unw_regnum_map[] = -+ { -+ 0, 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, 28, 29, 30, 31, -+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, -+ 48, 49, 50, 51, 52, 53, 54, 55 -+ }; -+ -+HIDDEN void -+tdep_init (void) -+{ -+ intrmask_t saved_mask; -+ -+ sigfillset (&unwi_full_mask); -+ -+ lock_acquire (&tilegx_lock, saved_mask); -+ -+ if (tdep_init_done) -+ /* another thread else beat us to it... */ -+ goto out; -+ -+ mi_init (); -+ dwarf_init (); -+ -+#ifndef UNW_REMOTE_ONLY -+ tilegx_local_addr_space_init (); -+#endif -+ tdep_init_done = 1; /* signal that we're initialized... */ -+ -+ out: -+ lock_release (&tilegx_lock, saved_mask); -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Ginit.c b/frysk-imports/libunwind/src/tilegx/Ginit.c -new file mode 100644 -index 0000000..df3ffca ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Ginit.c -@@ -0,0 +1,167 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+ -+#include "unwind_i.h" -+ -+#ifdef UNW_REMOTE_ONLY -+ -+/* unw_local_addr_space is a NULL pointer in this case. */ -+PROTECTED unw_addr_space_t unw_local_addr_space; -+ -+#else /* !UNW_REMOTE_ONLY */ -+ -+static struct unw_addr_space local_addr_space; -+ -+PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; -+ -+/* Return the address of the 64-bit slot in UC for REG (even for o32, -+ where registers are 32-bit, the slots are still 64-bit). */ -+ -+static inline void * -+uc_addr (ucontext_t *uc, int reg) -+{ -+ if (reg >= UNW_TILEGX_R0 && reg < UNW_TILEGX_R0 + 56) -+ return &uc->uc_mcontext.gregs[reg - UNW_TILEGX_R0]; -+ else if (reg == UNW_TILEGX_PC) -+ return &uc->uc_mcontext.pc; -+ else -+ return NULL; -+} -+ -+# ifdef UNW_LOCAL_ONLY -+ -+HIDDEN void * -+tdep_uc_addr (ucontext_t *uc, int reg) -+{ -+ char *addr = uc_addr (uc, reg); -+ return addr; -+} -+ -+# endif /* UNW_LOCAL_ONLY */ -+ -+HIDDEN unw_dyn_info_list_t _U_dyn_info_list; -+ -+/* XXX fix me: there is currently no way to locate the dyn-info list -+ by a remote unwinder. On ia64, this is done via a special -+ unwind-table entry. Perhaps something similar can be done with -+ DWARF2 unwind info. */ -+ -+static void -+put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) -+{ -+ /* it's a no-op */ -+} -+ -+static int -+get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -+ void *arg) -+{ -+ *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list; -+ return 0; -+} -+ -+static int -+access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -+ void *arg) -+{ -+ if ((long long)addr & (sizeof(unw_word_t) - 1)) -+ return 0; -+ -+ if (write) -+ { -+ Debug (16, "mem[%llx] <- %llx\n", (long long) addr, (long long) *val); -+ *(unw_word_t *) (intptr_t) addr = *val; -+ } -+ else -+ { -+ *val = *(unw_word_t *) (intptr_t) addr; -+ Debug (16, "mem[%llx] -> %llx\n", (long long) addr, (long long) *val); -+ } -+ return 0; -+} -+ -+static int -+access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -+ void *arg) -+{ -+ unw_word_t *addr; -+ ucontext_t *uc = arg; -+ -+ if (unw_is_fpreg (reg)) -+ goto badreg; -+ -+ Debug (16, "reg = %s\n", unw_regname (reg)); -+ if (!(addr = uc_addr (uc, reg))) -+ goto badreg; -+ -+ if (write) -+ { -+ *(unw_word_t *) (intptr_t) addr = (tilegx_reg_t) *val; -+ Debug (12, "%s <- %llx\n", unw_regname (reg), (long long) *val); -+ } -+ else -+ { -+ *val = (tilegx_reg_t) *(unw_word_t *) (intptr_t) addr; -+ Debug (12, "%s -> %llx\n", unw_regname (reg), (long long) *val); -+ } -+ return 0; -+ -+ badreg: -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+} -+ -+static int -+get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) -+{ -+ return elf_w (get_proc_name) (as, getpid (), ip, buf, buf_len, offp); -+} -+ -+__attribute__((weak)) void -+tilegx_local_addr_space_init (void) -+{ -+ memset (&local_addr_space, 0, sizeof (local_addr_space)); -+ local_addr_space.big_endian = (__BYTE_ORDER == __BIG_ENDIAN); -+ -+ local_addr_space.abi = UNW_TILEGX_ABI_N64; -+ local_addr_space.addr_size = sizeof (void *); -+ local_addr_space.caching_policy = UNW_CACHE_GLOBAL; -+ local_addr_space.acc.find_proc_info = dwarf_find_proc_info; -+ local_addr_space.acc.put_unwind_info = put_unwind_info; -+ local_addr_space.acc.get_dyn_info_list_addr = get_dyn_info_list_addr; -+ local_addr_space.acc.access_mem = access_mem; -+ local_addr_space.acc.access_reg = access_reg; -+ local_addr_space.acc.access_fpreg = NULL; -+ local_addr_space.acc.resume = tilegx_local_resume; -+ local_addr_space.acc.get_proc_name = get_static_proc_name; -+ unw_flush_cache (&local_addr_space, 0, 0); -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/tilegx/Ginit_local.c b/frysk-imports/libunwind/src/tilegx/Ginit_local.c -new file mode 100644 -index 0000000..f75c98f ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Ginit_local.c -@@ -0,0 +1,57 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "init.h" -+ -+#ifdef UNW_REMOTE_ONLY -+ -+PROTECTED int -+unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) -+{ -+ return -UNW_EINVAL; -+} -+ -+#else /* !UNW_REMOTE_ONLY */ -+ -+PROTECTED int -+unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ if (!tdep_init_done) -+ tdep_init (); -+ -+ memset(c, 0, sizeof(unw_cursor_t)); -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ c->dwarf.as = unw_local_addr_space; -+ -+ c->dwarf.as_arg = uc; -+ return common_init (c, 1); -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/tilegx/Ginit_remote.c b/frysk-imports/libunwind/src/tilegx/Ginit_remote.c -new file mode 100644 -index 0000000..c554100 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Ginit_remote.c -@@ -0,0 +1,47 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "init.h" -+#include "unwind_i.h" -+ -+PROTECTED int -+unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) -+{ -+#ifdef UNW_LOCAL_ONLY -+ return -UNW_EINVAL; -+#else /* !UNW_LOCAL_ONLY */ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ if (!tdep_init_done) -+ tdep_init (); -+ -+ Debug (1, "(cursor=%p)\n", c); -+ -+ c->dwarf.as = as; -+ c->dwarf.as_arg = as_arg; -+ -+ return common_init (c, 0); -+#endif /* !UNW_LOCAL_ONLY */ -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Gis_signal_frame.c b/frysk-imports/libunwind/src/tilegx/Gis_signal_frame.c -new file mode 100644 -index 0000000..96bd34a ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Gis_signal_frame.c -@@ -0,0 +1,115 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include -+#include "offsets.h" -+ -+#ifdef __linux__ -+#include -+#include -+#else -+# error "Only support Linux!" -+#endif -+ -+#define MOVELI_R10_RT_SIGRETURN \ -+ ( 0x000007e051483000ULL | \ -+ ((unsigned long)__NR_rt_sigreturn << 43) | \ -+ ((unsigned long)TREG_SYSCALL_NR << 31) ) -+#define SWINT1 0x286b180051485000ULL -+ -+PROTECTED int -+unw_is_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor*) cursor; -+ unw_word_t w0, w1, ip; -+ unw_addr_space_t as; -+ unw_accessors_t *a; -+ void *arg; -+ int ret; -+ -+ as = c->dwarf.as; -+ a = unw_get_accessors (as); -+ arg = c->dwarf.as_arg; -+ -+ ip = c->dwarf.ip; -+ -+ if (!ip || !a->access_mem || (ip & (sizeof(unw_word_t) - 1))) -+ return 0; -+ -+ if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0) -+ return ret; -+ -+ if ((ret = (*a->access_mem) (as, ip + 8, &w1, 0, arg)) < 0) -+ return ret; -+ -+ /* Return 1 if the IP points to a RT sigreturn sequence. */ -+ if (w0 == MOVELI_R10_RT_SIGRETURN && -+ w1 == SWINT1) -+ { -+ return 1; -+ } -+ return 0; -+} -+ -+ -+PROTECTED int -+unw_handle_signal_frame (unw_cursor_t *cursor) -+{ -+ int i; -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t sc_addr, sp, sp_addr = c->dwarf.cfa; -+ struct dwarf_loc sp_loc = DWARF_LOC (sp_addr, 0); -+ int ret; -+ -+ if ((ret = dwarf_get (&c->dwarf, sp_loc, &sp)) < 0) -+ return -UNW_EUNSPEC; -+ -+ /* Save the SP and PC to be able to return execution at this point -+ later in time (unw_resume). */ -+ c->sigcontext_sp = c->dwarf.cfa; -+ c->sigcontext_pc = c->dwarf.ip; -+ -+ c->sigcontext_addr = sp_addr + sizeof (siginfo_t) + -+ C_ABI_SAVE_AREA_SIZE; -+ sc_addr = c->sigcontext_addr + LINUX_UC_MCONTEXT_OFF; -+ -+ /* Update the dwarf cursor. -+ Set the location of the registers to the corresponding addresses of the -+ uc_mcontext / sigcontext structure contents. */ -+ -+#define SC_REG_OFFSET(X) (8 * X) -+ -+ for (i = UNW_TILEGX_R0; i <= UNW_TILEGX_R55; i++) -+ { -+ c->dwarf.loc[i] = DWARF_LOC (sc_addr + SC_REG_OFFSET(i), 0); -+ } -+ -+ /* Set SP/CFA and PC/IP. */ -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_TILEGX_R54], &c->dwarf.cfa); -+ dwarf_get (&c->dwarf, c->dwarf.loc[UNW_TILEGX_R55], &c->dwarf.ip); -+ -+ return 1; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Gregs.c b/frysk-imports/libunwind/src/tilegx/Gregs.c -new file mode 100644 -index 0000000..53e7bf4 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Gregs.c -@@ -0,0 +1,66 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+HIDDEN int -+tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -+ int write) -+{ -+ dwarf_loc_t loc = DWARF_NULL_LOC; -+ -+ if (reg == UNW_TILEGX_R54 && !write) -+ { -+ reg = UNW_TILEGX_CFA; -+ } -+ -+ if (reg <= UNW_TILEGX_R55) -+ loc = c->dwarf.loc[reg - UNW_TILEGX_R0]; -+ else if (reg == UNW_TILEGX_CFA) -+ { -+ if (write) -+ return -UNW_EREADONLYREG; -+ *valp = c->dwarf.cfa; -+ return 0; -+ } -+ else -+ { -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+ } -+ -+ if (write) -+ return dwarf_put (&c->dwarf, loc, *valp); -+ else -+ return dwarf_get (&c->dwarf, loc, valp); -+} -+ -+HIDDEN int -+tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -+ int write) -+{ -+ Debug (1, "bad register number %u\n", reg); -+ return -UNW_EBADREG; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Gresume.c b/frysk-imports/libunwind/src/tilegx/Gresume.c -new file mode 100644 -index 0000000..f532fd8 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Gresume.c -@@ -0,0 +1,94 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+#include -+ -+#ifndef UNW_REMOTE_ONLY -+ -+HIDDEN inline int -+tilegx_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) -+{ -+ int i; -+ struct cursor *c = (struct cursor *) cursor; -+ ucontext_t *uc = c->dwarf.as_arg; -+ -+ Debug (1, "(cursor=%p\n", c); -+ -+ return setcontext(uc); -+} -+ -+#endif /* !UNW_REMOTE_ONLY */ -+ -+static inline void -+establish_machine_state (struct cursor *c) -+{ -+ unw_addr_space_t as = c->dwarf.as; -+ void *arg = c->dwarf.as_arg; -+ unw_fpreg_t fpval; -+ unw_word_t val; -+ int reg; -+ -+ Debug (8, "copying out cursor state\n"); -+ -+ for (reg = 0; reg <= UNW_REG_LAST; ++reg) -+ { -+ Debug (16, "copying %s %d\n", unw_regname (reg), reg); -+ -+ if (unw_is_fpreg (reg)) -+ { -+ Debug (1, "no fp!"); -+ abort (); -+ } -+ else -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ as->acc.access_reg (as, reg, &val, 1, arg); -+ } -+ } -+} -+ -+PROTECTED int -+unw_resume (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ -+ Debug (1, "(cursor=%p) ip=0x%lx\n", c, c->dwarf.ip); -+ -+ if (!c->dwarf.ip) -+ { -+ /* This can happen easily when the frame-chain gets truncated -+ due to bad or missing unwind-info. */ -+ Debug (1, "refusing to resume execution at address 0\n"); -+ return -UNW_EINVAL; -+ } -+ -+ establish_machine_state (c); -+ -+ return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -+ c->dwarf.as_arg); -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Gstep.c b/frysk-imports/libunwind/src/tilegx/Gstep.c -new file mode 100644 -index 0000000..0d8f8af ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Gstep.c -@@ -0,0 +1,53 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+ -+PROTECTED int -+unw_step (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ Debug (1, "(cursor=%p, ip=0x%016lx, sp=0x%016lx)\n", -+ c, c->dwarf.ip, c->dwarf.cfa); -+ -+ /* Special handling the singal frame. */ -+ if (unw_is_signal_frame (cursor)) -+ return unw_handle_signal_frame (cursor); -+ -+ /* Try DWARF-based unwinding... */ -+ ret = dwarf_step (&c->dwarf); -+ -+ if (unlikely (ret == -UNW_ESTOPUNWIND)) -+ return ret; -+ -+ /* Dwarf unwinding didn't work, stop. */ -+ if (unlikely (ret < 0)) -+ return 0; -+ -+ return (c->dwarf.ip == 0) ? 0 : 1; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/Lcreate_addr_space.c b/frysk-imports/libunwind/src/tilegx/Lcreate_addr_space.c -new file mode 100644 -index 0000000..0f2dc6b ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Lcreate_addr_space.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gcreate_addr_space.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Lget_proc_info.c b/frysk-imports/libunwind/src/tilegx/Lget_proc_info.c -new file mode 100644 -index 0000000..69028b0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Lget_proc_info.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gget_proc_info.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Lget_save_loc.c b/frysk-imports/libunwind/src/tilegx/Lget_save_loc.c -new file mode 100644 -index 0000000..9ea048a ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Lget_save_loc.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gget_save_loc.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Lglobal.c b/frysk-imports/libunwind/src/tilegx/Lglobal.c -new file mode 100644 -index 0000000..6d7b489 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Lglobal.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gglobal.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Linit.c b/frysk-imports/libunwind/src/tilegx/Linit.c -new file mode 100644 -index 0000000..e9abfdd ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Linit.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Linit_local.c b/frysk-imports/libunwind/src/tilegx/Linit_local.c -new file mode 100644 -index 0000000..68a1687 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Linit_local.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit_local.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Linit_remote.c b/frysk-imports/libunwind/src/tilegx/Linit_remote.c -new file mode 100644 -index 0000000..58cb04a ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Linit_remote.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Ginit_remote.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Lis_signal_frame.c b/frysk-imports/libunwind/src/tilegx/Lis_signal_frame.c -new file mode 100644 -index 0000000..b9a7c4f ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Lis_signal_frame.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gis_signal_frame.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Lregs.c b/frysk-imports/libunwind/src/tilegx/Lregs.c -new file mode 100644 -index 0000000..2c9c75c ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Lregs.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gregs.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Lresume.c b/frysk-imports/libunwind/src/tilegx/Lresume.c -new file mode 100644 -index 0000000..41a8cf0 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Lresume.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gresume.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/Lstep.c b/frysk-imports/libunwind/src/tilegx/Lstep.c -new file mode 100644 -index 0000000..c1ac3c7 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/Lstep.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gstep.c" -+#endif -diff --git a/frysk-imports/libunwind/src/tilegx/elfxx.c b/frysk-imports/libunwind/src/tilegx/elfxx.c -new file mode 100644 -index 0000000..07d3d12 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/elfxx.c -@@ -0,0 +1,27 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "libunwind_i.h" -+ -+#include "../src/elfxx.c" -diff --git a/frysk-imports/libunwind/src/tilegx/gen-offsets.c b/frysk-imports/libunwind/src/tilegx/gen-offsets.c -new file mode 100644 -index 0000000..8704bb2 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/gen-offsets.c -@@ -0,0 +1,30 @@ -+#include -+#include -+#include -+ -+#define UC(N,X) \ -+ printf ("#define LINUX_UC_" N "_OFF\t0x%X\n", offsetof (ucontext_t, X)) -+ -+#define SC(N,X) \ -+ printf ("#define LINUX_SC_" N "_OFF\t0x%X\n", offsetof (struct sigcontext, X)) -+ -+int -+main (void) -+{ -+ printf ( -+"/* Linux-specific definitions: */\n\n" -+ -+"/* Define various structure offsets to simplify cross-compilation. */\n\n" -+ -+"/* Offsets for TILEGX Linux \"ucontext_t\": */\n\n"); -+ -+ UC ("FLAGS", uc_flags); -+ UC ("LINK", uc_link); -+ UC ("STACK", uc_stack); -+ UC ("MCONTEXT", uc_mcontext); -+ UC ("SIGMASK", uc_sigmask); -+ -+ UC ("MCONTEXT_GREGS", uc_mcontext.gregs); -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/getcontext.S b/frysk-imports/libunwind/src/tilegx/getcontext.S -new file mode 100644 -index 0000000..fbc8654 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/getcontext.S -@@ -0,0 +1,36 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "offsets.h" -+#include -+ -+ .text -+ # define REG(X) LINUX_UC_MCONTEXT_GREGS + 8 * (X) -+ .global _Utilegx_getcontext -+ .type _Utilegx_getcontext, %function -+ # This is a stub version of getcontext() for TILEGX. -+_Utilegx_getcontext: -+ -+ -diff --git a/frysk-imports/libunwind/src/tilegx/init.h b/frysk-imports/libunwind/src/tilegx/init.h -new file mode 100644 -index 0000000..e75e590 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/init.h -@@ -0,0 +1,64 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+static inline int -+common_init (struct cursor *c, unsigned use_prev_instr) -+{ -+ int ret, i; -+ -+ for (i = 0; i < 56; i++) -+ c->dwarf.loc[i] = DWARF_REG_LOC (&c->dwarf, UNW_TILEGX_R0 + i); -+ for (i = 56; i < DWARF_NUM_PRESERVED_REGS; ++i) -+ c->dwarf.loc[i] = DWARF_NULL_LOC; -+ -+ if (use_prev_instr == 0) -+ ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_TILEGX_PC), -+ &c->dwarf.ip); -+ else -+ ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_TILEGX_R55), -+ &c->dwarf.ip); -+ -+ if (ret < 0) -+ return ret; -+ -+ ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_TILEGX_R54), -+ &c->dwarf.cfa); -+ -+ if (ret < 0) -+ return ret; -+ -+ c->dwarf.args_size = 0; -+ c->dwarf.ret_addr_column = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; -+ c->dwarf.pi_valid = 0; -+ c->dwarf.pi_is_dynamic = 0; -+ c->dwarf.hint = 0; -+ c->dwarf.prev_rs = 0; -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/is_fpreg.c b/frysk-imports/libunwind/src/tilegx/is_fpreg.c -new file mode 100644 -index 0000000..118e055 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/is_fpreg.c -@@ -0,0 +1,33 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "libunwind_i.h" -+ -+/* TILEGX has no FP. */ -+ -+PROTECTED int -+unw_is_fpreg (int regnum) -+{ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/offsets.h b/frysk-imports/libunwind/src/tilegx/offsets.h -new file mode 100644 -index 0000000..6d30f1e ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/offsets.h -@@ -0,0 +1,12 @@ -+/* Linux-specific definitions: */ -+ -+/* Define various structure offsets to simplify cross-compilation. */ -+ -+/* Offsets for TILEGX Linux "ucontext_t": */ -+ -+#define LINUX_UC_FLAGS_OFF 0x0 -+#define LINUX_UC_LINK_OFF 0x8 -+#define LINUX_UC_STACK_OFF 0x10 -+#define LINUX_UC_MCONTEXT_OFF 0x28 -+#define LINUX_UC_SIGMASK_OFF 0x228 -+#define LINUX_UC_MCONTEXT_GREGS 0x28 -diff --git a/frysk-imports/libunwind/src/tilegx/regname.c b/frysk-imports/libunwind/src/tilegx/regname.c -new file mode 100644 -index 0000000..fd73804 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/regname.c -@@ -0,0 +1,55 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ Copyright (C) 2014 Tilera Corp. -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+ -+static const char *regname[] = -+ { -+ /* 0. */ -+ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", -+ /* 8. */ -+ "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", -+ /* 16. */ -+ "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", -+ /* 24. */ -+ "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31", -+ /* 32. */ -+ "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39", -+ /* 40. */ -+ "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47", -+ /* 48. */ -+ "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55", -+ /* pc, cfa */ -+ "pc", "cfa" -+ }; -+ -+PROTECTED const char * -+unw_regname (unw_regnum_t reg) -+{ -+ if (reg < (unw_regnum_t) ARRAY_SIZE (regname)) -+ return regname[reg]; -+ else -+ return "???"; -+} -diff --git a/frysk-imports/libunwind/src/tilegx/siglongjmp.S b/frysk-imports/libunwind/src/tilegx/siglongjmp.S -new file mode 100644 -index 0000000..bccb1c7 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/siglongjmp.S -@@ -0,0 +1,7 @@ -+ /* Dummy implementation for now. */ -+ .globl _UI_siglongjmp_cont -+ .globl _UI_longjmp_cont -+ -+_UI_siglongjmp_cont: -+_UI_longjmp_cont: -+ jrp lr -diff --git a/frysk-imports/libunwind/src/tilegx/unwind_i.h b/frysk-imports/libunwind/src/tilegx/unwind_i.h -new file mode 100644 -index 0000000..aac7be3 ---- /dev/null -+++ b/frysk-imports/libunwind/src/tilegx/unwind_i.h -@@ -0,0 +1,44 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 CodeSourcery -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef unwind_i_h -+#define unwind_i_h -+ -+#include -+#include -+ -+#include -+ -+#include "libunwind_i.h" -+ -+#define tilegx_local_resume UNW_OBJ(local_resume) -+#define tilegx_local_addr_space_init UNW_OBJ(local_addr_space_init) -+ -+extern int tilegx_local_resume (unw_addr_space_t as, -+ unw_cursor_t *cursor, -+ void *arg); -+ -+extern void tilegx_local_addr_space_init (void); -+ -+#endif /* unwind_i_h */ -diff --git a/frysk-imports/libunwind/src/unwind/Backtrace.c b/frysk-imports/libunwind/src/unwind/Backtrace.c -index 99c20fc..50f1fb6 100644 ---- a/frysk-imports/libunwind/src/unwind/Backtrace.c -+++ b/frysk-imports/libunwind/src/unwind/Backtrace.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -40,15 +40,15 @@ _Unwind_Backtrace (_Unwind_Trace_Fn trace, void *trace_parameter) - while (1) - { - if ((ret = unw_step (&context.cursor)) <= 0) -- { -- if (ret == 0) -- return _URC_END_OF_STACK; -- else -- return _URC_FATAL_PHASE1_ERROR; -- } -+ { -+ if (ret == 0) -+ return _URC_END_OF_STACK; -+ else -+ return _URC_FATAL_PHASE1_ERROR; -+ } - - if ((*trace) (&context, trace_parameter) != _URC_NO_REASON) -- return _URC_FATAL_PHASE1_ERROR; -+ return _URC_FATAL_PHASE1_ERROR; - } - } - -diff --git a/frysk-imports/libunwind/src/unwind/DeleteException.c b/frysk-imports/libunwind/src/unwind/DeleteException.c -index 5104b73..79be65e 100644 ---- a/frysk-imports/libunwind/src/unwind/DeleteException.c -+++ b/frysk-imports/libunwind/src/unwind/DeleteException.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/FindEnclosingFunction.c b/frysk-imports/libunwind/src/unwind/FindEnclosingFunction.c -index e639894..b9873da 100644 ---- a/frysk-imports/libunwind/src/unwind/FindEnclosingFunction.c -+++ b/frysk-imports/libunwind/src/unwind/FindEnclosingFunction.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -31,7 +31,7 @@ _Unwind_FindEnclosingFunction (void *ip) - unw_proc_info_t pi; - - if (unw_get_proc_info_by_ip (unw_local_addr_space, -- (unw_word_t) (uintptr_t) ip, &pi, 0) -+ (unw_word_t) (uintptr_t) ip, &pi, 0) - < 0) - return NULL; - -diff --git a/frysk-imports/libunwind/src/unwind/ForcedUnwind.c b/frysk-imports/libunwind/src/unwind/ForcedUnwind.c -index bd334d3..da8a60e 100644 ---- a/frysk-imports/libunwind/src/unwind/ForcedUnwind.c -+++ b/frysk-imports/libunwind/src/unwind/ForcedUnwind.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,7 +27,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - PROTECTED _Unwind_Reason_Code - _Unwind_ForcedUnwind (struct _Unwind_Exception *exception_object, -- _Unwind_Stop_Fn stop, void *stop_parameter) -+ _Unwind_Stop_Fn stop, void *stop_parameter) - { - struct _Unwind_Context context; - unw_context_t uc; -@@ -48,5 +48,5 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exception_object, - } - - _Unwind_Reason_Code __libunwind_Unwind_ForcedUnwind (struct _Unwind_Exception*, -- _Unwind_Stop_Fn, void *) -+ _Unwind_Stop_Fn, void *) - ALIAS (_Unwind_ForcedUnwind); -diff --git a/frysk-imports/libunwind/src/unwind/GetBSP.c b/frysk-imports/libunwind/src/unwind/GetBSP.c -index d53e401..253fde0 100644 ---- a/frysk-imports/libunwind/src/unwind/GetBSP.c -+++ b/frysk-imports/libunwind/src/unwind/GetBSP.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/GetCFA.c b/frysk-imports/libunwind/src/unwind/GetCFA.c -index bd8559b..7975b1d 100644 ---- a/frysk-imports/libunwind/src/unwind/GetCFA.c -+++ b/frysk-imports/libunwind/src/unwind/GetCFA.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/GetDataRelBase.c b/frysk-imports/libunwind/src/unwind/GetDataRelBase.c -index cb60476..9bdd4cb 100644 ---- a/frysk-imports/libunwind/src/unwind/GetDataRelBase.c -+++ b/frysk-imports/libunwind/src/unwind/GetDataRelBase.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/GetGR.c b/frysk-imports/libunwind/src/unwind/GetGR.c -index 3a875e8..b7ab05c 100644 ---- a/frysk-imports/libunwind/src/unwind/GetGR.c -+++ b/frysk-imports/libunwind/src/unwind/GetGR.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/GetIP.c b/frysk-imports/libunwind/src/unwind/GetIP.c -index 6fd48a2..e93853d 100644 ---- a/frysk-imports/libunwind/src/unwind/GetIP.c -+++ b/frysk-imports/libunwind/src/unwind/GetIP.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/GetIPInfo.c b/frysk-imports/libunwind/src/unwind/GetIPInfo.c -new file mode 100644 -index 0000000..9105396 ---- /dev/null -+++ b/frysk-imports/libunwind/src/unwind/GetIPInfo.c -@@ -0,0 +1,42 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2009 Red Hat -+ Contributed by Jan Kratochvil -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind-internal.h" -+ -+/* gcc/unwind-dw2.c: Retrieve the return address and flag whether that IP is -+ before or after first not yet fully executed instruction. */ -+ -+PROTECTED unsigned long -+_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) -+{ -+ unw_word_t val; -+ -+ unw_get_reg (&context->cursor, UNW_REG_IP, &val); -+ *ip_before_insn = unw_is_signal_frame (&context->cursor); -+ return val; -+} -+ -+unsigned long __libunwind_Unwind_GetIPInfo (struct _Unwind_Context *, int *) -+ ALIAS (_Unwind_GetIPInfo); -diff --git a/frysk-imports/libunwind/src/unwind/GetLanguageSpecificData.c b/frysk-imports/libunwind/src/unwind/GetLanguageSpecificData.c -index eefcec7..df52c92 100644 ---- a/frysk-imports/libunwind/src/unwind/GetLanguageSpecificData.c -+++ b/frysk-imports/libunwind/src/unwind/GetLanguageSpecificData.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/GetRegionStart.c b/frysk-imports/libunwind/src/unwind/GetRegionStart.c -index 11c3460..f0da344 100644 ---- a/frysk-imports/libunwind/src/unwind/GetRegionStart.c -+++ b/frysk-imports/libunwind/src/unwind/GetRegionStart.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/GetTextRelBase.c b/frysk-imports/libunwind/src/unwind/GetTextRelBase.c -index a53ca9b..d0826e7 100644 ---- a/frysk-imports/libunwind/src/unwind/GetTextRelBase.c -+++ b/frysk-imports/libunwind/src/unwind/GetTextRelBase.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/RaiseException.c b/frysk-imports/libunwind/src/unwind/RaiseException.c -index 5533876..cdf134a 100644 ---- a/frysk-imports/libunwind/src/unwind/RaiseException.c -+++ b/frysk-imports/libunwind/src/unwind/RaiseException.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - PROTECTED _Unwind_Reason_Code - _Unwind_RaiseException (struct _Unwind_Exception *exception_object) - { -- unsigned long exception_class = exception_object->exception_class; -+ uint64_t exception_class = exception_object->exception_class; - _Unwind_Personality_Fn personality; - struct _Unwind_Context context; - _Unwind_Reason_Code reason; -@@ -47,36 +47,36 @@ _Unwind_RaiseException (struct _Unwind_Exception *exception_object) - while (1) - { - if ((ret = unw_step (&context.cursor)) <= 0) -- { -- if (ret == 0) -- { -- Debug (1, "no handler found\n"); -- return _URC_END_OF_STACK; -- } -- else -- return _URC_FATAL_PHASE1_ERROR; -- } -+ { -+ if (ret == 0) -+ { -+ Debug (1, "no handler found\n"); -+ return _URC_END_OF_STACK; -+ } -+ else -+ return _URC_FATAL_PHASE1_ERROR; -+ } - - if (unw_get_proc_info (&context.cursor, &pi) < 0) -- return _URC_FATAL_PHASE1_ERROR; -+ return _URC_FATAL_PHASE1_ERROR; - - personality = (_Unwind_Personality_Fn) (uintptr_t) pi.handler; - if (personality) -- { -- reason = (*personality) (_U_VERSION, _UA_SEARCH_PHASE, -- exception_class, exception_object, -- &context); -- if (reason != _URC_CONTINUE_UNWIND) -- { -- if (reason == _URC_HANDLER_FOUND) -- break; -- else -- { -- Debug (1, "personality returned %d\n", reason); -- return _URC_FATAL_PHASE1_ERROR; -- } -- } -- } -+ { -+ reason = (*personality) (_U_VERSION, _UA_SEARCH_PHASE, -+ exception_class, exception_object, -+ &context); -+ if (reason != _URC_CONTINUE_UNWIND) -+ { -+ if (reason == _URC_HANDLER_FOUND) -+ break; -+ else -+ { -+ Debug (1, "personality returned %d\n", reason); -+ return _URC_FATAL_PHASE1_ERROR; -+ } -+ } -+ } - } - - /* Exceptions are associated with IP-ranges. If a given exception -@@ -86,8 +86,8 @@ _Unwind_RaiseException (struct _Unwind_Exception *exception_object) - the exception. */ - if (unw_get_reg (&context.cursor, UNW_REG_IP, &ip) < 0) - return _URC_FATAL_PHASE1_ERROR; -- exception_object->private_1 = 0; /* clear "stop" pointer */ -- exception_object->private_2 = ip; /* save frame marker */ -+ exception_object->private_1 = 0; /* clear "stop" pointer */ -+ exception_object->private_2 = ip; /* save frame marker */ - - Debug (1, "found handler for IP=%lx; entering cleanup phase\n", (long) ip); - -diff --git a/frysk-imports/libunwind/src/unwind/Resume.c b/frysk-imports/libunwind/src/unwind/Resume.c -index ddf9d2c..dd0a44b 100644 ---- a/frysk-imports/libunwind/src/unwind/Resume.c -+++ b/frysk-imports/libunwind/src/unwind/Resume.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/Resume_or_Rethrow.c b/frysk-imports/libunwind/src/unwind/Resume_or_Rethrow.c -index ece0ced..d60e038 100644 ---- a/frysk-imports/libunwind/src/unwind/Resume_or_Rethrow.c -+++ b/frysk-imports/libunwind/src/unwind/Resume_or_Rethrow.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -34,7 +34,7 @@ _Unwind_Resume_or_Rethrow (struct _Unwind_Exception *exception_object) - if (exception_object->private_1) - { - if (_Unwind_InitContext (&context, &uc) < 0) -- return _URC_FATAL_PHASE2_ERROR; -+ return _URC_FATAL_PHASE2_ERROR; - - return _Unwind_Phase2 (exception_object, &context); - } -diff --git a/frysk-imports/libunwind/src/unwind/SetGR.c b/frysk-imports/libunwind/src/unwind/SetGR.c -index 056bfc7..143b354 100644 ---- a/frysk-imports/libunwind/src/unwind/SetGR.c -+++ b/frysk-imports/libunwind/src/unwind/SetGR.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -24,11 +24,17 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "unwind-internal.h" -+#ifdef UNW_TARGET_X86 -+#include "dwarf_i.h" -+#endif - - PROTECTED void - _Unwind_SetGR (struct _Unwind_Context *context, int index, -- unsigned long new_value) -+ unsigned long new_value) - { -+#ifdef UNW_TARGET_X86 -+ index = dwarf_to_unw_regnum(index); -+#endif - unw_set_reg (&context->cursor, index, new_value); - #ifdef UNW_TARGET_IA64 - if (index >= UNW_IA64_GR && index <= UNW_IA64_GR + 127) -diff --git a/frysk-imports/libunwind/src/unwind/SetIP.c b/frysk-imports/libunwind/src/unwind/SetIP.c -index 0652a14..c55ab97 100644 ---- a/frysk-imports/libunwind/src/unwind/SetIP.c -+++ b/frysk-imports/libunwind/src/unwind/SetIP.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -diff --git a/frysk-imports/libunwind/src/unwind/libunwind.pc.in b/frysk-imports/libunwind/src/unwind/libunwind.pc.in -new file mode 100644 -index 0000000..1505c5d ---- /dev/null -+++ b/frysk-imports/libunwind/src/unwind/libunwind.pc.in -@@ -0,0 +1,11 @@ -+prefix=@prefix@ -+exec_prefix=@exec_prefix@ -+libdir=@libdir@ -+includedir=@includedir@ -+ -+Name: libunwind -+Description: libunwind base library -+Version: @VERSION@ -+Libs: -L${libdir} -lunwind -+Libs.private: @LIBLZMA@ -+Cflags: -I${includedir} -diff --git a/frysk-imports/libunwind/src/unwind/unwind-internal.h b/frysk-imports/libunwind/src/unwind/unwind-internal.h -index 169bad5..c68fc3c 100644 ---- a/frysk-imports/libunwind/src/unwind/unwind-internal.h -+++ b/frysk-imports/libunwind/src/unwind/unwind-internal.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -35,31 +35,31 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "libunwind_i.h" - - /* The version of the _Unwind_*() interface implemented by this code. */ --#define _U_VERSION 1 -+#define _U_VERSION 1 - - typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn) -- (int, _Unwind_Action, unsigned long, struct _Unwind_Exception *, -- struct _Unwind_Context *); -+ (int, _Unwind_Action, uint64_t, struct _Unwind_Exception *, -+ struct _Unwind_Context *); - - struct _Unwind_Context { - unw_cursor_t cursor; -- int end_of_stack; /* set to 1 if the end of stack was reached */ -+ int end_of_stack; /* set to 1 if the end of stack was reached */ - }; - - /* This must be a macro because unw_getcontext() must be invoked from - the callee, even if optimization (and hence inlining) is turned - off. The macro arguments MUST NOT have any side-effects. */ --#define _Unwind_InitContext(context, uc) \ -- ((context)->end_of_stack = 0, \ -+#define _Unwind_InitContext(context, uc) \ -+ ((context)->end_of_stack = 0, \ - ((unw_getcontext (uc) < 0 || unw_init_local (&(context)->cursor, uc) < 0) \ - ? -1 : 0)) - - static _Unwind_Reason_Code ALWAYS_INLINE - _Unwind_Phase2 (struct _Unwind_Exception *exception_object, -- struct _Unwind_Context *context) -+ struct _Unwind_Context *context) - { - _Unwind_Stop_Fn stop = (_Unwind_Stop_Fn) exception_object->private_1; -- unsigned long exception_class = exception_object->exception_class; -+ uint64_t exception_class = exception_object->exception_class; - void *stop_parameter = (void *) exception_object->private_2; - _Unwind_Personality_Fn personality; - _Unwind_Reason_Code reason; -@@ -76,65 +76,65 @@ _Unwind_Phase2 (struct _Unwind_Exception *exception_object, - { - ret = unw_step (&context->cursor); - if (ret <= 0) -- { -- if (ret == 0) -- { -- actions |= _UA_END_OF_STACK; -- context->end_of_stack = 1; -- } -- else -- return _URC_FATAL_PHASE2_ERROR; -- } -+ { -+ if (ret == 0) -+ { -+ actions |= _UA_END_OF_STACK; -+ context->end_of_stack = 1; -+ } -+ else -+ return _URC_FATAL_PHASE2_ERROR; -+ } - - if (stop) -- { -- reason = (*stop) (_U_VERSION, actions, exception_class, -- exception_object, context, stop_parameter); -- if (reason != _URC_NO_REASON) -- /* Stop function may return _URC_FATAL_PHASE2_ERROR if -- it's unable to handle end-of-stack condition or -- _URC_FATAL_PHASE2_ERROR if something is wrong. Not -- that it matters: the resulting state is indeterminate -- anyhow so we must return _URC_FATAL_PHASE2_ERROR... */ -- return _URC_FATAL_PHASE2_ERROR; -- } -+ { -+ reason = (*stop) (_U_VERSION, actions, exception_class, -+ exception_object, context, stop_parameter); -+ if (reason != _URC_NO_REASON) -+ /* Stop function may return _URC_FATAL_PHASE2_ERROR if -+ it's unable to handle end-of-stack condition or -+ _URC_FATAL_PHASE2_ERROR if something is wrong. Not -+ that it matters: the resulting state is indeterminate -+ anyhow so we must return _URC_FATAL_PHASE2_ERROR... */ -+ return _URC_FATAL_PHASE2_ERROR; -+ } - - if (context->end_of_stack -- || unw_get_proc_info (&context->cursor, &pi) < 0) -- return _URC_FATAL_PHASE2_ERROR; -+ || unw_get_proc_info (&context->cursor, &pi) < 0) -+ return _URC_FATAL_PHASE2_ERROR; - - personality = (_Unwind_Personality_Fn) (uintptr_t) pi.handler; - if (personality) -- { -- if (!stop) -- { -- if (unw_get_reg (&context->cursor, UNW_REG_IP, &ip) < 0) -- return _URC_FATAL_PHASE2_ERROR; -- -- if ((unsigned long) stop_parameter == ip) -- actions |= _UA_HANDLER_FRAME; -- } -- -- reason = (*personality) (_U_VERSION, actions, exception_class, -- exception_object, context); -- if (reason != _URC_CONTINUE_UNWIND) -- { -- if (reason == _URC_INSTALL_CONTEXT) -- { -- /* we may regain control via _Unwind_Resume() */ -- unw_resume (&context->cursor); -- abort (); -- } -- else -- return _URC_FATAL_PHASE2_ERROR; -- } -- if (actions & _UA_HANDLER_FRAME) -- /* The personality routine for the handler-frame changed -- it's mind; that's a no-no... */ -- abort (); -- } -+ { -+ if (!stop) -+ { -+ if (unw_get_reg (&context->cursor, UNW_REG_IP, &ip) < 0) -+ return _URC_FATAL_PHASE2_ERROR; -+ -+ if ((unsigned long) stop_parameter == ip) -+ actions |= _UA_HANDLER_FRAME; -+ } -+ -+ reason = (*personality) (_U_VERSION, actions, exception_class, -+ exception_object, context); -+ if (reason != _URC_CONTINUE_UNWIND) -+ { -+ if (reason == _URC_INSTALL_CONTEXT) -+ { -+ /* we may regain control via _Unwind_Resume() */ -+ unw_resume (&context->cursor); -+ abort (); -+ } -+ else -+ return _URC_FATAL_PHASE2_ERROR; -+ } -+ if (actions & _UA_HANDLER_FRAME) -+ /* The personality routine for the handler-frame changed -+ it's mind; that's a no-no... */ -+ abort (); -+ } - } -- return _URC_FATAL_PHASE2_ERROR; /* shouldn't be reached */ -+ return _URC_FATAL_PHASE2_ERROR; /* shouldn't be reached */ - } - - #endif /* unwind_internal_h */ -diff --git a/frysk-imports/libunwind/src/x86/Gcreate_addr_space.c b/frysk-imports/libunwind/src/x86/Gcreate_addr_space.c -index fd850c4..45fec6d 100644 ---- a/frysk-imports/libunwind/src/x86/Gcreate_addr_space.c -+++ b/frysk-imports/libunwind/src/x86/Gcreate_addr_space.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -27,14 +27,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "unwind_i.h" - -+#if defined(_LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN) -+#define __LITTLE_ENDIAN _LITTLE_ENDIAN -+#endif -+ - PROTECTED unw_addr_space_t - unw_create_addr_space (unw_accessors_t *a, int byte_order) - { - #ifdef UNW_LOCAL_ONLY - return NULL; - #else -- unw_addr_space_t as = malloc (sizeof (*as)); -+ unw_addr_space_t as; - -+ /* -+ * x86 supports only little-endian. -+ */ -+ if (byte_order != 0 && byte_order != __LITTLE_ENDIAN) -+ return NULL; -+ -+ as = malloc (sizeof (*as)); - if (!as) - return NULL; - -@@ -42,11 +53,6 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - - as->acc = *a; - -- /* -- * x86 supports only little-endian. -- */ -- if (byte_order != 0 && byte_order != __LITTLE_ENDIAN) -- return NULL; - return as; - #endif - } -diff --git a/frysk-imports/libunwind/src/x86/Gfetch_proc_info_post.c b/frysk-imports/libunwind/src/x86/Gfetch_proc_info_post.c -deleted file mode 100644 -index 7aa97b6..0000000 ---- a/frysk-imports/libunwind/src/x86/Gfetch_proc_info_post.c -+++ /dev/null -@@ -1,51 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (c) 2006 Hewlett-Packard Development Company, L.P. -- Contributed by Jan Kratochvil -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "libunwind_i.h" -- --HIDDEN int --tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip, int need_unwind_info) --{ -- struct cursor *cursor = (struct cursor *) c; -- -- /* Should happen only if `!need_unwind_info'. */ -- if (!c->pi_valid) -- return 0; -- /* Should happen only if `!need_unwind_info'. */ -- if (!c->pi.unwind_info) -- return 0; -- -- /* Reset the value for this frame. */ -- cursor->sigcontext_format = X86_SCF_NONE; -- -- /* Normal non-signal frames case. */ -- if (!((struct dwarf_cie_info *) c->pi.unwind_info)->signal_frame) -- return 0; -- -- cursor->sigcontext_format = X86_SCF_LINUX_SIGFRAME; -- cursor->sigcontext_addr = c->cfa + 4; -- -- return 0; --} -diff --git a/frysk-imports/libunwind/src/x86/Gget_proc_info.c b/frysk-imports/libunwind/src/x86/Gget_proc_info.c -index a533483..45b4cd5 100644 ---- a/frysk-imports/libunwind/src/x86/Gget_proc_info.c -+++ b/frysk-imports/libunwind/src/x86/Gget_proc_info.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2002-2003 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -33,8 +33,8 @@ unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) - if (dwarf_make_proc_info (&c->dwarf) < 0) - { - /* On x86, it's relatively common to be missing DWARF unwind -- info. We don't want to fail in that case, because the -- frame-chain still would let us do a backtrace at least. */ -+ info. We don't want to fail in that case, because the -+ frame-chain still would let us do a backtrace at least. */ - memset (pi, 0, sizeof (*pi)); - pi->start_ip = c->dwarf.ip; - pi->end_ip = c->dwarf.ip + 1; -diff --git a/frysk-imports/libunwind/src/x86/Gget_save_loc.c b/frysk-imports/libunwind/src/x86/Gget_save_loc.c -index 6e6f9dc..d440f9e 100644 ---- a/frysk-imports/libunwind/src/x86/Gget_save_loc.c -+++ b/frysk-imports/libunwind/src/x86/Gget_save_loc.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -31,7 +31,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - struct cursor *c = (struct cursor *) cursor; - dwarf_loc_t loc; - -- loc = DWARF_NULL_LOC; /* default to "not saved" */ -+ loc = DWARF_NULL_LOC; /* default to "not saved" */ - - switch (reg) - { -@@ -109,7 +109,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - break; - } - -- memset (sloc, 0, sizeof (sloc)); -+ memset (sloc, 0, sizeof (*sloc)); - - if (DWARF_IS_NULL_LOC (loc)) - { -diff --git a/frysk-imports/libunwind/src/x86/Gglobal.c b/frysk-imports/libunwind/src/x86/Gglobal.c -index e55644c..132b824 100644 ---- a/frysk-imports/libunwind/src/x86/Gglobal.c -+++ b/frysk-imports/libunwind/src/x86/Gglobal.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,12 +26,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - #include "dwarf_i.h" - --HIDDEN pthread_mutex_t x86_lock = PTHREAD_MUTEX_INITIALIZER; --HIDDEN int tdep_needs_initialization = 1; -+HIDDEN define_lock (x86_lock); -+HIDDEN int tdep_init_done; - - /* See comments for svr4_dbx_register_map[] in gcc/config/i386/i386.c. */ - --HIDDEN uint8_t dwarf_to_unw_regnum_map[19] = -+HIDDEN const uint8_t dwarf_to_unw_regnum_map[19] = - { - UNW_X86_EAX, UNW_X86_ECX, UNW_X86_EDX, UNW_X86_EBX, - UNW_X86_ESP, UNW_X86_EBP, UNW_X86_ESI, UNW_X86_EDI, -@@ -47,10 +47,9 @@ tdep_init (void) - - sigfillset (&unwi_full_mask); - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- mutex_lock (&x86_lock); -+ lock_acquire (&x86_lock, saved_mask); - { -- if (!tdep_needs_initialization) -+ if (tdep_init_done) - /* another thread else beat us to it... */ - goto out; - -@@ -61,9 +60,8 @@ tdep_init (void) - #ifndef UNW_REMOTE_ONLY - x86_local_addr_space_init (); - #endif -- tdep_needs_initialization = 0; /* signal that we're initialized... */ -+ tdep_init_done = 1; /* signal that we're initialized... */ - } - out: -- mutex_unlock (&x86_lock); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ lock_release (&x86_lock, saved_mask); - } -diff --git a/frysk-imports/libunwind/src/x86/Ginit.c b/frysk-imports/libunwind/src/x86/Ginit.c -index abc9e61..b05a08e 100644 ---- a/frysk-imports/libunwind/src/x86/Ginit.c -+++ b/frysk-imports/libunwind/src/x86/Ginit.c -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -24,6 +24,10 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ - #include - #include - -@@ -40,43 +44,12 @@ static struct unw_addr_space local_addr_space; - - PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; - --static inline void * --uc_addr (ucontext_t *uc, int reg) --{ -- void *addr; -- -- switch (reg) -- { -- case UNW_X86_GS: addr = &uc->uc_mcontext.gregs[REG_GS]; break; -- case UNW_X86_FS: addr = &uc->uc_mcontext.gregs[REG_FS]; break; -- case UNW_X86_ES: addr = &uc->uc_mcontext.gregs[REG_ES]; break; -- case UNW_X86_DS: addr = &uc->uc_mcontext.gregs[REG_DS]; break; -- case UNW_X86_EAX: addr = &uc->uc_mcontext.gregs[REG_EAX]; break; -- case UNW_X86_EBX: addr = &uc->uc_mcontext.gregs[REG_EBX]; break; -- case UNW_X86_ECX: addr = &uc->uc_mcontext.gregs[REG_ECX]; break; -- case UNW_X86_EDX: addr = &uc->uc_mcontext.gregs[REG_EDX]; break; -- case UNW_X86_ESI: addr = &uc->uc_mcontext.gregs[REG_ESI]; break; -- case UNW_X86_EDI: addr = &uc->uc_mcontext.gregs[REG_EDI]; break; -- case UNW_X86_EBP: addr = &uc->uc_mcontext.gregs[REG_EBP]; break; -- case UNW_X86_EIP: addr = &uc->uc_mcontext.gregs[REG_EIP]; break; -- case UNW_X86_ESP: addr = &uc->uc_mcontext.gregs[REG_ESP]; break; -- case UNW_X86_TRAPNO: addr = &uc->uc_mcontext.gregs[REG_TRAPNO]; break; -- case UNW_X86_CS: addr = &uc->uc_mcontext.gregs[REG_CS]; break; -- case UNW_X86_EFLAGS: addr = &uc->uc_mcontext.gregs[REG_EFL]; break; -- case UNW_X86_SS: addr = &uc->uc_mcontext.gregs[REG_SS]; break; -- -- default: -- addr = NULL; -- } -- return addr; --} -- - # ifdef UNW_LOCAL_ONLY - - HIDDEN void * - tdep_uc_addr (ucontext_t *uc, int reg) - { -- return uc_addr (uc, reg); -+ return x86_r_uc_addr (uc, reg); - } - - # endif /* UNW_LOCAL_ONLY */ -@@ -96,15 +69,72 @@ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - - static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -- void *arg) -+ void *arg) - { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; - return 0; - } - -+#define PAGE_SIZE 4096 -+#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1)) -+ -+/* Cache of already validated addresses */ -+#define NLGA 4 -+static unw_word_t last_good_addr[NLGA]; -+static int lga_victim; -+ -+static int -+validate_mem (unw_word_t addr) -+{ -+ int i, victim; -+#ifdef HAVE_MINCORE -+ unsigned char mvec[2]; /* Unaligned access may cross page boundary */ -+#endif -+ size_t len; -+ -+ if (PAGE_START(addr + sizeof (unw_word_t) - 1) == PAGE_START(addr)) -+ len = PAGE_SIZE; -+ else -+ len = PAGE_SIZE * 2; -+ -+ addr = PAGE_START(addr); -+ -+ if (addr == 0) -+ return -1; -+ -+ for (i = 0; i < NLGA; i++) -+ { -+ if (last_good_addr[i] && (addr == last_good_addr[i])) -+ return 0; -+ } -+ -+#ifdef HAVE_MINCORE -+ if (mincore ((void *) addr, len, mvec) == -1) -+#else -+ if (msync ((void *) addr, len, MS_ASYNC) == -1) -+#endif -+ return -1; -+ -+ victim = lga_victim; -+ for (i = 0; i < NLGA; i++) { -+ if (!last_good_addr[victim]) { -+ last_good_addr[victim++] = addr; -+ return 0; -+ } -+ victim = (victim + 1) % NLGA; -+ } -+ -+ /* All slots full. Evict the victim. */ -+ last_good_addr[victim] = addr; -+ victim = (victim + 1) % NLGA; -+ lga_victim = victim; -+ -+ return 0; -+} -+ - static int - access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - if (write) - { -@@ -113,6 +143,10 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - } - else - { -+ /* validate address */ -+ const struct cursor *c = (const struct cursor *)arg; -+ if (c && c->validate && validate_mem(addr)) -+ return -1; - *val = *(unw_word_t *) addr; - Debug (16, "mem[%x] -> %x\n", addr, *val); - } -@@ -121,15 +155,15 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - unw_word_t *addr; -- ucontext_t *uc = arg; -+ ucontext_t *uc = ((struct cursor *)arg)->uc; - - if (unw_is_fpreg (reg)) - goto badreg; - -- if (!(addr = uc_addr (uc, reg))) -+ if (!(addr = x86_r_uc_addr (uc, reg))) - goto badreg; - - if (write) -@@ -151,28 +185,28 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { -- ucontext_t *uc = arg; -+ ucontext_t *uc = ((struct cursor *)arg)->uc; - unw_fpreg_t *addr; - - if (!unw_is_fpreg (reg)) - goto badreg; - -- if (!(addr = uc_addr (uc, reg))) -+ if (!(addr = x86_r_uc_addr (uc, reg))) - goto badreg; - - if (write) - { - Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), -- ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); - *(unw_fpreg_t *) addr = *val; - } - else - { - *val = *(unw_fpreg_t *) addr; - Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), -- ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); - } - return 0; - -@@ -184,8 +218,8 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - - static int - get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, -- void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) - { - return _Uelf32_get_proc_name (as, getpid (), ip, buf, buf_len, offp); - } -diff --git a/frysk-imports/libunwind/src/x86/Ginit_local.c b/frysk-imports/libunwind/src/x86/Ginit_local.c -index 7b86d6e..02fb994 100644 ---- a/frysk-imports/libunwind/src/x86/Ginit_local.c -+++ b/frysk-imports/libunwind/src/x86/Ginit_local.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2002-2003 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -41,14 +41,16 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) - { - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = unw_local_addr_space; -- c->dwarf.as_arg = uc; -- return common_init (c); -+ c->dwarf.as_arg = c; -+ c->uc = uc; -+ c->validate = 0; -+ return common_init (c, 1); - } - - #endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/x86/Ginit_remote.c b/frysk-imports/libunwind/src/x86/Ginit_remote.c -index 5d3827d..16b6395 100644 ---- a/frysk-imports/libunwind/src/x86/Ginit_remote.c -+++ b/frysk-imports/libunwind/src/x86/Ginit_remote.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -34,13 +34,23 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) - #else /* !UNW_LOCAL_ONLY */ - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = as; - c->dwarf.as_arg = as_arg; -- return common_init (c); -+ if (as == unw_local_addr_space) -+ { -+ c->dwarf.as_arg = c; -+ c->uc = as_arg; -+ } -+ else -+ { -+ c->dwarf.as_arg = as_arg; -+ c->uc = 0; -+ } -+ return common_init (c, 0); - #endif /* !UNW_LOCAL_ONLY */ - } -diff --git a/frysk-imports/libunwind/src/x86/Gis_signal_frame.c b/frysk-imports/libunwind/src/x86/Gis_signal_frame.c -deleted file mode 100644 -index df381eb..0000000 ---- a/frysk-imports/libunwind/src/x86/Gis_signal_frame.c -+++ /dev/null -@@ -1,71 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (C) 2002-2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "unwind_i.h" -- --PROTECTED int --unw_is_signal_frame (unw_cursor_t *cursor) --{ --#ifdef __linux__ -- struct cursor *c = (struct cursor *) cursor; -- unw_word_t w0, w1, ip; -- unw_addr_space_t as; -- unw_accessors_t *a; -- void *arg; -- int ret; -- -- as = c->dwarf.as; -- a = unw_get_accessors (as); -- arg = c->dwarf.as_arg; -- -- /* Check if EIP points at sigreturn() sequence. On Linux, this is: -- -- __restore: -- 0x58 pop %eax -- 0xb8 0x77 0x00 0x00 0x00 movl 0x77,%eax -- 0xcd 0x80 int 0x80 -- -- without SA_SIGINFO, and -- -- __restore_rt: -- 0xb8 0xad 0x00 0x00 0x00 movl 0x80,%eax -- 0xcd 0x80 int 0x80 -- 0x90 nop -- -- if SA_SIGINFO is specified. -- */ -- ip = c->dwarf.ip; -- if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0 -- || (ret = (*a->access_mem) (as, ip + 4, &w1, 0, arg)) < 0) -- return ret; -- ret = ((w0 == 0x0077b858 && w1 == 0x80cd0000) -- || (w0 == 0x0000adb8 && w1 == 0x9080cd00)); -- Debug (16, "returning %d\n", ret); -- return ret; --#else -- printf ("%s: implement me\n", __FUNCTION__); --#endif -- return -UNW_ENOINFO; --} -diff --git a/frysk-imports/libunwind/src/x86/Gos-freebsd.c b/frysk-imports/libunwind/src/x86/Gos-freebsd.c -new file mode 100644 -index 0000000..cf05f07 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86/Gos-freebsd.c -@@ -0,0 +1,374 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010 Konstantin Belousov -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "unwind_i.h" -+#include "offsets.h" -+ -+PROTECTED int -+unw_is_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t w0, w1, w2, w3, w4, w5, ip; -+ unw_addr_space_t as; -+ unw_accessors_t *a; -+ void *arg; -+ int ret; -+ -+ as = c->dwarf.as; -+ a = unw_get_accessors (as); -+ arg = c->dwarf.as_arg; -+ -+ /* Check if EIP points at sigreturn() sequence. It can be: -+sigcode+4: from amd64 freebsd32 environment -+8d 44 24 20 lea 0x20(%esp),%eax -+50 push %eax -+b8 a1 01 00 00 mov $0x1a1,%eax -+50 push %eax -+cd 80 int $0x80 -+ -+sigcode+4: from real i386 -+8d 44 24 20 lea 0x20(%esp),%eax -+50 push %eax -+f7 40 54 00 02 00 testl $0x20000,0x54(%eax) -+75 03 jne sigcode+21 -+8e 68 14 mov 0x14(%eax),%gs -+b8 a1 01 00 00 mov $0x1a1,%eax -+50 push %eax -+cd 80 int $0x80 -+ -+freebsd4_sigcode+4: -+XXX -+osigcode: -+XXX -+ */ -+ ip = c->dwarf.ip; -+ ret = X86_SCF_NONE; -+ c->sigcontext_format = ret; -+ if ((*a->access_mem) (as, ip, &w0, 0, arg) < 0 || -+ (*a->access_mem) (as, ip + 4, &w1, 0, arg) < 0 || -+ (*a->access_mem) (as, ip + 8, &w2, 0, arg) < 0 || -+ (*a->access_mem) (as, ip + 12, &w3, 0, arg) < 0) -+ return ret; -+ if (w0 == 0x2024448d && w1 == 0x01a1b850 && w2 == 0xcd500000 && -+ (w3 & 0xff) == 0x80) -+ ret = X86_SCF_FREEBSD_SIGFRAME; -+ else { -+ if ((*a->access_mem) (as, ip + 16, &w4, 0, arg) < 0 || -+ (*a->access_mem) (as, ip + 20, &w5, 0, arg) < 0) -+ return ret; -+ if (w0 == 0x2024448d && w1 == 0x5440f750 && w2 == 0x75000200 && -+ w3 == 0x14688e03 && w4 == 0x0001a1b8 && w5 == 0x80cd5000) -+ ret = X86_SCF_FREEBSD_SIGFRAME; -+ } -+ -+ /* Check for syscall */ -+ if (ret == X86_SCF_NONE && (*a->access_mem) (as, ip - 2, &w0, 0, arg) >= 0 && -+ (w0 & 0xffff) == 0x80cd) -+ ret = X86_SCF_FREEBSD_SYSCALL; -+ Debug (16, "returning %d\n", ret); -+ c->sigcontext_format = ret; -+ return (ret); -+} -+ -+PROTECTED int -+unw_handle_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ if (c->sigcontext_format == X86_SCF_FREEBSD_SIGFRAME) { -+ struct sigframe *sf; -+ uintptr_t uc_addr; -+ struct dwarf_loc esp_loc; -+ -+ sf = (struct sigframe *)c->dwarf.cfa; -+ uc_addr = (uintptr_t)&(sf->sf_uc); -+ c->sigcontext_addr = c->dwarf.cfa; -+ -+ esp_loc = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_ESP_OFF, 0); -+ ret = dwarf_get (&c->dwarf, esp_loc, &c->dwarf.cfa); -+ if (ret < 0) -+ { -+ Debug (2, "returning 0\n"); -+ return 0; -+ } -+ -+ c->dwarf.loc[EIP] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_EIP_OFF, 0); -+ c->dwarf.loc[ESP] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_ESP_OFF, 0); -+ c->dwarf.loc[EAX] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_EAX_OFF, 0); -+ c->dwarf.loc[ECX] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_ECX_OFF, 0); -+ c->dwarf.loc[EDX] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_EDX_OFF, 0); -+ c->dwarf.loc[EBX] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_EBX_OFF, 0); -+ c->dwarf.loc[EBP] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_EBP_OFF, 0); -+ c->dwarf.loc[ESI] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_ESI_OFF, 0); -+ c->dwarf.loc[EDI] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_EDI_OFF, 0); -+ c->dwarf.loc[EFLAGS] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_EFLAGS_OFF, 0); -+ c->dwarf.loc[TRAPNO] = DWARF_LOC (uc_addr + FREEBSD_UC_MCONTEXT_TRAPNO_OFF, 0); -+ c->dwarf.loc[ST0] = DWARF_NULL_LOC; -+ } else if (c->sigcontext_format == X86_SCF_FREEBSD_SYSCALL) { -+ c->dwarf.loc[EIP] = DWARF_LOC (c->dwarf.cfa, 0); -+ c->dwarf.loc[EAX] = DWARF_NULL_LOC; -+ c->dwarf.cfa += 4; -+ c->dwarf.use_prev_instr = 1; -+ } else { -+ Debug (8, "Gstep: not handling frame format %d\n", c->sigcontext_format); -+ abort(); -+ } -+ return 0; -+} -+ -+HIDDEN dwarf_loc_t -+x86_get_scratch_loc (struct cursor *c, unw_regnum_t reg) -+{ -+ unw_word_t addr = c->sigcontext_addr, off, xmm_off; -+ unw_word_t fpstate, fpformat; -+ int ret, is_fpstate = 0, is_xmmstate = 0; -+ -+ switch (c->sigcontext_format) -+ { -+ case X86_SCF_NONE: -+ return DWARF_REG_LOC (&c->dwarf, reg); -+ -+ case X86_SCF_FREEBSD_SIGFRAME: -+ addr += offsetof(struct sigframe, sf_uc) + FREEBSD_UC_MCONTEXT_OFF; -+ break; -+ -+ case X86_SCF_FREEBSD_SIGFRAME4: -+ abort(); -+ break; -+ -+ case X86_SCF_FREEBSD_OSIGFRAME: -+ /* XXXKIB */ -+ abort(); -+ break; -+ -+ case X86_SCF_FREEBSD_SYSCALL: -+ /* XXXKIB */ -+ abort(); -+ break; -+ -+ default: -+ /* XXXKIB */ -+ abort(); -+ break; -+ } -+ -+ off = 0; /* shut gcc warning */ -+ switch (reg) -+ { -+ case UNW_X86_GS: off = FREEBSD_UC_MCONTEXT_GS_OFF; break; -+ case UNW_X86_FS: off = FREEBSD_UC_MCONTEXT_FS_OFF; break; -+ case UNW_X86_ES: off = FREEBSD_UC_MCONTEXT_ES_OFF; break; -+ case UNW_X86_DS: off = FREEBSD_UC_MCONTEXT_SS_OFF; break; -+ case UNW_X86_EDI: off = FREEBSD_UC_MCONTEXT_EDI_OFF; break; -+ case UNW_X86_ESI: off = FREEBSD_UC_MCONTEXT_ESI_OFF; break; -+ case UNW_X86_EBP: off = FREEBSD_UC_MCONTEXT_EBP_OFF; break; -+ case UNW_X86_ESP: off = FREEBSD_UC_MCONTEXT_ESP_OFF; break; -+ case UNW_X86_EBX: off = FREEBSD_UC_MCONTEXT_EBX_OFF; break; -+ case UNW_X86_EDX: off = FREEBSD_UC_MCONTEXT_EDX_OFF; break; -+ case UNW_X86_ECX: off = FREEBSD_UC_MCONTEXT_ECX_OFF; break; -+ case UNW_X86_EAX: off = FREEBSD_UC_MCONTEXT_EAX_OFF; break; -+ case UNW_X86_TRAPNO: off = FREEBSD_UC_MCONTEXT_TRAPNO_OFF; break; -+ case UNW_X86_EIP: off = FREEBSD_UC_MCONTEXT_EIP_OFF; break; -+ case UNW_X86_CS: off = FREEBSD_UC_MCONTEXT_CS_OFF; break; -+ case UNW_X86_EFLAGS: off = FREEBSD_UC_MCONTEXT_EFLAGS_OFF; break; -+ case UNW_X86_SS: off = FREEBSD_UC_MCONTEXT_SS_OFF; break; -+ -+ case UNW_X86_FCW: -+ is_fpstate = 1; -+ off = FREEBSD_UC_MCONTEXT_CW_OFF; -+ xmm_off = FREEBSD_UC_MCONTEXT_CW_XMM_OFF; -+ break; -+ case UNW_X86_FSW: -+ is_fpstate = 1; -+ off = FREEBSD_UC_MCONTEXT_SW_OFF; -+ xmm_off = FREEBSD_UC_MCONTEXT_SW_XMM_OFF; -+ break; -+ case UNW_X86_FTW: -+ is_fpstate = 1; -+ xmm_off = FREEBSD_UC_MCONTEXT_TAG_XMM_OFF; -+ off = FREEBSD_UC_MCONTEXT_TAG_OFF; -+ break; -+ case UNW_X86_FCS: -+ is_fpstate = 1; -+ off = FREEBSD_UC_MCONTEXT_CSSEL_OFF; -+ xmm_off = FREEBSD_UC_MCONTEXT_CSSEL_XMM_OFF; -+ break; -+ case UNW_X86_FIP: -+ is_fpstate = 1; -+ off = FREEBSD_UC_MCONTEXT_IPOFF_OFF; -+ xmm_off = FREEBSD_UC_MCONTEXT_IPOFF_XMM_OFF; -+ break; -+ case UNW_X86_FEA: -+ is_fpstate = 1; -+ off = FREEBSD_UC_MCONTEXT_DATAOFF_OFF; -+ xmm_off = FREEBSD_UC_MCONTEXT_DATAOFF_XMM_OFF; -+ break; -+ case UNW_X86_FDS: -+ is_fpstate = 1; -+ off = FREEBSD_US_MCONTEXT_DATASEL_OFF; -+ xmm_off = FREEBSD_US_MCONTEXT_DATASEL_XMM_OFF; -+ break; -+ case UNW_X86_MXCSR: -+ is_fpstate = 1; -+ is_xmmstate = 1; -+ xmm_off = FREEBSD_UC_MCONTEXT_MXCSR_XMM_OFF; -+ break; -+ -+ /* stacked fp registers */ -+ case UNW_X86_ST0: case UNW_X86_ST1: case UNW_X86_ST2: case UNW_X86_ST3: -+ case UNW_X86_ST4: case UNW_X86_ST5: case UNW_X86_ST6: case UNW_X86_ST7: -+ is_fpstate = 1; -+ off = FREEBSD_UC_MCONTEXT_ST0_OFF + 10*(reg - UNW_X86_ST0); -+ xmm_off = FREEBSD_UC_MCONTEXT_ST0_XMM_OFF + 10*(reg - UNW_X86_ST0); -+ break; -+ -+ /* SSE fp registers */ -+ case UNW_X86_XMM0_lo: case UNW_X86_XMM0_hi: -+ case UNW_X86_XMM1_lo: case UNW_X86_XMM1_hi: -+ case UNW_X86_XMM2_lo: case UNW_X86_XMM2_hi: -+ case UNW_X86_XMM3_lo: case UNW_X86_XMM3_hi: -+ case UNW_X86_XMM4_lo: case UNW_X86_XMM4_hi: -+ case UNW_X86_XMM5_lo: case UNW_X86_XMM5_hi: -+ case UNW_X86_XMM6_lo: case UNW_X86_XMM6_hi: -+ case UNW_X86_XMM7_lo: case UNW_X86_XMM7_hi: -+ is_fpstate = 1; -+ is_xmmstate = 1; -+ xmm_off = FREEBSD_UC_MCONTEXT_XMM0_OFF + 8*(reg - UNW_X86_XMM0_lo); -+ break; -+ case UNW_X86_XMM0: -+ case UNW_X86_XMM1: -+ case UNW_X86_XMM2: -+ case UNW_X86_XMM3: -+ case UNW_X86_XMM4: -+ case UNW_X86_XMM5: -+ case UNW_X86_XMM6: -+ case UNW_X86_XMM7: -+ is_fpstate = 1; -+ is_xmmstate = 1; -+ xmm_off = FREEBSD_UC_MCONTEXT_XMM0_OFF + 16*(reg - UNW_X86_XMM0); -+ break; -+ -+ case UNW_X86_FOP: -+ case UNW_X86_TSS: -+ case UNW_X86_LDT: -+ default: -+ return DWARF_REG_LOC (&c->dwarf, reg); -+ } -+ -+ if (is_fpstate) -+ { -+ if ((ret = dwarf_get (&c->dwarf, -+ DWARF_MEM_LOC (&c->dwarf, addr + FREEBSD_UC_MCONTEXT_FPSTATE_OFF), -+ &fpstate)) < 0) -+ return DWARF_NULL_LOC; -+ if (fpstate == FREEBSD_UC_MCONTEXT_FPOWNED_NONE) -+ return DWARF_NULL_LOC; -+ if ((ret = dwarf_get (&c->dwarf, -+ DWARF_MEM_LOC (&c->dwarf, addr + FREEBSD_UC_MCONTEXT_FPFORMAT_OFF), -+ &fpformat)) < 0) -+ return DWARF_NULL_LOC; -+ if (fpformat == FREEBSD_UC_MCONTEXT_FPFMT_NODEV || -+ (is_xmmstate && fpformat != FREEBSD_UC_MCONTEXT_FPFMT_XMM)) -+ return DWARF_NULL_LOC; -+ if (is_xmmstate) -+ off = xmm_off; -+ } -+ -+ return DWARF_MEM_LOC (c, addr + off); -+} -+ -+#ifndef UNW_REMOTE_ONLY -+HIDDEN void * -+x86_r_uc_addr (ucontext_t *uc, int reg) -+{ -+ void *addr; -+ -+ switch (reg) -+ { -+ case UNW_X86_GS: addr = &uc->uc_mcontext.mc_gs; break; -+ case UNW_X86_FS: addr = &uc->uc_mcontext.mc_fs; break; -+ case UNW_X86_ES: addr = &uc->uc_mcontext.mc_es; break; -+ case UNW_X86_DS: addr = &uc->uc_mcontext.mc_ds; break; -+ case UNW_X86_EAX: addr = &uc->uc_mcontext.mc_eax; break; -+ case UNW_X86_EBX: addr = &uc->uc_mcontext.mc_ebx; break; -+ case UNW_X86_ECX: addr = &uc->uc_mcontext.mc_ecx; break; -+ case UNW_X86_EDX: addr = &uc->uc_mcontext.mc_edx; break; -+ case UNW_X86_ESI: addr = &uc->uc_mcontext.mc_esi; break; -+ case UNW_X86_EDI: addr = &uc->uc_mcontext.mc_edi; break; -+ case UNW_X86_EBP: addr = &uc->uc_mcontext.mc_ebp; break; -+ case UNW_X86_EIP: addr = &uc->uc_mcontext.mc_eip; break; -+ case UNW_X86_ESP: addr = &uc->uc_mcontext.mc_esp; break; -+ case UNW_X86_TRAPNO: addr = &uc->uc_mcontext.mc_trapno; break; -+ case UNW_X86_CS: addr = &uc->uc_mcontext.mc_cs; break; -+ case UNW_X86_EFLAGS: addr = &uc->uc_mcontext.mc_eflags; break; -+ case UNW_X86_SS: addr = &uc->uc_mcontext.mc_ss; break; -+ -+ default: -+ addr = NULL; -+ } -+ return addr; -+} -+ -+HIDDEN int -+x86_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ ucontext_t *uc = c->uc; -+ -+ /* Ensure c->pi is up-to-date. On x86, it's relatively common to be -+ missing DWARF unwind info. We don't want to fail in that case, -+ because the frame-chain still would let us do a backtrace at -+ least. */ -+ dwarf_make_proc_info (&c->dwarf); -+ -+ if (c->sigcontext_format == X86_SCF_NONE) { -+ Debug (8, "resuming at ip=%x via setcontext()\n", c->dwarf.ip); -+ setcontext (uc); -+ abort(); -+ } else if (c->sigcontext_format == X86_SCF_FREEBSD_SIGFRAME) { -+ struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; -+ -+ Debug (8, "resuming at ip=%x via sigreturn(%p)\n", c->dwarf.ip, sc); -+ sigreturn((ucontext_t *)((const char *)sc + FREEBSD_SC_UCONTEXT_OFF)); -+ abort(); -+ } else { -+ Debug (8, "resuming at ip=%x for sigcontext format %d not implemented\n", -+ c->dwarf.ip, c->sigcontext_format); -+ abort(); -+ } -+ return -UNW_EINVAL; -+} -+ -+#endif -diff --git a/frysk-imports/libunwind/src/x86/Gos-linux.c b/frysk-imports/libunwind/src/x86/Gos-linux.c -new file mode 100644 -index 0000000..17aebc2 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86/Gos-linux.c -@@ -0,0 +1,308 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2002-2004 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "offsets.h" -+ -+PROTECTED int -+unw_is_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t w0, w1, ip; -+ unw_addr_space_t as; -+ unw_accessors_t *a; -+ void *arg; -+ int ret; -+ -+ as = c->dwarf.as; -+ a = unw_get_accessors (as); -+ arg = c->dwarf.as_arg; -+ -+ /* Check if EIP points at sigreturn() sequence. On Linux, this is: -+ -+ __restore: -+ 0x58 pop %eax -+ 0xb8 0x77 0x00 0x00 0x00 movl 0x77,%eax -+ 0xcd 0x80 int 0x80 -+ -+ without SA_SIGINFO, and -+ -+ __restore_rt: -+ 0xb8 0xad 0x00 0x00 0x00 movl 0xad,%eax -+ 0xcd 0x80 int 0x80 -+ 0x00 -+ -+ if SA_SIGINFO is specified. -+ */ -+ ip = c->dwarf.ip; -+ if ((*a->access_mem) (as, ip, &w0, 0, arg) < 0 -+ || (*a->access_mem) (as, ip + 4, &w1, 0, arg) < 0) -+ ret = 0; -+ else -+ ret = ((w0 == 0x0077b858 && w1 == 0x80cd0000) -+ || (w0 == 0x0000adb8 && (w1 & 0xffffff) == 0x80cd00)); -+ Debug (16, "returning %d\n", ret); -+ return ret; -+} -+ -+PROTECTED int -+unw_handle_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ int ret; -+ -+ /* c->esp points at the arguments to the handler. Without -+ SA_SIGINFO, the arguments consist of a signal number -+ followed by a struct sigcontext. With SA_SIGINFO, the -+ arguments consist a signal number, a siginfo *, and a -+ ucontext *. */ -+ unw_word_t sc_addr; -+ unw_word_t siginfo_ptr_addr = c->dwarf.cfa + 4; -+ unw_word_t sigcontext_ptr_addr = c->dwarf.cfa + 8; -+ unw_word_t siginfo_ptr, sigcontext_ptr; -+ struct dwarf_loc esp_loc, siginfo_ptr_loc, sigcontext_ptr_loc; -+ -+ siginfo_ptr_loc = DWARF_LOC (siginfo_ptr_addr, 0); -+ sigcontext_ptr_loc = DWARF_LOC (sigcontext_ptr_addr, 0); -+ ret = (dwarf_get (&c->dwarf, siginfo_ptr_loc, &siginfo_ptr) -+ | dwarf_get (&c->dwarf, sigcontext_ptr_loc, &sigcontext_ptr)); -+ if (ret < 0) -+ { -+ Debug (2, "returning 0\n"); -+ return 0; -+ } -+ if (siginfo_ptr < c->dwarf.cfa -+ || siginfo_ptr > c->dwarf.cfa + 256 -+ || sigcontext_ptr < c->dwarf.cfa -+ || sigcontext_ptr > c->dwarf.cfa + 256) -+ { -+ /* Not plausible for SA_SIGINFO signal */ -+ c->sigcontext_format = X86_SCF_LINUX_SIGFRAME; -+ c->sigcontext_addr = sc_addr = c->dwarf.cfa + 4; -+ } -+ else -+ { -+ /* If SA_SIGINFO were not specified, we actually read -+ various segment pointers instead. We believe that at -+ least fs and _fsh are always zero for linux, so it is -+ not just unlikely, but impossible that we would end -+ up here. */ -+ c->sigcontext_format = X86_SCF_LINUX_RT_SIGFRAME; -+ c->sigcontext_addr = sigcontext_ptr; -+ sc_addr = sigcontext_ptr + LINUX_UC_MCONTEXT_OFF; -+ } -+ esp_loc = DWARF_LOC (sc_addr + LINUX_SC_ESP_OFF, 0); -+ ret = dwarf_get (&c->dwarf, esp_loc, &c->dwarf.cfa); -+ if (ret < 0) -+ { -+ Debug (2, "returning 0\n"); -+ return 0; -+ } -+ -+ c->dwarf.loc[EAX] = DWARF_LOC (sc_addr + LINUX_SC_EAX_OFF, 0); -+ c->dwarf.loc[ECX] = DWARF_LOC (sc_addr + LINUX_SC_ECX_OFF, 0); -+ c->dwarf.loc[EDX] = DWARF_LOC (sc_addr + LINUX_SC_EDX_OFF, 0); -+ c->dwarf.loc[EBX] = DWARF_LOC (sc_addr + LINUX_SC_EBX_OFF, 0); -+ c->dwarf.loc[EBP] = DWARF_LOC (sc_addr + LINUX_SC_EBP_OFF, 0); -+ c->dwarf.loc[ESI] = DWARF_LOC (sc_addr + LINUX_SC_ESI_OFF, 0); -+ c->dwarf.loc[EDI] = DWARF_LOC (sc_addr + LINUX_SC_EDI_OFF, 0); -+ c->dwarf.loc[EFLAGS] = DWARF_NULL_LOC; -+ c->dwarf.loc[TRAPNO] = DWARF_NULL_LOC; -+ c->dwarf.loc[ST0] = DWARF_NULL_LOC; -+ c->dwarf.loc[EIP] = DWARF_LOC (sc_addr + LINUX_SC_EIP_OFF, 0); -+ c->dwarf.loc[ESP] = DWARF_LOC (sc_addr + LINUX_SC_ESP_OFF, 0); -+ -+ return 0; -+} -+ -+HIDDEN dwarf_loc_t -+x86_get_scratch_loc (struct cursor *c, unw_regnum_t reg) -+{ -+ unw_word_t addr = c->sigcontext_addr, fpstate_addr, off; -+ int ret, is_fpstate = 0; -+ -+ switch (c->sigcontext_format) -+ { -+ case X86_SCF_NONE: -+ return DWARF_REG_LOC (&c->dwarf, reg); -+ -+ case X86_SCF_LINUX_SIGFRAME: -+ break; -+ -+ case X86_SCF_LINUX_RT_SIGFRAME: -+ addr += LINUX_UC_MCONTEXT_OFF; -+ break; -+ -+ default: -+ return DWARF_NULL_LOC; -+ } -+ -+ switch (reg) -+ { -+ case UNW_X86_GS: off = LINUX_SC_GS_OFF; break; -+ case UNW_X86_FS: off = LINUX_SC_FS_OFF; break; -+ case UNW_X86_ES: off = LINUX_SC_ES_OFF; break; -+ case UNW_X86_DS: off = LINUX_SC_DS_OFF; break; -+ case UNW_X86_EDI: off = LINUX_SC_EDI_OFF; break; -+ case UNW_X86_ESI: off = LINUX_SC_ESI_OFF; break; -+ case UNW_X86_EBP: off = LINUX_SC_EBP_OFF; break; -+ case UNW_X86_ESP: off = LINUX_SC_ESP_OFF; break; -+ case UNW_X86_EBX: off = LINUX_SC_EBX_OFF; break; -+ case UNW_X86_EDX: off = LINUX_SC_EDX_OFF; break; -+ case UNW_X86_ECX: off = LINUX_SC_ECX_OFF; break; -+ case UNW_X86_EAX: off = LINUX_SC_EAX_OFF; break; -+ case UNW_X86_TRAPNO: off = LINUX_SC_TRAPNO_OFF; break; -+ case UNW_X86_EIP: off = LINUX_SC_EIP_OFF; break; -+ case UNW_X86_CS: off = LINUX_SC_CS_OFF; break; -+ case UNW_X86_EFLAGS: off = LINUX_SC_EFLAGS_OFF; break; -+ case UNW_X86_SS: off = LINUX_SC_SS_OFF; break; -+ -+ /* The following is probably not correct for all possible cases. -+ Somebody who understands this better should review this for -+ correctness. */ -+ -+ case UNW_X86_FCW: is_fpstate = 1; off = LINUX_FPSTATE_CW_OFF; break; -+ case UNW_X86_FSW: is_fpstate = 1; off = LINUX_FPSTATE_SW_OFF; break; -+ case UNW_X86_FTW: is_fpstate = 1; off = LINUX_FPSTATE_TAG_OFF; break; -+ case UNW_X86_FCS: is_fpstate = 1; off = LINUX_FPSTATE_CSSEL_OFF; break; -+ case UNW_X86_FIP: is_fpstate = 1; off = LINUX_FPSTATE_IPOFF_OFF; break; -+ case UNW_X86_FEA: is_fpstate = 1; off = LINUX_FPSTATE_DATAOFF_OFF; break; -+ case UNW_X86_FDS: is_fpstate = 1; off = LINUX_FPSTATE_DATASEL_OFF; break; -+ case UNW_X86_MXCSR: is_fpstate = 1; off = LINUX_FPSTATE_MXCSR_OFF; break; -+ -+ /* stacked fp registers */ -+ case UNW_X86_ST0: case UNW_X86_ST1: case UNW_X86_ST2: case UNW_X86_ST3: -+ case UNW_X86_ST4: case UNW_X86_ST5: case UNW_X86_ST6: case UNW_X86_ST7: -+ is_fpstate = 1; -+ off = LINUX_FPSTATE_ST0_OFF + 10*(reg - UNW_X86_ST0); -+ break; -+ -+ /* SSE fp registers */ -+ case UNW_X86_XMM0_lo: case UNW_X86_XMM0_hi: -+ case UNW_X86_XMM1_lo: case UNW_X86_XMM1_hi: -+ case UNW_X86_XMM2_lo: case UNW_X86_XMM2_hi: -+ case UNW_X86_XMM3_lo: case UNW_X86_XMM3_hi: -+ case UNW_X86_XMM4_lo: case UNW_X86_XMM4_hi: -+ case UNW_X86_XMM5_lo: case UNW_X86_XMM5_hi: -+ case UNW_X86_XMM6_lo: case UNW_X86_XMM6_hi: -+ case UNW_X86_XMM7_lo: case UNW_X86_XMM7_hi: -+ is_fpstate = 1; -+ off = LINUX_FPSTATE_XMM0_OFF + 8*(reg - UNW_X86_XMM0_lo); -+ break; -+ case UNW_X86_XMM0: -+ case UNW_X86_XMM1: -+ case UNW_X86_XMM2: -+ case UNW_X86_XMM3: -+ case UNW_X86_XMM4: -+ case UNW_X86_XMM5: -+ case UNW_X86_XMM6: -+ case UNW_X86_XMM7: -+ is_fpstate = 1; -+ off = LINUX_FPSTATE_XMM0_OFF + 16*(reg - UNW_X86_XMM0); -+ break; -+ -+ case UNW_X86_FOP: -+ case UNW_X86_TSS: -+ case UNW_X86_LDT: -+ default: -+ return DWARF_REG_LOC (&c->dwarf, reg); -+ } -+ -+ if (is_fpstate) -+ { -+ if ((ret = dwarf_get (&c->dwarf, -+ DWARF_MEM_LOC (&c->dwarf, -+ addr + LINUX_SC_FPSTATE_OFF), -+ &fpstate_addr)) < 0) -+ return DWARF_NULL_LOC; -+ -+ if (!fpstate_addr) -+ return DWARF_NULL_LOC; -+ -+ return DWARF_MEM_LOC (c, fpstate_addr + off); -+ } -+ else -+ return DWARF_MEM_LOC (c, addr + off); -+} -+ -+#ifndef UNW_REMOTE_ONLY -+HIDDEN void * -+x86_r_uc_addr (ucontext_t *uc, int reg) -+{ -+ void *addr; -+ -+ switch (reg) -+ { -+ case UNW_X86_GS: addr = &uc->uc_mcontext.gregs[REG_GS]; break; -+ case UNW_X86_FS: addr = &uc->uc_mcontext.gregs[REG_FS]; break; -+ case UNW_X86_ES: addr = &uc->uc_mcontext.gregs[REG_ES]; break; -+ case UNW_X86_DS: addr = &uc->uc_mcontext.gregs[REG_DS]; break; -+ case UNW_X86_EAX: addr = &uc->uc_mcontext.gregs[REG_EAX]; break; -+ case UNW_X86_EBX: addr = &uc->uc_mcontext.gregs[REG_EBX]; break; -+ case UNW_X86_ECX: addr = &uc->uc_mcontext.gregs[REG_ECX]; break; -+ case UNW_X86_EDX: addr = &uc->uc_mcontext.gregs[REG_EDX]; break; -+ case UNW_X86_ESI: addr = &uc->uc_mcontext.gregs[REG_ESI]; break; -+ case UNW_X86_EDI: addr = &uc->uc_mcontext.gregs[REG_EDI]; break; -+ case UNW_X86_EBP: addr = &uc->uc_mcontext.gregs[REG_EBP]; break; -+ case UNW_X86_EIP: addr = &uc->uc_mcontext.gregs[REG_EIP]; break; -+ case UNW_X86_ESP: addr = &uc->uc_mcontext.gregs[REG_ESP]; break; -+ case UNW_X86_TRAPNO: addr = &uc->uc_mcontext.gregs[REG_TRAPNO]; break; -+ case UNW_X86_CS: addr = &uc->uc_mcontext.gregs[REG_CS]; break; -+ case UNW_X86_EFLAGS: addr = &uc->uc_mcontext.gregs[REG_EFL]; break; -+ case UNW_X86_SS: addr = &uc->uc_mcontext.gregs[REG_SS]; break; -+ -+ default: -+ addr = NULL; -+ } -+ return addr; -+} -+ -+HIDDEN int -+x86_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ ucontext_t *uc = c->uc; -+ -+ /* Ensure c->pi is up-to-date. On x86, it's relatively common to be -+ missing DWARF unwind info. We don't want to fail in that case, -+ because the frame-chain still would let us do a backtrace at -+ least. */ -+ dwarf_make_proc_info (&c->dwarf); -+ -+ if (unlikely (c->sigcontext_format != X86_SCF_NONE)) -+ { -+ struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; -+ -+ Debug (8, "resuming at ip=%x via sigreturn(%p)\n", c->dwarf.ip, sc); -+ sigreturn (sc); -+ } -+ else -+ { -+ Debug (8, "resuming at ip=%x via setcontext()\n", c->dwarf.ip); -+ setcontext (uc); -+ } -+ return -UNW_EINVAL; -+} -+#endif -diff --git a/frysk-imports/libunwind/src/x86/Gregs.c b/frysk-imports/libunwind/src/x86/Gregs.c -index 78cfabc..4a95926 100644 ---- a/frysk-imports/libunwind/src/x86/Gregs.c -+++ b/frysk-imports/libunwind/src/x86/Gregs.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2002-2004 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,125 +26,18 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "offsets.h" - #include "unwind_i.h" - --static inline dwarf_loc_t --linux_scratch_loc (struct cursor *c, unw_regnum_t reg) --{ -- unw_word_t addr = c->sigcontext_addr, fpstate_addr, off; -- int ret, is_fpstate = 0; -- -- switch (c->sigcontext_format) -- { -- case X86_SCF_NONE: -- return DWARF_REG_LOC (&c->dwarf, reg); -- -- case X86_SCF_LINUX_SIGFRAME: -- break; -- -- case X86_SCF_LINUX_RT_SIGFRAME: -- addr += LINUX_UC_MCONTEXT_OFF; -- break; -- } -- -- switch (reg) -- { -- case UNW_X86_GS: off = LINUX_SC_GS_OFF; break; -- case UNW_X86_FS: off = LINUX_SC_FS_OFF; break; -- case UNW_X86_ES: off = LINUX_SC_ES_OFF; break; -- case UNW_X86_DS: off = LINUX_SC_DS_OFF; break; -- case UNW_X86_EDI: off = LINUX_SC_EDI_OFF; break; -- case UNW_X86_ESI: off = LINUX_SC_ESI_OFF; break; -- case UNW_X86_EBP: off = LINUX_SC_EBP_OFF; break; -- case UNW_X86_ESP: off = LINUX_SC_ESP_OFF; break; -- case UNW_X86_EBX: off = LINUX_SC_EBX_OFF; break; -- case UNW_X86_EDX: off = LINUX_SC_EDX_OFF; break; -- case UNW_X86_ECX: off = LINUX_SC_ECX_OFF; break; -- case UNW_X86_EAX: off = LINUX_SC_EAX_OFF; break; -- case UNW_X86_TRAPNO: off = LINUX_SC_TRAPNO_OFF; break; -- case UNW_X86_EIP: off = LINUX_SC_EIP_OFF; break; -- case UNW_X86_CS: off = LINUX_SC_CS_OFF; break; -- case UNW_X86_EFLAGS: off = LINUX_SC_EFLAGS_OFF; break; -- case UNW_X86_SS: off = LINUX_SC_SS_OFF; break; -- -- /* The following is probably not correct for all possible cases. -- Somebody who understands this better should review this for -- correctness. */ -- -- case UNW_X86_FCW: is_fpstate = 1; off = LINUX_FPSTATE_CW_OFF; break; -- case UNW_X86_FSW: is_fpstate = 1; off = LINUX_FPSTATE_SW_OFF; break; -- case UNW_X86_FTW: is_fpstate = 1; off = LINUX_FPSTATE_TAG_OFF; break; -- case UNW_X86_FCS: is_fpstate = 1; off = LINUX_FPSTATE_CSSEL_OFF; break; -- case UNW_X86_FIP: is_fpstate = 1; off = LINUX_FPSTATE_IPOFF_OFF; break; -- case UNW_X86_FEA: is_fpstate = 1; off = LINUX_FPSTATE_DATAOFF_OFF; break; -- case UNW_X86_FDS: is_fpstate = 1; off = LINUX_FPSTATE_DATASEL_OFF; break; -- case UNW_X86_MXCSR: is_fpstate = 1; off = LINUX_FPSTATE_MXCSR_OFF; break; -- -- /* stacked fp registers */ -- case UNW_X86_ST0: case UNW_X86_ST1: case UNW_X86_ST2: case UNW_X86_ST3: -- case UNW_X86_ST4: case UNW_X86_ST5: case UNW_X86_ST6: case UNW_X86_ST7: -- is_fpstate = 1; -- off = LINUX_FPSTATE_ST0_OFF + 10*(reg - UNW_X86_ST0); -- break; -- -- /* SSE fp registers */ -- case UNW_X86_XMM0_lo: case UNW_X86_XMM0_hi: -- case UNW_X86_XMM1_lo: case UNW_X86_XMM1_hi: -- case UNW_X86_XMM2_lo: case UNW_X86_XMM2_hi: -- case UNW_X86_XMM3_lo: case UNW_X86_XMM3_hi: -- case UNW_X86_XMM4_lo: case UNW_X86_XMM4_hi: -- case UNW_X86_XMM5_lo: case UNW_X86_XMM5_hi: -- case UNW_X86_XMM6_lo: case UNW_X86_XMM6_hi: -- case UNW_X86_XMM7_lo: case UNW_X86_XMM7_hi: -- is_fpstate = 1; -- off = LINUX_FPSTATE_XMM0_OFF + 8*(reg - UNW_X86_XMM0_lo); -- break; -- case UNW_X86_XMM0: -- case UNW_X86_XMM1: -- case UNW_X86_XMM2: -- case UNW_X86_XMM3: -- case UNW_X86_XMM4: -- case UNW_X86_XMM5: -- case UNW_X86_XMM6: -- case UNW_X86_XMM7: -- is_fpstate = 1; -- off = LINUX_FPSTATE_XMM0_OFF + 16*(reg - UNW_X86_XMM0); -- break; -- -- case UNW_X86_FOP: -- case UNW_X86_TSS: -- case UNW_X86_LDT: -- default: -- return DWARF_REG_LOC (&c->dwarf, reg); -- } -- -- if (is_fpstate) -- { -- if ((ret = dwarf_get (&c->dwarf, -- DWARF_MEM_LOC (&c->dwarf, -- addr + LINUX_SC_FPSTATE_OFF), -- &fpstate_addr)) < 0) -- return DWARF_NULL_LOC; -- -- if (!fpstate_addr) -- return DWARF_NULL_LOC; -- -- return DWARF_MEM_LOC (c, fpstate_addr + off); -- } -- else -- return DWARF_MEM_LOC (c, addr + off); --} -- - HIDDEN dwarf_loc_t - x86_scratch_loc (struct cursor *c, unw_regnum_t reg) - { - if (c->sigcontext_addr) -- return linux_scratch_loc (c, reg); -+ return x86_get_scratch_loc (c, reg); - else - return DWARF_REG_LOC (&c->dwarf, reg); - } - - HIDDEN int - tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -- int write) -+ int write) - { - dwarf_loc_t loc = DWARF_NULL_LOC; - unsigned int mask; -@@ -155,14 +48,14 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - case UNW_X86_EIP: - if (write) -- c->dwarf.ip = *valp; /* also update the EIP cache */ -+ c->dwarf.ip = *valp; /* also update the EIP cache */ - loc = c->dwarf.loc[EIP]; - break; - - case UNW_X86_CFA: - case UNW_X86_ESP: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - *valp = c->dwarf.cfa; - return 0; - -@@ -171,18 +64,18 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - arg_num = reg - UNW_X86_EAX; - mask = (1 << arg_num); - if (write) -- { -- c->dwarf.eh_args[arg_num] = *valp; -- c->dwarf.eh_valid_mask |= mask; -- return 0; -- } -+ { -+ c->dwarf.eh_args[arg_num] = *valp; -+ c->dwarf.eh_valid_mask |= mask; -+ return 0; -+ } - else if ((c->dwarf.eh_valid_mask & mask) != 0) -- { -- *valp = c->dwarf.eh_args[arg_num]; -- return 0; -- } -+ { -+ *valp = c->dwarf.eh_args[arg_num]; -+ return 0; -+ } - else -- loc = c->dwarf.loc[(reg == UNW_X86_EAX) ? EAX : EDX]; -+ loc = c->dwarf.loc[(reg == UNW_X86_EAX) ? EAX : EDX]; - break; - - case UNW_X86_ECX: loc = c->dwarf.loc[ECX]; break; -@@ -227,7 +120,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - HIDDEN int - tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -- int write) -+ int write) - { - struct dwarf_loc loc = DWARF_NULL_LOC; - -diff --git a/frysk-imports/libunwind/src/x86/Gresume.c b/frysk-imports/libunwind/src/x86/Gresume.c -index 6ea9346..cb3fb31 100644 ---- a/frysk-imports/libunwind/src/x86/Gresume.c -+++ b/frysk-imports/libunwind/src/x86/Gresume.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2002-2004 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,41 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - - #include "unwind_i.h" -- --#ifndef UNW_REMOTE_ONLY -- --HIDDEN inline int --x86_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) --{ --#if defined(__linux) -- struct cursor *c = (struct cursor *) cursor; -- ucontext_t *uc = c->dwarf.as_arg; -- -- /* Ensure c->pi is up-to-date. On x86, it's relatively common to be -- missing DWARF unwind info. We don't want to fail in that case, -- because the frame-chain still would let us do a backtrace at -- least. */ -- dwarf_make_proc_info (&c->dwarf); -- -- if (unlikely (c->sigcontext_format != X86_SCF_NONE)) -- { -- struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; -- -- Debug (8, "resuming at ip=%x via sigreturn(%p)\n", c->dwarf.ip, sc); -- sigreturn (sc); -- } -- else -- { -- Debug (8, "resuming at ip=%x via setcontext()\n", c->dwarf.ip); -- setcontext (uc); -- } --#else --# warning Implement me! --#endif -- return -UNW_EINVAL; --} -- --#endif /* !UNW_REMOTE_ONLY */ -+#include "offsets.h" - - /* This routine is responsible for copying the register values in - cursor C and establishing them as the current machine state. */ -@@ -69,9 +35,9 @@ static inline int - establish_machine_state (struct cursor *c) - { - int (*access_reg) (unw_addr_space_t, unw_regnum_t, unw_word_t *, -- int write, void *); -+ int write, void *); - int (*access_fpreg) (unw_addr_space_t, unw_regnum_t, unw_fpreg_t *, -- int write, void *); -+ int write, void *); - unw_addr_space_t as = c->dwarf.as; - void *arg = c->dwarf.as_arg; - unw_fpreg_t fpval; -@@ -87,15 +53,15 @@ establish_machine_state (struct cursor *c) - { - Debug (16, "copying %s %d\n", unw_regname (reg), reg); - if (unw_is_fpreg (reg)) -- { -- if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -- (*access_fpreg) (as, reg, &fpval, 1, arg); -- } -+ { -+ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -+ (*access_fpreg) (as, reg, &fpval, 1, arg); -+ } - else -- { -- if (tdep_access_reg (c, reg, &val, 0) >= 0) -- (*access_reg) (as, reg, &val, 1, arg); -- } -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ (*access_reg) (as, reg, &val, 1, arg); -+ } - } - return 0; - } -@@ -112,5 +78,5 @@ unw_resume (unw_cursor_t *cursor) - return ret; - - return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -- c->dwarf.as_arg); -+ c->dwarf.as_arg); - } -diff --git a/frysk-imports/libunwind/src/x86/Gstep.c b/frysk-imports/libunwind/src/x86/Gstep.c -index c9083cb..10e2cbc 100644 ---- a/frysk-imports/libunwind/src/x86/Gstep.c -+++ b/frysk-imports/libunwind/src/x86/Gstep.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,301 +26,90 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - #include "offsets.h" - --/* Try to skip single-word (4 bytes) return address on stack left there in some -- cases of the signal frame. -- We cannot rely on the `UC_MCONTEXT_GREGS_ERR_ID_BIT' bit as in the x86_64 case -- as this bit is not present if no execute-disable feature is present/used. -- http://www.intel.com/design/processor/manuals/253668.pdf -- page 5-55 (235/642) -- If we detect `ip' points to `cr2' (we should execute at the address causing -- the fault) we can pop the real `ip' from the stack instead. -- If it is not detectable we would need to keep the return -- address on stack and improve the code path -- dwarf_step() failed (ret=%d), trying frame-chain -- below to disassemble the return address and not to pop two words -- automatically as no stack frame pointer is present in these cases there: -- ./test-ptrace-signull code_entry_point: err=0x4 || 0x14 -- ./test-ptrace-signull code_descriptor: err=0x5 || 0x15 */ -- --static int --code_descriptor_trap (struct cursor *c, struct dwarf_loc *eip_loc_pointer) --{ -- unw_word_t trapno, cr2; -- int i; -- -- if (c->sigcontext_format == X86_SCF_NONE) -- return -UNW_EBADFRAME; -- -- i = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + LINUX_SC_TRAPNO_OFF, 0), &trapno); -- if (i < 0) -- { -- Debug (2, "failed to query [sigframe:trapno]; %d\n", i); -- return i; -- } -- /* page fault */ -- if (trapno != LINUX_SC_TRAPNO_PF) -- { -- Debug (2, "[sigframe:trapno] %d not Page-Fault Exception\n", (int) trapno); -- return -UNW_EBADFRAME; -- } -- -- i = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + LINUX_SC_CR2_OFF, 0), &cr2); -- if (i < 0) -- { -- Debug (2, "failed to query [sigframe:cr2]; %d\n", i); -- return i; -- } -- if (cr2 != c->dwarf.ip) -- { -- Debug (2, "[sigframe:cr2] 0x%x not equal to ip 0x%x\n", -- (int) cr2, (int) c->dwarf.ip); -- return -UNW_EBADFRAME; -- } -- -- Debug (1, "[sigframe] Page-Fault Exception, instruction fetch (cr2 = 0x%x)\n", (int) cr2); -- -- *eip_loc_pointer = DWARF_LOC (c->dwarf.cfa, 0); -- c->dwarf.cfa += 4; -- -- return 1; --} -- --// A CALL instruction starts with 0xFF. --static int --is_call_instr_at (struct cursor *c, unw_word_t addr) --{ -- int ret; -- unw_word_t instr; -- ret = dwarf_get (&c->dwarf, DWARF_LOC (addr, 0), &instr); -- return ret >= 0 && ((instr & 0xff000000) == 0xff000000); --} -- --// Checks whether this looks like a plt entry like cursor and returns --// the stack offset where the return address can be found, or -1 if --// not detected (also tries to make sure this is the inner most frame). --// When this function returns positively (zero included) addr will --// contain the return address. --static int --init_stack_based_ret (struct cursor *c, unw_word_t *addr) --{ -- // See if this looks "clean", everything in actual registers -- // which indicates this is most likely an inner most frame just -- // initted. -- int ret; -- unw_word_t ip, cfa; -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[EIP], &ip); -- if (ret < 0) -- return ret; -- -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[ESP], &cfa); -- if (ret < 0) -- return ret; -- -- if (c->sigcontext_format == X86_SCF_NONE -- && DWARF_IS_REG_LOC(c->dwarf.loc[EAX]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[ECX]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[EDX]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[EBX]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[ESP]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[EBP]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[ESI]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[EDI]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[EIP]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[EFLAGS]) -- && DWARF_IS_REG_LOC(c->dwarf.loc[TRAPNO]) -- && ip == c->dwarf.ip && cfa == c->dwarf.cfa) -- { -- // See if one of the top 3 elements on the stack contains a -- // return address. -- int i; -- for (i = 0; i <= 8; i += 4) -- { -- // fprintf(stderr, "trying %d\n", i); -- ret = dwarf_get (&c->dwarf, DWARF_LOC (c->dwarf.cfa + i, 0), addr); -- if (ret < 0) -- return ret; -- -- // fprintf(stderr, "addr at %d: 0x%x\n", i, *addr); -- // Sanity check the address, not too low, and must -- // come from a call instruction. -- if (*addr > 0 && is_call_instr_at(c, (*addr) - 5)) -- return i; -- } -- } -- -- return -1; --} -- - PROTECTED int - unw_step (unw_cursor_t *cursor) - { - struct cursor *c = (struct cursor *) cursor; - int ret, i; -- struct dwarf_loc eip_loc; -- int eip_loc_set = 0; -- unw_word_t addr; - - Debug (1, "(cursor=%p, ip=0x%08x)\n", c, (unsigned) c->dwarf.ip); - - /* Try DWARF-based unwinding... */ - ret = dwarf_step (&c->dwarf); - -- /* Skip the faulty address left alone on the stack. */ -- if (ret >= 0 && code_descriptor_trap (c, &eip_loc) > 0) -- eip_loc_set = 1; -- - if (ret < 0 && ret != -UNW_ENOINFO) - { - Debug (2, "returning %d\n", ret); - return ret; - } - -- if (c->sigcontext_format == X86_SCF_LINUX_SIGFRAME) -- { -- unw_word_t trapno, err, cr2; -- int trapno_ret, err_ret, cr2_ret; -- -- trapno_ret = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + LINUX_SC_TRAPNO_OFF, 0), &trapno); -- err_ret = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + LINUX_SC_ERR_OFF, 0), &err); -- cr2_ret = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + LINUX_SC_CR2_OFF, 0), &cr2); -- -- Debug (2, "x86 sigcontext (post-step): CFA = 0x%lx, trapno = %d, err = 0x%x, cr2 = 0x%x\n", -- (unsigned long) c->dwarf.cfa, (trapno_ret < 0 ? -1 : (int) trapno), -- (err_ret < 0 ? -1 : (int) err), (cr2_ret < 0 ? -1 : (int) cr2)); -- } -- - if (unlikely (ret < 0)) - { - /* DWARF failed, let's see if we can follow the frame-chain -- or skip over the signal trampoline. */ -+ or skip over the signal trampoline. */ -+ struct dwarf_loc ebp_loc, eip_loc; -+ -+ /* We could get here because of missing/bad unwind information. -+ Validate all addresses before dereferencing. */ -+ c->validate = 1; - - Debug (13, "dwarf_step() failed (ret=%d), trying frame-chain\n", ret); - -- if (c->dwarf.ip == 0) -+ if (unw_is_signal_frame (cursor)) - { -- Debug (13, "[EIP=0]\n"); -- -- eip_loc = DWARF_LOC (c->dwarf.cfa, 0); -- c->dwarf.cfa += 4; -- } -- else if (unw_is_signal_frame (cursor) > 0) -- { -- /* XXX This code is Linux-specific! */ -- -- Debug (13, "Unwinding as non-CFI signal frame\n"); -- -- /* c->esp points at the arguments to the handler. Without -- SA_SIGINFO, the arguments consist of a signal number -- followed by a struct sigcontext. With SA_SIGINFO, the -- arguments consist a signal number, a siginfo *, and a -- ucontext *. */ -- unw_word_t sc_addr; -- unw_word_t siginfo_ptr_addr = c->dwarf.cfa + 4; -- unw_word_t sigcontext_ptr_addr = c->dwarf.cfa + 8; -- unw_word_t siginfo_ptr, sigcontext_ptr; -- struct dwarf_loc esp_loc, siginfo_ptr_loc, sigcontext_ptr_loc; -- -- siginfo_ptr_loc = DWARF_LOC (siginfo_ptr_addr, 0); -- sigcontext_ptr_loc = DWARF_LOC (sigcontext_ptr_addr, 0); -- ret = (dwarf_get (&c->dwarf, siginfo_ptr_loc, &siginfo_ptr) -- | dwarf_get (&c->dwarf, sigcontext_ptr_loc, &sigcontext_ptr)); -- if (ret < 0) -- { -- Debug (2, "returning 0\n"); -- return 0; -- } -- if (siginfo_ptr < c->dwarf.cfa -- || siginfo_ptr > c->dwarf.cfa + 256 -- || sigcontext_ptr < c->dwarf.cfa -- || sigcontext_ptr > c->dwarf.cfa + 256) -- { -- /* Not plausible for SA_SIGINFO signal */ -- c->sigcontext_format = X86_SCF_LINUX_SIGFRAME; -- c->sigcontext_addr = sc_addr = c->dwarf.cfa + 4; -- } -- else -- { -- /* If SA_SIGINFO were not specified, we actually read -- various segment pointers instead. We believe that at -- least fs and _fsh are always zero for linux, so it is -- not just unlikely, but impossible that we would end -- up here. */ -- c->sigcontext_format = X86_SCF_LINUX_RT_SIGFRAME; -- c->sigcontext_addr = sigcontext_ptr; -- sc_addr = sigcontext_ptr + LINUX_UC_MCONTEXT_OFF; -- } -- esp_loc = DWARF_LOC (sc_addr + LINUX_SC_ESP_OFF, 0); -- eip_loc = DWARF_LOC (sc_addr + LINUX_SC_EIP_OFF, 0); -- ret = dwarf_get (&c->dwarf, esp_loc, &c->dwarf.cfa); -- if (ret < 0) -- { -- Debug (2, "returning 0\n"); -- return 0; -- } -- -- c->dwarf.loc[EAX] = DWARF_LOC (sc_addr + LINUX_SC_EAX_OFF, 0); -- c->dwarf.loc[ECX] = DWARF_LOC (sc_addr + LINUX_SC_ECX_OFF, 0); -- c->dwarf.loc[EDX] = DWARF_LOC (sc_addr + LINUX_SC_EDX_OFF, 0); -- c->dwarf.loc[EBX] = DWARF_LOC (sc_addr + LINUX_SC_EBX_OFF, 0); -- c->dwarf.loc[EBP] = DWARF_LOC (sc_addr + LINUX_SC_EBP_OFF, 0); -- c->dwarf.loc[ESI] = DWARF_LOC (sc_addr + LINUX_SC_ESI_OFF, 0); -- c->dwarf.loc[EDI] = DWARF_LOC (sc_addr + LINUX_SC_EDI_OFF, 0); -- c->dwarf.loc[EFLAGS] = DWARF_NULL_LOC; -- c->dwarf.loc[TRAPNO] = DWARF_NULL_LOC; -- c->dwarf.loc[ST0] = DWARF_NULL_LOC; -- } -- else if((ret = init_stack_based_ret(c, &addr)) >= 0) -- { -- // fprintf(stderr, "init_stack_based_ret() %d (0x%x)\n", ret, addr); -- c->dwarf.cfa += ret; -- c->dwarf.loc[ESP] = DWARF_LOC (c->dwarf.cfa, 0); -- c->dwarf.loc[EIP] = DWARF_LOC (addr, 0); -- c->dwarf.ret_addr_column = EIP; -- c->dwarf.ip = addr; -- return 1; -- } -+ ret = unw_handle_signal_frame(cursor); -+ if (ret < 0) -+ { -+ Debug (2, "returning 0\n"); -+ return 0; -+ } -+ } - else -- { -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[EBP], &c->dwarf.cfa); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- -- Debug (13, "[EBP=0x%x] = 0x%x\n", DWARF_GET_LOC (c->dwarf.loc[EBP]), -- c->dwarf.cfa); -- -- /* Mark all registers unsaved, since we don't know where -- they are saved (if at all), except for the EBP and -- EIP. */ -- for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) -- c->dwarf.loc[i] = DWARF_NULL_LOC; -- -- c->dwarf.loc[EBP] = DWARF_LOC (c->dwarf.cfa, 0); -- eip_loc = DWARF_LOC (c->dwarf.cfa + 4, 0); -- c->dwarf.cfa += 8; -- } -- eip_loc_set = 1; -- } -- if (eip_loc_set) -- { -- c->dwarf.loc[EIP] = eip_loc; -+ { -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[EBP], &c->dwarf.cfa); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ -+ Debug (13, "[EBP=0x%x] = 0x%x\n", DWARF_GET_LOC (c->dwarf.loc[EBP]), -+ c->dwarf.cfa); -+ -+ ebp_loc = DWARF_LOC (c->dwarf.cfa, 0); -+ eip_loc = DWARF_LOC (c->dwarf.cfa + 4, 0); -+ c->dwarf.cfa += 8; -+ -+ /* Mark all registers unsaved, since we don't know where -+ they are saved (if at all), except for the EBP and -+ EIP. */ -+ for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) -+ c->dwarf.loc[i] = DWARF_NULL_LOC; -+ -+ c->dwarf.loc[EBP] = ebp_loc; -+ c->dwarf.loc[EIP] = eip_loc; -+ c->dwarf.use_prev_instr = 1; -+ } - c->dwarf.ret_addr_column = EIP; - - if (!DWARF_IS_NULL_LOC (c->dwarf.loc[EBP])) -- { -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[EIP], &c->dwarf.ip); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- } -+ { -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[EIP], &c->dwarf.ip); -+ if (ret < 0) -+ { -+ Debug (13, "dwarf_get([EIP=0x%x]) failed\n", DWARF_GET_LOC (c->dwarf.loc[EIP])); -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ else -+ { -+ Debug (13, "[EIP=0x%x] = 0x%x\n", DWARF_GET_LOC (c->dwarf.loc[EIP]), -+ c->dwarf.ip); -+ } -+ } - else -- c->dwarf.ip = 0; -+ c->dwarf.ip = 0; - } -- - ret = (c->dwarf.ip == 0) ? 0 : 1; - Debug (2, "returning %d\n", ret); - return ret; -diff --git a/frysk-imports/libunwind/src/x86/Lfetch_proc_info_post.c b/frysk-imports/libunwind/src/x86/Lfetch_proc_info_post.c -deleted file mode 100644 -index c88239c..0000000 ---- a/frysk-imports/libunwind/src/x86/Lfetch_proc_info_post.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gfetch_proc_info_post.c" --#endif -diff --git a/frysk-imports/libunwind/src/x86/Lis_signal_frame.c b/frysk-imports/libunwind/src/x86/Lis_signal_frame.c -deleted file mode 100644 -index b9a7c4f..0000000 ---- a/frysk-imports/libunwind/src/x86/Lis_signal_frame.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gis_signal_frame.c" --#endif -diff --git a/frysk-imports/libunwind/src/x86/Los-freebsd.c b/frysk-imports/libunwind/src/x86/Los-freebsd.c -new file mode 100644 -index 0000000..a75a205 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86/Los-freebsd.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gos-freebsd.c" -+#endif -diff --git a/frysk-imports/libunwind/src/x86/Los-linux.c b/frysk-imports/libunwind/src/x86/Los-linux.c -new file mode 100644 -index 0000000..3cc18aa ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86/Los-linux.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gos-linux.c" -+#endif -diff --git a/frysk-imports/libunwind/src/x86/getcontext-freebsd.S b/frysk-imports/libunwind/src/x86/getcontext-freebsd.S -new file mode 100644 -index 0000000..670eff1 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86/getcontext-freebsd.S -@@ -0,0 +1,112 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010 Konstantin Belousov -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "offsets.h" -+ -+ .global _Ux86_getcontext -+ .type _Ux86_getcontext, @function -+_Ux86_getcontext: -+ .cfi_startproc -+ pushl %eax -+ .cfi_adjust_cfa_offset 4 -+ mov 8(%esp),%eax /* ucontext_t* */ -+ popl FREEBSD_UC_MCONTEXT_EAX_OFF(%eax) -+ .cfi_adjust_cfa_offset 4 -+ movl %ebx, FREEBSD_UC_MCONTEXT_EBX_OFF(%eax) -+ movl %ecx, FREEBSD_UC_MCONTEXT_ECX_OFF(%eax) -+ movl %edx, FREEBSD_UC_MCONTEXT_EDX_OFF(%eax) -+ movl %edi, FREEBSD_UC_MCONTEXT_EDI_OFF(%eax) -+ movl %esi, FREEBSD_UC_MCONTEXT_ESI_OFF(%eax) -+ movl %ebp, FREEBSD_UC_MCONTEXT_EBP_OFF(%eax) -+ -+ movl (%esp), %ecx -+ movl %ecx, FREEBSD_UC_MCONTEXT_EIP_OFF(%eax) -+ -+ leal 4(%esp), %ecx /* Exclude the return address. */ -+ movl %ecx, FREEBSD_UC_MCONTEXT_ESP_OFF(%eax) -+ -+ xorl %ecx, %ecx -+ movw %fs, %cx -+ movl %ecx, FREEBSD_UC_MCONTEXT_FS_OFF(%eax) -+ movw %gs, %cx -+ movl %ecx, FREEBSD_UC_MCONTEXT_GS_OFF(%eax) -+ movw %ds, %cx -+ movl %ecx, FREEBSD_UC_MCONTEXT_DS_OFF(%eax) -+ movw %es, %cx -+ movl %ecx, FREEBSD_UC_MCONTEXT_ES_OFF(%eax) -+ movw %ss, %cx -+ movl %ecx, FREEBSD_UC_MCONTEXT_SS_OFF(%eax) -+ movw %cs, %cx -+ movl %ecx, FREEBSD_UC_MCONTEXT_CS_OFF(%eax) -+ -+ pushfl -+ .cfi_adjust_cfa_offset 4 -+ popl FREEBSD_UC_MCONTEXT_EFLAGS_OFF(%eax) -+ .cfi_adjust_cfa_offset -4 -+ -+ movl $0, FREEBSD_UC_MCONTEXT_TRAPNO_OFF(%eax) -+ -+ movl $FREEBSD_UC_MCONTEXT_FPOWNED_FPU,\ -+ FREEBSD_UC_MCONTEXT_OWNEDFP_OFF(%eax) -+ movl $FREEBSD_UC_MCONTEXT_FPFMT_XMM,\ -+ FREEBSD_UC_MCONTEXT_FPFORMAT_OFF(%eax) -+ -+ /* -+ * Require CPU with fxsave implemented, and enabled by OS. -+ * -+ * If passed ucontext is not aligned to 16-byte boundary, -+ * save fpu context into temporary aligned location on stack -+ * and then copy. -+ */ -+ leal FREEBSD_UC_MCONTEXT_FPSTATE_OFF(%eax), %edx -+ testl $0xf, %edx -+ jne 2f -+ fxsave (%edx) /* fast path, passed ucontext save area was aligned */ -+1: movl $FREEBSD_UC_MCONTEXT_MC_LEN_VAL,\ -+ FREEBSD_UC_MCONTEXT_MC_LEN_OFF(%eax) -+ -+ xorl %eax, %eax -+ ret -+ -+2: movl %edx, %edi /* not aligned, do the dance */ -+ subl $512 + 16, %esp /* save area and 16 bytes for alignment */ -+ .cfi_adjust_cfa_offset 512 + 16 -+ movl %esp, %edx -+ orl $0xf, %edx /* align *%edx to 16-byte up */ -+ incl %edx -+ fxsave (%edx) -+ movl %edx, %esi /* copy to the final destination */ -+ movl $512/4,%ecx -+ rep; movsl -+ addl $512 + 16, %esp /* restore the stack */ -+ .cfi_adjust_cfa_offset -512 - 16 -+ movl FREEBSD_UC_MCONTEXT_ESI_OFF(%eax), %esi -+ movl FREEBSD_UC_MCONTEXT_EDI_OFF(%eax), %edi -+ jmp 1b -+ -+ .cfi_endproc -+ .size _Ux86_getcontext, . - _Ux86_getcontext -+ -+ /* We do not need executable stack. */ -+ .section .note.GNU-stack,"",@progbits -diff --git a/frysk-imports/libunwind/src/x86/getcontext-linux.S b/frysk-imports/libunwind/src/x86/getcontext-linux.S -new file mode 100644 -index 0000000..c469dad ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86/getcontext-linux.S -@@ -0,0 +1,74 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2009 Google, Inc -+ Contributed by Paul Pluzhnikov -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "offsets.h" -+ -+/* int _Ux86_getcontext (ucontext_t *ucp) -+ -+ Saves the machine context in UCP necessary for libunwind. -+ Unlike the libc implementation, we don't save the signal mask -+ and hence avoid the cost of a system call per unwind. -+ -+*/ -+ -+ .global _Ux86_getcontext -+ .type _Ux86_getcontext, @function -+_Ux86_getcontext: -+ .cfi_startproc -+ mov 4(%esp),%eax /* ucontext_t* */ -+ -+ /* EAX is not preserved. */ -+ movl $0, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_EAX_OFF)(%eax) -+ -+ movl %ebx, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_EBX_OFF)(%eax) -+ movl %ecx, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_ECX_OFF)(%eax) -+ movl %edx, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_EDX_OFF)(%eax) -+ movl %edi, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_EDI_OFF)(%eax) -+ movl %esi, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_ESI_OFF)(%eax) -+ movl %ebp, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_EBP_OFF)(%eax) -+ -+ movl (%esp), %ecx -+ movl %ecx, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_EIP_OFF)(%eax) -+ -+ leal 4(%esp), %ecx /* Exclude the return address. */ -+ movl %ecx, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_ESP_OFF)(%eax) -+ -+ /* glibc getcontext saves FS, but not GS */ -+ xorl %ecx, %ecx -+ movw %fs, %cx -+ movl %ecx, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_FS_OFF)(%eax) -+ -+ leal LINUX_UC_FPREGS_MEM_OFF(%eax), %ecx -+ movl %ecx, (LINUX_UC_MCONTEXT_OFF+LINUX_SC_FPSTATE_OFF)(%eax) -+ fnstenv (%ecx) -+ fldenv (%ecx) -+ -+ xor %eax, %eax -+ ret -+ .cfi_endproc -+ .size _Ux86_getcontext, . - _Ux86_getcontext -+ -+ /* We do not need executable stack. */ -+ .section .note.GNU-stack,"",@progbits -diff --git a/frysk-imports/libunwind/src/x86/init.h b/frysk-imports/libunwind/src/x86/init.h -index de97f5e..027aedc 100644 ---- a/frysk-imports/libunwind/src/x86/init.h -+++ b/frysk-imports/libunwind/src/x86/init.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,7 +26,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "unwind_i.h" - - static inline int --common_init (struct cursor *c) -+common_init (struct cursor *c, unsigned use_prev_instr) - { - int ret, i; - -@@ -50,16 +50,17 @@ common_init (struct cursor *c) - return ret; - - ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_X86_ESP), -- &c->dwarf.cfa); -+ &c->dwarf.cfa); - if (ret < 0) - return ret; - - c->sigcontext_format = X86_SCF_NONE; - c->sigcontext_addr = 0; - -- c->dwarf.decrease_ip = 0; - c->dwarf.args_size = 0; - c->dwarf.ret_addr_column = 0; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; - c->dwarf.pi_valid = 0; - c->dwarf.pi_is_dynamic = 0; - c->dwarf.hint = 0; -diff --git a/frysk-imports/libunwind/src/x86/is_fpreg.c b/frysk-imports/libunwind/src/x86/is_fpreg.c -index 8f1536d..addf9bc 100644 ---- a/frysk-imports/libunwind/src/x86/is_fpreg.c -+++ b/frysk-imports/libunwind/src/x86/is_fpreg.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2004-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -29,6 +29,6 @@ PROTECTED int - unw_is_fpreg (int regnum) - { - return ((regnum >= UNW_X86_ST0 && regnum <= UNW_X86_ST7) -- || (regnum >= UNW_X86_XMM0_lo && regnum <= UNW_X86_XMM7_hi) -- || (regnum >= UNW_X86_XMM0 && regnum <= UNW_X86_XMM7)); -+ || (regnum >= UNW_X86_XMM0_lo && regnum <= UNW_X86_XMM7_hi) -+ || (regnum >= UNW_X86_XMM0 && regnum <= UNW_X86_XMM7)); - } -diff --git a/frysk-imports/libunwind/src/x86/longjmp.S b/frysk-imports/libunwind/src/x86/longjmp.S -index a89139d..05173d0 100644 ---- a/frysk-imports/libunwind/src/x86/longjmp.S -+++ b/frysk-imports/libunwind/src/x86/longjmp.S -@@ -35,7 +35,5 @@ _UI_longjmp_cont: - ret - .cfi_endproc - .size _UI_siglongjmp_cont, .-_UI_longjmp_cont --#ifdef __linux__ - /* We do not need executable stack. */ - .section .note.GNU-stack,"",@progbits --#endif -diff --git a/frysk-imports/libunwind/src/x86/offsets.h b/frysk-imports/libunwind/src/x86/offsets.h -index 371103b..e5aec7f 100644 ---- a/frysk-imports/libunwind/src/x86/offsets.h -+++ b/frysk-imports/libunwind/src/x86/offsets.h -@@ -4,82 +4,137 @@ - - /* Offsets for x86 Linux "ucontext_t": */ - --#define LINUX_UC_FLAGS_OFF 0x00 --#define LINUX_UC_LINK_OFF 0x04 --#define LINUX_UC_STACK_OFF 0x08 --#define LINUX_UC_MCONTEXT_OFF 0x14 --#define LINUX_UC_SIGMASK_OFF 0x6c -+#define LINUX_UC_FLAGS_OFF 0x00 -+#define LINUX_UC_LINK_OFF 0x04 -+#define LINUX_UC_STACK_OFF 0x08 -+#define LINUX_UC_MCONTEXT_OFF 0x14 -+#define LINUX_UC_SIGMASK_OFF 0x6c -+#define LINUX_UC_FPREGS_MEM_OFF 0xec - - /* The struct sigcontext is located at an offset of 4 - from the stack pointer in the signal frame. */ - - /* Offsets for x86 Linux "struct sigcontext": */ - --#define LINUX_SC_GS_OFF 0x00 --#define LINUX_SC_GSH_OFF 0x02 --#define LINUX_SC_FS_OFF 0x04 --#define LINUX_SC_FSH_OFF 0x06 --#define LINUX_SC_ES_OFF 0x08 --#define LINUX_SC_ESH_OFF 0x0a --#define LINUX_SC_DS_OFF 0x0c --#define LINUX_SC_DSH_OFF 0x0e --#define LINUX_SC_EDI_OFF 0x10 --#define LINUX_SC_ESI_OFF 0x14 --#define LINUX_SC_EBP_OFF 0x18 --#define LINUX_SC_ESP_OFF 0x1c --#define LINUX_SC_EBX_OFF 0x20 --#define LINUX_SC_EDX_OFF 0x24 --#define LINUX_SC_ECX_OFF 0x28 --#define LINUX_SC_EAX_OFF 0x2c --#define LINUX_SC_TRAPNO_OFF 0x30 --#define LINUX_SC_ERR_OFF 0x34 --#define LINUX_SC_EIP_OFF 0x38 --#define LINUX_SC_CS_OFF 0x3c --#define LINUX_SC_CSH_OFF 0x3e --#define LINUX_SC_EFLAGS_OFF 0x40 --#define LINUX_SC_ESP_AT_SIGNAL_OFF 0x44 --#define LINUX_SC_SS_OFF 0x48 --#define LINUX_SC_SSH_OFF 0x4a --#define LINUX_SC_FPSTATE_OFF 0x4c --#define LINUX_SC_OLDMASK_OFF 0x50 --#define LINUX_SC_CR2_OFF 0x54 -- --#define LINUX_SC_TRAPNO_PF 14 /* Page-Fault Exception */ -+#define LINUX_SC_GS_OFF 0x00 -+#define LINUX_SC_GSH_OFF 0x02 -+#define LINUX_SC_FS_OFF 0x04 -+#define LINUX_SC_FSH_OFF 0x06 -+#define LINUX_SC_ES_OFF 0x08 -+#define LINUX_SC_ESH_OFF 0x0a -+#define LINUX_SC_DS_OFF 0x0c -+#define LINUX_SC_DSH_OFF 0x0e -+#define LINUX_SC_EDI_OFF 0x10 -+#define LINUX_SC_ESI_OFF 0x14 -+#define LINUX_SC_EBP_OFF 0x18 -+#define LINUX_SC_ESP_OFF 0x1c -+#define LINUX_SC_EBX_OFF 0x20 -+#define LINUX_SC_EDX_OFF 0x24 -+#define LINUX_SC_ECX_OFF 0x28 -+#define LINUX_SC_EAX_OFF 0x2c -+#define LINUX_SC_TRAPNO_OFF 0x30 -+#define LINUX_SC_ERR_OFF 0x34 -+#define LINUX_SC_EIP_OFF 0x38 -+#define LINUX_SC_CS_OFF 0x3c -+#define LINUX_SC_CSH_OFF 0x3e -+#define LINUX_SC_EFLAGS_OFF 0x40 -+#define LINUX_SC_ESP_AT_SIGNAL_OFF 0x44 -+#define LINUX_SC_SS_OFF 0x48 -+#define LINUX_SC_SSH_OFF 0x4a -+#define LINUX_SC_FPSTATE_OFF 0x4c -+#define LINUX_SC_OLDMASK_OFF 0x50 -+#define LINUX_SC_CR2_OFF 0x54 - - /* Offsets for x86 Linux "struct _fpstate": */ - --#define LINUX_FPSTATE_CW_OFF 0x000 --#define LINUX_FPSTATE_SW_OFF 0x004 --#define LINUX_FPSTATE_TAG_OFF 0x008 --#define LINUX_FPSTATE_IPOFF_OFF 0x00c --#define LINUX_FPSTATE_CSSEL_OFF 0x010 --#define LINUX_FPSTATE_DATAOFF_OFF 0x014 --#define LINUX_FPSTATE_DATASEL_OFF 0x018 --#define LINUX_FPSTATE_ST0_OFF 0x01c --#define LINUX_FPSTATE_ST1_OFF 0x026 --#define LINUX_FPSTATE_ST2_OFF 0x030 --#define LINUX_FPSTATE_ST3_OFF 0x03a --#define LINUX_FPSTATE_ST4_OFF 0x044 --#define LINUX_FPSTATE_ST5_OFF 0x04e --#define LINUX_FPSTATE_ST6_OFF 0x058 --#define LINUX_FPSTATE_ST7_OFF 0x062 --#define LINUX_FPSTATE_STATUS_OFF 0x06c --#define LINUX_FPSTATE_MAGIC_OFF 0x06e --#define LINUX_FPSTATE_FXSR_ENV_OFF 0x070 --#define LINUX_FPSTATE_MXCSR_OFF 0x088 --#define LINUX_FPSTATE_FXSR_ST0_OFF 0x090 --#define LINUX_FPSTATE_FXSR_ST1_OFF 0x0a0 --#define LINUX_FPSTATE_FXSR_ST2_OFF 0x0b0 --#define LINUX_FPSTATE_FXSR_ST3_OFF 0x0c0 --#define LINUX_FPSTATE_FXSR_ST4_OFF 0x0d0 --#define LINUX_FPSTATE_FXSR_ST5_OFF 0x0e0 --#define LINUX_FPSTATE_FXSR_ST6_OFF 0x0f0 --#define LINUX_FPSTATE_FXSR_ST7_OFF 0x100 --#define LINUX_FPSTATE_XMM0_OFF 0x110 --#define LINUX_FPSTATE_XMM1_OFF 0x120 --#define LINUX_FPSTATE_XMM2_OFF 0x130 --#define LINUX_FPSTATE_XMM3_OFF 0x140 --#define LINUX_FPSTATE_XMM4_OFF 0x150 --#define LINUX_FPSTATE_XMM5_OFF 0x160 --#define LINUX_FPSTATE_XMM6_OFF 0x170 --#define LINUX_FPSTATE_XMM7_OFF 0x180 -+#define LINUX_FPSTATE_CW_OFF 0x000 -+#define LINUX_FPSTATE_SW_OFF 0x004 -+#define LINUX_FPSTATE_TAG_OFF 0x008 -+#define LINUX_FPSTATE_IPOFF_OFF 0x00c -+#define LINUX_FPSTATE_CSSEL_OFF 0x010 -+#define LINUX_FPSTATE_DATAOFF_OFF 0x014 -+#define LINUX_FPSTATE_DATASEL_OFF 0x018 -+#define LINUX_FPSTATE_ST0_OFF 0x01c -+#define LINUX_FPSTATE_ST1_OFF 0x026 -+#define LINUX_FPSTATE_ST2_OFF 0x030 -+#define LINUX_FPSTATE_ST3_OFF 0x03a -+#define LINUX_FPSTATE_ST4_OFF 0x044 -+#define LINUX_FPSTATE_ST5_OFF 0x04e -+#define LINUX_FPSTATE_ST6_OFF 0x058 -+#define LINUX_FPSTATE_ST7_OFF 0x062 -+#define LINUX_FPSTATE_STATUS_OFF 0x06c -+#define LINUX_FPSTATE_MAGIC_OFF 0x06e -+#define LINUX_FPSTATE_FXSR_ENV_OFF 0x070 -+#define LINUX_FPSTATE_MXCSR_OFF 0x088 -+#define LINUX_FPSTATE_FXSR_ST0_OFF 0x090 -+#define LINUX_FPSTATE_FXSR_ST1_OFF 0x0a0 -+#define LINUX_FPSTATE_FXSR_ST2_OFF 0x0b0 -+#define LINUX_FPSTATE_FXSR_ST3_OFF 0x0c0 -+#define LINUX_FPSTATE_FXSR_ST4_OFF 0x0d0 -+#define LINUX_FPSTATE_FXSR_ST5_OFF 0x0e0 -+#define LINUX_FPSTATE_FXSR_ST6_OFF 0x0f0 -+#define LINUX_FPSTATE_FXSR_ST7_OFF 0x100 -+#define LINUX_FPSTATE_XMM0_OFF 0x110 -+#define LINUX_FPSTATE_XMM1_OFF 0x120 -+#define LINUX_FPSTATE_XMM2_OFF 0x130 -+#define LINUX_FPSTATE_XMM3_OFF 0x140 -+#define LINUX_FPSTATE_XMM4_OFF 0x150 -+#define LINUX_FPSTATE_XMM5_OFF 0x160 -+#define LINUX_FPSTATE_XMM6_OFF 0x170 -+#define LINUX_FPSTATE_XMM7_OFF 0x180 -+ -+/* FreeBSD-specific definitions: */ -+ -+#define FREEBSD_SC_UCONTEXT_OFF 0x20 -+#define FREEBSD_UC_MCONTEXT_OFF 0x10 -+ -+#define FREEBSD_UC_MCONTEXT_GS_OFF 0x14 -+#define FREEBSD_UC_MCONTEXT_FS_OFF 0x18 -+#define FREEBSD_UC_MCONTEXT_ES_OFF 0x1c -+#define FREEBSD_UC_MCONTEXT_DS_OFF 0x20 -+#define FREEBSD_UC_MCONTEXT_EDI_OFF 0x24 -+#define FREEBSD_UC_MCONTEXT_ESI_OFF 0x28 -+#define FREEBSD_UC_MCONTEXT_EBP_OFF 0x2c -+#define FREEBSD_UC_MCONTEXT_EBX_OFF 0x34 -+#define FREEBSD_UC_MCONTEXT_EDX_OFF 0x38 -+#define FREEBSD_UC_MCONTEXT_ECX_OFF 0x3c -+#define FREEBSD_UC_MCONTEXT_EAX_OFF 0x40 -+#define FREEBSD_UC_MCONTEXT_TRAPNO_OFF 0x44 -+#define FREEBSD_UC_MCONTEXT_EIP_OFF 0x4c -+#define FREEBSD_UC_MCONTEXT_ESP_OFF 0x58 -+#define FREEBSD_UC_MCONTEXT_CS_OFF 0x50 -+#define FREEBSD_UC_MCONTEXT_EFLAGS_OFF 0x54 -+#define FREEBSD_UC_MCONTEXT_SS_OFF 0x5c -+#define FREEBSD_UC_MCONTEXT_MC_LEN_OFF 0x60 -+#define FREEBSD_UC_MCONTEXT_FPFORMAT_OFF 0x64 -+#define FREEBSD_UC_MCONTEXT_OWNEDFP_OFF 0x68 -+#define FREEBSD_UC_MCONTEXT_FPSTATE_OFF 0x70 -+ -+#define FREEBSD_UC_MCONTEXT_CW_OFF 0x70 -+#define FREEBSD_UC_MCONTEXT_SW_OFF 0x74 -+#define FREEBSD_UC_MCONTEXT_TAG_OFF 0x78 -+#define FREEBSD_UC_MCONTEXT_IPOFF_OFF 0x7c -+#define FREEBSD_UC_MCONTEXT_CSSEL_OFF 0x80 -+#define FREEBSD_UC_MCONTEXT_DATAOFF_OFF 0x84 -+#define FREEBSD_US_MCONTEXT_DATASEL_OFF 0x88 -+#define FREEBSD_UC_MCONTEXT_ST0_OFF 0x8c -+ -+#define FREEBSD_UC_MCONTEXT_CW_XMM_OFF 0x70 -+#define FREEBSD_UC_MCONTEXT_SW_XMM_OFF 0x72 -+#define FREEBSD_UC_MCONTEXT_TAG_XMM_OFF 0x74 -+#define FREEBSD_UC_MCONTEXT_IPOFF_XMM_OFF 0x78 -+#define FREEBSD_UC_MCONTEXT_CSSEL_XMM_OFF 0x7c -+#define FREEBSD_UC_MCONTEXT_DATAOFF_XMM_OFF 0x80 -+#define FREEBSD_US_MCONTEXT_DATASEL_XMM_OFF 0x84 -+#define FREEBSD_UC_MCONTEXT_MXCSR_XMM_OFF 0x88 -+#define FREEBSD_UC_MCONTEXT_ST0_XMM_OFF 0x90 -+#define FREEBSD_UC_MCONTEXT_XMM0_OFF 0x110 -+ -+#define FREEBSD_UC_MCONTEXT_MC_LEN_VAL 0x280 -+#define FREEBSD_UC_MCONTEXT_FPFMT_NODEV 0x10000 -+#define FREEBSD_UC_MCONTEXT_FPFMT_387 0x10001 -+#define FREEBSD_UC_MCONTEXT_FPFMT_XMM 0x10002 -+#define FREEBSD_UC_MCONTEXT_FPOWNED_NONE 0x20000 -+#define FREEBSD_UC_MCONTEXT_FPOWNED_FPU 0x20001 -+#define FREEBSD_UC_MCONTEXT_FPOWNED_PCB 0x20002 -+ -diff --git a/frysk-imports/libunwind/src/x86/siglongjmp.S b/frysk-imports/libunwind/src/x86/siglongjmp.S -index 5aa1784..32bba3b 100644 ---- a/frysk-imports/libunwind/src/x86/siglongjmp.S -+++ b/frysk-imports/libunwind/src/x86/siglongjmp.S -@@ -1,6 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co - Contributed by David Mosberger-Tang -+ Copyright (C) 2011 Konstantin Belousov - - This file is part of libunwind. - -@@ -25,7 +26,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - .globl _UI_siglongjmp_cont - -+#if defined(__linux__) - #define SIG_SETMASK 2 -+#elif defined(__FreeBSD__) -+#define SIG_SETMASK 3 -+#endif - - /* Stack layout at this point: - -@@ -39,6 +44,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - .type _UI_siglongjmp_cont, @function - _UI_siglongjmp_cont: - .cfi_startproc -+#ifdef __linux__ - .cfi_register 8, 0 /* IP saved in EAX */ - .cfi_def_cfa_offset 8 - mov %esp, %ecx /* pass address of signal mask in 3rd sc arg */ -@@ -64,9 +70,23 @@ _UI_siglongjmp_cont: - lea 8(%esp), %esp /* pop sigmask */ - .cfi_adjust_cfa_offset -4 - jmp *%edx -+#elif defined(__FreeBSD__) -+ pushl %eax -+ pushl %edx -+ pushl $0 -+ pushl %ecx -+ pushl $SIG_SETMASK -+ movl $340,%eax -+ pushl %eax -+ int $0x80 -+ addl $16,%esp -+ popl %eax -+ popl %edx -+ jmp *%edx -+#else -+#error Port me -+#endif - .cfi_endproc - .size _UI_siglongjmp_cont, .-_UI_siglongjmp_cont --#ifdef __linux__ - /* We do not need executable stack. */ - .section .note.GNU-stack,"",@progbits --#endif -diff --git a/frysk-imports/libunwind/src/x86/unwind_i.h b/frysk-imports/libunwind/src/x86/unwind_i.h -index 6347719..cd52824 100644 ---- a/frysk-imports/libunwind/src/x86/unwind_i.h -+++ b/frysk-imports/libunwind/src/x86/unwind_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - This file is part of libunwind. - -@@ -26,7 +26,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef unwind_i_h - #define unwind_i_h - --#include - #include - - #include -@@ -34,27 +33,31 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include "libunwind_i.h" - - /* DWARF column numbers: */ --#define EAX 0 --#define ECX 1 --#define EDX 2 --#define EBX 3 --#define ESP 4 --#define EBP 5 --#define ESI 6 --#define EDI 7 --#define EIP 8 --#define EFLAGS 9 --#define TRAPNO 10 --#define ST0 11 -- --#define x86_lock UNW_OBJ(lock) --#define x86_local_resume UNW_OBJ(local_resume) --#define x86_local_addr_space_init UNW_OBJ(local_addr_space_init) --#define x86_scratch_loc UNW_OBJ(scratch_loc) -+#define EAX 0 -+#define ECX 1 -+#define EDX 2 -+#define EBX 3 -+#define ESP 4 -+#define EBP 5 -+#define ESI 6 -+#define EDI 7 -+#define EIP 8 -+#define EFLAGS 9 -+#define TRAPNO 10 -+#define ST0 11 -+ -+#define x86_lock UNW_OBJ(lock) -+#define x86_local_resume UNW_OBJ(local_resume) -+#define x86_local_addr_space_init UNW_OBJ(local_addr_space_init) -+#define x86_scratch_loc UNW_OBJ(scratch_loc) -+#define x86_get_scratch_loc UNW_OBJ(get_scratch_loc) -+#define x86_r_uc_addr UNW_OBJ(r_uc_addr) - - extern void x86_local_addr_space_init (void); - extern int x86_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -- void *arg); -+ void *arg); - extern dwarf_loc_t x86_scratch_loc (struct cursor *c, unw_regnum_t reg); -+extern dwarf_loc_t x86_get_scratch_loc (struct cursor *c, unw_regnum_t reg); -+extern void *x86_r_uc_addr (ucontext_t *uc, int reg); - - #endif /* unwind_i_h */ -diff --git a/frysk-imports/libunwind/src/x86_64/Gcreate_addr_space.c b/frysk-imports/libunwind/src/x86_64/Gcreate_addr_space.c -index 975387a..38ee5af 100644 ---- a/frysk-imports/libunwind/src/x86_64/Gcreate_addr_space.c -+++ b/frysk-imports/libunwind/src/x86_64/Gcreate_addr_space.c -@@ -1,8 +1,9 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock -+ Copyright (C) 2012 Tommi Rantala - - This file is part of libunwind. - -@@ -29,14 +30,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "unwind_i.h" - -+#if defined(_LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN) -+#define __LITTLE_ENDIAN _LITTLE_ENDIAN -+#endif -+ - PROTECTED unw_addr_space_t - unw_create_addr_space (unw_accessors_t *a, int byte_order) - { - #ifdef UNW_LOCAL_ONLY - return NULL; - #else -- unw_addr_space_t as = malloc (sizeof (*as)); -+ unw_addr_space_t as; - -+ /* -+ * x86_64 supports only little-endian. -+ */ -+ if (byte_order != 0 && byte_order != __LITTLE_ENDIAN) -+ return NULL; -+ -+ as = malloc (sizeof (*as)); - if (!as) - return NULL; - -@@ -44,11 +56,6 @@ unw_create_addr_space (unw_accessors_t *a, int byte_order) - - as->acc = *a; - -- /* -- * x86_64 supports only little-endian. -- */ -- if (byte_order != 0 && byte_order != __LITTLE_ENDIAN) -- return NULL; - return as; - #endif - } -diff --git a/frysk-imports/libunwind/src/x86_64/Gfetch_proc_info_post.c b/frysk-imports/libunwind/src/x86_64/Gfetch_proc_info_post.c -deleted file mode 100644 -index 952e5d5..0000000 ---- a/frysk-imports/libunwind/src/x86_64/Gfetch_proc_info_post.c -+++ /dev/null -@@ -1,51 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (c) 2006 Hewlett-Packard Development Company, L.P. -- Contributed by Jan Kratochvil -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "libunwind_i.h" -- --HIDDEN int --tdep_fetch_proc_info_post (struct dwarf_cursor *c, unw_word_t ip, int need_unwind_info) --{ -- struct cursor *cursor = (struct cursor *) c; -- -- /* Should happen only if `!need_unwind_info'. */ -- if (!c->pi_valid) -- return 0; -- /* Should happen only if `!need_unwind_info'. */ -- if (!c->pi.unwind_info) -- return 0; -- -- /* Reset the value for this frame. */ -- cursor->sigcontext_format = X86_64_SCF_NONE; -- -- /* Normal non-signal frames case. */ -- if (!((struct dwarf_cie_info *) c->pi.unwind_info)->signal_frame) -- return 0; -- -- cursor->sigcontext_format = X86_64_SCF_LINUX_RT_SIGFRAME; -- cursor->sigcontext_addr = c->cfa; -- -- return 0; --} -diff --git a/frysk-imports/libunwind/src/x86_64/Gget_proc_info.c b/frysk-imports/libunwind/src/x86_64/Gget_proc_info.c -index 213666e..8def62d 100644 ---- a/frysk-imports/libunwind/src/x86_64/Gget_proc_info.c -+++ b/frysk-imports/libunwind/src/x86_64/Gget_proc_info.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2002-2003 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -35,9 +35,9 @@ unw_get_proc_info (unw_cursor_t *cursor, unw_proc_info_t *pi) - if (dwarf_make_proc_info (&c->dwarf) < 0) - { - /* On x86-64, some key routines such as _start() and _dl_start() -- are missing DWARF unwind info. We don't want to fail in that -- case, because those frames are uninteresting and just mark -- the end of the frame-chain anyhow. */ -+ are missing DWARF unwind info. We don't want to fail in that -+ case, because those frames are uninteresting and just mark -+ the end of the frame-chain anyhow. */ - memset (pi, 0, sizeof (*pi)); - pi->start_ip = c->dwarf.ip; - pi->end_ip = c->dwarf.ip + 1; -diff --git a/frysk-imports/libunwind/src/x86_64/Gget_save_loc.c b/frysk-imports/libunwind/src/x86_64/Gget_save_loc.c -index db81db3..b48fa91 100644 ---- a/frysk-imports/libunwind/src/x86_64/Gget_save_loc.c -+++ b/frysk-imports/libunwind/src/x86_64/Gget_save_loc.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -33,7 +33,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - struct cursor *c = (struct cursor *) cursor; - dwarf_loc_t loc; - -- loc = DWARF_NULL_LOC; /* default to "not saved" */ -+ loc = DWARF_NULL_LOC; /* default to "not saved" */ - - switch (reg) - { -@@ -49,7 +49,7 @@ unw_get_save_loc (unw_cursor_t *cursor, int reg, unw_save_loc_t *sloc) - break; - } - -- memset (sloc, 0, sizeof (sloc)); -+ memset (sloc, 0, sizeof (*sloc)); - - if (DWARF_IS_NULL_LOC (loc)) - { -diff --git a/frysk-imports/libunwind/src/x86_64/Gglobal.c b/frysk-imports/libunwind/src/x86_64/Gglobal.c -index ec14efe..8d1fbb4 100644 ---- a/frysk-imports/libunwind/src/x86_64/Gglobal.c -+++ b/frysk-imports/libunwind/src/x86_64/Gglobal.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003, 2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -25,15 +25,16 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -+#include "config.h" - #include "unwind_i.h" - #include "dwarf_i.h" - --HIDDEN pthread_mutex_t x86_64_lock = PTHREAD_MUTEX_INITIALIZER; --HIDDEN int tdep_needs_initialization = 1; -+HIDDEN define_lock (x86_64_lock); -+HIDDEN int tdep_init_done; - - /* See comments for svr4_dbx_register_map[] in gcc/config/i386/i386.c. */ - --HIDDEN uint8_t dwarf_to_unw_regnum_map[17] = -+HIDDEN const uint8_t dwarf_to_unw_regnum_map[DWARF_NUM_PRESERVED_REGS] = - { - UNW_X86_64_RAX, - UNW_X86_64_RDX, -@@ -51,7 +52,25 @@ HIDDEN uint8_t dwarf_to_unw_regnum_map[17] = - UNW_X86_64_R13, - UNW_X86_64_R14, - UNW_X86_64_R15, -- UNW_X86_64_RIP -+ UNW_X86_64_RIP, -+#ifdef CONFIG_MSABI_SUPPORT -+ UNW_X86_64_XMM0, -+ UNW_X86_64_XMM1, -+ UNW_X86_64_XMM2, -+ UNW_X86_64_XMM3, -+ UNW_X86_64_XMM4, -+ UNW_X86_64_XMM5, -+ UNW_X86_64_XMM6, -+ UNW_X86_64_XMM7, -+ UNW_X86_64_XMM8, -+ UNW_X86_64_XMM9, -+ UNW_X86_64_XMM10, -+ UNW_X86_64_XMM11, -+ UNW_X86_64_XMM12, -+ UNW_X86_64_XMM13, -+ UNW_X86_64_XMM14, -+ UNW_X86_64_XMM15 -+#endif - }; - - HIDDEN void -@@ -61,10 +80,9 @@ tdep_init (void) - - sigfillset (&unwi_full_mask); - -- sigprocmask (SIG_SETMASK, &unwi_full_mask, &saved_mask); -- mutex_lock (&x86_64_lock); -+ lock_acquire (&x86_64_lock, saved_mask); - { -- if (!tdep_needs_initialization) -+ if (tdep_init_done) - /* another thread else beat us to it... */ - goto out; - -@@ -72,12 +90,13 @@ tdep_init (void) - - dwarf_init (); - -+ tdep_init_mem_validate (); -+ - #ifndef UNW_REMOTE_ONLY - x86_64_local_addr_space_init (); - #endif -- tdep_needs_initialization = 0; /* signal that we're initialized... */ -+ tdep_init_done = 1; /* signal that we're initialized... */ - } - out: -- mutex_unlock (&x86_64_lock); -- sigprocmask (SIG_SETMASK, &saved_mask, NULL); -+ lock_release (&x86_64_lock, saved_mask); - } -diff --git a/frysk-imports/libunwind/src/x86_64/Ginit.c b/frysk-imports/libunwind/src/x86_64/Ginit.c -index 026e8d2..7827576 100644 ---- a/frysk-imports/libunwind/src/x86_64/Ginit.c -+++ b/frysk-imports/libunwind/src/x86_64/Ginit.c -@@ -1,7 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002 Hewlett-Packard Co - Copyright (C) 2007 David Mosberger-Tang -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -26,6 +26,11 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include - #include - #include - #include -@@ -43,47 +48,6 @@ static struct unw_addr_space local_addr_space; - - PROTECTED unw_addr_space_t unw_local_addr_space = &local_addr_space; - --static inline void * --uc_addr (ucontext_t *uc, int reg) --{ -- void *addr; -- -- switch (reg) -- { -- case UNW_X86_64_R8: addr = &uc->uc_mcontext.gregs[REG_R8]; break; -- case UNW_X86_64_R9: addr = &uc->uc_mcontext.gregs[REG_R9]; break; -- case UNW_X86_64_R10: addr = &uc->uc_mcontext.gregs[REG_R10]; break; -- case UNW_X86_64_R11: addr = &uc->uc_mcontext.gregs[REG_R11]; break; -- case UNW_X86_64_R12: addr = &uc->uc_mcontext.gregs[REG_R12]; break; -- case UNW_X86_64_R13: addr = &uc->uc_mcontext.gregs[REG_R13]; break; -- case UNW_X86_64_R14: addr = &uc->uc_mcontext.gregs[REG_R14]; break; -- case UNW_X86_64_R15: addr = &uc->uc_mcontext.gregs[REG_R15]; break; -- case UNW_X86_64_RDI: addr = &uc->uc_mcontext.gregs[REG_RDI]; break; -- case UNW_X86_64_RSI: addr = &uc->uc_mcontext.gregs[REG_RSI]; break; -- case UNW_X86_64_RBP: addr = &uc->uc_mcontext.gregs[REG_RBP]; break; -- case UNW_X86_64_RBX: addr = &uc->uc_mcontext.gregs[REG_RBX]; break; -- case UNW_X86_64_RDX: addr = &uc->uc_mcontext.gregs[REG_RDX]; break; -- case UNW_X86_64_RAX: addr = &uc->uc_mcontext.gregs[REG_RAX]; break; -- case UNW_X86_64_RCX: addr = &uc->uc_mcontext.gregs[REG_RCX]; break; -- case UNW_X86_64_RSP: addr = &uc->uc_mcontext.gregs[REG_RSP]; break; -- case UNW_X86_64_RIP: addr = &uc->uc_mcontext.gregs[REG_RIP]; break; -- -- default: -- addr = NULL; -- } -- return addr; --} -- --# ifdef UNW_LOCAL_ONLY -- --HIDDEN void * --tdep_uc_addr (ucontext_t *uc, int reg) --{ -- return uc_addr (uc, reg); --} -- --# endif /* UNW_LOCAL_ONLY */ -- - HIDDEN unw_dyn_info_list_t _U_dyn_info_list; - - /* XXX fix me: there is currently no way to locate the dyn-info list -@@ -99,14 +63,69 @@ put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg) - - static int - get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr, -- void *arg) -+ void *arg) - { - *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list; - return 0; - } - - #define PAGE_SIZE 4096 --#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1)) -+#define PAGE_START(a) ((a) & ~(PAGE_SIZE-1)) -+ -+static int (*mem_validate_func) (void *addr, size_t len); -+static int msync_validate (void *addr, size_t len) -+{ -+ return msync (addr, len, MS_ASYNC); -+} -+ -+#ifdef HAVE_MINCORE -+static int mincore_validate (void *addr, size_t len) -+{ -+ unsigned char mvec[2]; /* Unaligned access may cross page boundary */ -+ size_t i; -+ -+ /* mincore could fail with EAGAIN but we conservatively return -1 -+ instead of looping. */ -+ if (mincore (addr, len, mvec) != 0) -+ { -+ return -1; -+ } -+ -+ for (i = 0; i < (len + PAGE_SIZE - 1) / PAGE_SIZE; i++) -+ { -+ if (!(mvec[i] & 1)) return -1; -+ } -+ -+ return 0; -+} -+#endif -+ -+/* Initialise memory validation method. On linux kernels <2.6.21, -+ mincore() returns incorrect value for MAP_PRIVATE mappings, -+ such as stacks. If mincore() was available at compile time, -+ check if we can actually use it. If not, use msync() instead. */ -+HIDDEN void -+tdep_init_mem_validate (void) -+{ -+#ifdef HAVE_MINCORE -+ unsigned char present = 1; -+ unw_word_t addr = PAGE_START((unw_word_t)&present); -+ unsigned char mvec[1]; -+ int ret; -+ while ((ret = mincore ((void*)addr, PAGE_SIZE, mvec)) == -1 && -+ errno == EAGAIN) {} -+ if (ret == 0 && (mvec[0] & 1)) -+ { -+ Debug(1, "using mincore to validate memory\n"); -+ mem_validate_func = mincore_validate; -+ } -+ else -+#endif -+ { -+ Debug(1, "using msync to validate memory\n"); -+ mem_validate_func = msync_validate; -+ } -+} - - /* Cache of already validated addresses */ - #define NLGA 4 -@@ -117,16 +136,25 @@ static int - validate_mem (unw_word_t addr) - { - int i, victim; -+ size_t len; -+ -+ if (PAGE_START(addr + sizeof (unw_word_t) - 1) == PAGE_START(addr)) -+ len = PAGE_SIZE; -+ else -+ len = PAGE_SIZE * 2; - - addr = PAGE_START(addr); - -+ if (addr == 0) -+ return -1; -+ - for (i = 0; i < NLGA; i++) - { - if (last_good_addr[i] && (addr == last_good_addr[i])) -- return 0; -+ return 0; - } - -- if (msync ((void *) addr, 1, MS_SYNC) == -1) -+ if (mem_validate_func ((void *) addr, len) == -1) - return -1; - - victim = lga_victim; -@@ -148,9 +176,9 @@ validate_mem (unw_word_t addr) - - static int - access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { -- if (write) -+ if (unlikely (write)) - { - Debug (16, "mem[%016lx] <- %lx\n", addr, *val); - *(unw_word_t *) addr = *val; -@@ -158,8 +186,12 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - else - { - /* validate address */ -- if (as->validate && validate_mem(addr)) -+ const struct cursor *c = (const struct cursor *)arg; -+ if (likely (c != NULL) && unlikely (c->validate) -+ && unlikely (validate_mem (addr))) { -+ Debug (16, "mem[%016lx] -> invalid\n", addr); - return -1; -+ } - *val = *(unw_word_t *) addr; - Debug (16, "mem[%016lx] -> %lx\n", addr, *val); - } -@@ -168,15 +200,15 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *val, int write, - - static int - access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, -- void *arg) -+ void *arg) - { - unw_word_t *addr; -- ucontext_t *uc = arg; -+ ucontext_t *uc = ((struct cursor *)arg)->uc; - - if (unw_is_fpreg (reg)) - goto badreg; - -- if (!(addr = uc_addr (uc, reg))) -+ if (!(addr = x86_64_r_uc_addr (uc, reg))) - goto badreg; - - if (write) -@@ -198,28 +230,28 @@ access_reg (unw_addr_space_t as, unw_regnum_t reg, unw_word_t *val, int write, - - static int - access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, -- int write, void *arg) -+ int write, void *arg) - { -- ucontext_t *uc = arg; -+ ucontext_t *uc = ((struct cursor *)arg)->uc; - unw_fpreg_t *addr; - - if (!unw_is_fpreg (reg)) - goto badreg; - -- if (!(addr = uc_addr (uc, reg))) -+ if (!(addr = x86_64_r_uc_addr (uc, reg))) - goto badreg; - - if (write) - { - Debug (12, "%s <- %08lx.%08lx.%08lx\n", unw_regname (reg), -- ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); - *(unw_fpreg_t *) addr = *val; - } - else - { - *val = *(unw_fpreg_t *) addr; - Debug (12, "%s -> %08lx.%08lx.%08lx\n", unw_regname (reg), -- ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); -+ ((long *)val)[0], ((long *)val)[1], ((long *)val)[2]); - } - return 0; - -@@ -231,8 +263,8 @@ access_fpreg (unw_addr_space_t as, unw_regnum_t reg, unw_fpreg_t *val, - - static int - get_static_proc_name (unw_addr_space_t as, unw_word_t ip, -- char *buf, size_t buf_len, unw_word_t *offp, -- void *arg) -+ char *buf, size_t buf_len, unw_word_t *offp, -+ void *arg) - { - return _Uelf64_get_proc_name (as, getpid (), ip, buf, buf_len, offp); - } -@@ -252,7 +284,6 @@ x86_64_local_addr_space_init (void) - local_addr_space.acc.get_proc_name = get_static_proc_name; - unw_flush_cache (&local_addr_space, 0, 0); - -- local_addr_space.validate = 0; - memset (last_good_addr, 0, sizeof (unw_word_t) * NLGA); - lga_victim = 0; - } -diff --git a/frysk-imports/libunwind/src/x86_64/Ginit_local.c b/frysk-imports/libunwind/src/x86_64/Ginit_local.c -index 9bb2513..0799389 100644 ---- a/frysk-imports/libunwind/src/x86_64/Ginit_local.c -+++ b/frysk-imports/libunwind/src/x86_64/Ginit_local.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2002-2003 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -43,14 +43,16 @@ unw_init_local (unw_cursor_t *cursor, ucontext_t *uc) - { - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (unlikely (!tdep_init_done)) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = unw_local_addr_space; -- c->dwarf.as_arg = uc; -- return common_init (c); -+ c->dwarf.as_arg = c; -+ c->uc = uc; -+ c->validate = 0; -+ return common_init (c, 1); - } - - #endif /* !UNW_REMOTE_ONLY */ -diff --git a/frysk-imports/libunwind/src/x86_64/Ginit_remote.c b/frysk-imports/libunwind/src/x86_64/Ginit_remote.c -index 9b2fd23..f3b7bb9 100644 ---- a/frysk-imports/libunwind/src/x86_64/Ginit_remote.c -+++ b/frysk-imports/libunwind/src/x86_64/Ginit_remote.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2003 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -36,13 +36,22 @@ unw_init_remote (unw_cursor_t *cursor, unw_addr_space_t as, void *as_arg) - #else /* !UNW_LOCAL_ONLY */ - struct cursor *c = (struct cursor *) cursor; - -- if (tdep_needs_initialization) -+ if (!tdep_init_done) - tdep_init (); - - Debug (1, "(cursor=%p)\n", c); - - c->dwarf.as = as; -- c->dwarf.as_arg = as_arg; -- return common_init (c); -+ if (as == unw_local_addr_space) -+ { -+ c->dwarf.as_arg = c; -+ c->uc = as_arg; -+ } -+ else -+ { -+ c->dwarf.as_arg = as_arg; -+ c->uc = NULL; -+ } -+ return common_init (c, 0); - #endif /* !UNW_LOCAL_ONLY */ - } -diff --git a/frysk-imports/libunwind/src/x86_64/Gis_signal_frame.c b/frysk-imports/libunwind/src/x86_64/Gis_signal_frame.c -deleted file mode 100644 -index c9bab90..0000000 ---- a/frysk-imports/libunwind/src/x86_64/Gis_signal_frame.c -+++ /dev/null -@@ -1,69 +0,0 @@ --/* libunwind - a platform-independent unwind library -- Copyright (C) 2002-2003 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -- -- Modified for x86_64 by Max Asbock -- --This file is part of libunwind. -- --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 AUTHORS OR COPYRIGHT HOLDERS BE --LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION --OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION --WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -- --#include "unwind_i.h" -- --#ifdef __linux__ --PROTECTED int --unw_is_signal_frame (unw_cursor_t *cursor) --{ -- struct cursor *c = (struct cursor *) cursor; -- unw_word_t w0, w1, ip; -- unw_addr_space_t as; -- unw_accessors_t *a; -- void *arg; -- int ret; -- -- as = c->dwarf.as; -- a = unw_get_accessors (as); -- as->validate = 1; /* Don't trust the ip */ -- arg = c->dwarf.as_arg; -- -- /* Check if RIP points at sigreturn sequence. -- on x86_64 Linux that is (see libc.so): -- 48 c7 c0 0f 00 00 00 mov $0xf,%rax -- 0f 05 syscall -- 66 data16 -- */ -- -- ip = c->dwarf.ip; -- if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0 -- || (ret = (*a->access_mem) (as, ip + 8, &w1, 0, arg)) < 0) -- return 0; -- w1 &= 0xffffffff; -- return (w0 == 0x0f0000000fc0c748 && w1 == 0x66666605); --} -- --#else /* __linux__ */ -- --PROTECTED int --unw_is_signal_frame (unw_cursor_t *cursor) --{ -- printf ("%s: implement me\n", __FUNCTION__); -- return -UNW_ENOINFO; --} --#endif /* __linux__ */ -diff --git a/frysk-imports/libunwind/src/x86_64/Gos-freebsd.c b/frysk-imports/libunwind/src/x86_64/Gos-freebsd.c -new file mode 100644 -index 0000000..e7e8da1 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/Gos-freebsd.c -@@ -0,0 +1,200 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010 Konstantin Belousov -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif -+ -+#include -+#include -+#include -+#include -+#include "unwind_i.h" -+#include "ucontext_i.h" -+ -+PROTECTED int -+unw_is_signal_frame (unw_cursor_t *cursor) -+{ -+ /* XXXKIB */ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t w0, w1, w2, b0, ip; -+ unw_addr_space_t as; -+ unw_accessors_t *a; -+ void *arg; -+ int ret; -+ -+ as = c->dwarf.as; -+ a = unw_get_accessors (as); -+ arg = c->dwarf.as_arg; -+ -+ /* Check if RIP points at sigreturn sequence. -+48 8d 7c 24 10 lea SIGF_UC(%rsp),%rdi -+6a 00 pushq $0 -+48 c7 c0 a1 01 00 00 movq $SYS_sigreturn,%rax -+0f 05 syscall -+f4 0: hlt -+eb fd jmp 0b -+ */ -+ -+ ip = c->dwarf.ip; -+ c->sigcontext_format = X86_64_SCF_NONE; -+ if ((ret = (*a->access_mem) (as, ip, &w0, 0, arg)) < 0 -+ || (ret = (*a->access_mem) (as, ip + 8, &w1, 0, arg)) < 0 -+ || (ret = (*a->access_mem) (as, ip + 16, &w2, 0, arg)) < 0) -+ return 0; -+ w2 &= 0xffffff; -+ if (w0 == 0x48006a10247c8d48 && -+ w1 == 0x050f000001a1c0c7 && -+ w2 == 0x0000000000fdebf4) -+ { -+ c->sigcontext_format = X86_64_SCF_FREEBSD_SIGFRAME; -+ return (c->sigcontext_format); -+ } -+ /* Check if RIP points at standard syscall sequence. -+49 89 ca mov %rcx,%r10 -+0f 05 syscall -+ */ -+ if ((ret = (*a->access_mem) (as, ip - 5, &b0, 0, arg)) < 0) -+ return (0); -+ Debug (12, "b0 0x%lx\n", b0); -+ if ((b0 & 0xffffffffffffff) == 0x050fca89490000 || -+ (b0 & 0xffffffffff) == 0x050fca8949) -+ { -+ c->sigcontext_format = X86_64_SCF_FREEBSD_SYSCALL; -+ return (c->sigcontext_format); -+ } -+ return (X86_64_SCF_NONE); -+} -+ -+PROTECTED int -+unw_handle_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ unw_word_t ucontext; -+ int ret; -+ -+ if (c->sigcontext_format == X86_64_SCF_FREEBSD_SIGFRAME) -+ { -+ ucontext = c->dwarf.cfa + offsetof(struct sigframe, sf_uc); -+ c->sigcontext_addr = c->dwarf.cfa; -+ Debug(1, "signal frame, skip over trampoline\n"); -+ -+ struct dwarf_loc rsp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RSP, 0); -+ ret = dwarf_get (&c->dwarf, rsp_loc, &c->dwarf.cfa); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ -+ c->dwarf.loc[RAX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RAX, 0); -+ c->dwarf.loc[RDX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RDX, 0); -+ c->dwarf.loc[RCX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RCX, 0); -+ c->dwarf.loc[RBX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RBX, 0); -+ c->dwarf.loc[RSI] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RSI, 0); -+ c->dwarf.loc[RDI] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RDI, 0); -+ c->dwarf.loc[RBP] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RBP, 0); -+ c->dwarf.loc[RSP] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RSP, 0); -+ c->dwarf.loc[ R8] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R8, 0); -+ c->dwarf.loc[ R9] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R9, 0); -+ c->dwarf.loc[R10] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R10, 0); -+ c->dwarf.loc[R11] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R11, 0); -+ c->dwarf.loc[R12] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R12, 0); -+ c->dwarf.loc[R13] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R13, 0); -+ c->dwarf.loc[R14] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R14, 0); -+ c->dwarf.loc[R15] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R15, 0); -+ c->dwarf.loc[RIP] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RIP, 0); -+ -+ return 0; -+ } -+ else if (c->sigcontext_format == X86_64_SCF_FREEBSD_SYSCALL) -+ { -+ c->dwarf.loc[RCX] = c->dwarf.loc[R10]; -+ /* rsp_loc = DWARF_LOC(c->dwarf.cfa - 8, 0); */ -+ /* rbp_loc = c->dwarf.loc[RBP]; */ -+ c->dwarf.loc[RIP] = DWARF_LOC (c->dwarf.cfa, 0); -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[RIP], &c->dwarf.ip); -+ Debug (1, "Frame Chain [RIP=0x%Lx] = 0x%Lx\n", -+ (unsigned long long) DWARF_GET_LOC (c->dwarf.loc[RIP]), -+ (unsigned long long) c->dwarf.ip); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ c->dwarf.cfa += 8; -+ c->dwarf.use_prev_instr = 1; -+ return 1; -+ } -+ else -+ return -UNW_EBADFRAME; -+ -+} -+ -+#ifndef UNW_REMOTE_ONLY -+HIDDEN void * -+x86_64_r_uc_addr (ucontext_t *uc, int reg) -+{ -+ /* NOTE: common_init() in init.h inlines these for fast path access. */ -+ void *addr; -+ -+ switch (reg) -+ { -+ case UNW_X86_64_R8: addr = &uc->uc_mcontext.mc_r8; break; -+ case UNW_X86_64_R9: addr = &uc->uc_mcontext.mc_r9; break; -+ case UNW_X86_64_R10: addr = &uc->uc_mcontext.mc_r10; break; -+ case UNW_X86_64_R11: addr = &uc->uc_mcontext.mc_r11; break; -+ case UNW_X86_64_R12: addr = &uc->uc_mcontext.mc_r12; break; -+ case UNW_X86_64_R13: addr = &uc->uc_mcontext.mc_r13; break; -+ case UNW_X86_64_R14: addr = &uc->uc_mcontext.mc_r14; break; -+ case UNW_X86_64_R15: addr = &uc->uc_mcontext.mc_r15; break; -+ case UNW_X86_64_RDI: addr = &uc->uc_mcontext.mc_rdi; break; -+ case UNW_X86_64_RSI: addr = &uc->uc_mcontext.mc_rsi; break; -+ case UNW_X86_64_RBP: addr = &uc->uc_mcontext.mc_rbp; break; -+ case UNW_X86_64_RBX: addr = &uc->uc_mcontext.mc_rbx; break; -+ case UNW_X86_64_RDX: addr = &uc->uc_mcontext.mc_rdx; break; -+ case UNW_X86_64_RAX: addr = &uc->uc_mcontext.mc_rax; break; -+ case UNW_X86_64_RCX: addr = &uc->uc_mcontext.mc_rcx; break; -+ case UNW_X86_64_RSP: addr = &uc->uc_mcontext.mc_rsp; break; -+ case UNW_X86_64_RIP: addr = &uc->uc_mcontext.mc_rip; break; -+ -+ default: -+ addr = NULL; -+ } -+ return addr; -+} -+ -+HIDDEN NORETURN void -+x86_64_sigreturn (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ ucontext_t *uc = (ucontext_t *)(c->sigcontext_addr + -+ offsetof(struct sigframe, sf_uc)); -+ -+ Debug (8, "resuming at ip=%llx via sigreturn(%p)\n", -+ (unsigned long long) c->dwarf.ip, uc); -+ sigreturn(uc); -+ abort(); -+} -+#endif -diff --git a/frysk-imports/libunwind/src/x86_64/Gos-linux.c b/frysk-imports/libunwind/src/x86_64/Gos-linux.c -new file mode 100644 -index 0000000..9e1acfc ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/Gos-linux.c -@@ -0,0 +1,154 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2002-2003 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+ Modified for x86_64 by Max Asbock -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "ucontext_i.h" -+ -+#include -+ -+HIDDEN void -+tdep_fetch_frame (struct dwarf_cursor *dw, unw_word_t ip, int need_unwind_info) -+{ -+ struct cursor *c = (struct cursor *) dw; -+ assert(! need_unwind_info || dw->pi_valid); -+ assert(! need_unwind_info || dw->pi.unwind_info); -+ if (dw->pi_valid -+ && dw->pi.unwind_info -+ && ((struct dwarf_cie_info *) dw->pi.unwind_info)->signal_frame) -+ c->sigcontext_format = X86_64_SCF_LINUX_RT_SIGFRAME; -+ else -+ c->sigcontext_format = X86_64_SCF_NONE; -+ -+ Debug(5, "fetch frame ip=0x%lx cfa=0x%lx format=%d\n", -+ dw->ip, dw->cfa, c->sigcontext_format); -+} -+ -+HIDDEN void -+tdep_cache_frame (struct dwarf_cursor *dw, struct dwarf_reg_state *rs) -+{ -+ struct cursor *c = (struct cursor *) dw; -+ rs->signal_frame = c->sigcontext_format; -+ -+ Debug(5, "cache frame ip=0x%lx cfa=0x%lx format=%d\n", -+ dw->ip, dw->cfa, c->sigcontext_format); -+} -+ -+HIDDEN void -+tdep_reuse_frame (struct dwarf_cursor *dw, struct dwarf_reg_state *rs) -+{ -+ struct cursor *c = (struct cursor *) dw; -+ c->sigcontext_format = rs->signal_frame; -+ if (c->sigcontext_format == X86_64_SCF_LINUX_RT_SIGFRAME) -+ { -+ c->frame_info.frame_type = UNW_X86_64_FRAME_SIGRETURN; -+ /* Offset from cfa to ucontext_t in signal frame. */ -+ c->frame_info.cfa_reg_offset = 0; -+ c->sigcontext_addr = dw->cfa; -+ } -+ else -+ c->sigcontext_addr = 0; -+ -+ Debug(5, "reuse frame ip=0x%lx cfa=0x%lx format=%d addr=0x%lx offset=%+d\n", -+ dw->ip, dw->cfa, c->sigcontext_format, c->sigcontext_addr, -+ (c->sigcontext_format == X86_64_SCF_LINUX_RT_SIGFRAME -+ ? c->frame_info.cfa_reg_offset : 0)); -+} -+ -+PROTECTED int -+unw_is_signal_frame (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ return c->sigcontext_format != X86_64_SCF_NONE; -+} -+ -+PROTECTED int -+unw_handle_signal_frame (unw_cursor_t *cursor) -+{ -+#if UNW_DEBUG /* To silence compiler warnings */ -+ /* Should not get here because we now use kernel-provided dwarf -+ information for the signal trampoline and dwarf_step() works. -+ Hence unw_step() should never call this function. Maybe -+ restore old non-dwarf signal handling here, but then the -+ gating on unw_is_signal_frame() needs to be removed. */ -+ struct cursor *c = (struct cursor *) cursor; -+ Debug(1, "old format signal frame? format=%d addr=0x%lx cfa=0x%lx\n", -+ c->sigcontext_format, c->sigcontext_addr, c->dwarf.cfa); -+#endif -+ return -UNW_EBADFRAME; -+} -+ -+#ifndef UNW_REMOTE_ONLY -+HIDDEN void * -+x86_64_r_uc_addr (ucontext_t *uc, int reg) -+{ -+ /* NOTE: common_init() in init.h inlines these for fast path access. */ -+ void *addr; -+ -+ switch (reg) -+ { -+ case UNW_X86_64_R8: addr = &uc->uc_mcontext.gregs[REG_R8]; break; -+ case UNW_X86_64_R9: addr = &uc->uc_mcontext.gregs[REG_R9]; break; -+ case UNW_X86_64_R10: addr = &uc->uc_mcontext.gregs[REG_R10]; break; -+ case UNW_X86_64_R11: addr = &uc->uc_mcontext.gregs[REG_R11]; break; -+ case UNW_X86_64_R12: addr = &uc->uc_mcontext.gregs[REG_R12]; break; -+ case UNW_X86_64_R13: addr = &uc->uc_mcontext.gregs[REG_R13]; break; -+ case UNW_X86_64_R14: addr = &uc->uc_mcontext.gregs[REG_R14]; break; -+ case UNW_X86_64_R15: addr = &uc->uc_mcontext.gregs[REG_R15]; break; -+ case UNW_X86_64_RDI: addr = &uc->uc_mcontext.gregs[REG_RDI]; break; -+ case UNW_X86_64_RSI: addr = &uc->uc_mcontext.gregs[REG_RSI]; break; -+ case UNW_X86_64_RBP: addr = &uc->uc_mcontext.gregs[REG_RBP]; break; -+ case UNW_X86_64_RBX: addr = &uc->uc_mcontext.gregs[REG_RBX]; break; -+ case UNW_X86_64_RDX: addr = &uc->uc_mcontext.gregs[REG_RDX]; break; -+ case UNW_X86_64_RAX: addr = &uc->uc_mcontext.gregs[REG_RAX]; break; -+ case UNW_X86_64_RCX: addr = &uc->uc_mcontext.gregs[REG_RCX]; break; -+ case UNW_X86_64_RSP: addr = &uc->uc_mcontext.gregs[REG_RSP]; break; -+ case UNW_X86_64_RIP: addr = &uc->uc_mcontext.gregs[REG_RIP]; break; -+ -+ default: -+ addr = NULL; -+ } -+ return addr; -+} -+ -+/* sigreturn() is a no-op on x86_64 glibc. */ -+HIDDEN NORETURN void -+x86_64_sigreturn (unw_cursor_t *cursor) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; -+ -+ Debug (8, "resuming at ip=%llx via sigreturn(%p)\n", -+ (unsigned long long) c->dwarf.ip, sc); -+ __asm__ __volatile__ ("mov %0, %%rsp;" -+ "mov %1, %%rax;" -+ "syscall" -+ :: "r"(sc), "i"(SYS_rt_sigreturn) -+ : "memory"); -+ abort(); -+} -+ -+#endif -diff --git a/frysk-imports/libunwind/src/x86_64/Gregs.c b/frysk-imports/libunwind/src/x86_64/Gregs.c -index ddf7b7e..baf8a24 100644 ---- a/frysk-imports/libunwind/src/x86_64/Gregs.c -+++ b/frysk-imports/libunwind/src/x86_64/Gregs.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2002-2004 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -41,6 +41,10 @@ linux_scratch_loc (struct cursor *c, unw_regnum_t reg) - case X86_64_SCF_LINUX_RT_SIGFRAME: - addr += LINUX_UC_MCONTEXT_OFF; - break; -+ -+ case X86_64_SCF_FREEBSD_SIGFRAME: -+ addr += FREEBSD_UC_MCONTEXT_OFF; -+ break; - } - - return DWARF_REG_LOC (&c->dwarf, reg); -@@ -59,7 +63,7 @@ x86_64_scratch_loc (struct cursor *c, unw_regnum_t reg) - - HIDDEN int - tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, -- int write) -+ int write) - { - dwarf_loc_t loc = DWARF_NULL_LOC; - unsigned int mask; -@@ -70,14 +74,14 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - case UNW_X86_64_RIP: - if (write) -- c->dwarf.ip = *valp; /* also update the RIP cache */ -+ c->dwarf.ip = *valp; /* also update the RIP cache */ - loc = c->dwarf.loc[RIP]; - break; - - case UNW_X86_64_CFA: - case UNW_X86_64_RSP: - if (write) -- return -UNW_EREADONLYREG; -+ return -UNW_EREADONLYREG; - *valp = c->dwarf.cfa; - return 0; - -@@ -86,18 +90,18 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - arg_num = reg - UNW_X86_64_RAX; - mask = (1 << arg_num); - if (write) -- { -- c->dwarf.eh_args[arg_num] = *valp; -- c->dwarf.eh_valid_mask |= mask; -- return 0; -- } -+ { -+ c->dwarf.eh_args[arg_num] = *valp; -+ c->dwarf.eh_valid_mask |= mask; -+ return 0; -+ } - else if ((c->dwarf.eh_valid_mask & mask) != 0) -- { -- *valp = c->dwarf.eh_args[arg_num]; -- return 0; -- } -+ { -+ *valp = c->dwarf.eh_args[arg_num]; -+ return 0; -+ } - else -- loc = c->dwarf.loc[(reg == UNW_X86_64_RAX) ? RAX : RDX]; -+ loc = c->dwarf.loc[(reg == UNW_X86_64_RAX) ? RAX : RDX]; - break; - - case UNW_X86_64_RCX: loc = c->dwarf.loc[RCX]; break; -@@ -128,7 +132,7 @@ tdep_access_reg (struct cursor *c, unw_regnum_t reg, unw_word_t *valp, - - HIDDEN int - tdep_access_fpreg (struct cursor *c, unw_regnum_t reg, unw_fpreg_t *valp, -- int write) -+ int write) - { - return -UNW_EBADREG; - } -diff --git a/frysk-imports/libunwind/src/x86_64/Gresume.c b/frysk-imports/libunwind/src/x86_64/Gresume.c -index 4edc4da..6880d94 100644 ---- a/frysk-imports/libunwind/src/x86_64/Gresume.c -+++ b/frysk-imports/libunwind/src/x86_64/Gresume.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2002-2004 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -27,31 +27,16 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include - -+#include "offsets.h" - #include "unwind_i.h" - - #ifndef UNW_REMOTE_ONLY - --#include -- --/* sigreturn() is a no-op on x86_64 glibc. */ -- --static NORETURN inline long --my_rt_sigreturn (void *new_sp) --{ -- __asm__ __volatile__ ("mov %0, %%rsp;" -- "mov %1, %%rax;" -- "syscall" -- :: "r"(new_sp), "i"(SYS_rt_sigreturn) -- : "memory"); -- abort (); --} -- - HIDDEN inline int - x86_64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - { --#if defined(__linux) - struct cursor *c = (struct cursor *) cursor; -- ucontext_t *uc = c->dwarf.as_arg; -+ ucontext_t *uc = c->uc; - - /* Ensure c->pi is up-to-date. On x86-64, it's relatively common to - be missing DWARF unwind info. We don't want to fail in that -@@ -61,21 +46,15 @@ x86_64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg) - - if (unlikely (c->sigcontext_format != X86_64_SCF_NONE)) - { -- struct sigcontext *sc = (struct sigcontext *) c->sigcontext_addr; -- -- Debug (8, "resuming at ip=%llx via sigreturn(%p)\n", -- (unsigned long long) c->dwarf.ip, sc); -- my_rt_sigreturn (sc); -+ x86_64_sigreturn(cursor); -+ abort(); - } - else - { - Debug (8, "resuming at ip=%llx via setcontext()\n", -- (unsigned long long) c->dwarf.ip); -- _x86_64_setcontext (uc); -+ (unsigned long long) c->dwarf.ip); -+ setcontext (uc); - } --#else --# warning Implement me! --#endif - return -UNW_EINVAL; - } - -@@ -88,9 +67,9 @@ static inline int - establish_machine_state (struct cursor *c) - { - int (*access_reg) (unw_addr_space_t, unw_regnum_t, unw_word_t *, -- int write, void *); -+ int write, void *); - int (*access_fpreg) (unw_addr_space_t, unw_regnum_t, unw_fpreg_t *, -- int write, void *); -+ int write, void *); - unw_addr_space_t as = c->dwarf.as; - void *arg = c->dwarf.as_arg; - unw_fpreg_t fpval; -@@ -106,15 +85,15 @@ establish_machine_state (struct cursor *c) - { - Debug (16, "copying %s %d\n", unw_regname (reg), reg); - if (unw_is_fpreg (reg)) -- { -- if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -- (*access_fpreg) (as, reg, &fpval, 1, arg); -- } -+ { -+ if (tdep_access_fpreg (c, reg, &fpval, 0) >= 0) -+ (*access_fpreg) (as, reg, &fpval, 1, arg); -+ } - else -- { -- if (tdep_access_reg (c, reg, &val, 0) >= 0) -- (*access_reg) (as, reg, &val, 1, arg); -- } -+ { -+ if (tdep_access_reg (c, reg, &val, 0) >= 0) -+ (*access_reg) (as, reg, &val, 1, arg); -+ } - } - return 0; - } -@@ -131,5 +110,5 @@ unw_resume (unw_cursor_t *cursor) - return ret; - - return (*c->dwarf.as->acc.resume) (c->dwarf.as, (unw_cursor_t *) c, -- c->dwarf.as_arg); -+ c->dwarf.as_arg); - } -diff --git a/frysk-imports/libunwind/src/x86_64/Gstash_frame.c b/frysk-imports/libunwind/src/x86_64/Gstash_frame.c -new file mode 100644 -index 0000000..dc6c7c8 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/Gstash_frame.c -@@ -0,0 +1,98 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010, 2011 by FERMI NATIONAL ACCELERATOR LABORATORY -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "ucontext_i.h" -+ -+HIDDEN void -+tdep_stash_frame (struct dwarf_cursor *d, struct dwarf_reg_state *rs) -+{ -+ struct cursor *c = (struct cursor *) dwarf_to_cursor (d); -+ unw_tdep_frame_t *f = &c->frame_info; -+ -+ Debug (4, "ip=0x%lx cfa=0x%lx type %d cfa [where=%d val=%ld] cfaoff=%ld" -+ " ra=0x%lx rbp [where=%d val=%ld @0x%lx] rsp [where=%d val=%ld @0x%lx]\n", -+ d->ip, d->cfa, f->frame_type, -+ rs->reg[DWARF_CFA_REG_COLUMN].where, -+ rs->reg[DWARF_CFA_REG_COLUMN].val, -+ rs->reg[DWARF_CFA_OFF_COLUMN].val, -+ DWARF_GET_LOC(d->loc[d->ret_addr_column]), -+ rs->reg[RBP].where, rs->reg[RBP].val, DWARF_GET_LOC(d->loc[RBP]), -+ rs->reg[RSP].where, rs->reg[RSP].val, DWARF_GET_LOC(d->loc[RSP])); -+ -+ /* A standard frame is defined as: -+ - CFA is register-relative offset off RBP or RSP; -+ - Return address is saved at CFA-8; -+ - RBP is unsaved or saved at CFA+offset, offset != -1; -+ - RSP is unsaved or saved at CFA+offset, offset != -1. */ -+ if (f->frame_type == UNW_X86_64_FRAME_OTHER -+ && (rs->reg[DWARF_CFA_REG_COLUMN].where == DWARF_WHERE_REG) -+ && (rs->reg[DWARF_CFA_REG_COLUMN].val == RBP -+ || rs->reg[DWARF_CFA_REG_COLUMN].val == RSP) -+ && labs((long) rs->reg[DWARF_CFA_OFF_COLUMN].val) < (1 << 29) -+ && DWARF_GET_LOC(d->loc[d->ret_addr_column]) == d->cfa-8 -+ && (rs->reg[RBP].where == DWARF_WHERE_UNDEF -+ || rs->reg[RBP].where == DWARF_WHERE_SAME -+ || (rs->reg[RBP].where == DWARF_WHERE_CFAREL -+ && labs((long) rs->reg[RBP].val) < (1 << 14) -+ && rs->reg[RBP].val+1 != 0)) -+ && (rs->reg[RSP].where == DWARF_WHERE_UNDEF -+ || rs->reg[RSP].where == DWARF_WHERE_SAME -+ || (rs->reg[RSP].where == DWARF_WHERE_CFAREL -+ && labs((long) rs->reg[RSP].val) < (1 << 14) -+ && rs->reg[RSP].val+1 != 0))) -+ { -+ /* Save information for a standard frame. */ -+ f->frame_type = UNW_X86_64_FRAME_STANDARD; -+ f->cfa_reg_rsp = (rs->reg[DWARF_CFA_REG_COLUMN].val == RSP); -+ f->cfa_reg_offset = rs->reg[DWARF_CFA_OFF_COLUMN].val; -+ if (rs->reg[RBP].where == DWARF_WHERE_CFAREL) -+ f->rbp_cfa_offset = rs->reg[RBP].val; -+ if (rs->reg[RSP].where == DWARF_WHERE_CFAREL) -+ f->rsp_cfa_offset = rs->reg[RSP].val; -+ Debug (4, " standard frame\n"); -+ } -+ -+ /* Signal frame was detected via augmentation in tdep_fetch_frame() */ -+ else if (f->frame_type == UNW_X86_64_FRAME_SIGRETURN) -+ { -+ /* Later we are going to fish out {RBP,RSP,RIP} from sigcontext via -+ their ucontext_t offsets. Confirm DWARF info agrees with the -+ offsets we expect. */ -+ -+#ifndef NDEBUG -+ const unw_word_t uc = c->sigcontext_addr; -+ -+ assert (DWARF_GET_LOC(d->loc[RIP]) - uc == UC_MCONTEXT_GREGS_RIP); -+ assert (DWARF_GET_LOC(d->loc[RBP]) - uc == UC_MCONTEXT_GREGS_RBP); -+ assert (DWARF_GET_LOC(d->loc[RSP]) - uc == UC_MCONTEXT_GREGS_RSP); -+#endif -+ -+ Debug (4, " sigreturn frame\n"); -+ } -+ -+ /* PLT and guessed RBP-walked frames are handled in unw_step(). */ -+ else -+ Debug (4, " unusual frame\n"); -+} -diff --git a/frysk-imports/libunwind/src/x86_64/Gstep.c b/frysk-imports/libunwind/src/x86_64/Gstep.c -index e5ed7b9..84b3728 100644 ---- a/frysk-imports/libunwind/src/x86_64/Gstep.c -+++ b/frysk-imports/libunwind/src/x86_64/Gstep.c -@@ -1,12 +1,9 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002-2004 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -- Copyright (C) 2008 Red Hat, Inc. -- Contributed by Mark Wielaard -- - This file is part of libunwind. - - Permission is hereby granted, free of charge, to any person obtaining -@@ -29,135 +26,53 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "unwind_i.h" --#include "ucontext_i.h" - #include - --/* Try to skip single-word (8 bytes) return address on stack left there in some -- cases of the signal frame. -- Unsure if the real return address gets pushed to the stack exactly when this -- bit is set. If it is not detectable we would need to keep the return -- address on stack and improve the code path -- dwarf_step() failed (ret=%d), trying frame-chain -- below to disassemble the return address and not to pop two words -- automatically as no stack frame pointer is present in these cases there: -- ./test-ptrace-signull code_entry_point: err=0x14 -- ./test-ptrace-signull code_descriptor: err=0x15 */ -- -+/* Recognise PLT entries such as: -+ 3bdf0: ff 25 e2 49 13 00 jmpq *0x1349e2(%rip) -+ 3bdf6: 68 ae 03 00 00 pushq $0x3ae -+ 3bdfb: e9 00 c5 ff ff jmpq 38300 <_init+0x18> */ - static int --code_descriptor_trap (struct cursor *c, struct dwarf_loc *rip_loc_pointer) -+is_plt_entry (struct dwarf_cursor *c) - { -- unw_word_t trapno, err; -- int i; -- -- if (c->sigcontext_format != X86_64_SCF_LINUX_RT_SIGFRAME) -- return -UNW_EBADFRAME; -- -- i = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + UC_MCONTEXT_GREGS_TRAPNO, 0), &trapno); -- if (i < 0) -- { -- Debug (2, "failed to query [sigframe:trapno]; %d\n", i); -- return i; -- } -- /* page fault */ -- if (trapno != UC_MCONTEXT_GREGS_TRAPNO_PF) -- { -- Debug (2, "[sigframe:trapno] %d not Page-Fault Exception\n", (int) trapno); -- return -UNW_EBADFRAME; -- } -- -- i = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + UC_MCONTEXT_GREGS_ERR, 0), &err); -- if (i < 0) -- { -- Debug (2, "failed to query [sigframe:err]; %d\n", i); -- return i; -- } -- if (!(err & (1 << UC_MCONTEXT_GREGS_ERR_ID_BIT))) -- { -- Debug (2, "[sigframe:err] 0x%x not &0x%x (instruction fetch)\n", -- (int) err, (1 << UC_MCONTEXT_GREGS_ERR_ID_BIT)); -- return -UNW_EBADFRAME; -- } -- -- Debug (1, "[sigframe] Page-Fault Exception, instruction fetch (err = 0x%x)\n", (int) err); -+ unw_word_t w0, w1; -+ unw_accessors_t *a; -+ int ret; - -- *rip_loc_pointer = DWARF_LOC (c->dwarf.cfa, 0); -- c->dwarf.cfa += 8; -+ a = unw_get_accessors (c->as); -+ if ((ret = (*a->access_mem) (c->as, c->ip, &w0, 0, c->as_arg)) < 0 -+ || (ret = (*a->access_mem) (c->as, c->ip + 8, &w1, 0, c->as_arg)) < 0) -+ return 0; - -- return 1; --} -+ ret = (((w0 & 0xffff) == 0x25ff) -+ && (((w0 >> 48) & 0xff) == 0x68) -+ && (((w1 >> 24) & 0xff) == 0xe9)); - --// A CALL instruction starts with 0xFF. --static int --is_call_instr_at (struct cursor *c, unw_word_t addr) --{ -- int ret; -- unw_word_t instr; -- ret = dwarf_get (&c->dwarf, DWARF_LOC (addr, 0), &instr); -- Debug (99, "ret %d, instr 0x%x\n", ret, instr); -- return ret >= 0 && ((instr & 0xff000000) == 0xff000000); --} -- --// Checks whether this looks like a plt entry like cursor and returns --// the stack offset where the return address can be found, or -1 if --// not detected (also tries to make sure this is the inner most frame). --// When this function returns positively (zero included) addr will --// contain the return address. --static int --init_stack_based_ret (struct cursor *c, unw_word_t *addr) --{ -- // See if this looks "clean", everything in actual registers -- // which indicates this is most likely an inner most frame just -- // initted. -- int ret; -- unw_word_t ip, cfa; -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[RIP], &ip); -- if (ret < 0) -- return ret; -- -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[RSP], &cfa); -- if (ret < 0) -- return ret; -- -- // See if one of the top 3 elements on the stack contains a -- // return address. -- int i; -- for (i = 0; i <= 16; i += 8) -- { -- Debug (99, "trying %d\n", i); -- ret = dwarf_get (&c->dwarf, DWARF_LOC (c->dwarf.cfa + i, 0), addr); -- if (ret < 0) -- return ret; -- -- Debug (99, "addr at %d: 0x%x\n", i, *addr); -- // Sanity check the address, not too low, and must -- // come from a call instruction. -- if (*addr > 0 && is_call_instr_at(c, (*addr) - 5)) -- return i; -- } -- -- return -1; -+ Debug (14, "ip=0x%lx => 0x%016lx 0x%016lx, ret = %d\n", c->ip, w0, w1, ret); -+ return ret; - } - -- - PROTECTED int - unw_step (unw_cursor_t *cursor) - { - struct cursor *c = (struct cursor *) cursor; - int ret, i; -- struct dwarf_loc rip_loc; -- int rip_loc_set = 0; -- unw_word_t prev_ip = c->dwarf.ip, prev_cfa = c->dwarf.cfa; -- unw_word_t addr; - -- Debug (1, "(cursor=%p, ip=0x%016llx)\n", -- c, (unsigned long long) c->dwarf.ip); -+#if CONSERVATIVE_CHECKS -+ int val = c->validate; -+ c->validate = 1; -+#endif -+ -+ Debug (1, "(cursor=%p, ip=0x%016lx, cfa=0x%016lx)\n", -+ c, c->dwarf.ip, c->dwarf.cfa); - - /* Try DWARF-based unwinding... */ -+ c->sigcontext_format = X86_64_SCF_NONE; - ret = dwarf_step (&c->dwarf); - -- /* Skip the faulty address left alone on the stack. */ -- if (ret >= 0 && code_descriptor_trap (c, &rip_loc) > 0) -- rip_loc_set = 1; -+#if CONSERVATIVE_CHECKS -+ c->validate = val; -+#endif - - if (ret < 0 && ret != -UNW_ENOINFO) - { -@@ -165,166 +80,151 @@ unw_step (unw_cursor_t *cursor) - return ret; - } - -- if (c->sigcontext_format == X86_64_SCF_LINUX_RT_SIGFRAME) -+ if (likely (ret >= 0)) - { -- unw_word_t trapno, err; -- int trapno_ret, err_ret; -- -- trapno_ret = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + UC_MCONTEXT_GREGS_TRAPNO, 0), &trapno); -- err_ret = dwarf_get (&c->dwarf, DWARF_LOC (c->sigcontext_addr + UC_MCONTEXT_GREGS_ERR, 0), &err); -- -- Debug (2, "x86_64 sigcontext (post-step): CFA = 0x%lx, trapno = %d, err = 0x%x\n", -- (unsigned long) c->dwarf.cfa, (trapno_ret < 0 ? -1 : (int) trapno), -- (err_ret < 0 ? -1 : (int) err)); -+ /* x86_64 ABI specifies that end of call-chain is marked with a -+ NULL RBP or undefined return address */ -+ if (DWARF_IS_NULL_LOC (c->dwarf.loc[RBP]) -+ || DWARF_IS_NULL_LOC(c->dwarf.loc[c->dwarf.ret_addr_column])) -+ { -+ c->dwarf.ip = 0; -+ ret = 0; -+ } - } -- -- if (unlikely (ret < 0)) -+ else - { - /* DWARF failed. There isn't much of a usable frame-chain on x86-64, -- but we do need to handle two special-cases: -+ but we do need to handle two special-cases: -+ -+ (i) signal trampoline: Old kernels and older libcs don't -+ export the vDSO needed to get proper unwind info for the -+ trampoline. Recognize that case by looking at the code -+ and filling in things by hand. - -- (i) signal trampoline: Old kernels and older libcs don't -- export the vDSO needed to get proper unwind info for the -- trampoline. Recognize that case by looking at the code -- and filling in things by hand. -+ (ii) PLT (shared-library) call-stubs: PLT stubs are invoked -+ via CALLQ. Try this for all non-signal trampoline -+ code. */ - -- (ii) PLT (shared-library) call-stubs: PLT stubs are invoked -- via CALLQ. Try this for all non-signal trampoline -- code. */ -+ unw_word_t prev_ip = c->dwarf.ip, prev_cfa = c->dwarf.cfa; -+ struct dwarf_loc rbp_loc, rsp_loc, rip_loc; - -- struct dwarf_loc rbp_loc, rsp_loc; -+ /* We could get here because of missing/bad unwind information. -+ Validate all addresses before dereferencing. */ -+ c->validate = 1; - - Debug (13, "dwarf_step() failed (ret=%d), trying frame-chain\n", ret); - -- if (c->dwarf.ip == 0) -+ if (unw_is_signal_frame (cursor)) -+ { -+ ret = unw_handle_signal_frame(cursor); -+ if (ret < 0) -+ { -+ Debug (2, "returning 0\n"); -+ return 0; -+ } -+ } -+ else if (is_plt_entry (&c->dwarf)) - { -- Debug (1, "[RIP=0]\n"); -- -- rip_loc = DWARF_LOC (c->dwarf.cfa, 0); -- c->dwarf.cfa += 8; -- } -- else if (unw_is_signal_frame (cursor)) -- { -- unw_word_t ucontext = c->dwarf.cfa; -- -- Debug(1, "signal frame, skip over trampoline\n"); -- -- c->sigcontext_format = X86_64_SCF_LINUX_RT_SIGFRAME; -- c->sigcontext_addr = c->dwarf.cfa; -- -- rsp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RSP, 0); -- rbp_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RBP, 0); -- rip_loc = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RIP, 0); -- -- ret = dwarf_get (&c->dwarf, rsp_loc, &c->dwarf.cfa); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- -- c->dwarf.loc[RAX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RAX, 0); -- c->dwarf.loc[RDX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RDX, 0); -- c->dwarf.loc[RCX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RCX, 0); -- c->dwarf.loc[RBX] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RBX, 0); -- c->dwarf.loc[RSI] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RSI, 0); -- c->dwarf.loc[RDI] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RDI, 0); -- c->dwarf.loc[RBP] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RBP, 0); -- c->dwarf.loc[ R8] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R8, 0); -- c->dwarf.loc[ R9] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R9, 0); -- c->dwarf.loc[R10] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R10, 0); -- c->dwarf.loc[R11] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R11, 0); -- c->dwarf.loc[R12] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R12, 0); -- c->dwarf.loc[R13] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R13, 0); -- c->dwarf.loc[R14] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R14, 0); -- c->dwarf.loc[R15] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_R15, 0); -- c->dwarf.loc[RIP] = DWARF_LOC (ucontext + UC_MCONTEXT_GREGS_RIP, 0); -- -- c->dwarf.loc[RBP] = rbp_loc; -- c->dwarf.loc[RSP] = rsp_loc; -- } -- else if((ret = init_stack_based_ret(c, &addr)) >= 0) -- { -- Debug (99, "init_stack_based_ret() %d (0x%x)\n", ret, addr); -- c->dwarf.cfa += ret + 8; -- c->dwarf.loc[RSP] = DWARF_LOC (c->dwarf.cfa, 0); -- c->dwarf.loc[RIP] = DWARF_LOC (addr, 0); -- c->dwarf.ret_addr_column = RIP; -- c->dwarf.ip = addr; -- return 1; -- } -+ /* Like regular frame, CFA = RSP+8, RA = [CFA-8], no regs saved. */ -+ Debug (2, "found plt entry\n"); -+ c->frame_info.cfa_reg_offset = 8; -+ c->frame_info.cfa_reg_rsp = -1; -+ c->frame_info.frame_type = UNW_X86_64_FRAME_STANDARD; -+ c->dwarf.loc[RIP] = DWARF_LOC (c->dwarf.cfa, 0); -+ c->dwarf.cfa += 8; -+ } -+ else if (DWARF_IS_NULL_LOC (c->dwarf.loc[RBP])) -+ { -+ for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) -+ c->dwarf.loc[i] = DWARF_NULL_LOC; -+ } - else -- { -- unw_word_t rbp; -- -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[RBP], &rbp); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- -- if (!rbp) -- { -- /* Looks like we may have reached the end of the call-chain. */ -- rbp_loc = DWARF_NULL_LOC; -- rsp_loc = DWARF_NULL_LOC; -- rip_loc = DWARF_NULL_LOC; -- } -- else -- { -- unw_word_t rbp1; -- Debug (1, "[RBP=0x%Lx] = 0x%Lx (cfa = 0x%Lx)\n", -- (unsigned long long) DWARF_GET_LOC (c->dwarf.loc[RBP]), -- (unsigned long long) rbp, -- (unsigned long long) c->dwarf.cfa); -- -- rbp_loc = DWARF_LOC(rbp, 0); -- rsp_loc = DWARF_NULL_LOC; -- rip_loc = DWARF_LOC (rbp + 8, 0); -- /* Heuristic to recognize a bogus frame pointer */ -- ret = dwarf_get (&c->dwarf, rbp_loc, &rbp1); -- if (ret || ((rbp1 - rbp) > 0x4000)) -- rbp_loc = DWARF_NULL_LOC; -- c->dwarf.cfa += 16; -- } -- -- /* Mark all registers unsaved */ -- for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) -- c->dwarf.loc[i] = DWARF_NULL_LOC; -- -- c->dwarf.loc[RBP] = rbp_loc; -- c->dwarf.loc[RSP] = rsp_loc; -- } -- rip_loc_set = 1; -- } -- if (rip_loc_set) -- { -- c->dwarf.loc[RIP] = rip_loc; -+ { -+ unw_word_t rbp; -+ -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[RBP], &rbp); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d [RBP=0x%lx]\n", ret, -+ DWARF_GET_LOC (c->dwarf.loc[RBP])); -+ return ret; -+ } -+ -+ if (!rbp) -+ { -+ /* Looks like we may have reached the end of the call-chain. */ -+ rbp_loc = DWARF_NULL_LOC; -+ rsp_loc = DWARF_NULL_LOC; -+ rip_loc = DWARF_NULL_LOC; -+ } -+ else -+ { -+ unw_word_t rbp1 = 0; -+ rbp_loc = DWARF_LOC(rbp, 0); -+ rsp_loc = DWARF_NULL_LOC; -+ rip_loc = DWARF_LOC (rbp + 8, 0); -+ ret = dwarf_get (&c->dwarf, rbp_loc, &rbp1); -+ Debug (1, "[RBP=0x%lx] = 0x%lx (cfa = 0x%lx) -> 0x%lx\n", -+ (unsigned long) DWARF_GET_LOC (c->dwarf.loc[RBP]), -+ rbp, c->dwarf.cfa, rbp1); -+ -+ /* Heuristic to determine incorrect guess. For RBP to be a -+ valid frame it needs to be above current CFA, but don't -+ let it go more than a little. Note that we can't deduce -+ anything about new RBP (rbp1) since it may not be a frame -+ pointer in the frame above. Just check we get the value. */ -+ if (ret < 0 -+ || rbp < c->dwarf.cfa -+ || (rbp - c->dwarf.cfa) > 0x4000) -+ { -+ rip_loc = DWARF_NULL_LOC; -+ rbp_loc = DWARF_NULL_LOC; -+ } -+ -+ c->frame_info.frame_type = UNW_X86_64_FRAME_GUESSED; -+ c->frame_info.cfa_reg_rsp = 0; -+ c->frame_info.cfa_reg_offset = 16; -+ c->frame_info.rbp_cfa_offset = -16; -+ c->dwarf.cfa += 16; -+ } -+ -+ /* Mark all registers unsaved */ -+ for (i = 0; i < DWARF_NUM_PRESERVED_REGS; ++i) -+ c->dwarf.loc[i] = DWARF_NULL_LOC; -+ -+ c->dwarf.loc[RBP] = rbp_loc; -+ c->dwarf.loc[RSP] = rsp_loc; -+ c->dwarf.loc[RIP] = rip_loc; -+ c->dwarf.use_prev_instr = 1; -+ } -+ - c->dwarf.ret_addr_column = RIP; - -- /* x86_64 ABI specifies that end of call-chain is marked with a -- NULL RBP. */ -- if (!DWARF_IS_NULL_LOC (c->dwarf.loc[RBP])) -- { -- ret = dwarf_get (&c->dwarf, c->dwarf.loc[RIP], &c->dwarf.ip); -- Debug (1, "Frame Chain [RIP=0x%Lx] = 0x%Lx\n", -- (unsigned long long) DWARF_GET_LOC (c->dwarf.loc[RIP]), -- (unsigned long long) c->dwarf.ip); -- if (ret < 0) -- { -- Debug (2, "returning %d\n", ret); -- return ret; -- } -- } -+ if (DWARF_IS_NULL_LOC (c->dwarf.loc[RBP])) -+ { -+ ret = 0; -+ Debug (2, "NULL %%rbp loc, returning %d\n", ret); -+ return ret; -+ } -+ if (!DWARF_IS_NULL_LOC (c->dwarf.loc[RIP])) -+ { -+ ret = dwarf_get (&c->dwarf, c->dwarf.loc[RIP], &c->dwarf.ip); -+ Debug (1, "Frame Chain [RIP=0x%Lx] = 0x%Lx\n", -+ (unsigned long long) DWARF_GET_LOC (c->dwarf.loc[RIP]), -+ (unsigned long long) c->dwarf.ip); -+ if (ret < 0) -+ { -+ Debug (2, "returning %d\n", ret); -+ return ret; -+ } -+ ret = 1; -+ } - else -- c->dwarf.ip = 0; -- } -+ c->dwarf.ip = 0; - -- if (c->dwarf.ip == prev_ip && c->dwarf.cfa == prev_cfa) -- return -UNW_EBADFRAME; -- -- ret = (c->dwarf.ip == 0) ? 0 : 1; -- Debug (2, "dwarf.ip = 0x%x, returning %d\n", c->dwarf.ip, ret); -+ if (c->dwarf.ip == prev_ip && c->dwarf.cfa == prev_cfa) -+ return -UNW_EBADFRAME; -+ } -+ Debug (2, "returning %d\n", ret); - return ret; - } -diff --git a/frysk-imports/libunwind/src/x86_64/Gtrace.c b/frysk-imports/libunwind/src/x86_64/Gtrace.c -new file mode 100644 -index 0000000..833d7a7 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/Gtrace.c -@@ -0,0 +1,533 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010, 2011 by FERMI NATIONAL ACCELERATOR LABORATORY -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "unwind_i.h" -+#include "ucontext_i.h" -+#include -+#include -+ -+#pragma weak pthread_once -+#pragma weak pthread_key_create -+#pragma weak pthread_getspecific -+#pragma weak pthread_setspecific -+ -+/* Initial hash table size. Table expands by 2 bits (times four). */ -+#define HASH_MIN_BITS 14 -+ -+typedef struct -+{ -+ unw_tdep_frame_t *frames; -+ size_t log_size; -+ size_t used; -+ size_t dtor_count; /* Counts how many times our destructor has already -+ been called. */ -+} unw_trace_cache_t; -+ -+static const unw_tdep_frame_t empty_frame = { 0, UNW_X86_64_FRAME_OTHER, -1, -1, 0, -1, -1 }; -+static define_lock (trace_init_lock); -+static pthread_once_t trace_cache_once = PTHREAD_ONCE_INIT; -+static sig_atomic_t trace_cache_once_happen; -+static pthread_key_t trace_cache_key; -+static struct mempool trace_cache_pool; -+static __thread unw_trace_cache_t *tls_cache; -+static __thread int tls_cache_destroyed; -+ -+/* Free memory for a thread's trace cache. */ -+static void -+trace_cache_free (void *arg) -+{ -+ unw_trace_cache_t *cache = arg; -+ if (++cache->dtor_count < PTHREAD_DESTRUCTOR_ITERATIONS) -+ { -+ /* Not yet our turn to get destroyed. Re-install ourselves into the key. */ -+ pthread_setspecific(trace_cache_key, cache); -+ Debug(5, "delayed freeing cache %p (%zx to go)\n", cache, -+ PTHREAD_DESTRUCTOR_ITERATIONS - cache->dtor_count); -+ return; -+ } -+ tls_cache_destroyed = 1; -+ tls_cache = NULL; -+ munmap (cache->frames, (1u << cache->log_size) * sizeof(unw_tdep_frame_t)); -+ mempool_free (&trace_cache_pool, cache); -+ Debug(5, "freed cache %p\n", cache); -+} -+ -+/* Initialise frame tracing for threaded use. */ -+static void -+trace_cache_init_once (void) -+{ -+ pthread_key_create (&trace_cache_key, &trace_cache_free); -+ mempool_init (&trace_cache_pool, sizeof (unw_trace_cache_t), 0); -+ trace_cache_once_happen = 1; -+} -+ -+static unw_tdep_frame_t * -+trace_cache_buckets (size_t n) -+{ -+ unw_tdep_frame_t *frames; -+ size_t i; -+ -+ GET_MEMORY(frames, n * sizeof (unw_tdep_frame_t)); -+ if (likely(frames != NULL)) -+ for (i = 0; i < n; ++i) -+ frames[i] = empty_frame; -+ -+ return frames; -+} -+ -+/* Allocate and initialise hash table for frame cache lookups. -+ Returns the cache initialised with (1u << HASH_LOW_BITS) hash -+ buckets, or NULL if there was a memory allocation problem. */ -+static unw_trace_cache_t * -+trace_cache_create (void) -+{ -+ unw_trace_cache_t *cache; -+ -+ if (tls_cache_destroyed) -+ { -+ /* The current thread is in the process of exiting. Don't recreate -+ cache, as we wouldn't have another chance to free it. */ -+ Debug(5, "refusing to reallocate cache: " -+ "thread-locals are being deallocated\n"); -+ return NULL; -+ } -+ -+ if (! (cache = mempool_alloc(&trace_cache_pool))) -+ { -+ Debug(5, "failed to allocate cache\n"); -+ return NULL; -+ } -+ -+ if (! (cache->frames = trace_cache_buckets(1u << HASH_MIN_BITS))) -+ { -+ Debug(5, "failed to allocate buckets\n"); -+ mempool_free(&trace_cache_pool, cache); -+ return NULL; -+ } -+ -+ cache->log_size = HASH_MIN_BITS; -+ cache->used = 0; -+ cache->dtor_count = 0; -+ tls_cache_destroyed = 0; /* Paranoia: should already be 0. */ -+ Debug(5, "allocated cache %p\n", cache); -+ return cache; -+} -+ -+/* Expand the hash table in the frame cache if possible. This always -+ quadruples the hash size, and clears all previous frame entries. */ -+static int -+trace_cache_expand (unw_trace_cache_t *cache) -+{ -+ size_t old_size = (1u << cache->log_size); -+ size_t new_log_size = cache->log_size + 2; -+ unw_tdep_frame_t *new_frames = trace_cache_buckets (1u << new_log_size); -+ -+ if (unlikely(! new_frames)) -+ { -+ Debug(5, "failed to expand cache to 2^%lu buckets\n", new_log_size); -+ return -UNW_ENOMEM; -+ } -+ -+ Debug(5, "expanded cache from 2^%lu to 2^%lu buckets\n", cache->log_size, new_log_size); -+ munmap(cache->frames, old_size * sizeof(unw_tdep_frame_t)); -+ cache->frames = new_frames; -+ cache->log_size = new_log_size; -+ cache->used = 0; -+ return 0; -+} -+ -+static unw_trace_cache_t * -+trace_cache_get_unthreaded (void) -+{ -+ unw_trace_cache_t *cache; -+ intrmask_t saved_mask; -+ static unw_trace_cache_t *global_cache = NULL; -+ lock_acquire (&trace_init_lock, saved_mask); -+ if (! global_cache) -+ { -+ mempool_init (&trace_cache_pool, sizeof (unw_trace_cache_t), 0); -+ global_cache = trace_cache_create (); -+ } -+ cache = global_cache; -+ lock_release (&trace_init_lock, saved_mask); -+ Debug(5, "using cache %p\n", cache); -+ return cache; -+} -+ -+/* Get the frame cache for the current thread. Create it if there is none. */ -+static unw_trace_cache_t * -+trace_cache_get (void) -+{ -+ unw_trace_cache_t *cache; -+ if (likely (pthread_once != NULL)) -+ { -+ pthread_once(&trace_cache_once, &trace_cache_init_once); -+ if (!trace_cache_once_happen) -+ { -+ return trace_cache_get_unthreaded(); -+ } -+ if (! (cache = tls_cache)) -+ { -+ cache = trace_cache_create(); -+ pthread_setspecific(trace_cache_key, cache); -+ tls_cache = cache; -+ } -+ Debug(5, "using cache %p\n", cache); -+ return cache; -+ } -+ else -+ { -+ return trace_cache_get_unthreaded(); -+ } -+} -+ -+/* Initialise frame properties for address cache slot F at address -+ RIP using current CFA, RBP and RSP values. Modifies CURSOR to -+ that location, performs one unw_step(), and fills F with what -+ was discovered about the location. Returns F. -+ -+ FIXME: This probably should tell DWARF handling to never evaluate -+ or use registers other than RBP, RSP and RIP in case there is -+ highly unusual unwind info which uses these creatively. */ -+static unw_tdep_frame_t * -+trace_init_addr (unw_tdep_frame_t *f, -+ unw_cursor_t *cursor, -+ unw_word_t cfa, -+ unw_word_t rip, -+ unw_word_t rbp, -+ unw_word_t rsp) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ struct dwarf_cursor *d = &c->dwarf; -+ int ret = -UNW_EINVAL; -+ -+ /* Initialise frame properties: unknown, not last. */ -+ f->virtual_address = rip; -+ f->frame_type = UNW_X86_64_FRAME_OTHER; -+ f->last_frame = 0; -+ f->cfa_reg_rsp = -1; -+ f->cfa_reg_offset = 0; -+ f->rbp_cfa_offset = -1; -+ f->rsp_cfa_offset = -1; -+ -+ /* Reinitialise cursor to this instruction - but undo next/prev RIP -+ adjustment because unw_step will redo it - and force RIP, RBP -+ RSP into register locations (=~ ucontext we keep), then set -+ their desired values. Then perform the step. */ -+ d->ip = rip + d->use_prev_instr; -+ d->cfa = cfa; -+ d->loc[UNW_X86_64_RIP] = DWARF_REG_LOC (d, UNW_X86_64_RIP); -+ d->loc[UNW_X86_64_RBP] = DWARF_REG_LOC (d, UNW_X86_64_RBP); -+ d->loc[UNW_X86_64_RSP] = DWARF_REG_LOC (d, UNW_X86_64_RSP); -+ c->frame_info = *f; -+ -+ if (likely(dwarf_put (d, d->loc[UNW_X86_64_RIP], rip) >= 0) -+ && likely(dwarf_put (d, d->loc[UNW_X86_64_RBP], rbp) >= 0) -+ && likely(dwarf_put (d, d->loc[UNW_X86_64_RSP], rsp) >= 0) -+ && likely((ret = unw_step (cursor)) >= 0)) -+ *f = c->frame_info; -+ -+ /* If unw_step() stopped voluntarily, remember that, even if it -+ otherwise could not determine anything useful. This avoids -+ failing trace if we hit frames without unwind info, which is -+ common for the outermost frame (CRT stuff) on many systems. -+ This avoids failing trace in very common circumstances; failing -+ to unw_step() loop wouldn't produce any better result. */ -+ if (ret == 0) -+ f->last_frame = -1; -+ -+ Debug (3, "frame va %lx type %d last %d cfa %s+%d rbp @ cfa%+d rsp @ cfa%+d\n", -+ f->virtual_address, f->frame_type, f->last_frame, -+ f->cfa_reg_rsp ? "rsp" : "rbp", f->cfa_reg_offset, -+ f->rbp_cfa_offset, f->rsp_cfa_offset); -+ -+ return f; -+} -+ -+/* Look up and if necessary fill in frame attributes for address RIP -+ in CACHE using current CFA, RBP and RSP values. Uses CURSOR to -+ perform any unwind steps necessary to fill the cache. Returns the -+ frame cache slot which describes RIP. */ -+static unw_tdep_frame_t * -+trace_lookup (unw_cursor_t *cursor, -+ unw_trace_cache_t *cache, -+ unw_word_t cfa, -+ unw_word_t rip, -+ unw_word_t rbp, -+ unw_word_t rsp) -+{ -+ /* First look up for previously cached information using cache as -+ linear probing hash table with probe step of 1. Majority of -+ lookups should be completed within few steps, but it is very -+ important the hash table does not fill up, or performance falls -+ off the cliff. */ -+ uint64_t i, addr; -+ uint64_t cache_size = 1u << cache->log_size; -+ uint64_t slot = ((rip * 0x9e3779b97f4a7c16) >> 43) & (cache_size-1); -+ unw_tdep_frame_t *frame; -+ -+ for (i = 0; i < 16; ++i) -+ { -+ frame = &cache->frames[slot]; -+ addr = frame->virtual_address; -+ -+ /* Return if we found the address. */ -+ if (likely(addr == rip)) -+ { -+ Debug (4, "found address after %ld steps\n", i); -+ return frame; -+ } -+ -+ /* If slot is empty, reuse it. */ -+ if (likely(! addr)) -+ break; -+ -+ /* Linear probe to next slot candidate, step = 1. */ -+ if (++slot >= cache_size) -+ slot -= cache_size; -+ } -+ -+ /* If we collided after 16 steps, or if the hash is more than half -+ full, force the hash to expand. Fill the selected slot, whether -+ it's free or collides. Note that hash expansion drops previous -+ contents; further lookups will refill the hash. */ -+ Debug (4, "updating slot %lu after %ld steps, replacing 0x%lx\n", slot, i, addr); -+ if (unlikely(addr || cache->used >= cache_size / 2)) -+ { -+ if (unlikely(trace_cache_expand (cache) < 0)) -+ return NULL; -+ -+ cache_size = 1u << cache->log_size; -+ slot = ((rip * 0x9e3779b97f4a7c16) >> 43) & (cache_size-1); -+ frame = &cache->frames[slot]; -+ addr = frame->virtual_address; -+ } -+ -+ if (! addr) -+ ++cache->used; -+ -+ return trace_init_addr (frame, cursor, cfa, rip, rbp, rsp); -+} -+ -+/* Fast stack backtrace for x86-64. -+ -+ This is used by backtrace() implementation to accelerate frequent -+ queries for current stack, without any desire to unwind. It fills -+ BUFFER with the call tree from CURSOR upwards for at most SIZE -+ stack levels. The first frame, backtrace itself, is omitted. When -+ called, SIZE should give the maximum number of entries that can be -+ stored into BUFFER. Uses an internal thread-specific cache to -+ accelerate queries. -+ -+ The caller should fall back to a unw_step() loop if this function -+ fails by returning -UNW_ESTOPUNWIND, meaning the routine hit a -+ stack frame that is too complex to be traced in the fast path. -+ -+ This function is tuned for clients which only need to walk the -+ stack to get the call tree as fast as possible but without any -+ other details, for example profilers sampling the stack thousands -+ to millions of times per second. The routine handles the most -+ common x86-64 ABI stack layouts: CFA is RBP or RSP plus/minus -+ constant offset, return address is at CFA-8, and RBP and RSP are -+ either unchanged or saved on stack at constant offset from the CFA; -+ the signal return frame; and frames without unwind info provided -+ they are at the outermost (final) frame or can conservatively be -+ assumed to be frame-pointer based. -+ -+ Any other stack layout will cause the routine to give up. There -+ are only a handful of relatively rarely used functions which do -+ not have a stack in the standard form: vfork, longjmp, setcontext -+ and _dl_runtime_profile on common linux systems for example. -+ -+ On success BUFFER and *SIZE reflect the trace progress up to *SIZE -+ stack levels or the outermost frame, which ever is less. It may -+ stop short of outermost frame if unw_step() loop would also do so, -+ e.g. if there is no more unwind information; this is not reported -+ as an error. -+ -+ The function returns a negative value for errors, -UNW_ESTOPUNWIND -+ if tracing stopped because of an unusual frame unwind info. The -+ BUFFER and *SIZE reflect tracing progress up to the error frame. -+ -+ Callers of this function would normally look like this: -+ -+ unw_cursor_t cur; -+ unw_context_t ctx; -+ void addrs[128]; -+ int depth = 128; -+ int ret; -+ -+ unw_getcontext(&ctx); -+ unw_init_local(&cur, &ctx); -+ if ((ret = unw_tdep_trace(&cur, addrs, &depth)) < 0) -+ { -+ depth = 0; -+ unw_getcontext(&ctx); -+ unw_init_local(&cur, &ctx); -+ while ((ret = unw_step(&cur)) > 0 && depth < 128) -+ { -+ unw_word_t ip; -+ unw_get_reg(&cur, UNW_REG_IP, &ip); -+ addresses[depth++] = (void *) ip; -+ } -+ } -+*/ -+HIDDEN int -+tdep_trace (unw_cursor_t *cursor, void **buffer, int *size) -+{ -+ struct cursor *c = (struct cursor *) cursor; -+ struct dwarf_cursor *d = &c->dwarf; -+ unw_trace_cache_t *cache; -+ unw_word_t rbp, rsp, rip, cfa; -+ int maxdepth = 0; -+ int depth = 0; -+ int ret; -+ -+ /* Check input parametres. */ -+ if (unlikely(! cursor || ! buffer || ! size || (maxdepth = *size) <= 0)) -+ return -UNW_EINVAL; -+ -+ Debug (1, "begin ip 0x%lx cfa 0x%lx\n", d->ip, d->cfa); -+ -+ /* Tell core dwarf routines to call back to us. */ -+ d->stash_frames = 1; -+ -+ /* Determine initial register values. These are direct access safe -+ because we know they come from the initial machine context. */ -+ rip = d->ip; -+ rsp = cfa = d->cfa; -+ ACCESS_MEM_FAST(ret, 0, d, DWARF_GET_LOC(d->loc[UNW_X86_64_RBP]), rbp); -+ assert(ret == 0); -+ -+ /* Get frame cache. */ -+ if (unlikely(! (cache = trace_cache_get()))) -+ { -+ Debug (1, "returning %d, cannot get trace cache\n", -UNW_ENOMEM); -+ *size = 0; -+ d->stash_frames = 0; -+ return -UNW_ENOMEM; -+ } -+ -+ /* Trace the stack upwards, starting from current RIP. Adjust -+ the RIP address for previous/next instruction as the main -+ unwinding logic would also do. We undo this before calling -+ back into unw_step(). */ -+ while (depth < maxdepth) -+ { -+ rip -= d->use_prev_instr; -+ Debug (2, "depth %d cfa 0x%lx rip 0x%lx rsp 0x%lx rbp 0x%lx\n", -+ depth, cfa, rip, rsp, rbp); -+ -+ /* See if we have this address cached. If not, evaluate enough of -+ the dwarf unwind information to fill the cache line data, or to -+ decide this frame cannot be handled in fast trace mode. We -+ cache negative results too to prevent unnecessary dwarf parsing -+ for common failures. */ -+ unw_tdep_frame_t *f = trace_lookup (cursor, cache, cfa, rip, rbp, rsp); -+ -+ /* If we don't have information for this frame, give up. */ -+ if (unlikely(! f)) -+ { -+ ret = -UNW_ENOINFO; -+ break; -+ } -+ -+ Debug (3, "frame va %lx type %d last %d cfa %s+%d rbp @ cfa%+d rsp @ cfa%+d\n", -+ f->virtual_address, f->frame_type, f->last_frame, -+ f->cfa_reg_rsp ? "rsp" : "rbp", f->cfa_reg_offset, -+ f->rbp_cfa_offset, f->rsp_cfa_offset); -+ -+ assert (f->virtual_address == rip); -+ -+ /* Stop if this was the last frame. In particular don't evaluate -+ new register values as it may not be safe - we don't normally -+ run with full validation on, and do not want to - and there's -+ enough bad unwind info floating around that we need to trust -+ what unw_step() previously said, in potentially bogus frames. */ -+ if (f->last_frame) -+ break; -+ -+ /* Evaluate CFA and registers for the next frame. */ -+ switch (f->frame_type) -+ { -+ case UNW_X86_64_FRAME_GUESSED: -+ /* Fall thru to standard processing after forcing validation. */ -+ c->validate = 1; -+ -+ case UNW_X86_64_FRAME_STANDARD: -+ /* Advance standard traceable frame. */ -+ cfa = (f->cfa_reg_rsp ? rsp : rbp) + f->cfa_reg_offset; -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa - 8, rip); -+ if (likely(ret >= 0) && likely(f->rbp_cfa_offset != -1)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + f->rbp_cfa_offset, rbp); -+ -+ /* Don't bother reading RSP from DWARF, CFA becomes new RSP. */ -+ rsp = cfa; -+ -+ /* Next frame needs to back up for unwind info lookup. */ -+ d->use_prev_instr = 1; -+ break; -+ -+ case UNW_X86_64_FRAME_SIGRETURN: -+ cfa = cfa + f->cfa_reg_offset; /* cfa now points to ucontext_t. */ -+ -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + UC_MCONTEXT_GREGS_RIP, rip); -+ if (likely(ret >= 0)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + UC_MCONTEXT_GREGS_RBP, rbp); -+ if (likely(ret >= 0)) -+ ACCESS_MEM_FAST(ret, c->validate, d, cfa + UC_MCONTEXT_GREGS_RSP, rsp); -+ -+ /* Resume stack at signal restoration point. The stack is not -+ necessarily continuous here, especially with sigaltstack(). */ -+ cfa = rsp; -+ -+ /* Next frame should not back up. */ -+ d->use_prev_instr = 0; -+ break; -+ -+ default: -+ /* We cannot trace through this frame, give up and tell the -+ caller we had to stop. Data collected so far may still be -+ useful to the caller, so let it know how far we got. */ -+ ret = -UNW_ESTOPUNWIND; -+ break; -+ } -+ -+ Debug (4, "new cfa 0x%lx rip 0x%lx rsp 0x%lx rbp 0x%lx\n", -+ cfa, rip, rsp, rbp); -+ -+ /* If we failed or ended up somewhere bogus, stop. */ -+ if (unlikely(ret < 0 || rip < 0x4000)) -+ break; -+ -+ /* Record this address in stack trace. We skipped the first address. */ -+ buffer[depth++] = (void *) (rip - d->use_prev_instr); -+ } -+ -+#if UNW_DEBUG -+ Debug (1, "returning %d, depth %d\n", ret, depth); -+#endif -+ *size = depth; -+ return ret; -+} -diff --git a/frysk-imports/libunwind/src/x86_64/Lfetch_proc_info_post.c b/frysk-imports/libunwind/src/x86_64/Lfetch_proc_info_post.c -deleted file mode 100644 -index c88239c..0000000 ---- a/frysk-imports/libunwind/src/x86_64/Lfetch_proc_info_post.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gfetch_proc_info_post.c" --#endif -diff --git a/frysk-imports/libunwind/src/x86_64/Lglobal.c b/frysk-imports/libunwind/src/x86_64/Lglobal.c -index 6d7b489..8c43a67 100644 ---- a/frysk-imports/libunwind/src/x86_64/Lglobal.c -+++ b/frysk-imports/libunwind/src/x86_64/Lglobal.c -@@ -1,4 +1,5 @@ - #define UNW_LOCAL_ONLY -+#include "config.h" - #include - #if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) - #include "Gglobal.c" -diff --git a/frysk-imports/libunwind/src/x86_64/Lis_signal_frame.c b/frysk-imports/libunwind/src/x86_64/Lis_signal_frame.c -deleted file mode 100644 -index b9a7c4f..0000000 ---- a/frysk-imports/libunwind/src/x86_64/Lis_signal_frame.c -+++ /dev/null -@@ -1,5 +0,0 @@ --#define UNW_LOCAL_ONLY --#include --#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) --#include "Gis_signal_frame.c" --#endif -diff --git a/frysk-imports/libunwind/src/x86_64/Los-freebsd.c b/frysk-imports/libunwind/src/x86_64/Los-freebsd.c -new file mode 100644 -index 0000000..a75a205 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/Los-freebsd.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gos-freebsd.c" -+#endif -diff --git a/frysk-imports/libunwind/src/x86_64/Los-linux.c b/frysk-imports/libunwind/src/x86_64/Los-linux.c -new file mode 100644 -index 0000000..3cc18aa ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/Los-linux.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gos-linux.c" -+#endif -diff --git a/frysk-imports/libunwind/src/x86_64/Lstash_frame.c b/frysk-imports/libunwind/src/x86_64/Lstash_frame.c -new file mode 100644 -index 0000000..7758780 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/Lstash_frame.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gstash_frame.c" -+#endif -diff --git a/frysk-imports/libunwind/src/x86_64/Ltrace.c b/frysk-imports/libunwind/src/x86_64/Ltrace.c -new file mode 100644 -index 0000000..fcd3f23 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/Ltrace.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) -+#include "Gtrace.c" -+#endif -diff --git a/frysk-imports/libunwind/src/x86_64/getcontext.S b/frysk-imports/libunwind/src/x86_64/getcontext.S -new file mode 100644 -index 0000000..7a8b566 ---- /dev/null -+++ b/frysk-imports/libunwind/src/x86_64/getcontext.S -@@ -0,0 +1,134 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2008 Google, Inc -+ Contributed by Paul Pluzhnikov -+ Copyright (C) 2010 Konstantin Belousov -+ -+This file is part of libunwind. -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include "ucontext_i.h" -+ -+/* int _Ux86_64_getcontext (ucontext_t *ucp) -+ -+ Saves the machine context in UCP necessary for libunwind. -+ Unlike the libc implementation, we don't save the signal mask -+ and hence avoid the cost of a system call per unwind. -+ -+*/ -+ -+ .global _Ux86_64_getcontext -+ .type _Ux86_64_getcontext, @function -+_Ux86_64_getcontext: -+ .cfi_startproc -+ -+ /* Callee saved: RBX, RBP, R12-R15 */ -+ movq %r12, UC_MCONTEXT_GREGS_R12(%rdi) -+ movq %r13, UC_MCONTEXT_GREGS_R13(%rdi) -+ movq %r14, UC_MCONTEXT_GREGS_R14(%rdi) -+ movq %r15, UC_MCONTEXT_GREGS_R15(%rdi) -+ movq %rbp, UC_MCONTEXT_GREGS_RBP(%rdi) -+ movq %rbx, UC_MCONTEXT_GREGS_RBX(%rdi) -+ -+ /* Save argument registers (not strictly needed, but setcontext -+ restores them, so don't restore garbage). */ -+ movq %r8, UC_MCONTEXT_GREGS_R8(%rdi) -+ movq %r9, UC_MCONTEXT_GREGS_R9(%rdi) -+ movq %rdi, UC_MCONTEXT_GREGS_RDI(%rdi) -+ movq %rsi, UC_MCONTEXT_GREGS_RSI(%rdi) -+ movq %rdx, UC_MCONTEXT_GREGS_RDX(%rdi) -+ movq %rax, UC_MCONTEXT_GREGS_RAX(%rdi) -+ movq %rcx, UC_MCONTEXT_GREGS_RCX(%rdi) -+ -+#if defined __linux__ -+ /* Save fp state (not needed, except for setcontext not -+ restoring garbage). */ -+ leaq UC_MCONTEXT_FPREGS_MEM(%rdi),%r8 -+ movq %r8, UC_MCONTEXT_FPREGS_PTR(%rdi) -+ fnstenv (%r8) -+ stmxcsr FPREGS_OFFSET_MXCSR(%r8) -+#elif defined __FreeBSD__ -+ fxsave UC_MCONTEXT_FPSTATE(%rdi) -+ movq $UC_MCONTEXT_FPOWNED_FPU,UC_MCONTEXT_OWNEDFP(%rdi) -+ movq $UC_MCONTEXT_FPFMT_XMM,UC_MCONTEXT_FPFORMAT(%rdi) -+ /* Save rflags and segment registers, so that sigreturn(2) -+ does not complain. */ -+ pushfq -+ .cfi_adjust_cfa_offset 8 -+ popq UC_MCONTEXT_RFLAGS(%rdi) -+ .cfi_adjust_cfa_offset -8 -+ movl $0, UC_MCONTEXT_FLAGS(%rdi) -+ movw %cs, UC_MCONTEXT_CS(%rdi) -+ movw %ss, UC_MCONTEXT_SS(%rdi) -+#if 0 -+ /* Setting the flags to 0 above disables restore of segment -+ registers from the context */ -+ movw %ds, UC_MCONTEXT_DS(%rdi) -+ movw %es, UC_MCONTEXT_ES(%rdi) -+ movw %fs, UC_MCONTEXT_FS(%rdi) -+ movw %gs, UC_MCONTEXT_GS(%rdi) -+#endif -+ movq $UC_MCONTEXT_MC_LEN_VAL, UC_MCONTEXT_MC_LEN(%rdi) -+#else -+#error Port me -+#endif -+ -+ leaq 8(%rsp), %rax /* exclude this call. */ -+ movq %rax, UC_MCONTEXT_GREGS_RSP(%rdi) -+ -+ movq 0(%rsp), %rax -+ movq %rax, UC_MCONTEXT_GREGS_RIP(%rdi) -+ -+ xorq %rax, %rax -+ retq -+ .cfi_endproc -+ .size _Ux86_64_getcontext, . - _Ux86_64_getcontext -+ -+/* int _Ux86_64_getcontext_trace (ucontext_t *ucp) -+ -+ Saves limited machine context in UCP necessary for libunwind. -+ Unlike _Ux86_64_getcontext, saves only the parts needed for -+ fast trace. If fast trace fails, caller will have to get the -+ full context. -+*/ -+ -+ .global _Ux86_64_getcontext_trace -+ .hidden _Ux86_64_getcontext_trace -+ .type _Ux86_64_getcontext_trace, @function -+_Ux86_64_getcontext_trace: -+ .cfi_startproc -+ -+ /* Save only RBP, RBX, RSP, RIP - exclude this call. */ -+ movq %rbp, UC_MCONTEXT_GREGS_RBP(%rdi) -+ movq %rbx, UC_MCONTEXT_GREGS_RBX(%rdi) -+ -+ leaq 8(%rsp), %rax -+ movq %rax, UC_MCONTEXT_GREGS_RSP(%rdi) -+ -+ movq 0(%rsp), %rax -+ movq %rax, UC_MCONTEXT_GREGS_RIP(%rdi) -+ -+ xorq %rax, %rax -+ retq -+ .cfi_endproc -+ .size _Ux86_64_getcontext_trace, . - _Ux86_64_getcontext_trace -+ -+ /* We do not need executable stack. */ -+ .section .note.GNU-stack,"",@progbits -diff --git a/frysk-imports/libunwind/src/x86_64/init.h b/frysk-imports/libunwind/src/x86_64/init.h -index 1be5ddb..442b2bf 100644 ---- a/frysk-imports/libunwind/src/x86_64/init.h -+++ b/frysk-imports/libunwind/src/x86_64/init.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -27,44 +27,59 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "unwind_i.h" - -+/* Avoid a trip to x86_64_r_uc_addr() for purely local initialisation. */ -+#if defined UNW_LOCAL_ONLY && defined __linux -+# define REG_INIT_LOC(c, rlc, ruc) \ -+ DWARF_LOC ((unw_word_t) &c->uc->uc_mcontext.gregs[REG_ ## ruc], 0) -+ -+#elif defined UNW_LOCAL_ONLY && defined __FreeBSD__ -+# define REG_INIT_LOC(c, rlc, ruc) \ -+ DWARF_LOC ((unw_word_t) &c->uc->uc_mcontext.mc_ ## rlc, 0) -+ -+#else -+# define REG_INIT_LOC(c, rlc, ruc) \ -+ DWARF_REG_LOC (&c->dwarf, UNW_X86_64_ ## ruc) -+#endif -+ - static inline int --common_init (struct cursor *c) -+common_init (struct cursor *c, unsigned use_prev_instr) - { - int ret; - -- c->dwarf.loc[RAX] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RAX); -- c->dwarf.loc[RDX] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RDX); -- c->dwarf.loc[RCX] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RCX); -- c->dwarf.loc[RBX] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RBX); -- c->dwarf.loc[RSI] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RSI); -- c->dwarf.loc[RDI] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RDI); -- c->dwarf.loc[RBP] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RBP); -- c->dwarf.loc[RSP] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RSP); -- c->dwarf.loc[R8] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_R8); -- c->dwarf.loc[R9] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_R9); -- c->dwarf.loc[R10] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_R10); -- c->dwarf.loc[R11] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_R11); -- c->dwarf.loc[R12] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_R12); -- c->dwarf.loc[R13] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_R13); -- c->dwarf.loc[R14] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_R14); -- c->dwarf.loc[R15] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_R15); -- c->dwarf.loc[RIP] = DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RIP); -+ c->dwarf.loc[RAX] = REG_INIT_LOC(c, rax, RAX); -+ c->dwarf.loc[RDX] = REG_INIT_LOC(c, rdx, RDX); -+ c->dwarf.loc[RCX] = REG_INIT_LOC(c, rcx, RCX); -+ c->dwarf.loc[RBX] = REG_INIT_LOC(c, rbx, RBX); -+ c->dwarf.loc[RSI] = REG_INIT_LOC(c, rsi, RSI); -+ c->dwarf.loc[RDI] = REG_INIT_LOC(c, rdi, RDI); -+ c->dwarf.loc[RBP] = REG_INIT_LOC(c, rbp, RBP); -+ c->dwarf.loc[RSP] = REG_INIT_LOC(c, rsp, RSP); -+ c->dwarf.loc[R8] = REG_INIT_LOC(c, r8, R8); -+ c->dwarf.loc[R9] = REG_INIT_LOC(c, r9, R9); -+ c->dwarf.loc[R10] = REG_INIT_LOC(c, r10, R10); -+ c->dwarf.loc[R11] = REG_INIT_LOC(c, r11, R11); -+ c->dwarf.loc[R12] = REG_INIT_LOC(c, r12, R12); -+ c->dwarf.loc[R13] = REG_INIT_LOC(c, r13, R13); -+ c->dwarf.loc[R14] = REG_INIT_LOC(c, r14, R14); -+ c->dwarf.loc[R15] = REG_INIT_LOC(c, r15, R15); -+ c->dwarf.loc[RIP] = REG_INIT_LOC(c, rip, RIP); - - ret = dwarf_get (&c->dwarf, c->dwarf.loc[RIP], &c->dwarf.ip); - if (ret < 0) - return ret; - - ret = dwarf_get (&c->dwarf, DWARF_REG_LOC (&c->dwarf, UNW_X86_64_RSP), -- &c->dwarf.cfa); -+ &c->dwarf.cfa); - if (ret < 0) - return ret; - - c->sigcontext_format = X86_64_SCF_NONE; - c->sigcontext_addr = 0; - -- c->dwarf.decrease_ip = 0; - c->dwarf.args_size = 0; - c->dwarf.ret_addr_column = RIP; -+ c->dwarf.stash_frames = 0; -+ c->dwarf.use_prev_instr = use_prev_instr; - c->dwarf.pi_valid = 0; - c->dwarf.pi_is_dynamic = 0; - c->dwarf.hint = 0; -diff --git a/frysk-imports/libunwind/src/x86_64/is_fpreg.c b/frysk-imports/libunwind/src/x86_64/is_fpreg.c -index 030dd71..1188a61 100644 ---- a/frysk-imports/libunwind/src/x86_64/is_fpreg.c -+++ b/frysk-imports/libunwind/src/x86_64/is_fpreg.c -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (c) 2004-2005 Hewlett-Packard Development Company, L.P. -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -32,7 +32,7 @@ unw_is_fpreg (int regnum) - { - #if 0 - return ((regnum >= UNW_X86_ST0 && regnum <= UNW_X86_ST7) -- || (regnum >= UNW_X86_XMM0_lo && regnum <= UNW_X86_XMM7_hi)); -+ || (regnum >= UNW_X86_XMM0_lo && regnum <= UNW_X86_XMM7_hi)); - #endif - return 0; - } -diff --git a/frysk-imports/libunwind/src/x86_64/longjmp.S b/frysk-imports/libunwind/src/x86_64/longjmp.S -index bda9d06..274778f 100644 ---- a/frysk-imports/libunwind/src/x86_64/longjmp.S -+++ b/frysk-imports/libunwind/src/x86_64/longjmp.S -@@ -24,14 +24,11 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - .globl _UI_longjmp_cont -- - .type _UI_longjmp_cont, @function - _UI_longjmp_cont: - push %rax /* push target IP as return address */ - mov %rdx, %rax /* set up return-value */ - retq - .size _UI_longjmp_cont, .-_UI_longjmp_cont --#ifdef __linux__ - /* We do not need executable stack. */ - .section .note.GNU-stack,"",@progbits --#endif -diff --git a/frysk-imports/libunwind/src/x86_64/offsets.h b/frysk-imports/libunwind/src/x86_64/offsets.h -index 56ead69..0807960 100644 ---- a/frysk-imports/libunwind/src/x86_64/offsets.h -+++ b/frysk-imports/libunwind/src/x86_64/offsets.h -@@ -1,29 +1,3 @@ --/* This used to be a generated file. But then it breaks cross compilation. -- * So use the method used by other architectures. -- */ --#ifndef OFFSETS_H --#define OFFSETS_H -+/* FreeBSD specific definitions */ - --#define REG_OFFSET_RAX 144 --#define REG_OFFSET_RBX 128 --#define REG_OFFSET_RCX 152 --#define REG_OFFSET_RDX 136 --#define REG_OFFSET_RDI 104 --#define REG_OFFSET_RSI 112 --#define REG_OFFSET_RSP 160 --#define REG_OFFSET_RBP 120 --#define REG_OFFSET_R8 40 --#define REG_OFFSET_R9 48 --#define REG_OFFSET_R10 56 --#define REG_OFFSET_R11 64 --#define REG_OFFSET_R12 72 --#define REG_OFFSET_R13 80 --#define REG_OFFSET_R14 88 --#define REG_OFFSET_R15 96 --#define REG_OFFSET_R15 96 --#define REG_OFFSET_R15 96 --#define REG_OFFSET_RIP 168 --#define REG_OFFSET_FPREGS_PTR 224 --#define FPREG_OFFSET_MXCR 24 -- --#endif /* OFFSETS_H */ -+#define FREEBSD_UC_MCONTEXT_OFF 0x10 -diff --git a/frysk-imports/libunwind/src/x86_64/setcontext.S b/frysk-imports/libunwind/src/x86_64/setcontext.S -index 9eeb1b8..1af8b67 100644 ---- a/frysk-imports/libunwind/src/x86_64/setcontext.S -+++ b/frysk-imports/libunwind/src/x86_64/setcontext.S -@@ -1,6 +1,7 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2007 Google, Inc - Contributed by Arun Sharma -+ Copyright (C) 2010 Konstantin Belousov - - This file is part of libunwind. - -@@ -23,41 +24,88 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#include "offsets.h" -+#include "ucontext_i.h" -+#if defined __linux__ -+#include -+#define SIG_SETMASK 2 -+#define SIGSET_BYTE_SIZE (64/8) -+#elif defined __FreeBSD__ -+#include -+#endif -+ -+/* int _Ux86_64_setcontext (const ucontext_t *ucp) - -- .global _x86_64_setcontext -+ Restores the machine context provided. -+ Unlike the libc implementation, doesn't clobber %rax -+ -+*/ -+ .global _Ux86_64_setcontext -+ .type _Ux86_64_setcontext, @function - --_x86_64_setcontext: -+_Ux86_64_setcontext: -+ -+#if defined __linux__ -+ /* restore signal mask -+ sigprocmask(SIG_SETMASK, ucp->uc_sigmask, NULL, sizeof(sigset_t)) */ -+ push %rdi -+ mov $__NR_rt_sigprocmask, %rax -+ lea UC_SIGMASK(%rdi), %rsi -+ mov $SIG_SETMASK, %rdi -+ xor %rdx, %rdx -+ mov $SIGSET_BYTE_SIZE, %r10 -+ syscall -+ pop %rdi - - /* restore fp state */ -- mov REG_OFFSET_FPREGS_PTR(%rdi),%r8 -+ mov UC_MCONTEXT_FPREGS_PTR(%rdi),%r8 - fldenv (%r8) -- ldmxcsr FPREG_OFFSET_MXCR(%r8) -+ ldmxcsr FPREGS_OFFSET_MXCSR(%r8) -+#elif defined __FreeBSD__ -+ /* restore signal mask */ -+ pushq %rdi -+ xorl %edx,%edx -+ leaq UC_SIGMASK(%rdi),%rsi -+ movl $3,%edi/* SIG_SETMASK */ -+ movl $SYS_sigprocmask,%eax -+ movq %rcx,%r10 -+ syscall -+ popq %rdi -+ -+ /* restore fp state */ -+ cmpq $UC_MCONTEXT_FPOWNED_FPU,UC_MCONTEXT_OWNEDFP(%rdi) -+ jne 1f -+ cmpq $UC_MCONTEXT_FPFMT_XMM,UC_MCONTEXT_FPFORMAT(%rdi) -+ jne 1f -+ fxrstor UC_MCONTEXT_FPSTATE(%rdi) -+1: -+#else -+#error Port me -+#endif - - /* restore the rest of the state */ -- mov REG_OFFSET_R8(%rdi),%r8 -- mov REG_OFFSET_R9(%rdi),%r9 -- mov REG_OFFSET_RBX(%rdi),%rbx -- mov REG_OFFSET_RBP(%rdi),%rbp -- mov REG_OFFSET_R12(%rdi),%r12 -- mov REG_OFFSET_R13(%rdi),%r13 -- mov REG_OFFSET_R14(%rdi),%r14 -- mov REG_OFFSET_R15(%rdi),%r15 -- mov REG_OFFSET_RSI(%rdi),%rsi -- mov REG_OFFSET_RDX(%rdi),%rdx -- mov REG_OFFSET_RAX(%rdi),%rax -- mov REG_OFFSET_RCX(%rdi),%rcx -- mov REG_OFFSET_RSP(%rdi),%rsp -+ mov UC_MCONTEXT_GREGS_R8(%rdi),%r8 -+ mov UC_MCONTEXT_GREGS_R9(%rdi),%r9 -+ mov UC_MCONTEXT_GREGS_RBX(%rdi),%rbx -+ mov UC_MCONTEXT_GREGS_RBP(%rdi),%rbp -+ mov UC_MCONTEXT_GREGS_R12(%rdi),%r12 -+ mov UC_MCONTEXT_GREGS_R13(%rdi),%r13 -+ mov UC_MCONTEXT_GREGS_R14(%rdi),%r14 -+ mov UC_MCONTEXT_GREGS_R15(%rdi),%r15 -+ mov UC_MCONTEXT_GREGS_RSI(%rdi),%rsi -+ mov UC_MCONTEXT_GREGS_RDX(%rdi),%rdx -+ mov UC_MCONTEXT_GREGS_RAX(%rdi),%rax -+ mov UC_MCONTEXT_GREGS_RCX(%rdi),%rcx -+ mov UC_MCONTEXT_GREGS_RSP(%rdi),%rsp - - /* push the return address on the stack */ -- mov REG_OFFSET_RIP(%rdi),%rcx -+ mov UC_MCONTEXT_GREGS_RIP(%rdi),%rcx - push %rcx - -- mov REG_OFFSET_RCX(%rdi),%rcx -- mov REG_OFFSET_RDI(%rdi),%rdi -+ mov UC_MCONTEXT_GREGS_RCX(%rdi),%rcx -+ mov UC_MCONTEXT_GREGS_RDI(%rdi),%rdi - retq - --#ifdef __linux__ -+ .size _Ux86_64_setcontext, . - _Ux86_64_setcontext -+ - /* We do not need executable stack. */ - .section .note.GNU-stack,"",@progbits --#endif -diff --git a/frysk-imports/libunwind/src/x86_64/siglongjmp.S b/frysk-imports/libunwind/src/x86_64/siglongjmp.S -index 8ca7968..32489e5 100644 ---- a/frysk-imports/libunwind/src/x86_64/siglongjmp.S -+++ b/frysk-imports/libunwind/src/x86_64/siglongjmp.S -@@ -24,10 +24,9 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - .globl _UI_siglongjmp_cont -- -+ .type _UI_siglongjmp_cont, @function - _UI_siglongjmp_cont: - retq --#ifdef __linux__ -+ .size _UI_siglongjmp_cont, . - _UI_siglongjmp_cont - /* We do not need executable stack. */ - .section .note.GNU-stack,"",@progbits --#endif -diff --git a/frysk-imports/libunwind/src/x86_64/ucontext_i.h b/frysk-imports/libunwind/src/x86_64/ucontext_i.h -index 7f26eaa..aded941 100644 ---- a/frysk-imports/libunwind/src/x86_64/ucontext_i.h -+++ b/frysk-imports/libunwind/src/x86_64/ucontext_i.h -@@ -22,32 +22,61 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#define UC_MCONTEXT_GREGS_R8 0x28 --#define UC_MCONTEXT_GREGS_R9 0x30 --#define UC_MCONTEXT_GREGS_R10 0x38 --#define UC_MCONTEXT_GREGS_R11 0x40 --#define UC_MCONTEXT_GREGS_R12 0x48 --#define UC_MCONTEXT_GREGS_R13 0x50 --#define UC_MCONTEXT_GREGS_R14 0x58 --#define UC_MCONTEXT_GREGS_R15 0x60 --#define UC_MCONTEXT_GREGS_RDI 0x68 --#define UC_MCONTEXT_GREGS_RSI 0x70 --#define UC_MCONTEXT_GREGS_RBP 0x78 --#define UC_MCONTEXT_GREGS_RBX 0x80 --#define UC_MCONTEXT_GREGS_RDX 0x88 --#define UC_MCONTEXT_GREGS_RAX 0x90 --#define UC_MCONTEXT_GREGS_RCX 0x98 --#define UC_MCONTEXT_GREGS_RSP 0xa0 --#define UC_MCONTEXT_GREGS_RIP 0xa8 --#define UC_MCONTEXT_GREGS_ERR 0xc0 --#define UC_MCONTEXT_GREGS_TRAPNO 0xc8 -+#if defined __linux__ -+#define UC_MCONTEXT_GREGS_R8 0x28 -+#define UC_MCONTEXT_GREGS_R9 0x30 -+#define UC_MCONTEXT_GREGS_R10 0x38 -+#define UC_MCONTEXT_GREGS_R11 0x40 -+#define UC_MCONTEXT_GREGS_R12 0x48 -+#define UC_MCONTEXT_GREGS_R13 0x50 -+#define UC_MCONTEXT_GREGS_R14 0x58 -+#define UC_MCONTEXT_GREGS_R15 0x60 -+#define UC_MCONTEXT_GREGS_RDI 0x68 -+#define UC_MCONTEXT_GREGS_RSI 0x70 -+#define UC_MCONTEXT_GREGS_RBP 0x78 -+#define UC_MCONTEXT_GREGS_RBX 0x80 -+#define UC_MCONTEXT_GREGS_RDX 0x88 -+#define UC_MCONTEXT_GREGS_RAX 0x90 -+#define UC_MCONTEXT_GREGS_RCX 0x98 -+#define UC_MCONTEXT_GREGS_RSP 0xa0 -+#define UC_MCONTEXT_GREGS_RIP 0xa8 -+#define UC_MCONTEXT_FPREGS_PTR 0x1a8 -+#define UC_MCONTEXT_FPREGS_MEM 0xe0 -+#define UC_SIGMASK 0x128 -+#define FPREGS_OFFSET_MXCSR 0x18 -+#elif defined __FreeBSD__ -+#define UC_SIGMASK 0x0 -+#define UC_MCONTEXT_GREGS_RDI 0x18 -+#define UC_MCONTEXT_GREGS_RSI 0x20 -+#define UC_MCONTEXT_GREGS_RDX 0x28 -+#define UC_MCONTEXT_GREGS_RCX 0x30 -+#define UC_MCONTEXT_GREGS_R8 0x38 -+#define UC_MCONTEXT_GREGS_R9 0x40 -+#define UC_MCONTEXT_GREGS_RAX 0x48 -+#define UC_MCONTEXT_GREGS_RBX 0x50 -+#define UC_MCONTEXT_GREGS_RBP 0x58 -+#define UC_MCONTEXT_GREGS_R10 0x60 -+#define UC_MCONTEXT_GREGS_R11 0x68 -+#define UC_MCONTEXT_GREGS_R12 0x70 -+#define UC_MCONTEXT_GREGS_R13 0x78 -+#define UC_MCONTEXT_GREGS_R14 0x80 -+#define UC_MCONTEXT_GREGS_R15 0x88 -+#define UC_MCONTEXT_FS 0x94 -+#define UC_MCONTEXT_GS 0x96 -+#define UC_MCONTEXT_FLAGS 0xa0 -+#define UC_MCONTEXT_ES 0xa4 -+#define UC_MCONTEXT_DS 0xa6 -+#define UC_MCONTEXT_GREGS_RIP 0xb0 -+#define UC_MCONTEXT_CS 0xb8 -+#define UC_MCONTEXT_RFLAGS 0xc0 -+#define UC_MCONTEXT_GREGS_RSP 0xc8 -+#define UC_MCONTEXT_SS 0xd0 -+#define UC_MCONTEXT_MC_LEN 0xd8 -+#define UC_MCONTEXT_FPFORMAT 0xe0 -+#define UC_MCONTEXT_OWNEDFP 0xe8 -+#define UC_MCONTEXT_FPSTATE 0xf0 -+#define UC_MCONTEXT_FPOWNED_FPU 0x20001 -+#define UC_MCONTEXT_FPFMT_XMM 0x10002 -+#define UC_MCONTEXT_MC_LEN_VAL 0x320 - --#define UC_MCONTEXT_GREGS_TRAPNO_PF 14 /* Page-Fault Exception */ -- --/* http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/24593.pdf -- Publication # 24593, Revision 3.12, page 219 (261/488): */ --#define UC_MCONTEXT_GREGS_ERR_P_BIT 0 --#define UC_MCONTEXT_GREGS_ERR_RW_BIT 1 --#define UC_MCONTEXT_GREGS_ERR_US_BIT 2 --#define UC_MCONTEXT_GREGS_ERR_RSV_BIT 3 --#define UC_MCONTEXT_GREGS_ERR_ID_BIT 4 -+#endif -diff --git a/frysk-imports/libunwind/src/x86_64/unwind_i.h b/frysk-imports/libunwind/src/x86_64/unwind_i.h -index af779bb..4f81566 100644 ---- a/frysk-imports/libunwind/src/x86_64/unwind_i.h -+++ b/frysk-imports/libunwind/src/x86_64/unwind_i.h -@@ -1,6 +1,6 @@ - /* libunwind - a platform-independent unwind library - Copyright (C) 2002, 2005 Hewlett-Packard Co -- Contributed by David Mosberger-Tang -+ Contributed by David Mosberger-Tang - - Modified for x86_64 by Max Asbock - -@@ -28,7 +28,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifndef unwind_i_h - #define unwind_i_h - --#include - #include - - #include -@@ -37,36 +36,56 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - - /* DWARF column numbers for x86_64: */ --#define RAX 0 --#define RDX 1 --#define RCX 2 --#define RBX 3 --#define RSI 4 --#define RDI 5 --#define RBP 6 --#define RSP 7 --#define R8 8 --#define R9 9 --#define R10 10 --#define R11 11 --#define R12 12 --#define R13 13 --#define R14 14 --#define R15 15 --#define RIP 16 -- --#define x86_64_lock UNW_OBJ(lock) --#define x86_64_local_resume UNW_OBJ(local_resume) --#define x86_64_local_addr_space_init UNW_OBJ(local_addr_space_init) -+#define RAX 0 -+#define RDX 1 -+#define RCX 2 -+#define RBX 3 -+#define RSI 4 -+#define RDI 5 -+#define RBP 6 -+#define RSP 7 -+#define R8 8 -+#define R9 9 -+#define R10 10 -+#define R11 11 -+#define R12 12 -+#define R13 13 -+#define R14 14 -+#define R15 15 -+#define RIP 16 -+ -+#define x86_64_lock UNW_OBJ(lock) -+#define x86_64_local_resume UNW_OBJ(local_resume) -+#define x86_64_local_addr_space_init UNW_OBJ(local_addr_space_init) -+#define setcontext UNW_ARCH_OBJ (setcontext) - #if 0 --#define x86_64_scratch_loc UNW_OBJ(scratch_loc) -+#define x86_64_scratch_loc UNW_OBJ(scratch_loc) -+#endif -+#define x86_64_r_uc_addr UNW_OBJ(r_uc_addr) -+#define x86_64_sigreturn UNW_OBJ(sigreturn) -+ -+/* By-pass calls to access_mem() when known to be safe. */ -+#ifdef UNW_LOCAL_ONLY -+# undef ACCESS_MEM_FAST -+# define ACCESS_MEM_FAST(ret,validate,cur,addr,to) \ -+ do { \ -+ if (unlikely(validate)) \ -+ (ret) = dwarf_get ((cur), DWARF_MEM_LOC ((cur), (addr)), &(to)); \ -+ else \ -+ (ret) = 0, (to) = *(unw_word_t *)(addr); \ -+ } while (0) - #endif - - extern void x86_64_local_addr_space_init (void); - extern int x86_64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, -- void *arg); -+ void *arg); -+extern int setcontext (const ucontext_t *ucp); -+ - #if 0 - extern dwarf_loc_t x86_64_scratch_loc (struct cursor *c, unw_regnum_t reg); - #endif - -+extern void *x86_64_r_uc_addr (ucontext_t *uc, int reg); -+extern NORETURN void x86_64_sigreturn (unw_cursor_t *cursor); -+ - #endif /* unwind_i_h */ -diff --git a/frysk-imports/libunwind/tests/.gitignore b/frysk-imports/libunwind/tests/.gitignore -deleted file mode 100644 -index 70845e0..0000000 ---- a/frysk-imports/libunwind/tests/.gitignore -+++ /dev/null -@@ -1 +0,0 @@ --Makefile.in -diff --git a/frysk-imports/libunwind/tests/Gia64-test-nat.c b/frysk-imports/libunwind/tests/Gia64-test-nat.c -index 1e9e939..89df54e 100644 ---- a/frysk-imports/libunwind/tests/Gia64-test-nat.c -+++ b/frysk-imports/libunwind/tests/Gia64-test-nat.c -@@ -31,6 +31,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - - #include -+#include "compiler.h" - - #ifdef HAVE_SYS_UC_ACCESS_H - # include -@@ -38,8 +39,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include "tdep-ia64/rse.h" - --#define ARRAY_SIZE(a) ((int) (sizeof (a) / sizeof ((a)[0]))) -- - #define NUM_RUNS 1024 - //#define NUM_RUNS 1 - #define MAX_CHECKS 1024 -@@ -588,9 +587,9 @@ run_check (int test) - { - if (test == 1) - /* Make first test once go through each test... */ -- index = i % ARRAY_SIZE (all_funcs); -+ index = i % (int) ARRAY_SIZE (all_funcs); - else -- index = random () % ARRAY_SIZE (all_funcs); -+ index = random () % (int) ARRAY_SIZE (all_funcs); - funcs[i] = all_funcs[index].func; - checks[i] = all_funcs[index].check; - } -diff --git a/frysk-imports/libunwind/tests/Gia64-test-rbs.c b/frysk-imports/libunwind/tests/Gia64-test-rbs.c -index ba89f88..2181e70 100644 ---- a/frysk-imports/libunwind/tests/Gia64-test-rbs.c -+++ b/frysk-imports/libunwind/tests/Gia64-test-rbs.c -@@ -32,14 +32,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - - #include -+#include "compiler.h" - - #include "ia64-test-rbs.h" - - #define panic(args...) \ - do { fprintf (stderr, args); ++nerrors; return -9999; } while (0) - --#define ARRAY_SIZE(a) ((int) (sizeof (a) / sizeof ((a)[0]))) -- - /* The loadrs field in ar.rsc is 14 bits wide, which limits all ia64 - implementations to at most 2048 physical stacked registers - (actually, slightly less than that, because loadrs also counts RNaT -@@ -138,7 +137,7 @@ run_check (int test) - - /* First, generate a set of 88 random values which loadup() will load - into loc2-loc89 (r37-r124). */ -- for (i = 0; i < ARRAY_SIZE (reg_values); ++i) -+ for (i = 0; i < (int) ARRAY_SIZE (reg_values); ++i) - { - reg_values[i] = random (); - /* Generate NaTs with a reasonably probability (1/16th): */ -@@ -150,7 +149,7 @@ run_check (int test) - nfuncs = 0; - do - { -- n = random () % ARRAY_SIZE (spill_funcs); -+ n = random () % (int) ARRAY_SIZE (spill_funcs); - func[nfuncs++] = spill_funcs[n]; - nspills += 2 + n; - } -diff --git a/frysk-imports/libunwind/tests/Gia64-test-stack.c b/frysk-imports/libunwind/tests/Gia64-test-stack.c -index 2b47f3d..05874b2 100644 ---- a/frysk-imports/libunwind/tests/Gia64-test-stack.c -+++ b/frysk-imports/libunwind/tests/Gia64-test-stack.c -@@ -81,14 +81,15 @@ do_unwind_tests (void) - { - v0 = v1 = v2 = v3 = 0; - n0 = n1 = n2 = n3 = 0; -- ((ret = unw_get_reg (&c, UNW_IA64_GR + reg, &v0)) < 0 -+ (void) -+ ((ret = unw_get_reg (&c, UNW_IA64_GR + reg, &v0)) < 0 - || (ret = unw_get_reg (&c, UNW_IA64_NAT + reg, &n0)) < 0 - || (ret = unw_get_reg (&c, UNW_IA64_GR + reg + 1, &v1)) < 0 - || (ret = unw_get_reg (&c, UNW_IA64_NAT + reg + 1, &n1)) < 0 - || (ret = unw_get_reg (&c, UNW_IA64_GR + reg + 2, &v2)) < 0 - || (ret = unw_get_reg (&c, UNW_IA64_NAT + reg + 2, &n2)) < 0 - || (ret = unw_get_reg (&c, UNW_IA64_GR + reg + 3, &v3)) < 0 -- || (ret = unw_get_reg (&c, UNW_IA64_NAT + reg + 3, &n3)) < 0); -+ || (ret = unw_get_reg (&c, UNW_IA64_NAT + reg + 3, &n3)) < 0); - if (reg < 100) - printf (" r%d", reg); - else -diff --git a/frysk-imports/libunwind/tests/Gperf-simple.c b/frysk-imports/libunwind/tests/Gperf-simple.c -index 239ad26..2173406 100644 ---- a/frysk-imports/libunwind/tests/Gperf-simple.c -+++ b/frysk-imports/libunwind/tests/Gperf-simple.c -@@ -21,12 +21,13 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#include -+#include - #include - #include - #include - - #include -+#include "compiler.h" - - #include - #include -@@ -53,7 +54,7 @@ gettime (void) - return tv.tv_sec + 1e-6*tv.tv_usec; - } - --static int __attribute__((noinline)) -+static int NOINLINE - measure_unwind (int maxlevel, double *step) - { - double stop, start; -@@ -88,7 +89,7 @@ measure_unwind (int maxlevel, double *step) - - static int f1 (int, int, double *); - --static int __attribute__((noinline)) -+static int NOINLINE - g1 (int level, int maxlevel, double *step) - { - if (level == maxlevel) -@@ -98,7 +99,7 @@ g1 (int level, int maxlevel, double *step) - return f1 (level + 1, maxlevel, step) + level; - } - --static int __attribute__((noinline)) -+static int NOINLINE - f1 (int level, int maxlevel, double *step) - { - if (level == maxlevel) -diff --git a/frysk-imports/libunwind/tests/Gperf-trace.c b/frysk-imports/libunwind/tests/Gperf-trace.c -new file mode 100644 -index 0000000..cc4fac6 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Gperf-trace.c -@@ -0,0 +1,248 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2003-2004 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include "compiler.h" -+ -+#include -+#include -+ -+#define panic(args...) \ -+ do { fprintf (stderr, args); exit (-1); } while (0) -+ -+long dummy; -+ -+static long iterations = 10000; -+static int maxlevel = 100; -+ -+#define KB 1024 -+#define MB (1024*1024) -+ -+static char big[64*MB]; /* should be >> max. cache size */ -+ -+static inline double -+gettime (void) -+{ -+ struct timeval tv; -+ -+ gettimeofday (&tv, NULL); -+ return tv.tv_sec + 1e-6*tv.tv_usec; -+} -+ -+static int NOINLINE -+measure_unwind (int maxlevel, double *step) -+{ -+ double stop, start; -+ int level = 0; -+ void *buffer[128]; -+ -+ start = gettime (); -+ level = unw_backtrace(buffer, 128); -+ stop = gettime (); -+ -+ if (level <= maxlevel) -+ panic ("Unwound only %d levels, expected at least %d levels\n", -+ level, maxlevel); -+ -+ *step = (stop - start) / (double) level; -+ return 0; -+} -+ -+static int f1 (int, int, double *); -+ -+static int NOINLINE -+g1 (int level, int maxlevel, double *step) -+{ -+ if (level == maxlevel) -+ return measure_unwind (maxlevel, step); -+ else -+ /* defeat last-call/sibcall optimization */ -+ return f1 (level + 1, maxlevel, step) + level; -+} -+ -+static int NOINLINE -+f1 (int level, int maxlevel, double *step) -+{ -+ if (level == maxlevel) -+ return measure_unwind (maxlevel, step); -+ else -+ /* defeat last-call/sibcall optimization */ -+ return g1 (level + 1, maxlevel, step) + level; -+} -+ -+static void -+doit (const char *label) -+{ -+ double step, min_step, first_step, sum_step; -+ int i; -+ -+ sum_step = first_step = 0.0; -+ min_step = 1e99; -+ for (i = 0; i < iterations; ++i) -+ { -+ f1 (0, maxlevel, &step); -+ -+ sum_step += step; -+ -+ if (step < min_step) -+ min_step = step; -+ -+ if (i == 0) -+ first_step = step; -+ } -+ printf ("%s: unw_step : 1st=%9.3f min=%9.3f avg=%9.3f nsec\n", label, -+ 1e9*first_step, 1e9*min_step, 1e9*sum_step/iterations); -+} -+ -+static long -+sum (void *buf, size_t size) -+{ -+ long s = 0; -+ char *cp = buf; -+ size_t i; -+ -+ for (i = 0; i < size; i += 8) -+ s += cp[i]; -+ return s; -+} -+ -+static void -+measure_init (void) -+{ -+# define N 100 -+# define M 10 /* must be at least 2 to get steady-state */ -+ double stop, start, get_cold, get_warm, init_cold, init_warm, delta; -+ struct -+ { -+ unw_cursor_t c; -+ char padding[1024]; /* should be > 2 * max. cacheline size */ -+ } -+ cursor[N]; -+ struct -+ { -+ unw_context_t uc; -+ char padding[1024]; /* should be > 2 * max. cacheline size */ -+ } -+ uc[N]; -+ int i, j; -+ -+ /* Run each test M times and take the minimum to filter out noise -+ such dynamic linker resolving overhead, context-switches, -+ page-in, cache, and TLB effects. */ -+ -+ get_cold = 1e99; -+ for (j = 0; j < M; ++j) -+ { -+ dummy += sum (big, sizeof (big)); /* flush the cache */ -+ for (i = 0; i < N; ++i) -+ uc[i].padding[511] = i; /* warm up the TLB */ -+ start = gettime (); -+ for (i = 0; i < N; ++i) -+ unw_getcontext (&uc[i].uc); -+ stop = gettime (); -+ delta = (stop - start) / N; -+ if (delta < get_cold) -+ get_cold = delta; -+ } -+ -+ init_cold = 1e99; -+ for (j = 0; j < M; ++j) -+ { -+ dummy += sum (big, sizeof (big)); /* flush cache */ -+ for (i = 0; i < N; ++i) -+ uc[i].padding[511] = i; /* warm up the TLB */ -+ start = gettime (); -+ for (i = 0; i < N; ++i) -+ unw_init_local (&cursor[i].c, &uc[i].uc); -+ stop = gettime (); -+ delta = (stop - start) / N; -+ if (delta < init_cold) -+ init_cold = delta; -+ } -+ -+ get_warm = 1e99; -+ for (j = 0; j < M; ++j) -+ { -+ start = gettime (); -+ for (i = 0; i < N; ++i) -+ unw_getcontext (&uc[0].uc); -+ stop = gettime (); -+ delta = (stop - start) / N; -+ if (delta < get_warm) -+ get_warm = delta; -+ } -+ -+ init_warm = 1e99; -+ for (j = 0; j < M; ++j) -+ { -+ start = gettime (); -+ for (i = 0; i < N; ++i) -+ unw_init_local (&cursor[0].c, &uc[0].uc); -+ stop = gettime (); -+ delta = (stop - start) / N; -+ if (delta < init_warm) -+ init_warm = delta; -+ } -+ -+ printf ("unw_getcontext : cold avg=%9.3f nsec, warm avg=%9.3f nsec\n", -+ 1e9 * get_cold, 1e9 * get_warm); -+ printf ("unw_init_local : cold avg=%9.3f nsec, warm avg=%9.3f nsec\n", -+ 1e9 * init_cold, 1e9 * init_warm); -+} -+ -+int -+main (int argc, char **argv) -+{ -+ struct rlimit rlim; -+ -+ rlim.rlim_cur = RLIM_INFINITY; -+ rlim.rlim_max = RLIM_INFINITY; -+ setrlimit (RLIMIT_STACK, &rlim); -+ -+ memset (big, 0xaa, sizeof (big)); -+ -+ if (argc > 1) -+ { -+ maxlevel = atol (argv[1]); -+ if (argc > 2) -+ iterations = atol (argv[2]); -+ } -+ -+ measure_init (); -+ -+ unw_set_caching_policy (unw_local_addr_space, UNW_CACHE_NONE); -+ doit ("no cache "); -+ -+ unw_set_caching_policy (unw_local_addr_space, UNW_CACHE_GLOBAL); -+ doit ("global cache "); -+ -+ unw_set_caching_policy (unw_local_addr_space, UNW_CACHE_PER_THREAD); -+ doit ("per-thread cache"); -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/tests/Gtest-bt.c b/frysk-imports/libunwind/tests/Gtest-bt.c -index 1256512..802dd08 100644 ---- a/frysk-imports/libunwind/tests/Gtest-bt.c -+++ b/frysk-imports/libunwind/tests/Gtest-bt.c -@@ -25,6 +25,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - # include "config.h" - #endif - -+#include "compiler.h" -+ - #include - #if HAVE_EXECINFO_H - # include -@@ -38,30 +40,25 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - #include - --#if UNW_TARGET_X86 || UNW_TARGET_X86_64 --# define STACK_SIZE (128*1024) /* On x86/-64, SIGSTKSZ is too small */ --#else --# define STACK_SIZE SIGSTKSZ --#endif -- - #define panic(args...) \ - { fprintf (stderr, args); exit (-1); } - --#ifndef HAVE_SIGHANDLER_T --typedef RETSIGTYPE (*sighandler_t) (int); --#endif -+#define SIG_STACK_SIZE 0x100000 - - int verbose; - int num_errors; - -+/* These variables are global because they -+ * cause the signal stack to overflow */ -+char buf[512], name[256]; -+unw_cursor_t cursor; -+unw_context_t uc; -+ - static void - do_backtrace (void) - { -- char buf[512], name[256]; - unw_word_t ip, sp, off; -- unw_cursor_t cursor; - unw_proc_info_t pi; -- unw_context_t uc; - int ret; - - if (verbose) -@@ -87,10 +84,12 @@ do_backtrace (void) - { - printf ("%016lx %-32s (sp=%016lx)\n", (long) ip, buf, (long) sp); - -- unw_get_proc_info (&cursor, &pi); -- printf ("\tproc=%lx-%lx\n\thandler=%lx lsda=%lx gp=%lx", -+ if (unw_get_proc_info (&cursor, &pi) == 0) -+ { -+ printf ("\tproc=0x%lx-0x%lx\n\thandler=0x%lx lsda=0x%lx gp=0x%lx", - (long) pi.start_ip, (long) pi.end_ip, - (long) pi.handler, (long) pi.lsda, (long) pi.gp); -+ } - - #if UNW_TARGET_IA64 - { -@@ -128,7 +127,7 @@ do_backtrace (void) - } - - void --foo (long val) -+foo (long val UNUSED) - { - do_backtrace (); - } -@@ -165,11 +164,13 @@ bar (long v) - } - - void --sighandler (int signal, void *siginfo, void *context) -+sighandler (int signal, void *siginfo UNUSED, void *context) - { -- ucontext_t *uc = context; -+ ucontext_t *uc UNUSED; - int sp; - -+ uc = context; -+ - if (verbose) - { - printf ("sighandler: got signal %d, sp=%p", signal, &sp); -@@ -187,7 +188,17 @@ sighandler (int signal, void *siginfo, void *context) - } - # endif - #elif UNW_TARGET_X86 -+#if defined __linux__ - printf (" @ %lx", (unsigned long) uc->uc_mcontext.gregs[REG_EIP]); -+#elif defined __FreeBSD__ -+ printf (" @ %lx", (unsigned long) uc->uc_mcontext.mc_eip); -+#endif -+#elif UNW_TARGET_X86_64 -+#if defined __linux__ -+ printf (" @ %lx", (unsigned long) uc->uc_mcontext.gregs[REG_RIP]); -+#elif defined __FreeBSD__ -+ printf (" @ %lx", (unsigned long) uc->uc_mcontext.mc_rip); -+#endif - #endif - printf ("\n"); - } -@@ -195,7 +206,7 @@ sighandler (int signal, void *siginfo, void *context) - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - struct sigaction act; - stack_t stk; -@@ -219,10 +230,10 @@ main (int argc, char **argv) - - if (verbose) - printf ("\nBacktrace across signal handler on alternate stack:\n"); -- stk.ss_sp = malloc (STACK_SIZE); -+ stk.ss_sp = malloc (SIG_STACK_SIZE); - if (!stk.ss_sp) -- panic ("failed to allocate SIGSTKSZ (%u) bytes\n", SIGSTKSZ); -- stk.ss_size = STACK_SIZE; -+ panic ("failed to allocate %u bytes\n", SIG_STACK_SIZE); -+ stk.ss_size = SIG_STACK_SIZE; - stk.ss_flags = 0; - if (sigaltstack (&stk, NULL) < 0) - panic ("sigaltstack: %s\n", strerror (errno)); -@@ -241,5 +252,11 @@ main (int argc, char **argv) - } - if (verbose) - printf ("SUCCESS.\n"); -+ -+ signal (SIGTERM, SIG_DFL); -+ stk.ss_flags = SS_DISABLE; -+ sigaltstack (&stk, NULL); -+ free (stk.ss_sp); -+ - return 0; - } -diff --git a/frysk-imports/libunwind/tests/Gtest-concurrent.c b/frysk-imports/libunwind/tests/Gtest-concurrent.c -index 8166fc5..6f3447f 100644 ---- a/frysk-imports/libunwind/tests/Gtest-concurrent.c -+++ b/frysk-imports/libunwind/tests/Gtest-concurrent.c -@@ -27,6 +27,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - # include "config.h" - #endif - -+#include "compiler.h" -+ - #include - #include - #include -@@ -46,7 +48,7 @@ int got_usr1, got_usr2; - char *sigusr1_sp; - - void --handler (int sig) -+handler (int sig UNUSED) - { - unw_word_t ip; - unw_context_t uc; -@@ -68,7 +70,7 @@ handler (int sig) - } - - void * --worker (void *arg) -+worker (void *arg UNUSED) - { - signal (SIGUSR1, handler); - -@@ -102,7 +104,7 @@ doit (void) - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - if (argc > 1) - verbose = 1; -@@ -115,10 +117,12 @@ main (int argc, char **argv) - if (verbose) - printf ("Caching: global\n"); - unw_set_caching_policy (unw_local_addr_space, UNW_CACHE_GLOBAL); -+ doit (); - - if (verbose) - printf ("Caching: per-thread\n"); - unw_set_caching_policy (unw_local_addr_space, UNW_CACHE_PER_THREAD); -+ doit (); - - if (nerrors) - { -diff --git a/frysk-imports/libunwind/tests/Gtest-dyn1.c b/frysk-imports/libunwind/tests/Gtest-dyn1.c -index 2faa1f7..bc7dc9c 100644 ---- a/frysk-imports/libunwind/tests/Gtest-dyn1.c -+++ b/frysk-imports/libunwind/tests/Gtest-dyn1.c -@@ -25,16 +25,23 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* This file tests dynamic code-generation via function-cloning. */ - -+#include "flush-cache.h" -+ -+#include "compiler.h" -+ - #include --#include - #include - #include - #include - #include -- -+#include - #include - -+#if UNW_TARGET_ARM -+#define MAX_FUNC_SIZE 96 /* FIXME: arch/compiler dependent */ -+#else - #define MAX_FUNC_SIZE 2048 /* max. size of cloned function */ -+#endif - - #define panic(args...) \ - { fprintf (stderr, args); exit (-1); } -@@ -59,6 +66,20 @@ struct fdesc - # define get_fdesc(fdesc,func) (fdesc = *(struct fdesc *) &(func)) - # define get_funcp(fdesc) ((template_t) &(fdesc)) - # define get_gp(fdesc) ((fdesc).gp) -+#elif __arm__ -+struct fdesc -+ { -+ long code; -+ long is_thumb; -+ }; -+/* Workaround GCC bug: https://bugs.launchpad.net/gcc-linaro/+bug/721531 */ -+# define get_fdesc(fdesc,func) ({long tmp = (long) &(func); \ -+ (fdesc).code = (long) &(func) & ~0x1; \ -+ (fdesc).is_thumb = tmp & 0x1;}) -+/*# define get_fdesc(fdesc,func) ({(fdesc).code = (long) &(func) & ~0x1; \ -+ (fdesc).is_thumb = (long) &(func) & 0x1;})*/ -+# define get_funcp(fdesc) ((template_t) ((fdesc).code | (fdesc).is_thumb)) -+# define get_gp(fdesc) (0) - #else - struct fdesc - { -@@ -69,8 +90,6 @@ struct fdesc - # define get_gp(fdesc) (0) - #endif - --extern void flush_cache (void *addr, size_t len); -- - void - template (int i, template_t self, - int (*printer)(const char *, ...), const char *fmt, const char **arr) -@@ -116,7 +135,7 @@ sighandler (int signal) - name[0] = '\0'; - off[0] = '\0'; - if (unw_get_proc_name (&cursor, name, sizeof (name), &offset) == 0 -- && off > 0) -+ && offset > 0) - snprintf (off, sizeof (off), "+0x%lx", (long) offset); - if (verbose) - printf ("ip = %lx <%s%s>\n", (long) ip, name, off); -@@ -140,13 +159,13 @@ sighandler (int signal) - } - - int --dev_null (const char *format, ...) -+dev_null (const char *format UNUSED, ...) - { - return 0; - } - - int --main (int argc, char *argv[]) -+main (int argc, char *argv[] UNUSED) - { - unw_dyn_region_info_t *region; - unw_dyn_info_t di; -@@ -167,6 +186,7 @@ main (int argc, char *argv[]) - memcpy (mem, (void *) fdesc.code, MAX_FUNC_SIZE); - mprotect ((void *) ((long) mem & ~(getpagesize () - 1)), - 2*getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC); -+ - flush_cache (mem, MAX_FUNC_SIZE); - - signal (SIGSEGV, sighandler); -diff --git a/frysk-imports/libunwind/tests/Gtest-exc.c b/frysk-imports/libunwind/tests/Gtest-exc.c -index 44b837d..1170bdd 100644 ---- a/frysk-imports/libunwind/tests/Gtest-exc.c -+++ b/frysk-imports/libunwind/tests/Gtest-exc.c -@@ -97,7 +97,7 @@ a (int n) - n, &stack, (unsigned long) get_bsp ()); - - if (n > 0) -- a (n - 1) + 1; -+ a (n - 1); - else - b (16); - -diff --git a/frysk-imports/libunwind/tests/Gtest-init.cxx b/frysk-imports/libunwind/tests/Gtest-init.cxx -index d83ddbf..afded01 100644 ---- a/frysk-imports/libunwind/tests/Gtest-init.cxx -+++ b/frysk-imports/libunwind/tests/Gtest-init.cxx -@@ -31,6 +31,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - - #include -+#include "compiler.h" - - int verbose, errors; - -@@ -45,7 +46,7 @@ class Test_Class { - static Test_Class t; - - static void --backtrace (void) -+do_backtrace (void) - { - char name[128], off[32]; - unw_word_t ip, offset; -@@ -62,7 +63,7 @@ backtrace (void) - name[0] = '\0'; - off[0] = '\0'; - if (unw_get_proc_name (&cursor, name, sizeof (name), &offset) == 0 -- && off > 0) -+ && offset > 0) - snprintf (off, sizeof (off), "+0x%lx", (long) offset); - if (verbose) - printf (" [%lx] <%s%s>\n", (long) ip, name, off); -@@ -78,14 +79,14 @@ backtrace (void) - static void - b (void) - { -- backtrace(); -+ do_backtrace(); - } - - static void - a (void) - { - if (verbose) -- printf ("backtrace() from atexit()-handler:\n"); -+ printf ("do_backtrace() from atexit()-handler:\n"); - b(); - if (errors) - abort (); /* cannot portably call exit() from an atexit() handler */ -@@ -94,12 +95,12 @@ a (void) - Test_Class::Test_Class (void) - { - if (verbose) -- printf ("backtrace() from constructor:\n"); -+ printf ("do_backtrace() from constructor:\n"); - b(); - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - verbose = argc > 1; - return atexit (a); -diff --git a/frysk-imports/libunwind/tests/Gtest-nomalloc.c b/frysk-imports/libunwind/tests/Gtest-nomalloc.c -new file mode 100644 -index 0000000..5b97fc7 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Gtest-nomalloc.c -@@ -0,0 +1,110 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2009 Google, Inc -+ Contributed by Arun Sharma -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define panic(args...) \ -+ { fprintf (stderr, args); exit (-1); } -+ -+int verbose; -+int num_errors; -+int in_unwind; -+ -+void * -+malloc(size_t s) -+{ -+ static void * (*func)(); -+ -+ if(!func) -+ func = (void *(*)()) dlsym(RTLD_NEXT, "malloc"); -+ -+ if (in_unwind) { -+ num_errors++; -+ return NULL; -+ } else { -+ return func(s); -+ } -+} -+ -+static void -+do_backtrace (void) -+{ -+ unw_word_t ip, sp; -+ unw_cursor_t cursor; -+ unw_context_t uc; -+ int ret; -+ -+ in_unwind = 1; -+ unw_getcontext (&uc); -+ if (unw_init_local (&cursor, &uc) < 0) -+ panic ("unw_init_local failed!\n"); -+ -+ do -+ { -+ unw_get_reg (&cursor, UNW_REG_IP, &ip); -+ unw_get_reg (&cursor, UNW_REG_SP, &sp); -+ -+ ret = unw_step (&cursor); -+ if (ret < 0) -+ { -+ ++num_errors; -+ } -+ } -+ while (ret > 0); -+ in_unwind = 0; -+} -+ -+void -+foo3 (void) -+{ -+ do_backtrace (); -+} -+ -+void -+foo2 (void) -+{ -+ foo3 (); -+} -+ -+void -+foo1 (void) -+{ -+ foo2 (); -+} -+ -+int -+main (void) -+{ -+ foo1(); -+ -+ if (num_errors > 0) -+ { -+ fprintf (stderr, "FAILURE: detected %d errors\n", num_errors); -+ exit (-1); -+ } -+ return 0; -+} -diff --git a/frysk-imports/libunwind/tests/Gtest-resume-sig-rt.c b/frysk-imports/libunwind/tests/Gtest-resume-sig-rt.c -new file mode 100644 -index 0000000..df515fc ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Gtest-resume-sig-rt.c -@@ -0,0 +1,31 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2003-2004 Hewlett-Packard Co -+ Contributed by David Mosberger-Tang -+ Copyright (C) 2012 Tommi Rantala -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+/* The purpose of this test is to invoke different code paths in libunwind (on -+ * some architectures), that are executed when the SA_SIGINFO sigaction() flag -+ * is used. -+ */ -+ -+#define TEST_WITH_SIGINFO 1 -+#include "Gtest-resume-sig.c" -diff --git a/frysk-imports/libunwind/tests/Gtest-resume-sig.c b/frysk-imports/libunwind/tests/Gtest-resume-sig.c -index a9a7688..147ecd0 100644 ---- a/frysk-imports/libunwind/tests/Gtest-resume-sig.c -+++ b/frysk-imports/libunwind/tests/Gtest-resume-sig.c -@@ -27,12 +27,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - # include "config.h" - #endif - -+#include "compiler.h" -+ - #include - #include - #include - #include --#include - #include -+#include -+#include - - #ifdef HAVE_IA64INTRIN_H - # include -@@ -60,16 +63,22 @@ get_bsp (void) - #endif - } - -+#ifdef TEST_WITH_SIGINFO -+void -+handler (int sig, -+ siginfo_t *si UNUSED, -+ void *ucontext UNUSED) -+#else - void - handler (int sig) -+#endif - { - unw_word_t ip; -- sigset_t mask; -+ sigset_t mask, oldmask; - unw_context_t uc; - unw_cursor_t c; - char foo; - int ret; -- int stepno; - - #if UNW_TARGET_IA64 - if (verbose) -@@ -86,49 +95,30 @@ handler (int sig) - - sigemptyset (&mask); - sigaddset (&mask, SIGUSR2); -- sigprocmask (SIG_BLOCK, &mask, NULL); -+ sigprocmask (SIG_BLOCK, &mask, &oldmask); - kill (getpid (), SIGUSR2); /* pend SIGUSR2 */ - - signal (SIGUSR1, SIG_IGN); -- signal (SIGUSR2, handler); - - if ((ret = unw_getcontext (&uc)) < 0) - panic ("unw_getcontext() failed: ret=%d\n", ret); -+#if UNW_TARGET_X86_64 -+ /* unw_getcontext() doesn't save signal mask to avoid a syscall */ -+ uc.uc_sigmask = oldmask; -+#endif - if ((ret = unw_init_local (&c, &uc)) < 0) - panic ("unw_init_local() failed: ret=%d\n", ret); - -- /* After fixing glibc's `__restore_rt' unwinding by CFI in: -- http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/unix/sysv/linux/x86_64/sigaction.c.diff?cvsroot=glibc&r1=text&tr1=1.10&r2=text&tr2=1.12&f=u -- This test started failing as the original code stepped back directly -- out of `main' into `__libc_start_main' and so despite `SIGUSR2' was -- never hit (at least on GNU/Linux) the test PASSed due to exit code 0. -- Patch fixing the unwind is in Fedora Core glibc-2.5.90-11 upwards. -- Needing to implement also non-ia64 `resume_restores_sigmask'. */ -- -- for (stepno = 0;; stepno++) -- { -- char buf[512]; -- -- if (stepno > 100) -- { -- panic ("Too many steps (%d)\n", stepno); -- break; -- } -- -- if ((ret = unw_get_proc_name (&c, buf, sizeof (buf), NULL)) < 0) -- panic ("unw_get_proc_name(%d) failed: ret=%d\n", stepno, ret); -- else -- { -- if (verbose) -- printf ("unw_get_proc_name(%d): %s\n", stepno, buf); -- if (!strcmp (buf, "kill") || !strcmp (buf, "main")) -- break; -- } -- -- /* Step one frame behind `main' to get into `__libc_start_main'. */ -- if ((ret = unw_step (&c)) < 0) -- panic ("unw_step(%d) failed: ret=%d\n", stepno, ret); -- } -+ if ((ret = unw_step (&c)) < 0) /* step to signal trampoline */ -+ panic ("unw_step(1) failed: ret=%d\n", ret); -+ -+ if ((ret = unw_step (&c)) < 0) /* step to kill() */ -+ panic ("unw_step(2) failed: ret=%d\n", ret); -+ -+#if defined(UNW_TARGET_TILEGX) -+ if ((ret = unw_step (&c)) < 0) /* step to signal trampoline */ -+ panic ("unw_step(2) failed: ret=%d\n", ret); -+#endif - - if ((ret = unw_get_reg (&c, UNW_REG_IP, &ip)) < 0) - panic ("unw_get_reg(IP) failed: ret=%d\n", ret); -@@ -142,10 +132,7 @@ handler (int sig) - ++got_usr2; - if (got_usr1) - { -- if (sigusr1_sp != &foo) -- panic ("Stack pointer changed from %p to %p between signals\n", -- sigusr1_sp, &foo); -- else if (verbose) -+ if (verbose) - printf ("OK: stack still at %p\n", &foo); - } - signal (SIGUSR2, SIG_IGN); -@@ -155,15 +142,29 @@ handler (int sig) - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { -+ struct sigaction sa; - float d = 1.0; - int n = 0; - - if (argc > 1) - verbose = 1; - -- signal (SIGUSR1, handler); -+ memset (&sa, 0, sizeof(sa)); -+#ifdef TEST_WITH_SIGINFO -+ sa.sa_sigaction = handler; -+ sa.sa_flags = SA_SIGINFO; -+#else -+ sa.sa_handler = handler; -+#endif -+ -+ if (sigaction (SIGUSR1, &sa, NULL) != 0 || -+ sigaction (SIGUSR2, &sa, NULL) != 0) -+ { -+ fprintf (stderr, "sigaction() failed: %s\n", strerror (errno)); -+ return -1; -+ } - - /* Use the FPU a bit; otherwise we get spurious errors should the - signal handler need to use the FPU for any reason. This seems to -@@ -183,19 +184,10 @@ main (int argc, char **argv) - if (!got_usr2) - panic ("failed to get SIGUSR2\n"); - --#ifdef __ia64__ -- if (!nerrors) -- panic ("Unexpected PASS on non-ia64 platform\n"); --#endif /* !__ia64__ */ - if (nerrors) - { --#ifdef __ia64__ - fprintf (stderr, "FAILURE: detected %d errors\n", nerrors); - exit (-1); --#else /* !__ia64__ */ -- fprintf (stderr, "Known bug: non-ia64 `resume_restores_sigmask' not implemented\n"); -- exit (77); --#endif /* !__ia64__ */ - } - - if (verbose) -diff --git a/frysk-imports/libunwind/tests/Gtest-trace.c b/frysk-imports/libunwind/tests/Gtest-trace.c -new file mode 100644 -index 0000000..194379a ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Gtest-trace.c -@@ -0,0 +1,277 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010, 2011 by FERMI NATIONAL ACCELERATOR LABORATORY -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifdef HAVE_CONFIG_H -+# include "config.h" -+#endif -+ -+#include "compiler.h" -+ -+#include -+#if HAVE_EXECINFO_H -+# include -+#else -+ extern int backtrace (void **, int); -+#endif -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define panic(args...) \ -+ { fprintf (stderr, args); exit (-1); } -+ -+#define SIG_STACK_SIZE 0x100000 -+ -+int verbose; -+int num_errors; -+ -+/* These variables are global because they -+ * cause the signal stack to overflow */ -+char buf[512], name[256]; -+void *addresses[3][128]; -+unw_cursor_t cursor; -+unw_context_t uc; -+ -+static void -+do_backtrace (void) -+{ -+ unw_word_t ip; -+ int ret = -UNW_ENOINFO; -+ int depth = 0; -+ int i, n, m; -+ -+ if (verbose) -+ printf ("\tnormal trace:\n"); -+ -+ unw_getcontext (&uc); -+ if (unw_init_local (&cursor, &uc) < 0) -+ panic ("unw_init_local failed!\n"); -+ -+ do -+ { -+ unw_get_reg (&cursor, UNW_REG_IP, &ip); -+ addresses[0][depth] = (void *) ip; -+ } -+ while ((ret = unw_step (&cursor)) > 0 && ++depth < 128); -+ -+ if (ret < 0) -+ { -+ unw_get_reg (&cursor, UNW_REG_IP, &ip); -+ printf ("FAILURE: unw_step() returned %d for ip=%lx\n", ret, (long) ip); -+ ++num_errors; -+ } -+ -+ if (verbose) -+ for (i = 0; i < depth; ++i) -+ printf ("\t #%-3d ip=%p\n", i, addresses[0][i]); -+ -+ if (verbose) -+ printf ("\n\tvia backtrace():\n"); -+ -+ n = backtrace (addresses[1], 128); -+ -+ if (verbose) -+ for (i = 0; i < n; ++i) -+ printf ("\t #%-3d ip=%p\n", i, addresses[1][i]); -+ -+ if (verbose) -+ printf ("\n\tvia unw_backtrace():\n"); -+ -+ m = unw_backtrace (addresses[2], 128); -+ -+ if (verbose) -+ for (i = 0; i < m; ++i) -+ printf ("\t #%-3d ip=%p\n", i, addresses[2][i]); -+ -+ if (m != depth+1) -+ { -+ printf ("FAILURE: unw_step() loop and unw_backtrace() depths differ: %d vs. %d\n", depth, m); -+ ++num_errors; -+ } -+ -+ if (n != depth+1) -+ { -+ printf ("FAILURE: unw_step() loop and backtrace() depths differ: %d vs. %d\n", depth, n); -+ ++num_errors; -+ } -+ -+ if (n == m) -+ for (i = 1; i < n; ++i) -+ /* Allow one in difference in comparison, trace returns adjusted addresses. */ -+ if (labs((unw_word_t) addresses[1][i] - (unw_word_t) addresses[2][i]) > 1) -+ { -+ printf ("FAILURE: backtrace() and unw_backtrace() addresses differ at %d: %p vs. %p\n", -+ i, addresses[1][i], addresses[2][i]); -+ ++num_errors; -+ } -+ -+ if (n == depth+1) -+ for (i = 1; i < depth; ++i) -+ /* Allow one in difference in comparison, trace returns adjusted addresses. */ -+ if (labs((unw_word_t) addresses[0][i] - (unw_word_t) addresses[1][i]) > 1) -+ { -+ printf ("FAILURE: unw_step() loop and backtrace() addresses differ at %d: %p vs. %p\n", -+ i, addresses[0][i], addresses[1][i]); -+ ++num_errors; -+ } -+} -+ -+void -+foo (long val UNUSED) -+{ -+ do_backtrace (); -+} -+ -+void -+bar (long v) -+{ -+ extern long f (long); -+ int arr[v]; -+ -+ /* This is a vain attempt to use up lots of registers to force -+ the frame-chain info to be saved on the memory stack on ia64. -+ It happens to work with gcc v3.3.4 and gcc v3.4.1 but perhaps -+ not with any other compiler. */ -+ foo (f (arr[0]) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) -+ + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + (f (v) + f (v)) -+ )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) -+ ))))))))))))))))))))))))))))))))))))))))))))))))))))))); -+} -+ -+void -+sighandler (int signal, void *siginfo UNUSED, void *context) -+{ -+ ucontext_t *uc UNUSED; -+ int sp; -+ -+ uc = context; -+ -+ if (verbose) -+ { -+ printf ("sighandler: got signal %d, sp=%p", signal, &sp); -+#if UNW_TARGET_IA64 -+# if defined(__linux__) -+ printf (" @ %lx", uc->uc_mcontext.sc_ip); -+# else -+ { -+ uint16_t reason; -+ uint64_t ip; -+ -+ __uc_get_reason (uc, &reason); -+ __uc_get_ip (uc, &ip); -+ printf (" @ %lx (reason=%d)", ip, reason); -+ } -+# endif -+#elif UNW_TARGET_X86 -+#if defined __linux__ -+ printf (" @ %lx", (unsigned long) uc->uc_mcontext.gregs[REG_EIP]); -+#elif defined __FreeBSD__ -+ printf (" @ %lx", (unsigned long) uc->uc_mcontext.mc_eip); -+#endif -+#elif UNW_TARGET_X86_64 -+#if defined __linux__ -+ printf (" @ %lx", (unsigned long) uc->uc_mcontext.gregs[REG_RIP]); -+#elif defined __FreeBSD__ -+ printf (" @ %lx", (unsigned long) uc->uc_mcontext.mc_rip); -+#endif -+#elif defined UNW_TARGET_ARM -+ printf (" @ %lx", (unsigned long) uc->uc_mcontext.arm_pc); -+#endif -+ printf ("\n"); -+ } -+ do_backtrace(); -+} -+ -+int -+main (int argc, char **argv UNUSED) -+{ -+ struct sigaction act; -+ stack_t stk; -+ -+ verbose = (argc > 1); -+ -+ if (verbose) -+ printf ("Normal backtrace:\n"); -+ -+ bar (1); -+ -+ memset (&act, 0, sizeof (act)); -+ act.sa_handler = (void (*)(int)) sighandler; -+ act.sa_flags = SA_SIGINFO; -+ if (sigaction (SIGTERM, &act, NULL) < 0) -+ panic ("sigaction: %s\n", strerror (errno)); -+ -+ if (verbose) -+ printf ("\nBacktrace across signal handler:\n"); -+ kill (getpid (), SIGTERM); -+ -+ if (verbose) -+ printf ("\nBacktrace across signal handler on alternate stack:\n"); -+ stk.ss_sp = malloc (SIG_STACK_SIZE); -+ if (!stk.ss_sp) -+ panic ("failed to allocate %u bytes\n", SIG_STACK_SIZE); -+ stk.ss_size = SIG_STACK_SIZE; -+ stk.ss_flags = 0; -+ if (sigaltstack (&stk, NULL) < 0) -+ panic ("sigaltstack: %s\n", strerror (errno)); -+ -+ memset (&act, 0, sizeof (act)); -+ act.sa_handler = (void (*)(int)) sighandler; -+ act.sa_flags = SA_ONSTACK | SA_SIGINFO; -+ if (sigaction (SIGTERM, &act, NULL) < 0) -+ panic ("sigaction: %s\n", strerror (errno)); -+ kill (getpid (), SIGTERM); -+ -+ if (num_errors > 0) -+ { -+ fprintf (stderr, "FAILURE: detected %d errors\n", num_errors); -+ exit (-1); -+ } -+ -+ if (verbose) -+ printf ("SUCCESS.\n"); -+ -+ signal (SIGTERM, SIG_DFL); -+ stk.ss_flags = SS_DISABLE; -+ sigaltstack (&stk, NULL); -+ free (stk.ss_sp); -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/tests/Lperf-trace.c b/frysk-imports/libunwind/tests/Lperf-trace.c -new file mode 100644 -index 0000000..1c3cf21 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Lperf-trace.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if !defined(UNW_REMOTE_ONLY) -+#include "Gperf-trace.c" -+#endif -diff --git a/frysk-imports/libunwind/tests/Lrs-race.c b/frysk-imports/libunwind/tests/Lrs-race.c -new file mode 100644 -index 0000000..6fe4972 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Lrs-race.c -@@ -0,0 +1,1514 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2003-2005 Hewlett-Packard Co -+ Contributed by Paul Pluzhnikov -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+/* Verify that register state caches work under all caching policies -+ in a multi-threaded environment with a large number IPs */ -+ -+#define UNW_LOCAL_ONLY -+#include -+#include "compiler.h" -+ -+#include -+#include -+#include -+ -+/* ITERS=1000, NTHREAD=10 caught some bugs in the past */ -+#ifndef ITERS -+#define ITERS 100 -+#endif -+ -+#ifndef NTHREAD -+#define NTHREAD 2 -+#endif -+ -+int verbose; -+ -+void -+foo_0 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_1 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_2 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_3 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_4 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_5 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_6 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_7 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_8 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_9 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_10 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_11 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_12 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_13 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_14 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_15 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_16 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_17 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_18 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_19 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_20 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_21 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_22 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_23 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_24 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_25 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_26 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_27 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_28 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_29 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_30 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_31 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_32 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_33 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_34 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_35 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_36 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_37 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_38 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_39 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_40 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_41 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_42 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_43 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_44 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_45 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_46 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_47 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_48 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_49 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_50 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_51 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_52 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_53 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_54 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_55 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_56 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_57 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_58 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_59 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_60 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_61 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_62 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_63 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_64 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_65 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_66 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_67 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_68 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_69 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_70 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_71 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_72 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_73 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_74 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_75 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_76 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_77 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_78 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_79 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_80 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_81 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_82 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_83 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_84 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_85 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_86 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_87 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_88 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_89 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_90 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_91 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_92 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_93 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_94 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_95 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_96 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_97 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_98 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_99 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_100 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_101 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_102 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_103 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_104 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_105 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_106 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_107 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_108 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_109 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_110 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_111 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_112 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_113 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_114 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_115 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_116 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_117 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_118 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_119 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_120 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_121 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_122 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_123 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_124 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_125 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_126 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_127 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void -+foo_128 (void) -+{ -+ void *buf[20]; -+ int n; -+ -+ if ((n = unw_backtrace (buf, 20)) < 3) -+ abort (); -+} -+ -+void * -+bar(void *p UNUSED) -+{ -+ int i; -+ for (i = 0; i < ITERS; ++i) { -+ foo_0 (); -+ foo_1 (); -+ foo_2 (); -+ foo_3 (); -+ foo_4 (); -+ foo_5 (); -+ foo_6 (); -+ foo_7 (); -+ foo_8 (); -+ foo_9 (); -+ foo_10 (); -+ foo_11 (); -+ foo_12 (); -+ foo_13 (); -+ foo_14 (); -+ foo_15 (); -+ foo_16 (); -+ foo_17 (); -+ foo_18 (); -+ foo_19 (); -+ foo_20 (); -+ foo_21 (); -+ foo_22 (); -+ foo_23 (); -+ foo_24 (); -+ foo_25 (); -+ foo_26 (); -+ foo_27 (); -+ foo_28 (); -+ foo_29 (); -+ foo_30 (); -+ foo_31 (); -+ foo_32 (); -+ foo_33 (); -+ foo_34 (); -+ foo_35 (); -+ foo_36 (); -+ foo_37 (); -+ foo_38 (); -+ foo_39 (); -+ foo_40 (); -+ foo_41 (); -+ foo_42 (); -+ foo_43 (); -+ foo_44 (); -+ foo_45 (); -+ foo_46 (); -+ foo_47 (); -+ foo_48 (); -+ foo_49 (); -+ foo_50 (); -+ foo_51 (); -+ foo_52 (); -+ foo_53 (); -+ foo_54 (); -+ foo_55 (); -+ foo_56 (); -+ foo_57 (); -+ foo_58 (); -+ foo_59 (); -+ foo_60 (); -+ foo_61 (); -+ foo_62 (); -+ foo_63 (); -+ foo_64 (); -+ foo_65 (); -+ foo_66 (); -+ foo_67 (); -+ foo_68 (); -+ foo_69 (); -+ foo_70 (); -+ foo_71 (); -+ foo_72 (); -+ foo_73 (); -+ foo_74 (); -+ foo_75 (); -+ foo_76 (); -+ foo_77 (); -+ foo_78 (); -+ foo_79 (); -+ foo_80 (); -+ foo_81 (); -+ foo_82 (); -+ foo_83 (); -+ foo_84 (); -+ foo_85 (); -+ foo_86 (); -+ foo_87 (); -+ foo_88 (); -+ foo_89 (); -+ foo_90 (); -+ foo_91 (); -+ foo_92 (); -+ foo_93 (); -+ foo_94 (); -+ foo_95 (); -+ foo_96 (); -+ foo_97 (); -+ foo_98 (); -+ foo_99 (); -+ foo_100 (); -+ foo_101 (); -+ foo_102 (); -+ foo_103 (); -+ foo_104 (); -+ foo_105 (); -+ foo_106 (); -+ foo_107 (); -+ foo_108 (); -+ foo_109 (); -+ foo_110 (); -+ foo_111 (); -+ foo_112 (); -+ foo_113 (); -+ foo_114 (); -+ foo_115 (); -+ foo_116 (); -+ foo_117 (); -+ foo_118 (); -+ foo_119 (); -+ foo_120 (); -+ foo_121 (); -+ foo_122 (); -+ foo_123 (); -+ foo_124 (); -+ foo_125 (); -+ foo_126 (); -+ foo_127 (); -+ foo_128 (); -+ } -+ return NULL; -+} -+ -+int doit (void) -+{ -+ pthread_t tid[NTHREAD]; -+ int i; -+ -+ for (i = 0; i < NTHREAD; ++i) -+ if (pthread_create (&tid[i], NULL, bar, NULL)) -+ return 1; -+ -+ for (i = 0; i < NTHREAD; ++i) -+ if (pthread_join (tid[i], NULL)) -+ return 1; -+ -+ return 0; -+} -+ -+int -+main (int argc, char **argv UNUSED) -+{ -+ if (argc > 1) -+ verbose = 1; -+ -+ if (verbose) -+ printf ("Caching: none\n"); -+ unw_set_caching_policy (unw_local_addr_space, UNW_CACHE_NONE); -+ doit (); -+ -+ if (verbose) -+ printf ("Caching: global\n"); -+ unw_set_caching_policy (unw_local_addr_space, UNW_CACHE_GLOBAL); -+ doit (); -+ -+ if (verbose) -+ printf ("Caching: per-thread\n"); -+ unw_set_caching_policy (unw_local_addr_space, UNW_CACHE_PER_THREAD); -+ doit (); -+ -+ if (verbose) -+ printf ("SUCCESS\n"); -+ return 0; -+} -diff --git a/frysk-imports/libunwind/tests/Ltest-cxx-exceptions.cxx b/frysk-imports/libunwind/tests/Ltest-cxx-exceptions.cxx -new file mode 100644 -index 0000000..24bcd13 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Ltest-cxx-exceptions.cxx -@@ -0,0 +1,80 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2010 stefan.demharter@gmx.net -+ Copyright (C) 2010 arun.sharma@google.com -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#include -+#include -+#include -+#include -+#include "compiler.h" -+ -+#define panic(args...) \ -+ { fprintf (stderr, args); exit (-1); } -+ -+static int verbose; -+ -+struct Test -+{ -+ public: // --- ctor/dtor --- -+ Test() { ++counter_; } -+ ~Test() { -- counter_; } -+ Test(const Test&) { ++counter_; } -+ -+ public: // --- static members --- -+ static int counter_; -+}; -+ -+int Test::counter_ = 0; -+ -+// Called by foo -+extern "C" void bar() -+{ -+ Test t; -+ try { -+ Test t; -+ throw 5; -+ } catch (...) { -+ Test t; -+ if (verbose) -+ printf("Throwing an int\n"); -+ throw 6; -+ } -+} -+ -+int main(int argc, char **argv UNUSED) -+{ -+ if (argc > 1) -+ verbose = 1; -+ try { -+ Test t; -+ bar(); -+ } catch (int) { -+ // Dtor of all Test-object has to be called. -+ if (Test::counter_ != 0) -+ panic("Counter non-zero\n"); -+ return Test::counter_; -+ } catch (...) { -+ // An int was thrown - we should not get here. -+ panic("Int was thrown why are we here?\n"); -+ } -+ exit(0); -+} -diff --git a/frysk-imports/libunwind/tests/Ltest-nocalloc.c b/frysk-imports/libunwind/tests/Ltest-nocalloc.c -new file mode 100644 -index 0000000..f5c31b2 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Ltest-nocalloc.c -@@ -0,0 +1,137 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2011 Google, Inc -+ Contributed by Paul Pluzhnikov -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#define UNW_LOCAL_ONLY -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#define panic(args...) \ -+ { fprintf (stderr, args); exit (-1); } -+ -+int num_mallocs; -+int num_callocs; -+int in_unwind; -+ -+void * -+calloc(size_t n, size_t s) -+{ -+ static void * (*func)(size_t, size_t); -+ -+#ifdef __GLIBC__ -+ /* In glibc, dlsym() calls calloc. Calling dlsym(RTLD_NEXT, "calloc") here -+ causes infinite recursion. Instead, we simply use it by its other -+ name. */ -+ extern void *__libc_calloc(size_t, size_t); -+ if (!func) -+ func = &__libc_calloc; -+#else -+ if(!func) -+ func = dlsym(RTLD_NEXT, "calloc"); -+#endif -+ -+ if (in_unwind) { -+ num_callocs++; -+ return NULL; -+ } else { -+ return func(n, s); -+ } -+} -+ -+void * -+malloc(size_t s) -+{ -+ static void * (*func)(size_t); -+ -+ if(!func) -+ func = dlsym(RTLD_NEXT, "malloc"); -+ -+ if (in_unwind) { -+ num_mallocs++; -+ return NULL; -+ } else { -+ return func(s); -+ } -+} -+ -+static void -+do_backtrace (void) -+{ -+ const int num_levels = 100; -+ void *pc[num_levels]; -+ -+ in_unwind = 1; -+ unw_backtrace(pc, num_levels); -+ in_unwind = 0; -+} -+ -+void -+foo3 (void) -+{ -+ do_backtrace (); -+} -+ -+void -+foo2 (void) -+{ -+ foo3 (); -+} -+ -+void -+foo1 (void) -+{ -+ foo2 (); -+} -+ -+int -+main (void) -+{ -+ int i, num_errors; -+ -+ /* Create (and leak) 100 TSDs, then call backtrace() -+ and check that it doesn't call malloc()/calloc(). */ -+ for (i = 0; i < 100; ++i) { -+ pthread_key_t key; -+ if (pthread_key_create (&key, NULL)) -+ panic ("FAILURE: unable to create key %d\n", i); -+ } -+ /* Call backtrace right after thread creation, -+ * where we are sure that we're not inside malloc */ -+ do_backtrace(); -+ num_mallocs = num_callocs = 0; -+ foo1 (); -+ num_errors = num_mallocs + num_callocs; -+ if (num_errors > 0) -+ { -+ fprintf (stderr, -+ "FAILURE: detected %d error%s (malloc: %d, calloc: %d)\n", -+ num_errors, num_errors > 1 ? "s" : "", -+ num_mallocs, num_callocs); -+ exit (-1); -+ } -+ return 0; -+} -diff --git a/frysk-imports/libunwind/tests/Ltest-nomalloc.c b/frysk-imports/libunwind/tests/Ltest-nomalloc.c -new file mode 100644 -index 0000000..74d6331 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Ltest-nomalloc.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if !defined(UNW_REMOTE_ONLY) -+#include "Gtest-nomalloc.c" -+#endif -diff --git a/frysk-imports/libunwind/tests/Ltest-resume-sig-rt.c b/frysk-imports/libunwind/tests/Ltest-resume-sig-rt.c -new file mode 100644 -index 0000000..01fd6dc ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Ltest-resume-sig-rt.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if !defined(UNW_REMOTE_ONLY) -+#include "Gtest-resume-sig-rt.c" -+#endif -diff --git a/frysk-imports/libunwind/tests/Ltest-trace.c b/frysk-imports/libunwind/tests/Ltest-trace.c -new file mode 100644 -index 0000000..fb0e9c1 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Ltest-trace.c -@@ -0,0 +1,5 @@ -+#define UNW_LOCAL_ONLY -+#include -+#if !defined(UNW_REMOTE_ONLY) -+#include "Gtest-trace.c" -+#endif -diff --git a/frysk-imports/libunwind/tests/Ltest-varargs.c b/frysk-imports/libunwind/tests/Ltest-varargs.c -new file mode 100644 -index 0000000..17ac600 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/Ltest-varargs.c -@@ -0,0 +1,84 @@ -+#define UNW_LOCAL_ONLY -+#include -+#include "compiler.h" -+ -+#include -+#include -+#include -+#include -+ -+int ok; -+int verbose; -+ -+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 3) -+void a (int, ...) __attribute__((optimize(0))); -+void b (void) __attribute__((optimize(0))); -+void c (void) __attribute__((optimize(0))); -+#endif -+ -+void NOINLINE -+b (void) -+{ -+ void *v[20]; -+ int i, n; -+ -+ n = unw_backtrace(v, 20); -+ -+ /* Check that the number of addresses given by unw_backtrace() looks -+ * reasonable. If the compiler inlined everything, then this check will also -+ * break. */ -+ if (n >= 7) -+ ok = 1; -+ -+ if (verbose) -+ for (i = 0; i < n; ++i) -+ printf ("[%d] %p\n", i, v[i]); -+} -+ -+void NOINLINE -+c (void) -+{ -+ b (); -+} -+ -+void NOINLINE -+a (int d, ...) -+{ -+ switch (d) -+ { -+ case 5: -+ a (4, 2,4); -+ break; -+ case 4: -+ a (3, 1,3,5); -+ break; -+ case 3: -+ a (2, 11, 13, 17, 23); -+ break; -+ case 2: -+ a (1); -+ break; -+ case 1: -+ c (); -+ } -+} -+ -+int -+main (int argc, char **argv UNUSED) -+{ -+ if (argc > 1) -+ verbose = 1; -+ -+ a (5, 3, 4, 5, 6); -+ -+ if (!ok) -+ { -+ fprintf (stderr, "FAILURE: expected deeper backtrace.\n"); -+ return 1; -+ } -+ -+ if (verbose) -+ printf ("SUCCESS.\n"); -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/tests/Makefile.am b/frysk-imports/libunwind/tests/Makefile.am -index 51cfe33..fe2dba8 100644 ---- a/frysk-imports/libunwind/tests/Makefile.am -+++ b/frysk-imports/libunwind/tests/Makefile.am -@@ -1,8 +1,11 @@ - AM_CPPFLAGS = -I$(top_srcdir)/include - - EXTRA_DIST = run-ia64-test-dyn1 run-ptrace-mapper run-ptrace-misc \ -- run-check-namespace check-namespace.sh.in run-ptrace-signull \ -- run-ptrace-stepper -+ run-check-namespace run-coredump-unwind \ -+ run-coredump-unwind-mdi check-namespace.sh.in \ -+ Gtest-nomalloc.c -+ -+MAINTAINERCLEANFILES = Makefile.in - - noinst_PROGRAMS_common = - check_PROGRAMS_common = test-proc-info test-static-link \ -@@ -17,7 +20,7 @@ if REMOTE_ONLY - perf: - - else -- LIBUNWIND_local = ../src/libunwind.la -+ LIBUNWIND_local = $(top_builddir)/src/libunwind.la - if ARCH_IA64 - noinst_PROGRAMS_arch = ia64-test-dyn1 - check_SCRIPTS_arch = run-ia64-test-dyn1 -@@ -26,30 +29,59 @@ if ARCH_IA64 - Gia64-test-rbs Lia64-test-rbs \ - Gia64-test-readonly Lia64-test-readonly \ - ia64-test-setjmp ia64-test-sig --else -+else #!ARCH_IA64 - if ARCH_PPC64 --if USE_ALTIVEC -- noinst_PROGRAMS_arch_altivec = ppc64-test-altivec ppc64-test-wchar -+if USE_ALTIVEC -+ noinst_PROGRAMS_arch = ppc64-test-altivec - endif #USE_ALTIVEC -- noinst_PROGRAMS_arch = $(noinst_PROGRAMS_arch_altivec) ppc64-test-wchar - endif #ARCH_PPC64 --endif #ARCH_IA64 -- check_SCRIPTS_cdep = run-ptrace-mapper run-ptrace-misc -+endif #!ARCH_IA64 -+ check_SCRIPTS_cdep = - check_PROGRAMS_cdep = Gtest-bt Ltest-bt Gtest-exc Ltest-exc \ - Gtest-init Ltest-init \ - Gtest-concurrent Ltest-concurrent \ - Gtest-resume-sig Ltest-resume-sig \ -+ Gtest-resume-sig-rt Ltest-resume-sig-rt \ - Gtest-dyn1 Ltest-dyn1 \ -+ Gtest-trace Ltest-trace \ - test-async-sig test-flush-cache test-init-remote \ -- test-mem test-setjmp test-ptrace -- noinst_PROGRAMS_cdep = forker mapper test-ptrace-misc test-varargs \ -- Gperf-simple Lperf-simple test-ptrace-stepper test-ptrace-signull -+ test-mem Ltest-varargs Ltest-nomalloc \ -+ Ltest-nocalloc Lrs-race -+ noinst_PROGRAMS_cdep = forker Gperf-simple Lperf-simple \ -+ Gperf-trace Lperf-trace -+ -+if BUILD_PTRACE -+ check_SCRIPTS_cdep += run-ptrace-mapper run-ptrace-misc -+ check_PROGRAMS_cdep += test-ptrace -+ noinst_PROGRAMS_cdep += mapper test-ptrace-misc -+endif -+ -+if BUILD_SETJMP -+ check_PROGRAMS_cdep += test-setjmp -+endif -+ -+if SUPPORT_CXX_EXCEPTIONS -+ check_PROGRAMS_cdep += Ltest-cxx-exceptions -+endif -+ -+if OS_LINUX -+if BUILD_COREDUMP -+ check_SCRIPTS_cdep += run-coredump-unwind -+ noinst_PROGRAMS_cdep += crasher test-coredump-unwind - --perf: perf-startup Gperf-simple Lperf-simple -+if HAVE_LZMA -+ check_SCRIPTS_cdep += run-coredump-unwind-mdi -+endif # HAVE_LZMA -+endif # BUILD_COREDUMP -+endif # OS_LINUX -+ -+perf: perf-startup Gperf-simple Lperf-simple Lperf-trace - @echo "########## Basic performance of generic libunwind:" - @./Gperf-simple - @echo "########## Basic performance of local-only libunwind:" - @./Lperf-simple -+ @echo "########## Performance of fast unwind:" -+ @./Lperf-trace - @echo "########## Startup overhead:" - @$(srcdir)/perf-startup @arch@ - -@@ -62,9 +94,24 @@ check_SCRIPTS = $(check_SCRIPTS_common) $(check_SCRIPTS_cdep) \ - - - TESTS = $(check_PROGRAMS) $(check_SCRIPTS) --# Until http://sourceware.org/ml/libc-alpha/2006-11/msg00082.html --# gets finally resolved, fix was present in RawHide glibc-2.5.90-11. --XFAIL_TESTS = run-ptrace-signull -+XFAIL_TESTS = -+ -+if !ARCH_IA64 -+XFAIL_TESTS += Gtest-dyn1 Ltest-dyn1 -+endif -+ -+# Use if arch defines but does not support PTRACE_SINGLESTEP -+# ptrace request used in the tests. -+XFAIL_TESTS_PTRACE_SINGLESTEP = run-ptrace-mapper run-ptrace-misc -+ -+if ARCH_MIPS -+XFAIL_TESTS += $(XFAIL_TESTS_PTRACE_SINGLESTEP) -+endif -+ -+if ARCH_ARM -+# ARM Linux kernel >=2.6.39 removed PTRACE_SINGLESTEP emulation -+XFAIL_TESTS += $(XFAIL_TESTS_PTRACE_SINGLESTEP) -+endif - - noinst_PROGRAMS = $(noinst_PROGRAMS_common) $(noinst_PROGRAMS_cdep) \ - $(noinst_PROGRAMS_arch) -@@ -79,29 +126,93 @@ Lia64_test_rbs_SOURCES = Lia64-test-rbs.c ia64-test-rbs-asm.S ia64-test-rbs.h - Gia64_test_rbs_SOURCES = Gia64-test-rbs.c ia64-test-rbs-asm.S ia64-test-rbs.h - Lia64_test_nat_SOURCES = Lia64-test-nat.c ia64-test-nat-asm.S - Gia64_test_nat_SOURCES = Gia64-test-nat.c ia64-test-nat-asm.S --ia64_test_dyn1_SOURCES = ia64-test-dyn1.c ia64-dyn-asm.S flush-cache.S -+ia64_test_dyn1_SOURCES = ia64-test-dyn1.c ia64-dyn-asm.S flush-cache.S \ -+ flush-cache.h - ppc64_test_altivec_SOURCES = ppc64-test-altivec.c ppc64-test-altivec-utils.c --ppc64_test_wchar_SOURCES = ppc64-test-wchar.c - Gtest_init_SOURCES = Gtest-init.cxx - Ltest_init_SOURCES = Ltest-init.cxx --Gtest_dyn1_SOURCES = Gtest-dyn1.c flush-cache.S --Ltest_dyn1_SOURCES = Ltest-dyn1.c flush-cache.S -+Ltest_cxx_exceptions_SOURCES = Ltest-cxx-exceptions.cxx -+ -+Gtest_dyn1_SOURCES = Gtest-dyn1.c flush-cache.S flush-cache.h -+Ltest_dyn1_SOURCES = Ltest-dyn1.c flush-cache.S flush-cache.h - test_static_link_SOURCES = test-static-link-loc.c test-static-link-gen.c - test_static_link_LDFLAGS = -static - forker_LDFLAGS = -static - Gtest_bt_SOURCES = Gtest-bt.c ident.c - Ltest_bt_SOURCES = Ltest-bt.c ident.c - test_ptrace_misc_SOURCES = test-ptrace-misc.c ident.c --test_ptrace_stepper_SOURCES = test-ptrace-stepper.c --test_ptrace_signull_SOURCES = test-ptrace-signull.c -- --LIBUNWIND = ../src/libunwind-$(arch).la $(LIBUNWIND_local) --LDADD = $(LIBUNWIND) -- --test_setjmp_LDADD = ../src/libunwind-setjmp.la $(LIBUNWIND_local) --ia64_test_setjmp_LDADD = ../src/libunwind-setjmp.la $(LIBUNWIND_local) --test_ptrace_LDADD = ../src/libunwind-ptrace.a $(LIBUNWIND) --Ltest_concurrent_LDADD = $(LIBUNWIND) -lpthread --Gtest_concurrent_LDADD = $(LIBUNWIND) -lpthread --test_async_sig_LDADD = $(LIBUNWIND) -lpthread --test_ptrace_stepper_LDADD = $(LIBUNWIND) -lpthread -+Ltest_nomalloc_SOURCES = Ltest-nomalloc.c -+Ltest_nocalloc_SOURCES = Ltest-nocalloc.c -+Gtest_trace_SOURCES = Gtest-trace.c ident.c -+Ltest_trace_SOURCES = Ltest-trace.c ident.c -+ -+LIBUNWIND = $(top_builddir)/src/libunwind-$(arch).la -+LIBUNWIND_ptrace = $(top_builddir)/src/libunwind-ptrace.la -+LIBUNWIND_coredump = $(top_builddir)/src/libunwind-coredump.la -+ -+if USE_ELF32 -+LIBUNWIND_ELF = $(top_builddir)/src/libunwind-elf32.la -+endif -+if USE_ELF64 -+LIBUNWIND_ELF = $(top_builddir)/src/libunwind-elf64.la -+endif -+if USE_ELFXX -+LIBUNWIND_ELF = $(top_builddir)/src/libunwind-elfxx.la -+endif -+ -+LIBUNWIND_setjmp = $(top_builddir)/src/libunwind-setjmp.la \ -+ $(LIBUNWIND_ELF) $(LIBUNWIND) -+ -+test_async_sig_LDADD = $(LIBUNWIND_local) -lpthread -+test_flush_cache_LDADD = $(LIBUNWIND_local) -+test_init_remote_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+test_mem_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+test_ptrace_LDADD = $(LIBUNWIND_ptrace) $(LIBUNWIND) -+test_proc_info_LDADD = $(LIBUNWIND) -+test_static_link_LDADD = $(LIBUNWIND) -+test_strerror_LDADD = $(LIBUNWIND) -+Lrs_race_LDADD = $(LIBUNWIND_local) -lpthread -+Ltest_varargs_LDADD = $(LIBUNWIND_local) -+ -+Gtest_bt_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gtest_concurrent_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -lpthread -+Gtest_dyn1_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gtest_exc_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gtest_init_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gtest_resume_sig_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gtest_resume_sig_rt_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gperf_simple_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gtest_trace_LDADD=$(LIBUNWIND) $(LIBUNWIND_local) -+Gperf_trace_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+ -+Ltest_bt_LDADD = $(LIBUNWIND_local) -+Ltest_concurrent_LDADD = $(LIBUNWIND_local) -lpthread -+Ltest_dyn1_LDADD = $(LIBUNWIND_local) -+Ltest_exc_LDADD = $(LIBUNWIND_local) -+Ltest_init_LDADD = $(LIBUNWIND_local) -+Ltest_nomalloc_LDADD = $(LIBUNWIND_local) @DLLIB@ -+Ltest_nocalloc_LDADD = $(LIBUNWIND_local) @DLLIB@ -lpthread -+Ltest_resume_sig_LDADD = $(LIBUNWIND_local) -+Ltest_resume_sig_rt_LDADD = $(LIBUNWIND_local) -+Lperf_simple_LDADD = $(LIBUNWIND_local) -+Ltest_trace_LDADD = $(LIBUNWIND_local) -+Lperf_trace_LDADD = $(LIBUNWIND_local) -+ -+test_setjmp_LDADD = $(LIBUNWIND_setjmp) -+ia64_test_setjmp_LDADD = $(LIBUNWIND_setjmp) -+ -+if BUILD_COREDUMP -+test_coredump_unwind_LDADD = $(LIBUNWIND_coredump) $(LIBUNWIND) -+endif -+ -+Gia64_test_nat_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gia64_test_stack_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gia64_test_rbs_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Gia64_test_readonly_LDADD = $(LIBUNWIND) $(LIBUNWIND_local) -+Lia64_test_nat_LDADD = $(LIBUNWIND_local) -+Lia64_test_stack_LDADD = $(LIBUNWIND_local) -+Lia64_test_rbs_LDADD = $(LIBUNWIND_local) -+Lia64_test_readonly_LDADD = $(LIBUNWIND_local) -+ia64_test_dyn1_LDADD = $(LIBUNWIND) -+ia64_test_sig_LDADD = $(LIBUNWIND) -+ppc64_test_altivec_LDADD = $(LIBUNWIND) -diff --git a/frysk-imports/libunwind/tests/check-namespace.sh.in b/frysk-imports/libunwind/tests/check-namespace.sh.in -index dedc462..1ef74ab 100644 ---- a/frysk-imports/libunwind/tests/check-namespace.sh.in -+++ b/frysk-imports/libunwind/tests/check-namespace.sh.in -@@ -13,7 +13,7 @@ num_errors=0 - LIBUNWIND=../src/.libs/libunwind.so - LIBUNWIND_GENERIC=../src/.libs/libunwind-${plat}.so - --function fetch_symtab { -+fetch_symtab () { - filename=$1 - - if [ ! -r $filename ]; then -@@ -38,12 +38,12 @@ function fetch_symtab { - IFS="$saved_IFS" - } - --function ignore { -+ignore () { - sym=$1 - symtab=`echo "$symtab" | grep -v " ${sym}\$"` - } - --function match { -+match () { - sym=$1 - if `echo "$symtab" | grep -q " ${sym}\$"`; then - symtab=`echo "$symtab" | grep -v " ${sym}\$"` -@@ -57,7 +57,7 @@ function match { - # Filter out miscellaneous symbols that get defined by the - # linker for each shared object. - # --function filter_misc { -+filter_misc () { - ignore _DYNAMIC - ignore _GLOBAL_OFFSET_TABLE_ - ignore __bss_start -@@ -69,9 +69,25 @@ function filter_misc { - ignore _Uelf64_valid_object - ignore _U.*debug_level - ignore ICRT.INTERNAL # ICC 8.x defines this -+ -+ # Ignore symbols generated by the ARM Linux default linker script. -+ # For details see the binutils sources (src/ld/emulparams/armelf_linux.sh). -+ if [ ${plat} = "arm" ]; then -+ ignore __bss_start__ -+ ignore __bss_end__ -+ ignore __end__ -+ ignore _bss_end__ -+ fi -+ -+ if [ ${plat} = "mips" ]; then -+ ignore _fbss -+ ignore _fdata -+ ignore _ftext -+ ignore _gp -+ fi - } - --function check_local_unw_abi { -+check_local_unw_abi () { - match _UL${plat}_create_addr_space - match _UL${plat}_destroy_addr_space - match _UL${plat}_get_fpreg -@@ -83,6 +99,7 @@ function check_local_unw_abi { - match _UL${plat}_init_local - match _UL${plat}_init_remote - match _UL${plat}_is_signal_frame -+ match _UL${plat}_handle_signal_frame - match _UL${plat}_local_addr_space - match _UL${plat}_resume - match _UL${plat}_set_caching_policy -@@ -92,6 +109,7 @@ function check_local_unw_abi { - - match _U${plat}_flush_cache - match _U${plat}_get_accessors -+ match _U${plat}_getcontext - match _U${plat}_regname - match _U${plat}_strerror - -@@ -99,44 +117,70 @@ function check_local_unw_abi { - match _U_dyn_info_list_addr - match _U_dyn_register - -+ match unw_backtrace - match backtrace - - case ${plat} in -+ arm) -+ match _U${plat}_get_elf_image -+ match _U${plat}_is_fpreg -+ match _UL${plat}_search_unwind_table -+ match _UL${plat}_dwarf_search_unwind_table -+ match _UL${plat}_dwarf_find_unwind_table -+ ;; - hppa) - match _UL${plat}_dwarf_search_unwind_table -+ match _UL${plat}_dwarf_find_unwind_table - match _U${plat}_get_elf_image - match _U${plat}_setcontext -- match _U${plat}_getcontext - ;; - ia64) - match _UL${plat}_search_unwind_table - match _U${plat}_get_elf_image -- case ${os} in -- hpux*) -- ;; -- *) -- match _U${plat}_getcontext -- ;; -- esac - ;; - x86) - match _U${plat}_get_elf_image - match _U${plat}_is_fpreg - match _UL${plat}_dwarf_search_unwind_table -+ match _UL${plat}_dwarf_find_unwind_table - ;; - x86_64) - match _U${plat}_get_elf_image - match _U${plat}_is_fpreg - match _UL${plat}_dwarf_search_unwind_table -+ match _UL${plat}_dwarf_find_unwind_table -+ match _U${plat}_setcontext -+ ;; -+ ppc*) -+ match _U${plat}_get_func_addr -+ match _U${plat}_get_elf_image -+ match _U${plat}_is_fpreg -+ match _UL${plat}_dwarf_search_unwind_table -+ match _UL${plat}_dwarf_find_unwind_table - ;; -+ tilegx) -+ match _U${plat}_is_fpreg -+ match _UL${plat}_dwarf_search_unwind_table -+ match _UL${plat}_dwarf_find_unwind_table -+ match _UL${plat}_local_addr_space_init -+ match _U${plat}_get_elf_image -+ match ${plat}_lock -+ ;; -+ - *) - match _U${plat}_is_fpreg - match _UL${plat}_dwarf_search_unwind_table -+ match _UL${plat}_dwarf_find_unwind_table - ;; - esac -+ -+ if [ x@enable_debug_frame@ = xyes ]; then -+ match _UL${plat}_dwarf_find_debug_frame -+ fi -+ - } - --function check_generic_unw_abi { -+check_generic_unw_abi () { - match _U${plat}_create_addr_space - match _U${plat}_destroy_addr_space - match _U${plat}_flush_cache -@@ -150,6 +194,7 @@ function check_generic_unw_abi { - match _U${plat}_init_local - match _U${plat}_init_remote - match _U${plat}_is_signal_frame -+ match _U${plat}_handle_signal_frame - match _U${plat}_local_addr_space - match _U${plat}_regname - match _U${plat}_resume -@@ -160,8 +205,16 @@ function check_generic_unw_abi { - match _U${plat}_strerror - - case ${plat} in -+ arm) -+ match _U${plat}_is_fpreg -+ match _U${plat}_get_elf_image -+ match _U${plat}_search_unwind_table -+ match _U${plat}_dwarf_search_unwind_table -+ match _U${plat}_dwarf_find_unwind_table -+ ;; - hppa) - match _U${plat}_dwarf_search_unwind_table -+ match _U${plat}_dwarf_find_unwind_table - match _U${plat}_get_elf_image - ;; - ia64) -@@ -180,20 +233,42 @@ function check_generic_unw_abi { - match _U${plat}_get_elf_image - match _U${plat}_is_fpreg - match _U${plat}_dwarf_search_unwind_table -+ match _U${plat}_dwarf_find_unwind_table - ;; - x86_64) - match _U${plat}_get_elf_image - match _U${plat}_is_fpreg - match _U${plat}_dwarf_search_unwind_table -+ match _U${plat}_dwarf_find_unwind_table - ;; -+ ppc*) -+ match _U${plat}_get_elf_image -+ match _U${plat}_get_func_addr -+ match _U${plat}_is_fpreg -+ match _U${plat}_dwarf_search_unwind_table -+ match _U${plat}_dwarf_find_unwind_table -+ ;; -+ tilegx) -+ match _U${plat}_dwarf_search_unwind_table -+ match _U${plat}_dwarf_find_unwind_table -+ match _U${plat}_get_elf_image -+ match _U${plat}_is_fpreg -+ match _U${plat}_local_addr_space_init -+ match ${plat}_lock -+ ;; - *) - match _U${plat}_is_fpreg - match _U${plat}_dwarf_search_unwind_table -+ match _U${plat}_dwarf_find_unwind_table - ;; - esac -+ -+ if [ x@enable_debug_frame@ = xyes ]; then -+ match _U${plat}_dwarf_find_debug_frame -+ fi - } - --function check_cxx_abi { -+check_cxx_abi () { - match _Unwind_Backtrace - match _Unwind_DeleteException - match _Unwind_FindEnclosingFunction -@@ -203,6 +278,7 @@ function check_cxx_abi { - match _Unwind_GetDataRelBase - match _Unwind_GetGR - match _Unwind_GetIP -+ match _Unwind_GetIPInfo - match _Unwind_GetLanguageSpecificData - match _Unwind_GetRegionStart - match _Unwind_GetTextRelBase -@@ -220,6 +296,7 @@ function check_cxx_abi { - match __libunwind_Unwind_GetDataRelBase - match __libunwind_Unwind_GetGR - match __libunwind_Unwind_GetIP -+ match __libunwind_Unwind_GetIPInfo - match __libunwind_Unwind_GetLanguageSpecificData - match __libunwind_Unwind_GetRegionStart - match __libunwind_Unwind_GetTextRelBase -@@ -237,9 +314,9 @@ function check_cxx_abi { - esac - } - --function check_empty { -+check_empty () { - if [ -n "$symtab" ]; then -- echo -e " ERROR: Extraneous symbols:\n$symtab" -+ printf " ERROR: Extraneous symbols:\n$symtab\n" - num_errors=`expr $num_errors + 1` - fi - } -@@ -248,7 +325,9 @@ if [ $plat = $build_plat ]; then - fetch_symtab $LIBUNWIND - filter_misc - check_local_unw_abi -- check_cxx_abi -+ if [ x@enable_cxx_exceptions@ = xyes ]; then -+ check_cxx_abi -+ fi - check_empty - fi - -@@ -259,7 +338,7 @@ check_empty - - if [ $num_errors -gt 0 ]; then - echo "FAILURE: Detected $num_errors errors" -- exit -1 -+ exit 1 - fi - - if $verbose; then -diff --git a/frysk-imports/libunwind/tests/crasher.c b/frysk-imports/libunwind/tests/crasher.c -new file mode 100644 -index 0000000..24c7805 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/crasher.c -@@ -0,0 +1,124 @@ -+/* This program should crash and produce coredump */ -+ -+#include "compiler.h" -+ -+#include -+#include -+#include -+#include -+#ifdef __FreeBSD__ -+#include -+#include -+#include -+#endif -+ -+#if defined(__linux__) -+void write_maps(char *fname) -+{ -+ char buf[512], path[128]; -+ char exec; -+ uintmax_t addr; -+ FILE *maps = fopen("/proc/self/maps", "r"); -+ FILE *out = fopen(fname, "w"); -+ -+ if (!maps || !out) -+ exit(EXIT_FAILURE); -+ -+ while (fgets(buf, sizeof(buf), maps)) -+ { -+ if (sscanf(buf, "%jx-%*x %*c%*c%c%*c %*x %*s %*d /%126[^\n]", &addr, &exec, path+1) != 3) -+ continue; -+ -+ if (exec != 'x') -+ continue; -+ -+ path[0] = '/'; -+ fprintf(out, "0x%jx:%s ", addr, path); -+ } -+ fprintf(out, "\n"); -+ -+ fclose(out); -+ fclose(maps); -+} -+#elif defined(__FreeBSD__) -+void -+write_maps(char *fname) -+{ -+ FILE *out; -+ char *buf, *bp, *eb; -+ struct kinfo_vmentry *kv; -+ int mib[4], error; -+ size_t len; -+ -+ out = fopen(fname, "w"); -+ if (out == NULL) -+ exit(EXIT_FAILURE); -+ -+ len = 0; -+ mib[0] = CTL_KERN; -+ mib[1] = KERN_PROC; -+ mib[2] = KERN_PROC_VMMAP; -+ mib[3] = getpid(); -+ error = sysctl(mib, 4, NULL, &len, NULL, 0); -+ if (error == -1) -+ exit(EXIT_FAILURE); -+ len = len * 4 / 3; -+ buf = malloc(len); -+ if (buf == NULL) -+ exit(EXIT_FAILURE); -+ error = sysctl(mib, 4, buf, &len, NULL, 0); -+ if (error == -1) -+ exit(EXIT_FAILURE); -+ -+ for (bp = buf, eb = buf + len; bp < eb; bp += kv->kve_structsize) { -+ kv = (struct kinfo_vmentry *)(uintptr_t)bp; -+ if (kv->kve_type == KVME_TYPE_VNODE && -+ (kv->kve_protection & KVME_PROT_EXEC) != 0) { -+ fprintf(out, "0x%jx:%s ", kv->kve_start, kv->kve_path); -+ } -+ } -+ -+ fprintf(out, "\n"); -+ fclose(out); -+ free(buf); -+} -+#else -+#error Port me -+#endif -+ -+#ifdef __GNUC__ -+int c(int x) NOINLINE ALIAS(b); -+#define compiler_barrier() asm volatile(""); -+#else -+int c(int x); -+#define compiler_barrier() -+#endif -+ -+int NOINLINE a(void) -+{ -+ *(volatile int *)32 = 1; -+ return 1; -+} -+ -+int NOINLINE b(int x) -+{ -+ int r; -+ -+ compiler_barrier(); -+ -+ if (x) -+ r = a(); -+ else -+ r = c(1); -+ return r + 1; -+} -+ -+int -+main (int argc, char **argv) -+{ -+ if (argc > 1) -+ write_maps(argv[1]); -+ b(0); -+ return 0; -+} -+ -diff --git a/frysk-imports/libunwind/tests/flush-cache.S b/frysk-imports/libunwind/tests/flush-cache.S -index d996492..3ee4726 100644 ---- a/frysk-imports/libunwind/tests/flush-cache.S -+++ b/frysk-imports/libunwind/tests/flush-cache.S -@@ -1,3 +1,9 @@ -+#ifdef HAVE_CONFIG_H -+# include "config.h" -+#endif -+ -+#ifndef HAVE__BUILTIN___CLEAR_CACHE -+ - #if defined(__ia64__) - - .global flush_cache -@@ -66,11 +72,33 @@ flush_cache: - lwz 31, -4(11) ; - mr 1, 11 ; - blr -+#elif defined(__arm__) -+ .text -+ .globl flush_cache -+flush_cache: -+ bx lr -+#elif defined(__tilegx__) -+ .text -+ .globl flush_cache -+flush_cache: -+ -+ andi r0, r0, -64 -+1: { -+ flush r0 ; -+ addi r0, r0, 64 -+ } -+ { -+ bgtz r1, 1b ; -+ addi r1, r1, -64 -+ } -+ jrp lr - #else - # error Need flush_cache code for this architecture. - #endif - --#ifdef __linux__ -+#if defined ( __linux__) && !defined (__arm__) - /* We do not need executable stack. */ - .section .note.GNU-stack,"",@progbits - #endif -+ -+#endif -diff --git a/frysk-imports/libunwind/tests/flush-cache.h b/frysk-imports/libunwind/tests/flush-cache.h -new file mode 100644 -index 0000000..8227d85 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/flush-cache.h -@@ -0,0 +1,38 @@ -+/* libunwind - a platform-independent unwind library -+ Copyright (C) 2012 Tommi Rantala -+ -+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 AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -+ -+#ifndef FLUSH_CACHE_H -+#define FLUSH_CACHE_H -+ -+#ifdef HAVE_CONFIG_H -+# include "config.h" -+#endif -+ -+#ifdef HAVE__BUILTIN___CLEAR_CACHE -+#define flush_cache(ADDR, LEN) \ -+ __builtin___clear_cache((ADDR), (ADDR) + (LEN)) -+#else -+#include -+extern void flush_cache (void *addr, size_t len); -+#endif -+ -+#endif /* FLUSH_CACHE_H */ -diff --git a/frysk-imports/libunwind/tests/ia64-test-dyn1.c b/frysk-imports/libunwind/tests/ia64-test-dyn1.c -index c47097c..90127dd 100644 ---- a/frysk-imports/libunwind/tests/ia64-test-dyn1.c -+++ b/frysk-imports/libunwind/tests/ia64-test-dyn1.c -@@ -1,3 +1,5 @@ -+#include "flush-cache.h" -+ - #include - #include - #include -@@ -20,8 +22,6 @@ int verbose; - # define EXTRA 0 - #endif - --extern void flush_cache (void *addr, size_t len); -- - int - make_executable (void *addr, size_t len) - { -diff --git a/frysk-imports/libunwind/tests/ia64-test-setjmp.c b/frysk-imports/libunwind/tests/ia64-test-setjmp.c -index be487b6..50eaa01 100644 ---- a/frysk-imports/libunwind/tests/ia64-test-setjmp.c -+++ b/frysk-imports/libunwind/tests/ia64-test-setjmp.c -@@ -73,7 +73,8 @@ sighandler (int signal, void *siginfo, void *sigcontext) - /* Direct call of doit () at the end of doit () would get optimized by GCC to - a branch. */ - static void doit (int n); --static volatile void (*doit_pointer) (int n) = doit; -+typedef void (*doit_type) (int); -+static volatile doit_type doit_pointer = doit; - - static void - doit (int n) -diff --git a/frysk-imports/libunwind/tests/mapper.c b/frysk-imports/libunwind/tests/mapper.c -index 1006a8c..905f319 100644 ---- a/frysk-imports/libunwind/tests/mapper.c -+++ b/frysk-imports/libunwind/tests/mapper.c -@@ -36,8 +36,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #include - -+#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -+# define MAP_ANONYMOUS MAP_ANON -+#endif -+ - int --main (int argc, char **argv) -+main (void) - { - long n = 0; - -@@ -47,7 +51,7 @@ main (int argc, char **argv) - printf ("Starting mmap test...\n"); - for (n = 0; n < 30000; ++n) - { -- if (mmap (0, 1, (n & 1) ? PROT_READ : PROT_WRITE, -+ if (mmap (NULL, 1, (n & 1) ? PROT_READ : PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, - -1, 0) == MAP_FAILED) - { -diff --git a/frysk-imports/libunwind/tests/perf-startup b/frysk-imports/libunwind/tests/perf-startup -index c370748..1c24e9a 100755 ---- a/frysk-imports/libunwind/tests/perf-startup -+++ b/frysk-imports/libunwind/tests/perf-startup -@@ -5,15 +5,15 @@ LIBUNWIND_PLAT=../src/.libs/libunwind-$platform.so - warmup=$(./forker 2000 /bin/true | cut -f1 -d' ') - - nsec1=$(./forker 2000 /bin/true | cut -f1 -d' ') --echo -e \"/bin/true\""\t\t\t\t\t\t": $nsec1 nsec/execution -+printf "\"/bin/true\"\t\t\t\t\t\t: $nsec1 nsec/execution\n" - - nsec2=$(LD_PRELOAD=$LIBUNWIND ./forker 2000 /bin/true | cut -f1 -d' ') --echo -e \"LD_PRELOAD=$LIBUNWIND /bin/true\""\t": $nsec2 nsec/execution -+printf "\"LD_PRELOAD=$LIBUNWIND /bin/true\"\t: $nsec2 nsec/execution\n" - - nsec3=$(LD_PRELOAD=$LIBUNWIND_PLAT ./forker 2000 /bin/true | cut -f1 -d' ') --echo -e \"LD_PRELOAD=$LIBUNWIND_PLAT /bin/true\""\t": $nsec3 nsec/execution -+printf "\"LD_PRELOAD=$LIBUNWIND_PLAT /bin/true\"\t: $nsec3 nsec/execution\n" - - echo - --echo -e "Overhead of preloading $LIBUNWIND\t: " $(($nsec2 - $nsec1)) nsec --echo -e "Overhead of preloading $LIBUNWIND_PLAT\t: " $(($nsec3 - $nsec1)) nsec -+printf "Overhead of preloading $LIBUNWIND\t: $(($nsec2 - $nsec1)) nsec\n" -+printf "Overhead of preloading $LIBUNWIND_PLAT\t: $(($nsec3 - $nsec1)) nsec\n" -diff --git a/frysk-imports/libunwind/tests/ppc64-test-wchar.c b/frysk-imports/libunwind/tests/ppc64-test-wchar.c -deleted file mode 100644 -index 01d637c..0000000 ---- a/frysk-imports/libunwind/tests/ppc64-test-wchar.c -+++ /dev/null -@@ -1,20 +0,0 @@ --#include --#include --main () --{ -- wchar_t *wstring = -- L"Now is the time for all good men to come to the aid of their country"; -- int i; -- int ret; -- -- printf("wcslen(wstring) = %d\n", wcslen(wstring)); -- for (i = 0; i < wcslen (wstring); i++) -- { -- ret = printf ("%lc", wstring[i]); -- if (ret != 1) { -- printf("printf returned: %d\n", ret); -- perror("Linux says"); -- } -- } -- printf("\n"); --} -diff --git a/frysk-imports/libunwind/tests/run-coredump-unwind b/frysk-imports/libunwind/tests/run-coredump-unwind -new file mode 100755 -index 0000000..8d07742 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/run-coredump-unwind -@@ -0,0 +1,53 @@ -+#!/bin/sh -+ -+# this function is slight modification of the one used in RPM -+# found at https://bugzilla.redhat.com/show_bug.cgi?id=834073 -+# written by Alexander Larsson -+add_minidebug() -+{ -+ debuginfo="$1" ## we don't have separate debuginfo file -+ binary="$1" -+ -+ dynsyms=`mktemp` -+ funcsyms=`mktemp` -+ keep_symbols=`mktemp` -+ mini_debuginfo=`mktemp` -+ -+ # Extract the dynamic symbols from the main binary, there is no need to also have these -+ # in the normal symbol table -+ nm -D "$binary" --format=posix --defined-only | awk '{ print $1 }' | sort > "$dynsyms" -+ # Extract all the text (i.e. function) symbols from the debuginfo -+ nm "$debuginfo" --format=posix --defined-only | awk '{ if ($2 == "T" || $2 == "t") print $1 }' | sort > "$funcsyms" -+ # Keep all the function symbols not already in the dynamic symbol table -+ comm -13 "$dynsyms" "$funcsyms" > "$keep_symbols" -+ # Copy the full debuginfo, keeping only a minumal set of symbols and removing some unnecessary sections -+ objcopy -S --remove-section .gdb_index --remove-section .comment --keep-symbols="$keep_symbols" "$debuginfo" "$mini_debuginfo" &> /dev/null -+ #Inject the compressed data into the .gnu_debugdata section of the original binary -+ xz "$mini_debuginfo" -+ mini_debuginfo="${mini_debuginfo}.xz" -+ objcopy --add-section .gnu_debugdata="$mini_debuginfo" "$binary" -+ rm -f "$dynsyms" "$funcsyms" "$keep_symbols" "$mini_debuginfo" -+ -+ strip "$binary" ## throw away the symbol table -+} -+ -+ -+TESTDIR=`pwd` -+TEMPDIR=`mktemp --tmpdir -d libunwind-test-XXXXXXXXXX` -+trap "rm -r -- $TEMPDIR" EXIT -+ -+cp crasher $TEMPDIR/crasher -+if [ "$1" = "-minidebuginfo" ]; then -+ add_minidebug $TEMPDIR/crasher -+fi -+ -+# create core dump -+( -+ cd $TEMPDIR -+ ulimit -c 10000 -+ ./crasher backing_files -+) 2>/dev/null -+COREFILE=$TEMPDIR/core* -+ -+# magic option -testcase enables checking for the specific contents of the stack -+./test-coredump-unwind $COREFILE -testcase `cat $TEMPDIR/backing_files` -diff --git a/frysk-imports/libunwind/tests/run-coredump-unwind-mdi b/frysk-imports/libunwind/tests/run-coredump-unwind-mdi -new file mode 100755 -index 0000000..6b7f0c1 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/run-coredump-unwind-mdi -@@ -0,0 +1,8 @@ -+#!/bin/sh -+ -+# This test intends to test the unw_get_proc_name function on binaries without -+# the symbol table but with so called MiniDebuginfo available. In particular, -+# it is tested using the coredump accessors. For more info about MiniDebugInfo -+# see e.g. http://fedoraproject.org/wiki/Features/MiniDebugInfo -+ -+./run-coredump-unwind -minidebuginfo -diff --git a/frysk-imports/libunwind/tests/run-ptrace-mapper b/frysk-imports/libunwind/tests/run-ptrace-mapper -index f51cf9a..dc3010d 100755 ---- a/frysk-imports/libunwind/tests/run-ptrace-mapper -+++ b/frysk-imports/libunwind/tests/run-ptrace-mapper -@@ -1,2 +1,2 @@ - #!/bin/sh --./test-ptrace -c -n -t ./mapper -+./test-ptrace -c -n -t ./mapper $* -diff --git a/frysk-imports/libunwind/tests/run-ptrace-signull b/frysk-imports/libunwind/tests/run-ptrace-signull -deleted file mode 100755 -index 45bff27..0000000 ---- a/frysk-imports/libunwind/tests/run-ptrace-signull -+++ /dev/null -@@ -1,14 +0,0 @@ --#!/bin/sh --# $Id: run-ptrace-signull,v 1.4 2007/10/11 11:21:44 mark Exp $ -- --# On i?86 it assumes the default `/proc/sys/kernel/vdso' == 1. --sigframe=__kernel_sigreturn --if [ `uname -m` = x86_64 ] --then -- sigframe=__restore_rt --fi -- --./test-ptrace -t -b keeper,$sigframe,bowler+,main+,__libc_start_main+,_start+ ./test-ptrace-signull data_read --./test-ptrace -t -b keeper,$sigframe,bowler+,main+,__libc_start_main+,_start+ ./test-ptrace-signull data_write --./test-ptrace -t -b keeper,$sigframe,bowler+,main+,__libc_start_main+,_start+ ./test-ptrace-signull code_entry_point --./test-ptrace -t -b keeper,$sigframe,bowler+,main+,__libc_start_main+,_start+ ./test-ptrace-signull code_descriptor -diff --git a/frysk-imports/libunwind/tests/run-ptrace-stepper b/frysk-imports/libunwind/tests/run-ptrace-stepper -deleted file mode 100755 -index e8cf3c4..0000000 ---- a/frysk-imports/libunwind/tests/run-ptrace-stepper -+++ /dev/null -@@ -1,34 +0,0 @@ --#!/bin/sh --# --# 00000000080484ec jump (sp=00000000bfdfa32c) --# proc=00000000080484ec-000000000804851a --# handler=0 lsda=0 --# 000000000804855d foo+0x31 (sp=00000000bfdfa330) --# proc=000000000804852c-00000000080485d5 --# handler=0 lsda=0 --# 00000000009a8420 __kernel_sigreturn (sp=00000000bfdfa350) --# proc=00000000009a841f-00000000009a8428 --# handler=0 lsda=0 --# 00000000080485d5 lockup (sp=00000000bfdfa62c) --# proc=00000000080485d5-00000000080485da --# handler=0 lsda=0 --# 0000000008048632 prefoo+0x58 (sp=00000000bfdfa630) --# proc=00000000080485da-0000000008048634 --# handler=0 lsda=0 --# 0000000008048697 main+0x63 (sp=00000000bfdfa660) --# proc=0000000008048634-00000000080486a5 --# handler=0 lsda=0 --# 000000000082fdec __libc_start_main+0xdc (sp=00000000bfdfa690) --# proc=000000000082fd10-000000000082fded --# handler=0 lsda=0 --# 0000000008048461 _start+0x21 (sp=00000000bfdfa700) --# proc=0000000008048440-0000000008048462 --# handler=0 lsda=0 --# ================ -- --sigframe=__kernel_sigreturn --if [ `uname -m` = x86_64 ] --then -- sigframe=__restore_rt --fi --./test-ptrace -t -b jump,foo+,$sigframe,lockup,prefoo+,main+,__libc_start_main+,_start+ ./test-ptrace-stepper -diff --git a/frysk-imports/libunwind/tests/test-async-sig.c b/frysk-imports/libunwind/tests/test-async-sig.c -index 9309076..2ce8b4b 100644 ---- a/frysk-imports/libunwind/tests/test-async-sig.c -+++ b/frysk-imports/libunwind/tests/test-async-sig.c -@@ -23,6 +23,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* Check whether basic unwinding truly is async-signal safe. */ - -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif -+ -+#include "compiler.h" -+ -+#include - #include - #include - #include -@@ -45,6 +52,14 @@ int verbose; - int nerrors; - int sigcount; - -+#ifndef CONFIG_BLOCK_SIGNALS -+/* When libunwind is configured with --enable-block-signals=no, the caller -+ is responsible for preventing recursion via signal handlers. -+ We use a simple global here. In a multithreaded program, one would use -+ a thread-local variable. */ -+int recurcount; -+#endif -+ - #define panic(args...) \ - { ++nerrors; fprintf (stderr, args); return; } - -@@ -58,6 +73,12 @@ do_backtrace (int may_print, int get_proc_name) - int ret; - int depth = 0; - -+#ifndef CONFIG_BLOCK_SIGNALS -+ if (recurcount > 0) -+ return; -+ recurcount += 1; -+#endif -+ - unw_getcontext (&uc); - if (unw_init_local (&cursor, &uc) < 0) - panic ("unw_init_local failed!\n"); -@@ -70,7 +91,8 @@ do_backtrace (int may_print, int get_proc_name) - buf[0] = '\0'; - if (get_proc_name || (may_print && verbose)) - { -- if (unw_get_proc_name (&cursor, name, sizeof (name), &off) == 0) -+ ret = unw_get_proc_name (&cursor, name, sizeof (name), &off); -+ if (ret == 0 && (may_print && verbose)) - { - if (off) - snprintf (buf, sizeof (buf), "<%s+0x%lx>", name, (long) off); -@@ -102,6 +124,10 @@ do_backtrace (int may_print, int get_proc_name) - } - } - while (ret > 0); -+ -+#ifndef CONFIG_BLOCK_SIGNALS -+ recurcount -= 1; -+#endif - } - - void -@@ -135,7 +161,7 @@ sighandler (int signal) - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - struct sigaction act; - long i = 0; -@@ -159,8 +185,9 @@ main (int argc, char **argv) - do_backtrace (0, (i++ % 100) == 0); - if (nerrors > nerrors_max) - { -- panic ("Too many errors (%d)\n", nerrors); -+ fprintf (stderr, "Too many errors (%d)\n", nerrors); - exit (-1); - } - } -+ return (0); - } -diff --git a/frysk-imports/libunwind/tests/test-coredump-unwind.c b/frysk-imports/libunwind/tests/test-coredump-unwind.c -new file mode 100644 -index 0000000..5254708 ---- /dev/null -+++ b/frysk-imports/libunwind/tests/test-coredump-unwind.c -@@ -0,0 +1,395 @@ -+/* -+ * Example program for unwinding core dumps. -+ * -+ * Compile a-la: -+ * gcc -Os -Wall \ -+ * -Wl,--start-group \ -+ * -lunwind -lunwind-x86 -lunwind-coredump \ -+ * example-core-unwind.c \ -+ * -Wl,--end-group \ -+ * -oexample-core-unwind -+ * -+ * Run: -+ * eu-unstrip -n --core COREDUMP -+ * figure out which virtual addresses in COREDUMP correspond to which mapped executable files -+ * (binary and libraries), then supply them like this: -+ * ./example-core-unwind COREDUMP 0x400000:/bin/crashed_program 0x3458600000:/lib/libc.so.6 [...] -+ * -+ * Note: Program eu-unstrip is part of elfutils, virtual addresses of shared -+ * libraries can be determined by ldd (at least on linux). -+ */ -+ -+#include "compiler.h" -+ -+#undef _GNU_SOURCE -+#define _GNU_SOURCE 1 -+#undef __USE_GNU -+#define __USE_GNU 1 -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+/* For SIGSEGV handler code */ -+#include -+#include -+ -+#include -+ -+ -+/* Utility logging functions */ -+ -+enum { -+ LOGMODE_NONE = 0, -+ LOGMODE_STDIO = (1 << 0), -+ LOGMODE_SYSLOG = (1 << 1), -+ LOGMODE_BOTH = LOGMODE_SYSLOG + LOGMODE_STDIO, -+}; -+const char *msg_prefix = ""; -+const char *msg_eol = "\n"; -+int logmode = LOGMODE_STDIO; -+int xfunc_error_retval = EXIT_FAILURE; -+ -+void xfunc_die(void) -+{ -+ exit(xfunc_error_retval); -+} -+ -+static void verror_msg_helper(const char *s, -+ va_list p, -+ const char* strerr, -+ int flags) -+{ -+ char *msg; -+ int prefix_len, strerr_len, msgeol_len, used; -+ -+ if (!logmode) -+ return; -+ -+ used = vasprintf(&msg, s, p); -+ if (used < 0) -+ return; -+ -+ /* This is ugly and costs +60 bytes compared to multiple -+ * fprintf's, but is guaranteed to do a single write. -+ * This is needed for e.g. when multiple children -+ * can produce log messages simultaneously. */ -+ -+ prefix_len = msg_prefix[0] ? strlen(msg_prefix) + 2 : 0; -+ strerr_len = strerr ? strlen(strerr) : 0; -+ msgeol_len = strlen(msg_eol); -+ /* +3 is for ": " before strerr and for terminating NUL */ -+ char *msg1 = (char*) realloc(msg, prefix_len + used + strerr_len + msgeol_len + 3); -+ if (!msg1) -+ { -+ free(msg); -+ return; -+ } -+ msg = msg1; -+ /* TODO: maybe use writev instead of memmoving? Need full_writev? */ -+ if (prefix_len) -+ { -+ char *p; -+ memmove(msg + prefix_len, msg, used); -+ used += prefix_len; -+ p = stpcpy(msg, msg_prefix); -+ p[0] = ':'; -+ p[1] = ' '; -+ } -+ if (strerr) -+ { -+ if (s[0]) -+ { -+ msg[used++] = ':'; -+ msg[used++] = ' '; -+ } -+ strcpy(&msg[used], strerr); -+ used += strerr_len; -+ } -+ strcpy(&msg[used], msg_eol); -+ -+ if (flags & LOGMODE_STDIO) -+ { -+ fflush(stdout); -+ used += write(STDERR_FILENO, msg, used + msgeol_len); -+ } -+ msg[used] = '\0'; /* remove msg_eol (usually "\n") */ -+ if (flags & LOGMODE_SYSLOG) -+ { -+ syslog(LOG_ERR, "%s", msg + prefix_len); -+ } -+ free(msg); -+} -+ -+void log_msg(const char *s, ...) -+{ -+ va_list p; -+ va_start(p, s); -+ verror_msg_helper(s, p, NULL, logmode); -+ va_end(p); -+} -+/* It's a macro, not function, since it collides with log() from math.h */ -+#undef log -+#define log(...) log_msg(__VA_ARGS__) -+ -+void error_msg(const char *s, ...) -+{ -+ va_list p; -+ va_start(p, s); -+ verror_msg_helper(s, p, NULL, logmode); -+ va_end(p); -+} -+ -+void error_msg_and_die(const char *s, ...) -+{ -+ va_list p; -+ va_start(p, s); -+ verror_msg_helper(s, p, NULL, logmode); -+ va_end(p); -+ xfunc_die(); -+} -+ -+void perror_msg(const char *s, ...) -+{ -+ va_list p; -+ va_start(p, s); -+ /* Guard against ": Success" */ -+ verror_msg_helper(s, p, errno ? strerror(errno) : NULL, logmode); -+ va_end(p); -+} -+ -+void perror_msg_and_die(const char *s, ...) -+{ -+ va_list p; -+ va_start(p, s); -+ /* Guard against ": Success" */ -+ verror_msg_helper(s, p, errno ? strerror(errno) : NULL, logmode); -+ va_end(p); -+ xfunc_die(); -+} -+ -+void die_out_of_memory(void) -+{ -+ error_msg_and_die("Out of memory, exiting"); -+} -+ -+/* End of utility logging functions */ -+ -+ -+ -+static -+void handle_sigsegv(int sig, siginfo_t *info, void *ucontext) -+{ -+ long ip = 0; -+ ucontext_t *uc UNUSED; -+ -+ uc = ucontext; -+#if defined(__linux__) -+#ifdef UNW_TARGET_X86 -+ ip = uc->uc_mcontext.gregs[REG_EIP]; -+#elif defined(UNW_TARGET_X86_64) -+ ip = uc->uc_mcontext.gregs[REG_RIP]; -+#elif defined(UNW_TARGET_ARM) -+ ip = uc->uc_mcontext.arm_pc; -+#endif -+#elif defined(__FreeBSD__) -+#ifdef __i386__ -+ ip = uc->uc_mcontext.mc_eip; -+#elif defined(__amd64__) -+ ip = uc->uc_mcontext.mc_rip; -+#else -+#error Port me -+#endif -+#else -+#error Port me -+#endif -+ dprintf(2, "signal:%d address:0x%lx ip:0x%lx\n", -+ sig, -+ /* this is void*, but using %p would print "(null)" -+ * even for ptrs which are not exactly 0, but, say, 0x123: -+ */ -+ (long)info->si_addr, -+ ip); -+ -+ { -+ /* glibc extension */ -+ void *array[50]; -+ int size; -+ size = backtrace(array, 50); -+#ifdef __linux__ -+ backtrace_symbols_fd(array, size, 2); -+#endif -+ } -+ -+ _exit(1); -+} -+ -+static void install_sigsegv_handler(void) -+{ -+ struct sigaction sa; -+ memset(&sa, 0, sizeof(sa)); -+ sa.sa_sigaction = handle_sigsegv; -+ sa.sa_flags = SA_SIGINFO; -+ sigaction(SIGSEGV, &sa, NULL); -+ sigaction(SIGILL, &sa, NULL); -+ sigaction(SIGFPE, &sa, NULL); -+ sigaction(SIGBUS, &sa, NULL); -+} -+ -+int -+main(int argc UNUSED, char **argv) -+{ -+ unw_addr_space_t as; -+ struct UCD_info *ui; -+ unw_cursor_t c; -+ int ret; -+ -+#define TEST_FRAMES 4 -+#define TEST_NAME_LEN 32 -+ int testcase = 0; -+ int test_cur = 0; -+ long test_start_ips[TEST_FRAMES]; -+ char test_names[TEST_FRAMES][TEST_NAME_LEN]; -+ -+ install_sigsegv_handler(); -+ -+ const char *progname = strrchr(argv[0], '/'); -+ if (progname) -+ progname++; -+ else -+ progname = argv[0]; -+ -+ if (!argv[1]) -+ error_msg_and_die("Usage: %s COREDUMP [VADDR:BINARY_FILE]...", progname); -+ -+ msg_prefix = progname; -+ -+ as = unw_create_addr_space(&_UCD_accessors, 0); -+ if (!as) -+ error_msg_and_die("unw_create_addr_space() failed"); -+ -+ ui = _UCD_create(argv[1]); -+ if (!ui) -+ error_msg_and_die("_UCD_create('%s') failed", argv[1]); -+ ret = unw_init_remote(&c, as, ui); -+ if (ret < 0) -+ error_msg_and_die("unw_init_remote() failed: ret=%d\n", ret); -+ -+ argv += 2; -+ -+ /* Enable checks for the crasher test program? */ -+ if (*argv && !strcmp(*argv, "-testcase")) -+ { -+ testcase = 1; -+ logmode = LOGMODE_NONE; -+ argv++; -+ } -+ -+ while (*argv) -+ { -+ char *colon; -+ long vaddr = strtol(*argv, &colon, 16); -+ if (*colon != ':') -+ error_msg_and_die("Bad format: '%s'", *argv); -+ if (_UCD_add_backing_file_at_vaddr(ui, vaddr, colon + 1) < 0) -+ error_msg_and_die("Can't add backing file '%s'", colon + 1); -+ argv++; -+ } -+ -+ for (;;) -+ { -+ unw_word_t ip; -+ ret = unw_get_reg(&c, UNW_REG_IP, &ip); -+ if (ret < 0) -+ error_msg_and_die("unw_get_reg(UNW_REG_IP) failed: ret=%d\n", ret); -+ -+ unw_proc_info_t pi; -+ ret = unw_get_proc_info(&c, &pi); -+ if (ret < 0) -+ error_msg_and_die("unw_get_proc_info(ip=0x%lx) failed: ret=%d\n", (long) ip, ret); -+ -+ if (!testcase) -+ printf("\tip=0x%08lx proc=%08lx-%08lx handler=0x%08lx lsda=0x%08lx\n", -+ (long) ip, -+ (long) pi.start_ip, (long) pi.end_ip, -+ (long) pi.handler, (long) pi.lsda); -+ -+ if (testcase && test_cur < TEST_FRAMES) -+ { -+ unw_word_t off; -+ -+ test_start_ips[test_cur] = (long) pi.start_ip; -+ if (unw_get_proc_name(&c, test_names[test_cur], sizeof(test_names[0]), &off) != 0) -+ { -+ test_names[test_cur][0] = '\0'; -+ } -+ test_cur++; -+ } -+ -+ log("step"); -+ ret = unw_step(&c); -+ log("step done:%d", ret); -+ if (ret < 0) -+ error_msg_and_die("FAILURE: unw_step() returned %d", ret); -+ if (ret == 0) -+ break; -+ } -+ log("stepping ended"); -+ -+ /* Check that the second and third frames are equal, but distinct of the -+ * others */ -+ if (testcase && -+ (test_cur != 4 -+ || test_start_ips[1] != test_start_ips[2] -+ || test_start_ips[0] == test_start_ips[1] -+ || test_start_ips[2] == test_start_ips[3] -+ ) -+ ) -+ { -+ fprintf(stderr, "FAILURE: start IPs incorrect\n"); -+ return -1; -+ } -+ -+ if (testcase && -+ ( strcmp(test_names[0], "a") -+ || strcmp(test_names[1], "b") -+ || strcmp(test_names[2], "b") -+ || strcmp(test_names[3], "main") -+ ) -+ ) -+ { -+ fprintf(stderr, "FAILURE: procedure names are missing/incorrect\n"); -+ return -1; -+ } -+ -+ _UCD_destroy(ui); -+ unw_destroy_addr_space(as); -+ -+ return 0; -+} -diff --git a/frysk-imports/libunwind/tests/test-flush-cache.c b/frysk-imports/libunwind/tests/test-flush-cache.c -index 180b5c2..592162c 100644 ---- a/frysk-imports/libunwind/tests/test-flush-cache.c -+++ b/frysk-imports/libunwind/tests/test-flush-cache.c -@@ -25,15 +25,6 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - --#ifdef HAVE_CONFIG_H --# include "config.h" --#endif -- --#if HAVE_EXECINFO_H --# include --#else -- extern int backtrace (void **, int); --#endif - #include - #include - -@@ -50,7 +41,7 @@ f257 (void) - - if (verbose) - printf ("First backtrace:\n"); -- n = backtrace (buffer, 300); -+ n = unw_backtrace (buffer, 300); - if (verbose) - for (i = 0; i < n; ++i) - printf ("[%d] ip=%p\n", i, buffer[i]); -@@ -59,7 +50,7 @@ f257 (void) - - if (verbose) - printf ("\nSecond backtrace:\n"); -- n = backtrace (buffer, 300); -+ n = unw_backtrace (buffer, 300); - if (verbose) - for (i = 0; i < n; ++i) - printf ("[%d] ip=%p\n", i, buffer[i]); -diff --git a/frysk-imports/libunwind/tests/test-init-remote.c b/frysk-imports/libunwind/tests/test-init-remote.c -index ac036d1..66f2d6a 100644 ---- a/frysk-imports/libunwind/tests/test-init-remote.c -+++ b/frysk-imports/libunwind/tests/test-init-remote.c -@@ -32,6 +32,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - # include "config.h" - #endif - -+#include "compiler.h" -+ - #include - #include - #include -@@ -91,7 +93,7 @@ foo (void) - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - verbose = (argc > 1); - -diff --git a/frysk-imports/libunwind/tests/test-mem.c b/frysk-imports/libunwind/tests/test-mem.c -index 4f7e58c..52c9774 100644 ---- a/frysk-imports/libunwind/tests/test-mem.c -+++ b/frysk-imports/libunwind/tests/test-mem.c -@@ -25,6 +25,8 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -+#include "compiler.h" -+ - #include - #include - #include -@@ -82,7 +84,7 @@ consume_some_stack_space (void) - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - struct rlimit rlim; - -diff --git a/frysk-imports/libunwind/tests/test-proc-info.c b/frysk-imports/libunwind/tests/test-proc-info.c -index 9e039c6..c4145bc 100644 ---- a/frysk-imports/libunwind/tests/test-proc-info.c -+++ b/frysk-imports/libunwind/tests/test-proc-info.c -@@ -36,6 +36,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #include - - #include -+#include "compiler.h" - - int errors; - -@@ -43,15 +44,20 @@ int errors; - { ++errors; fprintf (stderr, args); return -1; } - - static int --find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pip, -- int need_unwind_info, void *arg) -+find_proc_info (unw_addr_space_t as UNUSED, -+ unw_word_t ip UNUSED, -+ unw_proc_info_t *pip UNUSED, -+ int need_unwind_info UNUSED, -+ void *arg UNUSED) - { - return -UNW_ESTOPUNWIND; - } - - static int --access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *valp, -- int write, void *arg) -+access_mem (unw_addr_space_t as UNUSED, -+ unw_word_t addr UNUSED, -+ unw_word_t *valp, int write, -+ void *arg UNUSED) - { - if (!write) - *valp = 0; -@@ -59,8 +65,10 @@ access_mem (unw_addr_space_t as, unw_word_t addr, unw_word_t *valp, - } - - static int --access_reg (unw_addr_space_t as, unw_regnum_t regnum, unw_word_t *valp, -- int write, void *arg) -+access_reg (unw_addr_space_t as UNUSED, -+ unw_regnum_t regnum UNUSED, -+ unw_word_t *valp, int write, -+ void *arg UNUSED) - { - if (!write) - *valp = 32; -@@ -68,36 +76,48 @@ access_reg (unw_addr_space_t as, unw_regnum_t regnum, unw_word_t *valp, - } - - static int --access_fpreg (unw_addr_space_t as, unw_regnum_t regnum, unw_fpreg_t *valp, -- int write, void *arg) -+access_fpreg (unw_addr_space_t as UNUSED, -+ unw_regnum_t regnum UNUSED, -+ unw_fpreg_t *valp, int write, -+ void *arg UNUSED) - { - if (!write) -- memset (valp, 0, sizeof (valp)); -+ memset (valp, 0, sizeof (*valp)); - return 0; - } - - static int --get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dilap, void *arg) -+get_dyn_info_list_addr (unw_addr_space_t as UNUSED, -+ unw_word_t *dilap UNUSED, -+ void *arg UNUSED) - { - return -UNW_ENOINFO; - } - - static void --put_unwind_info (unw_addr_space_t as, unw_proc_info_t *pi, void *arg) -+put_unwind_info (unw_addr_space_t as UNUSED, -+ unw_proc_info_t *pi UNUSED, -+ void *arg UNUSED) - { - ++errors; - fprintf (stderr, "%s() got called!\n", __FUNCTION__); - } - - static int --resume (unw_addr_space_t as, unw_cursor_t *reg, void *arg) -+resume (unw_addr_space_t as UNUSED, -+ unw_cursor_t *reg UNUSED, -+ void *arg UNUSED) - { - panic ("%s() got called!\n", __FUNCTION__); - } - - static int --get_proc_name (unw_addr_space_t as, unw_word_t ip, char *buf, size_t buf_len, -- unw_word_t *offp, void *arg) -+get_proc_name (unw_addr_space_t as UNUSED, -+ unw_word_t ip UNUSED, -+ char *buf UNUSED, -+ size_t buf_len UNUSED, -+ unw_word_t *offp UNUSED, -+ void *arg UNUSED) - { - panic ("%s() got called!\n", __FUNCTION__); - } -@@ -143,6 +163,8 @@ main (int argc, char **argv) - panic ("Second call to unw_step() returned %d instead of %d\n", - ret, -UNW_ESTOPUNWIND); - -+ unw_destroy_addr_space (as); -+ - if (verbose) - printf ("SUCCESS\n"); - return 0; -diff --git a/frysk-imports/libunwind/tests/test-ptrace-misc.c b/frysk-imports/libunwind/tests/test-ptrace-misc.c -index 562636a..374059d 100644 ---- a/frysk-imports/libunwind/tests/test-ptrace-misc.c -+++ b/frysk-imports/libunwind/tests/test-ptrace-misc.c -@@ -23,6 +23,8 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -+#include "compiler.h" -+ - #include - #include - #include -@@ -104,7 +106,7 @@ bar (int v) - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - int val = argc; - -diff --git a/frysk-imports/libunwind/tests/test-ptrace-signull.c b/frysk-imports/libunwind/tests/test-ptrace-signull.c -deleted file mode 100644 -index 4fa6409..0000000 ---- a/frysk-imports/libunwind/tests/test-ptrace-signull.c -+++ /dev/null -@@ -1,116 +0,0 @@ --/* This testcase is part of libunwind. -- -- Copyright 1996, 1999, 2003, 2004, 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 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. */ -- --#include --#include --#include --#include --#include --#include -- --enum tests { -- data_read, data_write, code_entry_point, code_descriptor, invalid --}; -- --/* Some basic types and zero buffers. */ -- --typedef long data_t; --typedef long code_t (void); --data_t *volatile data; --code_t *volatile code; --/* "desc" is intentionally initialized to a data object. This is -- needed to test function descriptors on arches like ia64. */ --data_t zero[10]; --code_t *volatile desc = (code_t *) (void *) zero; -- --sigjmp_buf env; -- --extern void --keeper (int sig) --{ --#if 0 -- /* `-s' invocation. */ -- alarm (0); --#endif -- -- raise(SIGUSR2); -- -- siglongjmp (env, 1); --} -- --extern long --bowler (enum tests test) --{ -- signal(SIGUSR1,SIG_IGN); -- signal(SIGUSR2,SIG_IGN); -- raise(SIGUSR1); -- -- switch (test) -- { -- case data_read: -- /* Try to read address zero. */ -- return (*data); -- case data_write: -- /* Try to write (the assignment) to address zero. */ -- return (*data) = 1; -- case code_entry_point: -- /* For typical architectures, call a function at address -- zero. */ -- return (*code) (); -- case code_descriptor: -- /* For atypical architectures that use function descriptors, -- call a function descriptor, the code field of which is zero -- (which has the effect of jumping to address zero). */ -- return (*desc) (); -- case invalid:; -- /* FALLTHRU */ -- } -- assert (0); --} -- --int --main (int argc, char **argv) --{ -- enum tests test = invalid; -- --#define ARG(string) \ -- do \ -- { \ -- if (argc == 2 && !strcmp (argv[1], #string )) \ -- test = string; \ -- } \ -- while (0) -- -- ARG (data_read); -- ARG (data_write); -- ARG (code_entry_point); -- ARG (code_descriptor); -- -- assert (test != invalid); -- -- struct sigaction act; -- memset (&act, 0, sizeof act); -- act.sa_handler = keeper; -- sigaction (SIGSEGV, &act, NULL); -- -- if (!sigsetjmp (env, 1)) -- bowler (test); -- -- return 0; --} -diff --git a/frysk-imports/libunwind/tests/test-ptrace-stepper.c b/frysk-imports/libunwind/tests/test-ptrace-stepper.c -deleted file mode 100644 -index 5f181b4..0000000 ---- a/frysk-imports/libunwind/tests/test-ptrace-stepper.c -+++ /dev/null -@@ -1,111 +0,0 @@ --// gcc -g -o stepper -lpthread stepper.c -- --#include --#include --#include --#include --#include --#include --#include --#include --#include --/* For `UNW_TARGET_*'. */ --#include -- --volatile int lock; --volatile pid_t pid; --volatile int sig; -- --void shazaam () { -- volatile __attribute__((__unused__)) char a; -- volatile __attribute__((__unused__)) char b; -- volatile __attribute__((__unused__)) char c; -- volatile __attribute__((__unused__)) char d; --} -- --void jump () --{ -- int z = 1; -- int y = 2; -- int x = 3; -- volatile __attribute__((__unused__)) int w = (((((x + y + z) * 20) / 10) - 0) + 1); -- return; --} -- --void *signal_parent (void* args) --{ -- pthread_exit (NULL); --} -- --void foo () --{ -- int a = 0; -- int b = 0; -- int c = 0; -- long d = 0; -- lock = 0; -- while (1) -- { -- jump (); -- a++; -- b++; -- c++; -- d = a; -- if (a + b == 2) -- { -- if (b + d == 2) -- { -- a = 0; -- b = 0; -- c = 0; -- d = 0; -- if (d == 0) -- d = 1; -- } -- } -- signal(SIGUSR1,SIG_IGN); -- raise(SIGUSR1); -- jump (); -- } --} -- --#if defined (UNW_TARGET_X86_64) || defined (UNW_TARGET_X86) --asm (".cfi_startproc\n.globl lockup\n.type lockup,@function\nlockup: jmp lockup\n.cfi_endproc"); --extern void lockup (void); --#elif defined (UNW_TARGET_PPC64) --asm (".cfi_startproc\n.globl lockup\n.type lockup,@function\nlockup: b lockup\n.cfi_endproc"); --extern void lockup (void); --#else --#warning "FIXME: Test may not work." --static void lockup (void) --{ -- for (;;); --} --#endif -- --void prefoo () --{ --int err; -- -- signal (SIGALRM, (void (*)(int signo)) foo); -- err = alarm (1); -- assert (err == 0); -- lockup (); --} -- --int main (int argc, char ** argv) --{ -- -- lock = 1; -- -- pthread_t thread; -- pthread_create (&thread, NULL, signal_parent, NULL); -- -- /* Start the tracing by: ./test-ptrace -t ... */ -- signal(SIGUSR1,SIG_IGN); -- raise(SIGUSR1); -- -- prefoo (); -- -- return 0; --} -diff --git a/frysk-imports/libunwind/tests/test-ptrace.c b/frysk-imports/libunwind/tests/test-ptrace.c -index 419518d..a5b71dd 100644 ---- a/frysk-imports/libunwind/tests/test-ptrace.c -+++ b/frysk-imports/libunwind/tests/test-ptrace.c -@@ -28,7 +28,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - #ifdef HAVE_TTRACE - - int --main (int argc, char **argv) -+main (void) - { - printf ("FAILURE: ttrace() not supported yet\n"); - return -1; -@@ -39,6 +39,7 @@ main (int argc, char **argv) - #include - #include - #include -+#include - #include - #include - #include -@@ -47,8 +48,11 @@ main (int argc, char **argv) - #include - #include - --int nerrors; -+extern char **environ; -+ - static const int nerrors_max = 100; -+ -+int nerrors; - int verbose; - int print_names = 1; - -@@ -60,8 +64,6 @@ enum - } - trace_mode = SYSCALL; - --static char *backtrace_check[64]; -- - #define panic(args...) \ - do { fprintf (stderr, args); ++nerrors; } while (0) - -@@ -71,7 +73,7 @@ static struct UPT_info *ui; - static int killed; - - void --do_backtrace (pid_t target_pid) -+do_backtrace (void) - { - unw_word_t ip, sp, start_ip = 0, off; - int n = 0, ret; -@@ -79,7 +81,6 @@ do_backtrace (pid_t target_pid) - unw_cursor_t c; - char buf[512]; - size_t len; -- char **backtrace_ptr = NULL; - - ret = unw_init_remote (&c, as, ui); - if (ret < 0) -@@ -87,8 +88,6 @@ do_backtrace (pid_t target_pid) - - do - { -- char buf2[512]; -- - if ((ret = unw_get_reg (&c, UNW_REG_IP, &ip)) < 0 - || (ret = unw_get_reg (&c, UNW_REG_SP, &sp)) < 0) - panic ("unw_get_reg/unw_get_proc_name() failed: ret=%d\n", ret); -@@ -100,38 +99,6 @@ do_backtrace (pid_t target_pid) - if (print_names) - unw_get_proc_name (&c, buf, sizeof (buf), &off); - -- if (*backtrace_check != NULL) -- { -- strcpy (buf2, buf); -- if (off) -- { -- char *s; -- -- s = buf2 + strlen (buf2); -- if (s < buf2 + sizeof (buf2) - 1) -- *s++ = '+'; -- *s = 0; -- } -- } -- if (n == 0 && *backtrace_check != NULL) -- { -- if (strcmp (*backtrace_check, buf2) == 0) -- backtrace_ptr = backtrace_check; -- } -- if (backtrace_ptr != NULL) -- { -- if (*backtrace_ptr == NULL) -- panic ("Excessive backtrace on level==%d, got \"%s\"\n", -- n, buf); -- else -- { -- if (strcmp (*backtrace_ptr, buf2) != 0) -- panic ("Backtrace does not match on level==%d, want \"%s\", got \"%s\"\n", -- n, *backtrace_ptr, buf); -- backtrace_ptr++; -- } -- } -- - if (verbose) - { - if (off) -@@ -192,14 +159,6 @@ do_backtrace (pid_t target_pid) - - if (verbose) - printf ("================\n\n"); -- -- if (backtrace_ptr != NULL) -- { -- if (*backtrace_ptr != NULL) -- panic ("Too short backtrace on level==%d, want \"%s\"\n", -- n, *backtrace_ptr); -- killed = 1; -- } - } - - static pid_t target_pid; -@@ -219,13 +178,13 @@ main (int argc, char **argv) - - if (argc == 1) - { -- char *args[] = { "self", "/bin/ls", "/usr", NULL }; -+ static char *args[] = { "self", "/bin/ls", "/usr", NULL }; - - /* automated test case */ - argv = args; - } -- else -- while (argv[optind] && argv[optind][0] == '-') -+ else if (argc > 1) -+ while (argv[optind][0] == '-') - { - if (strcmp (argv[optind], "-v") == 0) - ++optind, verbose = 1; -@@ -243,44 +202,11 @@ main (int argc, char **argv) - else if (strcmp (argv[optind], "-n") == 0) - /* Don't look-up and print symbol names. */ - ++optind, print_names = 0; -- else if (strcmp (argv[optind], "-b") == 0 && argv[optind + 1]) -- { -- /* Check the backtrace if it matches this ','-delimited list -- after the first backtrace function is the first of the list. -- Omit the trailing numbers after "+" but "+" should be present. */ -- char *arg = argv[optind + 1]; -- char *s; -- char **dp; -- -- optind += 2; -- dp = backtrace_check; -- if (*backtrace_check != NULL) -- panic ("-b specified twice is unsupported"); -- else -- while (*arg) -- { -- char end_orig; -- -- s = strchr (arg, ','); -- if (!s) -- s = arg + strlen (arg); -- end_orig = *s; -- *s = 0; -- if (dp >= backtrace_check - 1 -- + (sizeof (backtrace_check) / sizeof (*backtrace_check))) -- panic ("Too many arguments to -b\n"); -- else -- *dp++ = arg; -- if (end_orig) -- arg = s + 1; -- else -- break; -- } -- *dp = NULL; -- } -+ else -+ fprintf(stderr, "unrecognized option: %s\n", argv[optind++]); -+ if (optind >= argc) -+ break; - } -- if (*backtrace_check && !print_names) -- panic ("Options -b and -n conflict\n"); - - target_pid = fork (); - if (!target_pid) -@@ -290,7 +216,18 @@ main (int argc, char **argv) - if (!verbose) - dup2 (open ("/dev/null", O_WRONLY), 1); - -+#if HAVE_DECL_PTRACE_TRACEME - ptrace (PTRACE_TRACEME, 0, 0, 0); -+#elif HAVE_DECL_PT_TRACE_ME -+ ptrace (PT_TRACE_ME, 0, 0, 0); -+#else -+#error Trace me -+#endif -+ -+ if ((argc > 1) && (optind == argc)) { -+ fprintf(stderr, "Need to specify a command line for the child\n"); -+ exit (-1); -+ } - execve (argv[optind], argv + optind, environ); - _exit (-1); - } -@@ -300,7 +237,7 @@ main (int argc, char **argv) - - while (nerrors <= nerrors_max) - { -- pid = wait4 (-1, &status, 0, 0); -+ pid = wait4 (-1, &status, 0, NULL); - if (pid == -1) - { - if (errno == EINTR) -@@ -355,24 +292,56 @@ main (int argc, char **argv) - { - case TRIGGER: - if (state) -+#if HAVE_DECL_PTRACE_CONT - ptrace (PTRACE_CONT, target_pid, 0, 0); -+#elif HAVE_DECL_PT_CONTINUE -+ ptrace (PT_CONTINUE, target_pid, (caddr_t)1, 0); -+#else -+#error Port me -+#endif - else - { -- do_backtrace (target_pid); -- ptrace (PTRACE_SINGLESTEP, target_pid, 0, pending_sig); -+ do_backtrace (); -+#if HAVE_DECL_PTRACE_SINGLESTEP -+ if (ptrace (PTRACE_SINGLESTEP, target_pid, 0, pending_sig) < 0) -+ { -+ panic ("ptrace(PTRACE_SINGLESTEP) failed (errno=%d)\n", errno); -+ killed = 1; -+ } -+#elif HAVE_DECL_PT_STEP -+ if (ptrace (PT_STEP, target_pid, (caddr_t)1, pending_sig) < 0) -+ { -+ panic ("ptrace(PT_STEP) failed (errno=%d)\n", errno); -+ killed = 1; -+ } -+#else -+#error Singlestep me -+#endif - } - break; - - case SYSCALL: - if (!state) -- do_backtrace (target_pid); -+ do_backtrace (); - state ^= 1; -+#if HAVE_DECL_PTRACE_SYSCALL - ptrace (PTRACE_SYSCALL, target_pid, 0, pending_sig); -+#elif HAVE_DECL_PT_SYSCALL -+ ptrace (PT_SYSCALL, target_pid, (caddr_t)1, pending_sig); -+#else -+#error Syscall me -+#endif - break; - - case INSTRUCTION: -- do_backtrace (target_pid); -- ptrace (PTRACE_SINGLESTEP, target_pid, 0, pending_sig); -+ do_backtrace (); -+#if HAVE_DECL_PTRACE_SINGLESTEP -+ ptrace (PTRACE_SINGLESTEP, target_pid, 0, pending_sig); -+#elif HAVE_DECL_PT_STEP -+ ptrace (PT_STEP, target_pid, (caddr_t)1, pending_sig); -+#else -+#error Singlestep me -+#endif - break; - } - if (killed) -@@ -380,9 +349,7 @@ main (int argc, char **argv) - } - - _UPT_destroy (ui); -- -- if (*backtrace_check != NULL && !killed) -- panic ("-b requested but the first function was never found\n"); -+ unw_destroy_addr_space (as); - - if (nerrors) - { -diff --git a/frysk-imports/libunwind/tests/test-setjmp.c b/frysk-imports/libunwind/tests/test-setjmp.c -index 65c343b..769b71b 100644 ---- a/frysk-imports/libunwind/tests/test-setjmp.c -+++ b/frysk-imports/libunwind/tests/test-setjmp.c -@@ -23,6 +23,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - /* The setjmp()/longjmp(), sigsetjmp()/siglongjmp(). */ - -+#include "compiler.h" -+ - #include - #include - #include -@@ -139,7 +141,7 @@ sighandler (int signal) - } - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - volatile sigset_t sigset1, sigset2, sigset3; - volatile struct sigaction act; -diff --git a/frysk-imports/libunwind/tests/test-static-link-loc.c b/frysk-imports/libunwind/tests/test-static-link-loc.c -index d4a8a68..4e47e45 100644 ---- a/frysk-imports/libunwind/tests/test-static-link-loc.c -+++ b/frysk-imports/libunwind/tests/test-static-link-loc.c -@@ -33,6 +33,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - #define UNW_LOCAL_ONLY - #include -+#include "compiler.h" - - extern int test_generic (void); - -@@ -87,7 +88,7 @@ test_local (void) - #endif /* !UNW_REMOTE_ONLY */ - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - if (argc > 1) - verbose = 1; -diff --git a/frysk-imports/libunwind/tests/test-strerror.c b/frysk-imports/libunwind/tests/test-strerror.c -index 582d322..f7ae61e 100644 ---- a/frysk-imports/libunwind/tests/test-strerror.c -+++ b/frysk-imports/libunwind/tests/test-strerror.c -@@ -1,8 +1,9 @@ -+#include "compiler.h" - #include - #include - - int --main (int argc, char **argv) -+main (int argc, char **argv UNUSED) - { - int i, verbose = argc > 1; - const char *msg; -diff --git a/frysk-imports/libunwind/tests/test-varargs.c b/frysk-imports/libunwind/tests/test-varargs.c -deleted file mode 100644 -index b712f5d..0000000 ---- a/frysk-imports/libunwind/tests/test-varargs.c -+++ /dev/null -@@ -1,52 +0,0 @@ --#include --#include --#include --#include -- --extern int backtrace (void **, int); -- --static void --b (void) --{ -- void *v[20]; -- int i, n; -- -- n = backtrace(v, 20); -- for (i = 0; i < n; ++i) -- printf ("[%d] %p\n", i, v[i]); --} -- --static void --c (void) --{ -- b (); --} -- --static void --a (int d, ...) --{ -- switch (d) -- { -- case 5: -- a (4, 2,4); -- break; -- case 4: -- a (3, 1,3,5); -- break; -- case 3: -- a (2, 11, 13, 17, 23); -- break; -- case 2: -- a (1); -- break; -- case 1: -- c (); -- } --} -- --int --main (int argc, char **argv) --{ -- a (5, 3, 4, 5, 6); -- return 0; --} -diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am -index c0eda26..6e8e9a2 100644 ---- a/frysk-sys/Makefile.am -+++ b/frysk-sys/Makefile.am -@@ -48,7 +48,7 @@ GEN_CLASSPATH += ../frysk-imports/getopt.jar - GEN_CLASSPATH += $(JUNIT_JAR) - - # Force a few dependencies --lib/unwind/cni/Unwind%.cxx: lib/unwind/Unwind%.java lib/unwind/cni/UnwindH.hxx -+lib/unwind/jni/Unwind%.cxx: lib/unwind/Unwind%.java lib/unwind/jni/UnwindH.hxx - lib/unwind/Unwind%.java: lib/unwind/Unwind.java - - -@@ -57,10 +57,11 @@ JNI_LIBRARY_LIST += -lstdc++ - JNI_LIBRARY_LIST += -laudit - JNI_LIBRARY_LIST += -ldw - # Bundle in the local libunwind code. --JNI_OBJECT_LIST += ../frysk-imports/libunwind-i386/src/{,dwarf/,mi/,x86/}.libs/*.o --JNI_OBJECT_LIST += ../frysk-imports/libunwind-x86_64/src/{,dwarf/,mi/,x86_64/}.libs/*.o --JNI_OBJECT_LIST += ../frysk-imports/libunwind-ppc32/src/{,dwarf/,mi/,ppc32/}.libs/*.o --JNI_OBJECT_LIST += ../frysk-imports/libunwind-ppc64/src/{,dwarf/,mi/,ppc64/}.libs/*.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/dwarf/.libs/*.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/mi/.libs/G*.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/mi/.libs/{init,mempool,flush_cache}.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/x86/.libs/*.o -+JNI_OBJECT_LIST += ../frysk-imports/libunwind-*/src/x86_64/.libs/*.o - - # jnixx's auto-detect algorithm misses hidden class references, - # explicitly add them here. -@@ -75,6 +76,6 @@ JNIXX_CLASSES += lib.unwind.UnwindRegistersPPC64 - JNIXX_CLASSES += lib.unwind.UnwindRegistersX86 - JNIXX_CLASSES += lib.unwind.UnwindRegistersX8664 - # Some JAVAH files don't get generated as they are hidden includes --lib/dwfl/cni/ElfSymbol.o: lib/dwfl/ElfSymbolVersion.h --frysk/testbed/cni/ForkFactory.o: frysk/sys/UnhandledWaitBuilder.h --lib/dwfl/cni/DwflModule.o: lib/dwfl/ElfSymbolVersion.h -+lib/dwfl/jni/ElfSymbol.o: lib/dwfl/ElfSymbolVersion.h -+frysk/testbed/jni/ForkFactory.o: frysk/sys/UnhandledWaitBuilder.h -+lib/dwfl/jni/DwflModule.o: lib/dwfl/ElfSymbolVersion.h -diff --git a/frysk-sys/lib/unwind/UnwindRegistersX8664.shenum b/frysk-sys/lib/unwind/UnwindRegistersX8664.shenum -index d8803d9..c5d9d44 100644 ---- a/frysk-sys/lib/unwind/UnwindRegistersX8664.shenum -+++ b/frysk-sys/lib/unwind/UnwindRegistersX8664.shenum -@@ -2,6 +2,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2007, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -41,6 +42,9 @@ - # Generate a mkenum.sh table for the UNW_X86_64 encodings we are interested in. - cat $(dirname $0)/../../../frysk-imports/libunwind/include/libunwind-x86_64.h | awk ' - /UNW_X86_64/ { -+ # deal with #ifdef with multiple defines -+ if ($1 in found) next; -+ found[$1] = 1 - gsub(",","",$1) - gsub("UNW_X86_64_", "", $1) - printf "%s\n", $1 -diff --git a/frysk-sys/lib/unwind/jni/UnwindH.hxx b/frysk-sys/lib/unwind/jni/UnwindH.hxx -index 509cc92..4d72423 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindH.hxx -+++ b/frysk-sys/lib/unwind/jni/UnwindH.hxx -@@ -140,17 +140,28 @@ get_dyn_info_list_addr(::unw_addr_space_t as, ::unw_word_t *dilap, - static int - access_mem(::unw_addr_space_t as, ::unw_word_t addr, - ::unw_word_t *valp, int write, void *contextArg) { -+ // fprintf(stderr, "access_mem as: %p addr: %llx valp: %p write: %d context: %p\n", as, (long long) addr, valp, write, contextArg); - UNW_CONTEXT; - try { - jnixx::jbyteArray jtmp - = jnixx::jbyteArray::NewByteArray(env, sizeof(unw_word_t)); -+ // fprintf(stderr, "access_mem have jtmp\n"); - jbyteArrayElements tmp = jbyteArrayElements(env, jtmp); -- memcpy(tmp.elements(), valp, sizeof(unw_word_t)); -- tmp.release(); -+ // fprintf(stderr, "access_mem have tmp\n"); -+ { -+ jbyte *elements = tmp.elements(); -+ // fprintf(stderr, "access_mem %llx copy-in %p to %p\n", (long long) addr, valp, elements); -+ memcpy(elements, valp, sizeof(unw_word_t)); -+ tmp.release(); -+ } - int ret = addressSpace.accessMem(env, (jlong) addr, - jtmp, (jboolean) write); -- memcpy(valp, tmp.elements(), sizeof(unw_word_t)); -- tmp.release(); -+ { -+ jbyte *elements = tmp.elements(); -+ // fprintf(stderr, "access_mem %llx copy-out %p to %p\n", (long long) addr, elements, valp); -+ memcpy(valp, elements, sizeof(unw_word_t)); -+ tmp.release(); -+ } - jtmp.DeleteLocalRef(env); - return ret; - } catch (Throwable t) { -@@ -271,10 +282,10 @@ TARGET::createAddressSpace(jnixx::env env, ByteOrder byteOrder) { - resume, - get_proc_name - }; -- jlong unwAddressSpace -- = (jlong) unw_create_addr_space(&accessors, (int) byteOrder.hashCode(env)); -- logf(FINE, "createAddressSpace at %lx", (long)unwAddressSpace); -- return unwAddressSpace; -+ unw_addr_space_t as = unw_create_addr_space(&accessors, (int) byteOrder.hashCode(env)); -+ unw_set_caching_policy(as, UNW_CACHE_NONE); -+ logf(FINE, "createAddressSpace at %p", as); -+ return (jlong) as; - } - - void -@@ -466,19 +477,98 @@ TARGET::destroyProcInfo(jnixx::env env, jlong unwProcInfo) { - ::free(UNW_PROC_INFO); - } - -+/** -+ * The following are local memory image address space memory accessors -+ * used by unw_get_unwind_table and run_cfi_program to access and -+ * interpret the eh_frame_hdr. The BYTES pointer contains a SIZE byte -+ * memory mapped image. BASE, BOUND, and OFFSET define how to map -+ * accesses to that address. While perhaps not the most efficient, -+ * this should help with debugging. -+ */ -+#define IMAGE_MAGIC 0xfeed -+struct image { -+ int magic; -+ char *name; -+ char *bytes; -+ size_t size; -+ unw_word_t base; -+ unw_word_t bound; -+ unw_word_t offset; -+ image(const char *name, char* bytes, size_t size, unw_word_t base, unw_word_t bound, unw_word_t offset) { -+ this->magic = IMAGE_MAGIC; -+ this->name = strdup(name); -+ this->bytes = bytes; -+ this->size = size; -+ this->base = base; -+ this->bound = bound; -+ this->offset = offset; -+ } -+}; -+ -+static int -+image_access_mem(unw_addr_space_t as, unw_word_t addr, -+ unw_word_t *val, int write, void *arg) { -+ struct image *image = (struct image*) arg; -+ if (image->magic != IMAGE_MAGIC) { -+ fprintf(stderr, "%s: bad magic number\n", __func__); -+ return -UNW_EINVAL; -+ } -+ // Writing is not supported -+ if (write) -+ return -UNW_EINVAL; -+ if (addr < image->base || addr > image->bound - sizeof(unw_word_t)) { -+ fprintf(stderr, "%s: addr %llx out of bounds [%llx..%llx)\n", __func__, -+ (long long) addr, (long long) image->base, (long long) image->bound); -+ return -UNW_EINVAL; -+ } -+ unw_word_t offset = (addr - image->base) + image->offset; -+ if (offset < 0 || offset > image->size - sizeof(unw_word_t)) { -+ fprintf(stderr, "%s: offset: %llx out of bounds [0..%llx)\n", __func__, -+ (long long) offset, (long long) image->size); -+ return -UNW_EINVAL; -+ } -+ if (offset & (sizeof(unw_word_t) - 1)) { -+ fprintf(stderr, "%s: offset: %llx not aligned to word boundary %zx\n", __func__, -+ (long long) offset, sizeof(unw_word_t) - 1); -+ return -UNW_EINVAL; -+ } -+ // fprintf(stderr, "%s: %s addr: %llx offset: %llx\n", __func__, image->name, (long long) addr, (long long) offset); -+ *val = *(unw_word_t *) (image->bytes + offset); -+ return UNW_ESUCCESS; -+} -+ -+static void -+image_put_unwind_info(::unw_addr_space_t as, ::unw_proc_info_t *proc_info, -+ void *arg) { -+ struct image *image = (struct image*) arg; -+ if (image->magic != IMAGE_MAGIC) { -+ fprintf(stderr, "%s: bad magic number\n", __func__); -+ return; -+ } -+ munmap(image->bytes, image->size); -+ ::free(image->name); -+ ::free(image); -+} -+ -+static unw_accessors_t image_accessors = { -+ NULL, image_put_unwind_info, NULL, image_access_mem, NULL, NULL, NULL, NULL -+}; -+ - // Return NULL when eh_frame_hdr cannot be found. - // Also fills in ip->start_ip, ip->end_ip and ip->gp. - // peh_vaddr will point to the address of the eh_frame_hdr in the main - // address space of the inferior. --static char * --get_eh_frame_hdr_addr(jnixx::env env, unw_proc_info_t *pi, -- char *image, size_t size, -- unsigned long segbase, unw_word_t *peh_vaddr) -+static struct image * -+get_eh_frame_hdr_addr(jnixx::env env, frysk::rsl::Log fine, const char *name, -+ unw_proc_info_t *pi, -+ char *bytes, size_t size, -+ unw_word_t segbase, unw_word_t segbound, -+ unw_word_t segoffset, unw_word_t *peh_vaddr) - { - if (elf_version(EV_CURRENT) == EV_NONE) - return NULL; - -- Elf *elf = elf_memory(image, size); -+ Elf *elf = elf_memory(bytes, size); - if (elf == NULL) - return NULL; - -@@ -494,8 +584,14 @@ get_eh_frame_hdr_addr(jnixx::env env, unw_proc_info_t *pi, - - switch (phdr.p_type) { - case PT_LOAD: -- if (phdr.p_vaddr == segbase) -- ptxt_ndx = i; -+ if ((long long)segoffset == (long long) -1) { -+ // I suspect this was to handle the old pre-link hack? -+ if (phdr.p_vaddr == segbase) -+ ptxt_ndx = i; -+ } else { -+ if (phdr.p_offset == segoffset) -+ ptxt_ndx = i; -+ } - break; - - case PT_GNU_EH_FRAME: -@@ -537,10 +633,11 @@ get_eh_frame_hdr_addr(jnixx::env env, unw_proc_info_t *pi, - if (gelf_getphdr (elf, peh_hdr_ndx, &peh_hdr) == NULL) - return NULL; - -+ /* For dynamicly linked executables and shared libraries, DT_PLTGOT -+ is the value that data-relative addresses are relative to for -+ that object. We call this the "gp". */ -+ unw_word_t gp = 0; - if (pdyn_ndx != -1) { -- /* For dynamicly linked executables and shared libraries, -- DT_PLTGOT is the value that data-relative addresses are -- relative to for that object. We call this the "gp". */ - GElf_Phdr pdyn; - if (gelf_getphdr (elf, pdyn_ndx, &pdyn) == NULL) - return NULL; -@@ -567,7 +664,7 @@ get_eh_frame_hdr_addr(jnixx::env env, unw_proc_info_t *pi, - if (dyn.d_tag == DT_PLTGOT) { - /* Assume that _DYNAMIC is writable and GLIBC has - relocated it (true for x86 at least). */ -- pi->gp = dyn.d_un.d_ptr; -+ gp = dyn.d_un.d_ptr; - break; - } - } -@@ -575,128 +672,63 @@ get_eh_frame_hdr_addr(jnixx::env env, unw_proc_info_t *pi, - /* Otherwise this is a static executable with no _DYNAMIC. Assume - that data-relative addresses are relative to 0, i.e., - absolute. */ -- pi->gp = 0; -+ gp = 0; - } - -+ pi->gp = gp; - pi->start_ip = segbase; -- pi->end_ip = segbase + ptxt.p_memsz; -- -- *peh_vaddr = peh_hdr.p_vaddr; -+ if (segbound > segbase + ptxt.p_memsz) { -+ segbound = segbase + ptxt.p_memsz; -+ logf(env, fine, "adjusted segbound to %llx using p_memsz", (long long)segbound); -+ } -+ pi->end_ip = segbound; -+ pi->format = UNW_INFO_FORMAT_REMOTE_TABLE; -+ pi->flags = 0; - -- char *hdr; - if (debug_frame_data != NULL && debug_frame_data->d_buf != NULL - && debug_frame_data->d_size != 0) { -- pi->format = UNW_INFO_FORMAT_TABLE; -- pi->unwind_info_size = debug_frame_data->d_size / sizeof (unw_word_t); -- hdr = (char *) debug_frame_data->d_buf; -- } else { -- pi->format = UNW_INFO_FORMAT_REMOTE_TABLE; -- hdr = image + peh_hdr.p_offset; -- } -- return hdr; --} -- --/** -- * The following are local memory image address space memory accessors -- * used by unw_get_unwind_table and run_cfi_program to access and -- * interpret the eh_frame_hdr. The arg pointer contains an image -- * descriptor, ADDR is the offset into the eh-frame table within the -- * image. -- */ --#define IMAGE_MAGIC 0xfeed --struct image { -- int magic; -- void *bytes; -- size_t size; -- char *table; -- image(void* bytes, size_t size) { -- this->magic = IMAGE_MAGIC; -- this->bytes = bytes; -- this->size = size; -- } --}; -- --static int --image_access_mem(unw_addr_space_t as, unw_word_t addr, -- unw_word_t *val, int write, void *arg) { -- struct image *image = (struct image*) arg; -- if (image->magic != IMAGE_MAGIC) { -- fprintf(stderr, "%s: bad magic number\n", __func__); -- return -UNW_EINVAL; -- } -- // Writing is not supported -- if (write) -- return -UNW_EINVAL; -- else -- *val = *(unw_word_t *) (image->table + addr); -- return UNW_ESUCCESS; --} -- --static void --image_put_unwind_info(::unw_addr_space_t as, ::unw_proc_info_t *proc_info, -- void *arg) { -- struct image *image = (struct image*) arg; -- if (image->magic != IMAGE_MAGIC) { -- fprintf(stderr, "%s: bad magic number\n", __func__); -- return; -+ pi->flags |= UNW_PI_FLAG_DEBUG_FRAME; -+ *peh_vaddr = 0; -+ logf(env, fine, "frame table at %llx", (long long) *peh_vaddr); -+ return new image(name, bytes, size, 0, size, 0); -+ } else { -+ // There was code setting this to just "peh_hdr.p_vaddr", I -+ // suspect that is pre-link related. -+ *peh_vaddr = segbase + peh_hdr.p_vaddr; -+ logf(env, fine, "unwind table at %llx", (long long) *peh_vaddr); -+ return new image(name, bytes, size, segbase, segbound, segoffset); - } -- munmap(image->bytes, image->size); -- ::free(image); - } - --static unw_accessors_t image_accessors = { -- NULL, image_put_unwind_info, NULL, image_access_mem, NULL, NULL, NULL, NULL --}; -- - static jint - fillProcInfoFromImage(jnixx::env env, frysk::rsl::Log fine, - const char* name, -- unw_proc_info_t* unwProcInfo, -- jlong ip, -+ unw_proc_info_t* pi, - jboolean needUnwindInfo, -- void *bytes, -- long size, -- long segbase) { -- logf(env, fine, "fillProcInfoFromImage" -- " %s unwProcInfo %lx, ip %lx, bytes %p, size %ld, segBase %lx", -- name, (long) UNW_PROC_INFO, (long)ip, bytes, size, segbase); -+ void *bytes, size_t size, unw_word_t ip, -+ unw_word_t segbase, unw_word_t segbound, unw_word_t segoffset) { -+ logf(env, fine, -+ "fillProcInfoFromImage %s pi: %p bytes: %p size: %zd ip: %llx segbase: %llx segbound: %llx segoffset: %llx", -+ name, pi, bytes, size, (long long) ip, -+ (long long) segbase, (long long) segbound, (long long) segoffset); - -- unw_word_t peh_vaddr = 0; -- char *eh_table_hdr = get_eh_frame_hdr_addr(env, UNW_PROC_INFO, -- (char *) bytes, -- size, segbase, -- &peh_vaddr); -- if (eh_table_hdr == NULL) { -+ unw_word_t peh_vaddr; -+ struct image *image = get_eh_frame_hdr_addr(env, fine, name, pi, (char*)bytes, size, -+ segbase, segbound, segoffset, -+ &peh_vaddr); -+ if (image == NULL) { - logf(env, fine, "get_eh_frame_hdr failed"); - munmap(bytes, size); - return -UNW_ENOINFO; - } - -- struct image *image = new struct image(bytes, size); -- -- int ret; -- if (UNW_PROC_INFO->format == UNW_INFO_FORMAT_REMOTE_TABLE) { -- // address adjustment -- image->table = eh_table_hdr - peh_vaddr; -- ret = unw_get_unwind_table((unw_word_t) ip, -- UNW_PROC_INFO, -- (int) needUnwindInfo, -- &image_accessors, -- // virtual address -- peh_vaddr, -- image); -- } else { -- image->table = eh_table_hdr; -- ret = unw_get_unwind_table((unw_word_t) ip, -- UNW_PROC_INFO, -- (int) needUnwindInfo, -- &image_accessors, -- // virtual address -- 0, -- // address adjustment -- image); -- } -- logf(env, fine, "Post unw_get_unwind_table %d", ret); -+ unw_addr_space_t image_as = unw_create_addr_space(&image_accessors, 0); -+ unw_set_caching_policy(image_as, UNW_CACHE_NONE); -+ int ret = unw_get_unwind_table((unw_word_t) ip, pi, -+ (int) needUnwindInfo, -+ peh_vaddr, -+ image_as, image); -+ logf(env, fine, "post unw_get_unwind_table %d", ret); - return ret; - } - -@@ -706,21 +738,19 @@ TARGET::fillProcInfoFromVDSO(jnixx::env env, jlong unwProcInfo, jlong ip, - AddressSpace addressSpace, - jlong lowAddress, jlong highAddress, - jlong offset) { -- logf(FINE, "fillProcInfoFromVDSO" -- " segbase: 0x%lx, highAddress: 0x%lx, mapoff: 0x%lx", -- (unsigned long) lowAddress, (unsigned long) highAddress, -- (unsigned long) offset); -- void *image; -- size_t size; -+ logf(FINE, "fillProcInfoFromVDSO segbase: %llx segbound: %llx segoffset: %llx", -+ (long long) lowAddress, (long long) highAddress, (long long) offset); -+ void *image; - unw_word_t magic; - unw_accessors_t *a; -- unsigned long segbase = (unsigned long) lowAddress; -- unsigned long hi = (unsigned long) highAddress; - -- size = hi - segbase; -+ unw_word_t segbase = (unw_word_t) lowAddress; -+ unw_word_t segbound = (unw_word_t) highAddress; -+ unw_word_t segoffset = (unw_word_t) offset; -+ unw_word_t size = (unw_word_t) (segbound - segbase); - if (size > MAX_VDSO_SIZE) - return -UNW_ENOINFO; -- logf(FINE, "checked size, 0x%lx", (unsigned long) size); -+ logf(FINE, "checked size, 0x%llx", (long long) size); - - logf(FINE, "checking access_mem"); - unw_addr_space_t as = (unw_addr_space_t) addressSpace.GetUnwAddressSpace(env); -@@ -735,7 +765,7 @@ TARGET::fillProcInfoFromVDSO(jnixx::env env, jlong unwProcInfo, jlong ip, - return -UNW_ENOINFO; - if (sizeof (magic) >= SELFMAG) { - // Read the VDSO from the target. -- int ret = (*a->access_mem) (as, (unw_word_t) segbase, &magic, -+ int ret = (*a->access_mem) (as, segbase, &magic, - 0, (void *) addressSpace._object); - if (ret < 0) { - logf(FINE, "error accessing VDSO %d", ret); -@@ -754,6 +784,7 @@ TARGET::fillProcInfoFromVDSO(jnixx::env env, jlong unwProcInfo, jlong ip, - return -UNW_ENOINFO; - - logf(FINE, "checked magic"); -+ unw_word_t hi; - if (sizeof (magic) >= SELFMAG) { - *(unw_word_t *)image = magic; - hi = sizeof (magic); -@@ -764,8 +795,8 @@ TARGET::fillProcInfoFromVDSO(jnixx::env env, jlong unwProcInfo, jlong ip, - logf(FINE, "reading in VDSO"); - for (; hi < size; hi += sizeof (unw_word_t)) { - logf(env, GetFinest(env), -- "Reading memory segbase: 0x%lx, image: %p, hi: 0x%lx, at: 0x%lx to location: %p", -- segbase , image , hi, segbase+hi, (char *) image + hi); -+ "Reading memory segbase: 0x%llx, image: %p, hi: 0x%llx, at: 0x%llx to location: %p", -+ (long long) segbase, image, (long long) hi, (long long) segbase + hi, (char *) image + hi); - int ret = (*a->access_mem) (as, segbase + hi, - (unw_word_t *) ((char *) image + hi), - 0, (void *) addressSpace._object); -@@ -776,8 +807,9 @@ TARGET::fillProcInfoFromVDSO(jnixx::env env, jlong unwProcInfo, jlong ip, - } - } - -- return fillProcInfoFromImage(FINE, "[vdso]", UNW_PROC_INFO, ip, -- needUnwindInfo, image, size, segbase); -+ return fillProcInfoFromImage(FINE, "[vdso]", UNW_PROC_INFO, -+ needUnwindInfo, image, size, -+ ip, segbase, segbound, segoffset); - } - - jint -@@ -785,8 +817,8 @@ TARGET::fillProcInfoFromElfImage(jnixx::env env, jlong unwProcInfo, jlong ip, - bool needUnwindInfo, - AddressSpace addressSpace, - String elfImageName, -- jlong segbase, jlong hi, -- jlong mapoff) { -+ jlong segbase, jlong segbound, -+ jlong segoffset) { - logf(FINE, "fillProcInfoFromElfImage"); - struct stat stat; - void *image; /* pointer to mmap'd image */ -@@ -821,8 +853,9 @@ TARGET::fillProcInfoFromElfImage(jnixx::env env, jlong unwProcInfo, jlong ip, - } - ::close(fd); - -- return fillProcInfoFromImage(FINE, name.elements(), UNW_PROC_INFO, ip, -- needUnwindInfo, image, size, segbase); -+ return fillProcInfoFromImage(FINE, name.elements(), UNW_PROC_INFO, -+ needUnwindInfo, image, size, -+ ip, segbase, segbound, segoffset); - } - - jint diff --git a/frysk-0.4-missing-javah-cni-built.patch b/frysk-0.4-missing-javah-cni-built.patch deleted file mode 100644 index 2b3950a..0000000 --- a/frysk-0.4-missing-javah-cni-built.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -up frysk-0.4/frysk-sys/Makefile.am.missing-javah-cni-built frysk-0.4/frysk-sys/Makefile.am ---- frysk-0.4/frysk-sys/Makefile.am.missing-javah-cni-built 2013-02-14 21:33:35.397666535 -0500 -+++ frysk-0.4/frysk-sys/Makefile.am 2013-02-14 21:59:36.968325166 -0500 -@@ -87,3 +87,7 @@ JNIXX_CLASSES += lib.unwind.UnwindRegist - JNIXX_CLASSES += lib.unwind.UnwindRegistersPPC64 - JNIXX_CLASSES += lib.unwind.UnwindRegistersX86 - JNIXX_CLASSES += lib.unwind.UnwindRegistersX8664 -+# Some JAVAH files don't get generated as they are hidden includes -+lib/dwfl/cni/ElfSymbol.o: lib/dwfl/ElfSymbolVersion.h -+frysk/testbed/cni/ForkFactory.o: frysk/sys/UnhandledWaitBuilder.h -+lib/dwfl/cni/DwflModule.o: lib/dwfl/ElfSymbolVersion.h diff --git a/frysk-0.4-no-jdom.patch b/frysk-0.4-no-jdom.patch deleted file mode 100644 index f97d01d..0000000 --- a/frysk-0.4-no-jdom.patch +++ /dev/null @@ -1,101 +0,0 @@ -diff -up frysk-0.4/frysk-core/frysk/debuginfo/DebugInfoFrame.java.no-jdom frysk-0.4/frysk-core/frysk/debuginfo/DebugInfoFrame.java ---- frysk-0.4/frysk-core/frysk/debuginfo/DebugInfoFrame.java.no-jdom 2013-02-12 20:45:26.849514083 -0500 -+++ frysk-0.4/frysk-core/frysk/debuginfo/DebugInfoFrame.java 2013-02-12 20:45:54.585387049 -0500 -@@ -47,7 +47,6 @@ import lib.dwfl.DwarfDie; - import lib.dwfl.Dwfl; - import lib.dwfl.DwflDie; - import frysk.dwfl.DwflCache; --import frysk.rt.LineXXX; - import frysk.scopes.Function; - import frysk.scopes.Scope; - import frysk.scopes.ScopeFactory; -@@ -172,20 +171,6 @@ public class DebugInfoFrame extends Fram - } - private SourceLocation line; - -- /** -- * XXX: This function should not be used DOM information (LineXXX) -- * should be moved out of DebugInfoFrame. -- * @return -- */ -- public LineXXX getLineXXX(){ -- if (this.getLine() == SourceLocation.UNKNOWN) -- return null; -- if (this.lineXXX == null) -- this.lineXXX = new LineXXX(this.getLine(), this.getTask().getProc()); -- return lineXXX; -- } -- private LineXXX lineXXX; -- - public void toPrint(PrintWriter writer, - PrintDebugInfoStackOptions options) { - Function subprogram = this.getSubprogram(); -diff -up frysk-0.4/frysk-core/frysk/dom/DOMCommon.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMCommon.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMCompilerSuffixes.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMCompilerSuffixes.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMFactory.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMFactory.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMFrysk.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMFrysk.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMFunction.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMFunction.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMImage.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMImage.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMInlineInstance.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMInlineInstance.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMLine.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMLine.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMSource.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMSource.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMTag.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMTag.java -diff -up frysk-0.4/frysk-core/frysk/dom/DOMTagTypes.java.no-jdom frysk-0.4/frysk-core/frysk/dom/DOMTagTypes.java -diff -up frysk-0.4/frysk-core/frysk/dom/StaticParser.java.no-jdom frysk-0.4/frysk-core/frysk/dom/StaticParser.java -diff -up frysk-0.4/frysk-core/frysk/dom/TestDOM.java.no-jdom frysk-0.4/frysk-core/frysk/dom/TestDOM.java -diff -up frysk-0.4/frysk-core/frysk/rt/LineXXX.java.no-jdom frysk-0.4/frysk-core/frysk/rt/LineXXX.java -diff -up frysk-0.4/frysk-core/Makefile.am.no-jdom frysk-0.4/frysk-core/Makefile.am ---- frysk-0.4/frysk-core/Makefile.am.no-jdom 2013-02-12 21:15:45.382563609 -0500 -+++ frysk-0.4/frysk-core/Makefile.am 2013-02-12 21:15:59.743111685 -0500 -@@ -46,13 +46,11 @@ GEN_CLASSPATH += ../frysk-imports/jline. - GEN_CLASSPATH += ../frysk-imports/antlr.jar - GEN_CLASSPATH += ../frysk-imports/junit.jar - GEN_CLASSPATH += ../frysk-imports/getopt.jar --GEN_CLASSPATH += ../frysk-imports/jdom.jar - GEN_GCJ_LDADD_LIST += ../frysk-sys/libfrysk-sys.a - GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-jline.a - GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-antlr.a - GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a - GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-jdom.a - if USE_LIBUNWIND - GEN_GCJ_LDADD_LIST += ../frysk-imports/libunwind-i386/src/.libs/libunwind-x86.a \ - ../frysk-imports/libunwind-x86_64/src/.libs/libunwind-x86_64.a \ -diff -up frysk-0.4/frysk-imports/bootstrap.sh.no-jdom frysk-0.4/frysk-imports/bootstrap.sh ---- frysk-0.4/frysk-imports/bootstrap.sh.no-jdom 2013-02-12 20:39:47.730169245 -0500 -+++ frysk-0.4/frysk-imports/bootstrap.sh 2013-02-12 20:40:00.271780513 -0500 -@@ -43,7 +43,6 @@ set -e - FILE_LIST="\ - junit/junit.jar \ - ANTLR_JAR \ -- JDOM_JAR \ - jline/jline.jar \ - getopt/getopt.jar \ - " -diff -up frysk-0.4/frysk-imports/configure.ac.no-jdom frysk-0.4/frysk-imports/configure.ac ---- frysk-0.4/frysk-imports/configure.ac.no-jdom 2013-02-12 20:39:33.993600147 -0500 -+++ frysk-0.4/frysk-imports/configure.ac 2013-02-12 20:40:14.883332957 -0500 -@@ -47,7 +47,6 @@ m4_include([common/frysk-common.ac]) - AM_INIT_AUTOMAKE([subdir-objects foreign no-installinfo no-exeext no-dist]) - - AC_FIND_FILE([antlr.jar], [/usr/share/java /usr/share/frysk/java], ANTLR_JAR) --AC_FIND_FILE([jdom.jar], [/usr/share/java /usr/share/frysk/java], JDOM_JAR) - AC_FIND_FILE([libaudit.h], [/usr/include/], LIBAUDIT_H) - - AC_CONFIG_FILES([ -diff -up frysk-0.4/frysk-sys/Makefile.am.no-jdom frysk-0.4/frysk-sys/Makefile.am ---- frysk-0.4/frysk-sys/Makefile.am.no-jdom 2013-02-12 21:15:09.854684413 -0500 -+++ frysk-0.4/frysk-sys/Makefile.am 2013-02-12 21:15:33.195948344 -0500 -@@ -47,12 +47,10 @@ GEN_CLASSPATH += ../frysk-imports/jline. - GEN_CLASSPATH += ../frysk-imports/antlr.jar - GEN_CLASSPATH += ../frysk-imports/junit.jar - GEN_CLASSPATH += ../frysk-imports/getopt.jar --GEN_CLASSPATH += ../frysk-imports/jdom.jar - GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-jline.a - GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-antlr.a - GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a - GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a --GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-jdom.a - if USE_LIBUNWIND - GEN_GCJ_LDADD_LIST += ../frysk-imports/libunwind-i386/src/.libs/libunwind-x86.a \ - ../frysk-imports/libunwind-x86_64/src/.libs/libunwind-x86_64.a \ diff --git a/frysk-0.4-nopkglibdir.patch b/frysk-0.4-nopkglibdir.patch deleted file mode 100644 index b6f2b78..0000000 --- a/frysk-0.4-nopkglibdir.patch +++ /dev/null @@ -1,233 +0,0 @@ -diff -up frysk-0.4/frysk-common/Makefile.gen.sh.nopkglibdir frysk-0.4/frysk-common/Makefile.gen.sh ---- frysk-0.4/frysk-common/Makefile.gen.sh.nopkglibdir 2012-02-11 23:00:39.095000078 -0500 -+++ frysk-0.4/frysk-common/Makefile.gen.sh 2012-02-11 23:00:39.544000078 -0500 -@@ -225,7 +225,10 @@ echo_PROGRAMS () - *dir/* ) - # extract the directory prefix - local dir=`echo /"$1" | sed -e 's,.*/\([a-z]*\)dir/.*,\1,'` -- echo "${dir}_PROGRAMS += $1" -+ case $dir in -+ pkglib ) echo "noinst_PROGRAMS += $1" ;; -+ * ) echo "${dir}_PROGRAMS += $1" ;; -+ esac - ;; - * ) - echo "noinst_PROGRAMS += $1" -@@ -726,8 +729,16 @@ do - do - d=`dirname $file` - b=`basename $file ${suffix}` -- echo `expr $d : '.*/\([a-z]*\)dir'`_SCRIPTS += $d/$b -- check_MANS $d/$b -+ dir=`expr $d : '.*/\([a-z]*\)dir'` -+ case $dir in -+ pkglib ) -+ echo noinst_SCRIPTS += $d/$b -+ ;; -+ * ) -+ echo "${dir}_SCRIPTS += $d/$b" -+ check_MANS $d/$b -+ ;; -+ esac - cat < /dev/null 2>&1 - XFAIL_TESTS = - PASS_TESTS = diff --git a/frysk-0.4-per-thread-java-id.patch b/frysk-0.4-per-thread-java-id.patch deleted file mode 100644 index 8eafa61..0000000 --- a/frysk-0.4-per-thread-java-id.patch +++ /dev/null @@ -1,152 +0,0 @@ ---- frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java.jmethodid 2016-04-06 16:06:04.482142069 -0400 -+++ frysk-0.4/frysk-sys/jnixx/PrintHxxDefinitions.java 2016-04-06 16:12:30.247740400 -0400 -@@ -1,5 +1,6 @@ - // This file is part of the program FRYSK. - // -+// Copyright 2016, Andrew Cagney - // Copyright 2008, Red Hat Inc. - // - // FRYSK is free software; you can redistribute it and/or modify it -@@ -75,27 +76,20 @@ - if (isStatic) { - p.println("jclass _class = _class_(_env);"); - } else { -- p.print("if (_class == NULL)"); -- while (p.dent(1, "{", "}")) { -- p.println("_class = _class_(_env);"); -- } -+ p.println("jclass _class = _env.GetObjectClass(_object);"); - } -- p.print("if ("); -+ p.print("jfieldID "); - p.printID(field); -- p.print(" == NULL)"); -- while (p.dent(1, "{", "}")) { -- p.printID(field); -- p.print(" = _env.Get"); -- if (isStatic) { -- p.print("Static"); -- } -- p.print("FieldID(_class, \""); -- p.print(field.getName()); -- p.print("\", \""); -- p.printJniSignature(type); -- p.print("\""); -- p.println(");"); -+ p.print(" = _env.Get"); -+ if (isStatic) { -+ p.print("Static"); - } -+ p.print("FieldID(_class, \""); -+ p.print(field.getName()); -+ p.print("\", \""); -+ p.printJniSignature(type); -+ p.print("\""); -+ p.println(");"); - if (get) { - p.printJniType(type); - p.print(" ret = "); -@@ -135,33 +129,22 @@ - p.printFormalCxxParameters(method, true); - p.print(")"); - while (p.dent(0, "{", "}")) { -- p.print("static jmethodID "); -- p.printID(method); -- p.println(";"); - if (isStatic) { - p.println("jclass _class = _class_(_env);"); -+ } else { -+ p.println("jclass _class = _env.GetObjectClass(_object);"); - } -- p.print("if ("); -+ p.print("jmethodID "); - p.printID(method); -- p.print(" == NULL)"); -- while (p.dent(1, "{", "}")) { -- if (!isStatic) { -- p.print("if (_class == NULL)"); -- while (p.dent(2, "{", "}")) { -- p.println("_class = _class_(_env);"); -- } -- } -- p.printID(method); -- p.print(" = _env.Get"); -- if (isStatic) { -- p.print("Static"); -- } -- p.print("MethodID(_class, \""); -- p.print(method.getName()); -- p.print("\", \""); -- p.printJniSignature(method); -- p.println("\");"); -+ p.print(" = _env.Get"); -+ if (isStatic) { -+ p.print("Static"); - } -+ p.print("MethodID(_class, \""); -+ p.print(method.getName()); -+ p.print("\", \""); -+ p.printJniSignature(method); -+ p.println("\");"); - if (returnType != Void.TYPE) { - if (returnType.isPrimitive()) { - p.printJniType(returnType); -@@ -201,18 +184,11 @@ - p.print(")"); - while (p.dent(0, "{", "}")) { - p.println("jclass _class = _class_(_env);"); -- p.print("static jmethodID "); -- p.printID(constructor); -- p.println(";"); -- p.print("if ("); -+ p.print("jmethodID "); - p.printID(constructor); -- p.print(" == NULL)"); -- while (p.dent(1, "{", "}")) { -- p.printID(constructor); -- p.print(" = _env.GetMethodID(_class, \"\", \"("); -- p.printJniSignature(constructor.getParameterTypes()); -- p.println(")V\");"); -- } -+ p.print(" = _env.GetMethodID(_class, \"\", \"("); -+ p.printJniSignature(constructor.getParameterTypes()); -+ p.println(")V\");"); - p.print("jobject object = _env.NewObject("); - p.printActualJniParameters(constructor); - p.println(");"); ---- frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java.jmethodid 2016-04-06 16:22:40.595194032 -0400 -+++ frysk-0.4/frysk-sys/jnixx/PrintDeclarations.java 2016-04-06 16:25:16.964016994 -0400 -@@ -88,9 +88,6 @@ - } - public void acceptField(Field field) { - p.println(); -- p.print("private: static jfieldID "); -- p.printID(field); -- p.println("; public:"); - printCxxFieldAccessorDeclaration(field, true); - if (!Modifier.isFinal(field.getModifiers())) { - printCxxFieldAccessorDeclaration(field, false); -@@ -143,8 +140,6 @@ - p.printGlobalCxxName(parent); - p.println("() { }"); - } -- // cached per-instance copy - a local-ref -- p.println("private: jclass _class = NULL;"); - // Static get-class method - a class knows its own class. - p.println("public: static inline jclass _class_(::jnixx::env _env);"); - JniBindings.printDeclarations(p, klass); ---- frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java.jmethodid 2016-04-06 16:32:15.056208875 -0400 -+++ frysk-0.4/frysk-sys/jnixx/PrintCxxDefinitions.java 2016-04-06 16:33:01.466564144 -0400 -@@ -137,12 +137,6 @@ - void acceptConstructor(Constructor constructor) { - } - void acceptField(Field field) { -- p.println(); -- p.print("jfieldID "); -- p.printGlobalCxxName(field.getDeclaringClass()); -- p.print("::"); -- p.printID(field); -- p.println(";"); - } - void acceptClass(Class klass) { - } diff --git a/frysk-0.4-pic-asm.patch b/frysk-0.4-pic-asm.patch deleted file mode 100644 index 8b53917..0000000 --- a/frysk-0.4-pic-asm.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff -up frysk-0.4/frysk-core/Makefile.am.pic-asm frysk-0.4/frysk-core/Makefile.am ---- frysk-0.4/frysk-core/Makefile.am.pic-asm 2015-08-17 15:29:36.749569562 -0400 -+++ frysk-0.4/frysk-core/Makefile.am 2015-08-17 15:33:00.545752668 -0400 -@@ -191,16 +191,15 @@ frysk/pkglibdir/funit-cpp-scopes-class-n - - # Create executables for symbol tests for TestSymbol.java. - --noinst_PROGRAMS += frysk/pkglibdir/funit-symbols-nodebug --frysk_pkglibdir_funit_symbols_nodebug_SOURCES = --frysk/pkglibdir/funit-symbols-nodebug: frysk/pkglibdir/funit-symbols -- strip --strip-debug -o $@ frysk/pkglibdir/funit-symbols -- -- --noinst_PROGRAMS += frysk/pkglibdir/funit-symbols-stripped --frysk_pkglibdir_funit_symbols_stripped_SOURCES = --frysk/pkglibdir/funit-symbols-stripped: frysk/pkglibdir/funit-symbols -- strip -o $@ frysk/pkglibdir/funit-symbols -+# noinst_PROGRAMS += frysk/pkglibdir/funit-symbols-nodebug -+# frysk_pkglibdir_funit_symbols_nodebug_SOURCES = -+# frysk/pkglibdir/funit-symbols-nodebug: frysk/pkglibdir/funit-symbols -+# strip --strip-debug -o $@ frysk/pkglibdir/funit-symbols -+ -+# noinst_PROGRAMS += frysk/pkglibdir/funit-symbols-stripped -+# frysk_pkglibdir_funit_symbols_stripped_SOURCES = -+# frysk/pkglibdir/funit-symbols-stripped: frysk/pkglibdir/funit-symbols -+# strip -o $@ frysk/pkglibdir/funit-symbols - - # Create executable for list tests for TestListCommand.java - diff --git a/frysk-0.4-python3.patch b/frysk-0.4-python3.patch deleted file mode 100644 index 66d51c4..0000000 --- a/frysk-0.4-python3.patch +++ /dev/null @@ -1,99 +0,0 @@ -diff --git a/frysk-core/frysk/debuginfo/TestTypeFactory.java-sh b/frysk-core/frysk/debuginfo/TestTypeFactory.java-sh -index 11e51ed5a..38a40ff97 100644 ---- a/frysk-core/frysk/debuginfo/TestTypeFactory.java-sh -+++ b/frysk-core/frysk/debuginfo/TestTypeFactory.java-sh -@@ -38,4 +38,4 @@ - # version and license this file solely under the GPL without - # exception. - --python $(dirname $0)/gen-type-expect-tests.py frysk/pkglibdir/funit-type-entry.c $(dirname $0)/../pkglibdir/funit-type-class.cxx -+python3 $(dirname $0)/gen-type-expect-tests.py frysk/pkglibdir/funit-type-entry.c $(dirname $0)/../pkglibdir/funit-type-class.cxx -diff --git a/frysk-core/frysk/debuginfo/gen-type-expect-tests.py b/frysk-core/frysk/debuginfo/gen-type-expect-tests.py -index 6163edcce..f0a81617f 100644 ---- a/frysk-core/frysk/debuginfo/gen-type-expect-tests.py -+++ b/frysk-core/frysk/debuginfo/gen-type-expect-tests.py -@@ -1,4 +1,4 @@ --#!/usr/bin/python -+#!/usr/bin/python3 - - # This file is part of the program FRYSK. - # -@@ -48,7 +48,7 @@ class j: - def open(self): - self.name = "TestTypeFactory" - def write(self,str): -- print str -+ print(str) - def prologue(self,): - print('''// Generated by gen-type-expect-tests.py - -@@ -145,7 +145,7 @@ public class %s extends TestLib { - ######################################################################## - - def usage (): -- print "Usage " + sys.argv[0] + " <-help> OutputFile File ..." -+ print("Usage " + sys.argv[0] + " <-help> OutputFile File ...") - sys.exit(1) - - def open_file (arg): -@@ -154,7 +154,7 @@ def open_file (arg): - try: - file = open(sys.argv[arg], 'r') - except IOError: -- print (sys.argv[arg] + " not found") -+ print(sys.argv[arg] + " not found") - sys.exit(1) - return file - -@@ -162,18 +162,18 @@ if (len (sys.argv) == 1): - usage() - for t in sys.argv: - if (t == "-help"): -- print "Builds TestTypeFactory*.java from input files, using annotations" -- print "in the input files to describe the data type to be tested." -- print "e.g. Given:" -- print "static struct {" -- print " int int_var;" -- print "} arr_struct [2] = {{1},{2}};" -- print "One would use the annotation:" -- print "// Name: arr_struct" -- print "// Value: {{1},{2}}" -- print "// Type: struct {" -- print "// Type: int int_var;" -- print "// Type: } [2]" -+ print("Builds TestTypeFactory*.java from input files, using annotations") -+ print("in the input files to describe the data type to be tested.") -+ print("e.g. Given:") -+ print("static struct {") -+ print(" int int_var;") -+ print("} arr_struct [2] = {{1},{2}};") -+ print("One would use the annotation:") -+ print("// Name: arr_struct") -+ print("// Value: {{1},{2}}") -+ print("// Type: struct {") -+ print("// Type: int int_var;") -+ print("// Type: } [2]") - usage() - elif (t.startswith("-")): - usage() -diff --git a/frysk-core/frysk/pkglibdir/funit-type-entry.c-sh b/frysk-core/frysk/pkglibdir/funit-type-entry.c-sh -index 2e7ca2e98..00270c9c7 100644 ---- a/frysk-core/frysk/pkglibdir/funit-type-entry.c-sh -+++ b/frysk-core/frysk/pkglibdir/funit-type-entry.c-sh -@@ -1,4 +1,4 @@ - #!/bin/sh - - # main() # marker so this is know to have a main. --python $(dirname $0)/gen-type-funit-tests.py -+python3 $(dirname $0)/gen-type-funit-tests.py -diff --git a/frysk-core/frysk/pkglibdir/gen-type-funit-tests.py b/frysk-core/frysk/pkglibdir/gen-type-funit-tests.py -index e7e1b7a50..2de6b5e3d 100644 ---- a/frysk-core/frysk/pkglibdir/gen-type-funit-tests.py -+++ b/frysk-core/frysk/pkglibdir/gen-type-funit-tests.py -@@ -1,4 +1,5 @@ --#!/usr/bin/python -+#!/usr/bin/python3 -+ - # This file is part of the program FRYSK. - # - # Copyright 2007, 2008, Red Hat Inc. diff --git a/frysk-0.4-sodwfl.patch b/frysk-0.4-sodwfl.patch index 10f5209..b4198f3 100644 --- a/frysk-0.4-sodwfl.patch +++ b/frysk-0.4-sodwfl.patch @@ -1,7 +1,7 @@ diff -up frysk-0.4/frysk-common/Makefile.rules.sodwfl frysk-0.4/frysk-common/Makefile.rules ---- frysk-0.4/frysk-common/Makefile.rules.sodwfl 2012-02-11 21:37:13.468000053 -0500 -+++ frysk-0.4/frysk-common/Makefile.rules 2012-02-11 21:37:13.635000054 -0500 -@@ -160,16 +160,9 @@ AM_CXXFLAGS = \ +--- frysk-0.4/frysk-common/Makefile.rules.sodwfl 2010-03-24 19:58:07.000000000 -0400 ++++ frysk-0.4/frysk-common/Makefile.rules 2010-03-24 21:52:51.000000000 -0400 +@@ -164,16 +164,9 @@ AM_CXXFLAGS = \ -I$(srcdir) \ -I$(srcdir)/../frysk-imports/include \ -I$(top_builddir) \ @@ -20,7 +20,7 @@ diff -up frysk-0.4/frysk-common/Makefile.rules.sodwfl frysk-0.4/frysk-common/Mak -fPIC \ $(ZZZ) -@@ -395,12 +388,10 @@ Runner: +@@ -399,12 +392,10 @@ Runner: echo "#!/bin/sh" >> $@.tmp echo "" >> $@.tmp echo "# some pre-definitions" >> $@.tmp @@ -34,8 +34,8 @@ diff -up frysk-0.4/frysk-common/Makefile.rules.sodwfl frysk-0.4/frysk-common/Mak echo "" >> $@.tmp echo "# Set up classpath" >> $@.tmp diff -up frysk-0.4/frysk-core/Makefile.am.sodwfl frysk-0.4/frysk-core/Makefile.am ---- frysk-0.4/frysk-core/Makefile.am.sodwfl 2012-02-11 21:37:13.469000053 -0500 -+++ frysk-0.4/frysk-core/Makefile.am 2012-02-11 21:37:57.412994059 -0500 +--- frysk-0.4/frysk-core/Makefile.am.sodwfl 2010-03-24 22:12:26.000000000 -0400 ++++ frysk-0.4/frysk-core/Makefile.am 2010-03-24 22:13:13.000000000 -0400 @@ -53,11 +53,6 @@ GEN_GCJ_LDADD_LIST += ../frysk-imports/l GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a @@ -55,10 +55,10 @@ diff -up frysk-0.4/frysk-core/Makefile.am.sodwfl frysk-0.4/frysk-core/Makefile.a +GEN_GCJ_LDADD_LIST += -lasm -ldw -lebl -lelf # For TestExec.java - noinst_PROGRAMS += frysk/pkglibdir/funit-exec-alias + pkglib_PROGRAMS += frysk/pkglibdir/funit-exec-alias diff -up frysk-0.4/frysk-gtk/Makefile.am.sodwfl frysk-0.4/frysk-gtk/Makefile.am ---- frysk-0.4/frysk-gtk/Makefile.am.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-gtk/Makefile.am 2012-02-11 21:37:13.640000054 -0500 +--- frysk-0.4/frysk-gtk/Makefile.am.sodwfl 2010-03-24 22:15:40.000000000 -0400 ++++ frysk-0.4/frysk-gtk/Makefile.am 2010-03-24 22:16:36.000000000 -0400 @@ -51,11 +51,6 @@ GEN_GCJ_LDADD_LIST += ../frysk-sys/libfr GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a @@ -80,8 +80,8 @@ diff -up frysk-0.4/frysk-gtk/Makefile.am.sodwfl frysk-0.4/frysk-gtk/Makefile.am # Hack, need to compile this entire sub-tree with JNI. AM_GCJFLAGS += -fjni diff -up frysk-0.4/frysk-gui/Makefile.am.sodwfl frysk-0.4/frysk-gui/Makefile.am ---- frysk-0.4/frysk-gui/Makefile.am.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-gui/Makefile.am 2012-02-11 21:37:13.641000054 -0500 +--- frysk-0.4/frysk-gui/Makefile.am.sodwfl 2010-03-24 22:15:44.000000000 -0400 ++++ frysk-0.4/frysk-gui/Makefile.am 2010-03-24 22:16:21.000000000 -0400 @@ -60,11 +60,6 @@ GEN_GCJ_LDADD_LIST += ../frysk-imports/l GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a @@ -104,7 +104,7 @@ diff -up frysk-0.4/frysk-gui/Makefile.am.sodwfl frysk-0.4/frysk-gui/Makefile.am #TESTS_ENVIRONMENT = ( test $$tst != TestRunner || test -n "$$DISPLAY" || exit 77 ) && diff -up frysk-0.4/frysk-imports/bootstrap.sh.sodwfl frysk-0.4/frysk-imports/bootstrap.sh --- frysk-0.4/frysk-imports/bootstrap.sh.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-imports/bootstrap.sh 2012-02-11 21:37:13.642000054 -0500 ++++ frysk-0.4/frysk-imports/bootstrap.sh 2010-03-24 19:58:07.000000000 -0400 @@ -51,18 +51,6 @@ FILE_LIST="\ ./common/Makefile.gen.sh $FILE_LIST @@ -126,7 +126,7 @@ diff -up frysk-0.4/frysk-imports/bootstrap.sh.sodwfl frysk-0.4/frysk-imports/boo autoconf -Werror -f diff -up frysk-0.4/frysk-imports/configure.ac.sodwfl frysk-0.4/frysk-imports/configure.ac --- frysk-0.4/frysk-imports/configure.ac.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-imports/configure.ac 2012-02-11 21:37:13.643000054 -0500 ++++ frysk-0.4/frysk-imports/configure.ac 2010-03-24 19:58:07.000000000 -0400 @@ -61,6 +61,6 @@ AC_CONFIG_FILES([ # list of configured subdirectories so that it can be included in # "make dist" (or the recursive "make distdir"). @@ -137,7 +137,7 @@ diff -up frysk-0.4/frysk-imports/configure.ac.sodwfl frysk-0.4/frysk-imports/con AC_OUTPUT diff -up frysk-0.4/frysk-imports/Makefile.am.sodwfl frysk-0.4/frysk-imports/Makefile.am --- frysk-0.4/frysk-imports/Makefile.am.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-imports/Makefile.am 2012-02-11 21:37:13.655000049 -0500 ++++ frysk-0.4/frysk-imports/Makefile.am 2010-03-24 19:58:07.000000000 -0400 @@ -58,7 +58,6 @@ LIBUNWIND_ARCH_DIRS = libunwind-i386 lib CHECK_SUBDIRS = \ jline \ @@ -159,9 +159,9 @@ diff -up frysk-0.4/frysk-imports/Makefile.am.sodwfl frysk-0.4/frysk-imports/Make GEN_GCJ_LDADD_LIST += ./libunwind-i386/src/.libs/libunwind-x86.a GEN_GCJ_LDADD_LIST += ./libunwind-x86_64/src/.libs/libunwind-x86_64.a diff -up frysk-0.4/frysk-imports/tests/Makefile.am.sodwfl frysk-0.4/frysk-imports/tests/Makefile.am ---- frysk-0.4/frysk-imports/tests/Makefile.am.sodwfl 2012-02-11 21:37:13.470000053 -0500 -+++ frysk-0.4/frysk-imports/tests/Makefile.am 2012-02-11 21:37:13.671000057 -0500 -@@ -462,7 +462,6 @@ systests_PASS_PROGRAM += frysk4217/attac +--- frysk-0.4/frysk-imports/tests/Makefile.am.sodwfl 2008-06-09 14:03:07.000000000 -0400 ++++ frysk-0.4/frysk-imports/tests/Makefile.am 2010-03-24 19:58:07.000000000 -0400 +@@ -463,7 +463,6 @@ systests_PASS_PROGRAM += frysk4217/attac systests_PASS_PROGRAM += frysk4330/stopkills # test if /proc/PID/maps has r-xp permissions for the VDSO entry @@ -169,7 +169,7 @@ diff -up frysk-0.4/frysk-imports/tests/Makefile.am.sodwfl frysk-0.4/frysk-import systests_PASS_PROGRAM += frysk4704/vdso-permissions # A final variable/inner class test. -@@ -485,10 +484,6 @@ frysk4742/java.sh: +@@ -486,10 +485,6 @@ frysk4742/java.sh: \| grep Referee > $@ chmod a+x $@ @@ -183,8 +183,8 @@ diff -up frysk-0.4/frysk-imports/tests/Makefile.am.sodwfl frysk-0.4/frysk-import +frysk4796_dwfltest_CFLAGS = -I/usr/include/elfutils systests_PASS_PROGRAM += frysk4796/dwfltest diff -up frysk-0.4/frysk-sys/lib/dwfl/cni/DwarfDie.cxx.sodwfl frysk-0.4/frysk-sys/lib/dwfl/cni/DwarfDie.cxx ---- frysk-0.4/frysk-sys/lib/dwfl/cni/DwarfDie.cxx.sodwfl 2012-02-11 21:37:12.987000054 -0500 -+++ frysk-0.4/frysk-sys/lib/dwfl/cni/DwarfDie.cxx 2012-02-11 21:37:13.676000052 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/cni/DwarfDie.cxx.sodwfl 2010-03-24 21:49:32.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/cni/DwarfDie.cxx 2010-03-24 21:49:53.000000000 -0400 @@ -36,9 +36,10 @@ // modification, you must delete this exception statement from your // version and license this file solely under the GPL without @@ -199,8 +199,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/cni/DwarfDie.cxx.sodwfl frysk-0.4/frysk-sy #include #include diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum 2012-02-11 21:37:13.678000052 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum.sodwfl 2010-03-24 20:13:34.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum 2010-03-24 22:08:31.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -211,8 +211,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAccess.shenum.sodwfl frysk-0.4/frysk-sys p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum 2012-02-11 21:37:13.679000052 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum.sodwfl 2010-03-24 20:14:07.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum 2010-03-24 20:14:22.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -223,8 +223,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAte.shenum.sodwfl frysk-0.4/frysk-sys/li p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum 2012-02-11 21:37:13.680000052 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum.sodwfl 2010-03-24 20:11:25.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum 2010-03-24 20:11:49.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -235,8 +235,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwAt.shenum.sodwfl frysk-0.4/frysk-sys/lib p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum 2012-02-11 21:37:13.681000052 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum.sodwfl 2010-03-24 20:17:00.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum 2010-03-24 20:17:24.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -247,8 +247,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwDsc.shenum.sodwfl frysk-0.4/frysk-sys/li p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum 2012-02-11 21:37:13.682000052 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum.sodwfl 2010-03-24 20:16:10.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum 2010-03-24 20:16:28.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -259,8 +259,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwDs.shenum.sodwfl frysk-0.4/frysk-sys/lib p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum 2012-02-11 21:37:13.697000054 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum.sodwfl 2010-03-24 20:18:38.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum 2010-03-24 20:18:53.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -271,8 +271,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwEnd.shenum.sodwfl frysk-0.4/frysk-sys/li p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum 2012-02-11 21:37:13.698000054 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum.sodwfl 2010-03-24 20:08:28.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum 2010-03-24 20:09:47.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -283,8 +283,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwInl.shenum.sodwfl frysk-0.4/frysk-sys/li p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum 2012-02-11 21:37:13.699000054 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum.sodwfl 2010-03-24 20:17:35.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum 2010-03-24 20:23:06.000000000 -0400 @@ -42,7 +42,8 @@ # in. @@ -296,8 +296,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwOp.shenum.sodwfl frysk-0.4/frysk-sys/lib p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum 2012-02-11 21:37:13.700000054 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum.sodwfl 2010-03-24 20:15:46.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum 2010-03-24 20:15:59.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -308,8 +308,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwOrd.shenum.sodwfl frysk-0.4/frysk-sys/li p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum.sodwfl frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum ---- frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum.sodwfl 2008-06-09 14:03:07.000000000 -0400 -+++ frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum 2012-02-11 21:37:13.702000054 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum.sodwfl 2010-03-24 20:11:19.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum 2010-03-24 20:12:11.000000000 -0400 @@ -42,7 +42,7 @@ # in. @@ -320,8 +320,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/DwTag.shenum.sodwfl frysk-0.4/frysk-sys/li p = $1 v = gensub(",","","",$3) diff -up frysk-0.4/frysk-sys/lib/dwfl/jni/DwarfDie.cxx.sodwfl frysk-0.4/frysk-sys/lib/dwfl/jni/DwarfDie.cxx ---- frysk-0.4/frysk-sys/lib/dwfl/jni/DwarfDie.cxx.sodwfl 2012-02-11 21:37:12.989000054 -0500 -+++ frysk-0.4/frysk-sys/lib/dwfl/jni/DwarfDie.cxx 2012-02-11 21:37:13.703000054 -0500 +--- frysk-0.4/frysk-sys/lib/dwfl/jni/DwarfDie.cxx.sodwfl 2010-03-24 21:45:24.000000000 -0400 ++++ frysk-0.4/frysk-sys/lib/dwfl/jni/DwarfDie.cxx 2010-03-24 21:46:01.000000000 -0400 @@ -40,8 +40,8 @@ #include #include @@ -334,8 +334,8 @@ diff -up frysk-0.4/frysk-sys/lib/dwfl/jni/DwarfDie.cxx.sodwfl frysk-0.4/frysk-sy #include "jni.hxx" diff -up frysk-0.4/frysk-sys/Makefile.am.sodwfl frysk-0.4/frysk-sys/Makefile.am ---- frysk-0.4/frysk-sys/Makefile.am.sodwfl 2012-02-11 21:37:12.939000054 -0500 -+++ frysk-0.4/frysk-sys/Makefile.am 2012-02-11 21:37:13.704000054 -0500 +--- frysk-0.4/frysk-sys/Makefile.am.sodwfl 2010-03-24 20:04:31.000000000 -0400 ++++ frysk-0.4/frysk-sys/Makefile.am 2010-03-24 21:56:41.000000000 -0400 @@ -53,11 +53,6 @@ GEN_GCJ_LDADD_LIST += ../frysk-imports/l GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-junit.a GEN_GCJ_LDADD_LIST += ../frysk-imports/libfrysk-getopt.a diff --git a/frysk-0.4-steptester-indentation.patch b/frysk-0.4-steptester-indentation.patch deleted file mode 100644 index 59620d4..0000000 --- a/frysk-0.4-steptester-indentation.patch +++ /dev/null @@ -1,23 +0,0 @@ -commit b824c0a3c51aeae40ad07d2601b8b8348a5e32df -Author: Andrew Cagney -Date: Fri Sep 6 12:28:24 2019 -0400 - - fix fsteptester indentation - - make gcc happy - - frysk-0.4-steptester-indentation.patch - -diff --git a/frysk-core/frysk/pkglibdir/funit-rt-steptester.c b/frysk-core/frysk/pkglibdir/funit-rt-steptester.c -index ccb67d892..0effca488 100644 ---- a/frysk-core/frysk/pkglibdir/funit-rt-steptester.c -+++ b/frysk-core/frysk/pkglibdir/funit-rt-steptester.c -@@ -93,7 +93,7 @@ last () - else - --dummy; // _lineStepIfFailFinish_ - -- return; // _lineStepFunctionReturn_ -+ return; // _lineStepFunctionReturn_ - } - - volatile int a; diff --git a/frysk-0.4-switch-ecj-to-javac.patch b/frysk-0.4-switch-ecj-to-javac.patch deleted file mode 100644 index b7c53aa..0000000 --- a/frysk-0.4-switch-ecj-to-javac.patch +++ /dev/null @@ -1,772 +0,0 @@ -commit b76503511d7689d2d0cebbe241df3789088488e0 -Author: Andrew Cagney -Date: Tue Apr 12 16:10:01 2016 -0400 - - Fix compiler warnings. - -diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh -index c83a85e..d5d7e74 100755 ---- a/frysk-common/Makefile.gen.sh -+++ b/frysk-common/Makefile.gen.sh -@@ -1,8 +1,8 @@ - #!/bin/sh -eu - # This file is part of the program FRYSK. - # --# Copyright 2016, Andrew Cagney - # Copyright 2005, 2006, 2007, 2008, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -diff --git a/frysk-common/Makefile.rules b/frysk-common/Makefile.rules -index 92e4c3d..9ba8775 100644 ---- a/frysk-common/Makefile.rules -+++ b/frysk-common/Makefile.rules -@@ -321,9 +321,12 @@ SUFFIXES += .xml-in - # When compiling the test runner be sure to include the current - # directories classes. - --TestRunner.jar: TestRunner.java -+TestRunner.jar: TestRunner.java $(GEN_DIRNAME).jar - rm -f $@.tmp $*.class -- $(JAVAC) `echo $(JAVACFLAGS) | sed -e 's/-classpath /-classpath $(GEN_DIRNAME).jar:/'` $*.java -+ $(JAVAC) $(JAVACFLAGS) $(WERROR_JAVACFLAGS) \ -+ $(if $(SOURCEPATH),-sourcepath $(SOURCEPATH)) \ -+ -classpath $(GEN_DIRNAME).jar$(if $(CLASSPATH),:$(CLASSPATH)) \ -+ $*.java - $(JAR) cf $@.tmp $*.class - rm -f $*.class - mv $@.tmp $@ -@@ -522,11 +525,10 @@ SUFFIXES += .antlred .g - echo "Parsing compiler warnings from $$b..." ; \ - rm -f $$t/*.antlr-fixes ; \ - rm -rf $$t/classes ; mkdir -p $$t/classes ; \ -- ( $(JAVAC) \ -+ ( $(JAVAC) $(JAVACFLAGS) $(WERROR_JAVACFLAGS) \ - -d $$t/classes \ -- -warn:+semicolon \ -- -sourcepath $$t:$(SOURCEPATH) \ -- -classpath $(CLASSPATH) \ -+ -sourcepath $$t$(if $(SOURCEPATH),:$(SOURCEPATH)) \ -+ $(if $(CLASSPATH),-classpath $(CLASSPATH)) \ - $$t/$$d/$$b.java \ - 2>&1 || true ) | ( \ - cd $$t ; \ -@@ -647,7 +649,10 @@ files-java.list: files.list - ${GEN_DIRNAME}.jar: files-java.list $(GEN_CLASSPATH) - rm -rf $(JAVAROOT) - mkdir -p $(JAVAROOT) -- $(JAVAC) -d $(JAVAROOT) $(JAVACFLAGS) \ -+ $(JAVAC) $(JAVACFLAGS) $(WERROR_JAVACFLAGS) \ -+ -d $(JAVAROOT) \ -+ $(if $(SOURCEPATH),-sourcepath $(SOURCEPATH)) \ -+ $(if $(CLASSPATH),-classpath $(CLASSPATH)) \ - @$(top_builddir)/files-java.list - cd $(JAVAROOT) ; \ - find * -name '*.class' -print | sort > classes.list ; \ -diff --git a/frysk-common/frysk-common.ac b/frysk-common/frysk-common.ac -index a112cfb..c6893e5 100644 ---- a/frysk-common/frysk-common.ac -+++ b/frysk-common/frysk-common.ac -@@ -2,6 +2,7 @@ - # - # Copyright 2005, 2006, 2007, 2008, Red Hat Inc. - # Copyright 2007 Oracle Corporation. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -75,37 +76,6 @@ fi - AM_PROG_AS - AM_PROG_GCJ - --# Check for the ECJ compiler. -- --AC_MSG_CHECKING([ecj.jar]) --ECJ_JAR=${ECJ_JAR:-/usr/share/java/eclipse-ecj.jar} --AC_SUBST([ECJ_JAR]) --AC_MSG_RESULT(${ECJ_JAR}) -- -- --# autoconf doesn't yet know about JAVAC, so define it ourselves. -- --AC_LANG_DEFINE([Java], [java], [JAVA], [JAVAC], [], --[ac_ext=java --ac_objext=class --ac_compile='$JAVAC $JAVACFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD' --ac_java_werror_flag=no --]) --AC_DEFUN([AC_LANG_COMPILER(Java)], []) --AU_DEFUN([AC_LANG_JAVAC], [AC_LANG(Java)]) --AC_LANG(Java) -- --JAVAC='$(JAVA) -cp $(ECJ_JAR):$(CLASSPATH) org.eclipse.jdt.internal.compiler.batch.Main -1.4' --JAVACFLAGS='-warn:+semicolon $(if $(SOURCEPATH),-sourcepath $(SOURCEPATH)) $(if $(CLASSPATH),-classpath $(CLASSPATH))' --AC_SUBST([JAVAC]) --AC_SUBST([JAVACFLAGS]) -- --JAVA="${JAVA:-java}" --AC_SUBST([JAVA]) -- --AC_CHECK_PROGS([JAR], [fastjar4 fastjar jar], [fastjar]) --# Check for the availablity of fig2dev -- - AC_PATH_PROG(FIG2DEV, fig2dev) - test "x$FIG2DEV" = x && AC_MSG_ERROR([no fig2dev binary is found in \$(PATH)]) - -@@ -169,3 +139,30 @@ AC_SUBST([lib64dir]) - FRYSK_DO_ARCH32_TEST - FRYSK_WERROR - FRYSK_COVERAGE -+ -+# autoconf doesn't yet know about JAVAC, so define it ourselves. -+ -+AC_LANG_DEFINE([Java], [java], [JAVA], [JAVAC], [], -+[ac_ext=java -+ac_objext=class -+ac_compile='$JAVAC $JAVACFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD' -+ac_java_werror_flag=no -+]) -+AC_DEFUN([AC_LANG_COMPILER(Java)], []) -+AU_DEFUN([AC_LANG_JAVAC], [AC_LANG(Java)]) -+AC_LANG(Java) -+ -+JAVAC='javac -source 1.4' -+AS_IF([test x"$enable_werror" = xyes], -+ [WERROR_JAVACFLAGS='-Werror -Xlint:all -Xlint:-options -Xlint:-cast'], -+ [WERROR_JAVACFLAGS=]) -+AC_SUBST([JAVAC]) -+AC_SUBST([JAVACFLAGS]) -+AC_SUBST([WERROR_JAVACFLAGS]) -+ -+JAVA="${JAVA:-java}" -+AC_SUBST([JAVA]) -+ -+AC_CHECK_PROGS([JAR], [fastjar4 fastjar jar], [fastjar]) -+# Check for the availablity of fig2dev -+ -diff --git a/frysk-core/frysk/debuginfo/MemoryPiece.java b/frysk-core/frysk/debuginfo/MemoryPiece.java -index 122b834..ddbccd9 100644 ---- a/frysk-core/frysk/debuginfo/MemoryPiece.java -+++ b/frysk-core/frysk/debuginfo/MemoryPiece.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -131,5 +132,9 @@ public class MemoryPiece - { - return (this.memory == ((MemoryPiece)p).memory - && this.size == ((MemoryPiece)p).size); -- } --} -\ No newline at end of file -+ } -+ -+ public int hashCode() { -+ return (int) this.memory; -+ } -+} -diff --git a/frysk-core/frysk/debuginfo/RegisterPiece.java b/frysk-core/frysk/debuginfo/RegisterPiece.java -index 376d7cf..fc3c90e 100644 ---- a/frysk-core/frysk/debuginfo/RegisterPiece.java -+++ b/frysk-core/frysk/debuginfo/RegisterPiece.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -90,7 +91,11 @@ public class RegisterPiece - return ( this.size == ((RegisterPiece)p).size - && register.equals(((RegisterPiece)p).register) ); - } -- -+ -+ public int hashCode() { -+ return this.register.hashCode(); -+ } -+ - protected void toPrint(PrintWriter writer) - { - writer.print("Register "); -diff --git a/frysk-core/frysk/debuginfo/UnavailablePiece.java b/frysk-core/frysk/debuginfo/UnavailablePiece.java -index 00bfe81..506f5ce 100644 ---- a/frysk-core/frysk/debuginfo/UnavailablePiece.java -+++ b/frysk-core/frysk/debuginfo/UnavailablePiece.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -57,7 +58,11 @@ public class UnavailablePiece - { - return (this.size == ((UnavailablePiece)p).size); - } -- -+ -+ public int hashCode() { -+ return (int) this.size; -+ } -+ - protected Piece slice (long offset, long length) - { - return new UnavailablePiece(length); -@@ -80,4 +85,4 @@ public class UnavailablePiece - writer.print(size); - writer.print(" byte(s)"); - } --} -\ No newline at end of file -+} -diff --git a/frysk-core/frysk/ftrace/MemoryMapping.java b/frysk-core/frysk/ftrace/MemoryMapping.java -index 817c9e9..2c19268 100644 ---- a/frysk-core/frysk/ftrace/MemoryMapping.java -+++ b/frysk-core/frysk/ftrace/MemoryMapping.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, 2008, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -84,6 +85,10 @@ class MemoryMapping - && permExecute == p.permExecute; - } - -+ public int hashCode() { -+ return (int)this.addressLow; -+ } -+ - public String toString() - { - return "<0x" + Long.toHexString(addressLow) -diff --git a/frysk-core/frysk/hpd/ProcData.java b/frysk-core/frysk/hpd/ProcData.java -index ad06be8..177d8ee 100644 ---- a/frysk-core/frysk/hpd/ProcData.java -+++ b/frysk-core/frysk/hpd/ProcData.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -83,5 +84,7 @@ class ProcData - return true; - } - -- -+ public int hashCode() { -+ return id; -+ } - } -diff --git a/frysk-core/frysk/hpd/ProcTasks.java b/frysk-core/frysk/hpd/ProcTasks.java -index 1206c2e..51290bd 100644 ---- a/frysk-core/frysk/hpd/ProcTasks.java -+++ b/frysk-core/frysk/hpd/ProcTasks.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -150,5 +151,7 @@ class ProcTasks - return true; - } - -- -+ public int hashCode() { -+ return this.proc.hashCode(); -+ } - } -diff --git a/frysk-core/frysk/isa/syscalls/Syscall.java b/frysk-core/frysk/isa/syscalls/Syscall.java -index 8542e8e..22da117 100644 ---- a/frysk-core/frysk/isa/syscalls/Syscall.java -+++ b/frysk-core/frysk/isa/syscalls/Syscall.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -224,8 +225,9 @@ public abstract class Syscall { - case 'i': - if ((int)retVal < 0) - return "-1 ERRNO=" + (-(int)retVal); -+ else -+ return "" + retVal; - -- // fall-through - default: - return "" + retVal; - } -diff --git a/frysk-core/frysk/pkglibdir/funit-complex-struct.cxx b/frysk-core/frysk/pkglibdir/funit-complex-struct.cxx -index d535ac9..32b7744 100644 ---- a/frysk-core/frysk/pkglibdir/funit-complex-struct.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-complex-struct.cxx -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -37,6 +38,8 @@ - // version and license this file solely under the GPL without - // exception. - -+#pragma GCC diagnostic ignored "-Wunused-but-set-variable" -+ - struct complexStruct { - int x; - int y; -diff --git a/frysk-core/frysk/pkglibdir/funit-simple-struct.cxx b/frysk-core/frysk/pkglibdir/funit-simple-struct.cxx -index 882ab72..98a7e0e 100644 ---- a/frysk-core/frysk/pkglibdir/funit-simple-struct.cxx -+++ b/frysk-core/frysk/pkglibdir/funit-simple-struct.cxx -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -37,6 +38,8 @@ - // version and license this file solely under the GPL without - // exception. - -+#pragma GCC diagnostic ignored "-Wunused-but-set-variable" -+ - struct simpleStruct { - int x; - int y; -diff --git a/frysk-core/frysk/pkglibdir/hpd-c.c b/frysk-core/frysk/pkglibdir/hpd-c.c -index e66cdb8..91d194c 100644 ---- a/frysk-core/frysk/pkglibdir/hpd-c.c -+++ b/frysk-core/frysk/pkglibdir/hpd-c.c -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, 2006, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -37,6 +38,8 @@ - // version and license this file solely under the GPL without - // exception. - -+#pragma GCC diagnostic ignored "-Wunused-but-set-variable" -+ - #include - #include - #include -diff --git a/frysk-core/frysk/rt/UpdatingDisplayValue.java b/frysk-core/frysk/rt/UpdatingDisplayValue.java -index 601ad6a..c4ca406 100644 ---- a/frysk-core/frysk/rt/UpdatingDisplayValue.java -+++ b/frysk-core/frysk/rt/UpdatingDisplayValue.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, 2008, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -190,6 +191,10 @@ public class UpdatingDisplayValue extends DisplayValue { - return true; - } - -+ public int hashCode() { -+ return 0; /* unhashable? */ -+ } -+ - /** - * Disables the display, stopping all notification of changes to the - * underlying expression. -diff --git a/frysk-sys/frysk/junit/KernelVersion.java b/frysk-sys/frysk/junit/KernelVersion.java -index c79241f..4e13c65 100644 ---- a/frysk-sys/frysk/junit/KernelVersion.java -+++ b/frysk-sys/frysk/junit/KernelVersion.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -154,7 +155,11 @@ public class KernelVersion - else - return false; - } -- -+ -+ public int hashCode() { -+ return this.version; /* anything */ -+ } -+ - /** - * Tests if this kernel version is more recent than kv. - * @param kv the KernelVersion to test against. -diff --git a/frysk-sys/frysk/sys/termios/Speed.java b/frysk-sys/frysk/sys/termios/Speed.java -index e0ac0f7..a9ab62d 100644 ---- a/frysk-sys/frysk/sys/termios/Speed.java -+++ b/frysk-sys/frysk/sys/termios/Speed.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, 2008, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -56,6 +57,9 @@ public class Speed implements Comparable { - public boolean equals(Object o) { - return (o instanceof Speed) && ((Speed)o).b == b; - } -+ public int hashCode() { -+ return this.b; -+ } - public int compareTo(Object rhs) { - return this.b - ((Speed)rhs).b; - } -diff --git a/frysk-sys/lib/dwfl/ElfCommand.java b/frysk-sys/lib/dwfl/ElfCommand.java -index 129bbbd..5dac6ab 100644 ---- a/frysk-sys/lib/dwfl/ElfCommand.java -+++ b/frysk-sys/lib/dwfl/ElfCommand.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -89,6 +90,10 @@ public class ElfCommand - - return ((ElfCommand)obj).value == this.value; - } -+ -+ public int hashCode() { -+ return this.value; -+ } - - protected int getValue() - { -diff --git a/frysk-sys/lib/dwfl/ElfFlags.java b/frysk-sys/lib/dwfl/ElfFlags.java -index d909d90..85a6d8f 100644 ---- a/frysk-sys/lib/dwfl/ElfFlags.java -+++ b/frysk-sys/lib/dwfl/ElfFlags.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -77,7 +78,11 @@ public class ElfFlags { - public boolean equals(Object obj){ - return ((obj instanceof ElfFlags) && ((ElfFlags) obj).value == value); - } -- -+ -+ public int hashCode() { -+ return this.value; -+ } -+ - protected int getValue(){ - return value; - } -diff --git a/frysk-sys/lib/dwfl/ElfKind.java b/frysk-sys/lib/dwfl/ElfKind.java -index 3d110d5..84caafa 100644 ---- a/frysk-sys/lib/dwfl/ElfKind.java -+++ b/frysk-sys/lib/dwfl/ElfKind.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -62,7 +63,11 @@ public class ElfKind { - - return ((ElfKind)obj).value == this.value; - } -- -+ -+ public int hashCode() { -+ return this.value; -+ } -+ - protected int getValue(){ - return this.value; - } -diff --git a/frysk-sys/lib/dwfl/ElfNhdrType.java b/frysk-sys/lib/dwfl/ElfNhdrType.java -index c15a92c..45c83cf 100644 ---- a/frysk-sys/lib/dwfl/ElfNhdrType.java -+++ b/frysk-sys/lib/dwfl/ElfNhdrType.java -@@ -1,6 +1,7 @@ - //This file is part of the program FRYSK. - - //Copyright 2006, 2007, IBM Inc. -+//Copyright 2016, Andrew Cagney - - //FRYSK is free software; you can redistribute it and/or modify it - //under the terms of the GNU General Public License as published by -@@ -89,7 +90,11 @@ public class ElfNhdrType - - return ((ElfNhdrType)obj).value == this.value; - } -- -+ -+ public int hashCode() { -+ return this.value; -+ } -+ - public int getValue() - { - return this.value; -diff --git a/frysk-sys/lib/dwfl/ElfSymbolBinding.java b/frysk-sys/lib/dwfl/ElfSymbolBinding.java -index 17a61f1..aa2384a 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbolBinding.java -+++ b/frysk-sys/lib/dwfl/ElfSymbolBinding.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -88,6 +89,10 @@ public class ElfSymbolBinding - return ((ElfSymbolBinding)obj).value == this.value; - } - -+ public int hashCode() { -+ return this.value; -+ } -+ - /** - * Returns true if this binding is from OS-specific range. - */ -diff --git a/frysk-sys/lib/dwfl/ElfSymbolType.java b/frysk-sys/lib/dwfl/ElfSymbolType.java -index 38e40a5..99674d4 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbolType.java -+++ b/frysk-sys/lib/dwfl/ElfSymbolType.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -112,6 +113,10 @@ public class ElfSymbolType - return ((ElfSymbolType)obj).value == this.value; - } - -+ public int hashCode() { -+ return this.value; -+ } -+ - /** - * Returns true if this type is from OS-specific range. - */ -diff --git a/frysk-sys/lib/dwfl/ElfSymbolVersion.java b/frysk-sys/lib/dwfl/ElfSymbolVersion.java -index 745f959..7590de9 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbolVersion.java -+++ b/frysk-sys/lib/dwfl/ElfSymbolVersion.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -87,6 +88,10 @@ public abstract class ElfSymbolVersion - return this.name.equals(def.name) - && this.base == def.base; - } -+ -+ public int hashCode() { -+ return this.name.hashCode(); -+ } - } - - /** -@@ -123,5 +128,10 @@ public abstract class ElfSymbolVersion - && this.filename.equals(need.filename) - && this.weak == need.weak; - } -+ -+ public int hashCode() { -+ return this.name.hashCode(); -+ } -+ - } - } -diff --git a/frysk-sys/lib/dwfl/ElfSymbolVisibility.java b/frysk-sys/lib/dwfl/ElfSymbolVisibility.java -index 25af18a..f2e9553 100644 ---- a/frysk-sys/lib/dwfl/ElfSymbolVisibility.java -+++ b/frysk-sys/lib/dwfl/ElfSymbolVisibility.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -70,6 +71,10 @@ public class ElfSymbolVisibility - return ((ElfSymbolVisibility)obj).value == this.value; - } - -+ public int hashCode() { -+ return this.value; -+ } -+ - protected int getValue() - { - return this.value; -diff --git a/frysk-sys/lib/dwfl/ElfType.java b/frysk-sys/lib/dwfl/ElfType.java -index 633b2f8..56e8e9a 100644 ---- a/frysk-sys/lib/dwfl/ElfType.java -+++ b/frysk-sys/lib/dwfl/ElfType.java -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -89,7 +90,11 @@ public class ElfType { - - return ((ElfType)obj).value == this.value; - } -- -+ -+ public int hashCode() { -+ return this.value; -+ } -+ - protected int getValue(){ - return this.value; - } -diff --git a/frysk-sys/lib/dwfl/jni/DwarfDie.cxx b/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -index 1225e26..cbb0cb1 100644 ---- a/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -+++ b/frysk-sys/lib/dwfl/jni/DwarfDie.cxx -@@ -435,11 +435,10 @@ lib::dwfl::DwarfDie::get_data_member_location(jnixx::env env, jlong var_die) { - Dwarf_Die *die = (Dwarf_Die*) var_die; - Dwarf_Attribute loc_attr; - Dwarf_Op *fb_expr; -- int code; - size_t fb_len; - - if (dwarf_attr_integrate (die, DW_AT_data_member_location, &loc_attr) >= 0) { -- code = dwarf_getlocation (&loc_attr, &fb_expr, &fb_len); -+ dwarf_getlocation (&loc_attr, &fb_expr, &fb_len); - if (fb_len > 0 && fb_expr[0].atom == DW_OP_plus_uconst) - return fb_expr[0].number; - } -diff --git a/frysk-sys/lib/dwfl/jni/DwflModule.cxx b/frysk-sys/lib/dwfl/jni/DwflModule.cxx -index c525350..d645edf 100644 ---- a/frysk-sys/lib/dwfl/jni/DwflModule.cxx -+++ b/frysk-sys/lib/dwfl/jni/DwflModule.cxx -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, 2008, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -152,7 +153,6 @@ lib::dwfl::DwflModule::getPLTEntries(jnixx::env env, - return; - - bool have_dynamic = false; -- ::GElf_Off off_dynamic; - for (GElf_Half i = 0; i < ehdr.e_phnum; ++i) { - ::GElf_Phdr ph; - if (::gelf_getphdr (elf, i, &ph) == NULL) -@@ -160,7 +160,6 @@ lib::dwfl::DwflModule::getPLTEntries(jnixx::env env, - if (ph.p_type == PT_DYNAMIC) - { - have_dynamic = true; -- off_dynamic = ph.p_offset; - break; - } - } -diff --git a/frysk-sys/lib/dwfl/jni/Elf.cxx b/frysk-sys/lib/dwfl/jni/Elf.cxx -index 82aaeb7..cc16245 100644 ---- a/frysk-sys/lib/dwfl/jni/Elf.cxx -+++ b/frysk-sys/lib/dwfl/jni/Elf.cxx -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2005, 2007, 2008, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -284,7 +285,7 @@ jlong - lib::dwfl::Elf::elf_getshnum(jnixx::env env) { - size_t count; - /* XXX: What to do if this fails */ -- ::elf_getshnum(ELF_POINTER, &count); -+ ::elf_getshdrnum(ELF_POINTER, &count); - return count; - } - -@@ -292,7 +293,7 @@ jlong - lib::dwfl::Elf::elf_getshstrndx(jnixx::env env) { - size_t index; - /* XXX: What to do if this fails */ -- ::elf_getshstrndx(ELF_POINTER, &index); -+ ::elf_getshdrstrndx(ELF_POINTER, &index); - return index; - } - -diff --git a/frysk-sys/lib/unwind/jni/UnwindH.hxx b/frysk-sys/lib/unwind/jni/UnwindH.hxx -index 5efc541..509cc92 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindH.hxx -+++ b/frysk-sys/lib/unwind/jni/UnwindH.hxx -@@ -1,6 +1,7 @@ - // This file is part of the program FRYSK. - // - // Copyright 2007, 2008, Red Hat Inc. -+// Copyright 2016, Andrew Cagney - // - // FRYSK is free software; you can redistribute it and/or modify it - // under the terms of the GNU General Public License as published by -@@ -512,7 +513,7 @@ get_eh_frame_hdr_addr(jnixx::env env, unw_proc_info_t *pi, - - Elf_Data *debug_frame_data = NULL; - size_t shstrndx; -- if (elf_getshstrndx (elf, &shstrndx) >= 0) { -+ if (elf_getshdrstrndx (elf, &shstrndx) >= 0) { - Elf_Scn *scn = NULL; - while ((scn = elf_nextscn (elf, scn)) != NULL - && debug_frame_data == NULL) { diff --git a/frysk-0.4-unwind-global-id.patch b/frysk-0.4-unwind-global-id.patch deleted file mode 100644 index 3e38fea..0000000 --- a/frysk-0.4-unwind-global-id.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/frysk-sys/lib/unwind/jni/UnwindH.hxx b/frysk-sys/lib/unwind/jni/UnwindH.hxx -index 76e57b7..5efc541 100644 ---- a/frysk-sys/lib/unwind/jni/UnwindH.hxx -+++ b/frysk-sys/lib/unwind/jni/UnwindH.hxx -@@ -63,9 +63,14 @@ - using namespace java::lang; - using namespace lib::unwind; - -+struct jni_cursor { -+ unw_cursor_t cursor; -+ jobject addressSpace; -+}; -+ - #define UNW_PROC_INFO ((unw_proc_info_t*)unwProcInfo) - #define UNW_ADDRESS_SPACE ((unw_addr_space_t)unwAddressSpace) --#define UNW_CURSOR ((unw_cursor_t*)unwCursor) -+#define UNW_CURSOR (&((jni_cursor*)unwCursor)->cursor) - #define FINE env, (GetFine(env)) - - #ifndef MAX_VDSO_SIZE -@@ -232,19 +237,23 @@ TARGET::createCursor(jnixx::env env, - AddressSpace addressSpace, - jlong unwAddressSpace) { - logf(FINE, "createCursor from address-space %lx", (long) UNW_ADDRESS_SPACE); -- jlong unwCursor = (jlong)::malloc(sizeof(::unw_cursor_t)); -+ jni_cursor *cursor = new(jni_cursor); - // XXX: Need to zero out the cursor, as unw_init_remote doesn't seem - // to do it. -- memset(UNW_CURSOR, 0, sizeof(*UNW_CURSOR)); -- unw_init_remote(UNW_CURSOR, UNW_ADDRESS_SPACE, addressSpace._object); -- logf(FINE, "createCursor at %lx", (long) UNW_CURSOR); -- return (jlong) UNW_CURSOR; -+ memset(cursor, 0, sizeof(jni_cursor)); -+ // Make global as object is used across JNI calls -+ cursor->addressSpace = env.NewGlobalRef(addressSpace._object); -+ unw_init_remote(&cursor->cursor, UNW_ADDRESS_SPACE, cursor->addressSpace); -+ logf(FINE, "createCursor at %p", cursor); -+ return (jlong)cursor; - } - - void - TARGET::destroyCursor(jnixx::env env, jlong unwCursor) { -- logf(FINE, "destroyCursor at %lx", (long) UNW_CURSOR); -- ::free(UNW_CURSOR); -+ jni_cursor *cursor = (jni_cursor*)unwCursor; -+ logf(FINE, "destroyCursor at %p", cursor); -+ env.DeleteGlobalRef(cursor->addressSpace); -+ ::free(cursor); - } - - jlong diff --git a/frysk-0.4-use-installed-antlr.patch b/frysk-0.4-use-installed-antlr.patch deleted file mode 100644 index 2fffa03..0000000 --- a/frysk-0.4-use-installed-antlr.patch +++ /dev/null @@ -1,192 +0,0 @@ -commit 1daec7b0b7cf0f30dc974351af5e55c3e8190370 -Author: Andrew Cagney -Date: Tue Apr 12 20:02:31 2016 -0400 - - Use installed antlr, don't bundle antlr.jar - - Patch: frysk-0.4-use-installed-antlr.jar - -diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh -index 9829184..6213a7e 100755 ---- a/frysk-common/Makefile.gen.sh -+++ b/frysk-common/Makefile.gen.sh -@@ -1,6 +1,7 @@ - #!/bin/sh -eu - # This file is part of the program FRYSK. - # -+# Copyright 2016, Andrew Cagney - # Copyright 2005, 2006, 2007, 2008, Red Hat Inc. - # - # FRYSK is free software; you can redistribute it and/or modify it -@@ -430,7 +431,6 @@ do - echo "" - print_header "... $jar" - echo ${B}_JAR = @${B}_JAR@ -- print_jar_rule ${b} ${B} - done - - -@@ -509,7 +509,7 @@ for suffix in .java .java-sh .mkenum .shenum .java-in ; do - ${name}: Makefile - mkdir -p ${d} - echo "#!/bin/sh" >> ${name}.tmp -- echo exec /usr/bin/java -cp \"\$(javadir)/*\" ${name} \"\\\$\$@\" >> ${name}.tmp -+ echo exec /usr/bin/java -cp \"\$(javadir)/*\$(INSTALLED_CLASSPATH)\" ${name} \"\\\$\$@\" >> ${name}.tmp - chmod a+x ${name}.tmp - mv ${name}.tmp ${name} - EOF -diff --git a/frysk-common/Makefile.rules b/frysk-common/Makefile.rules -index fcc807a..84ee611 100644 ---- a/frysk-common/Makefile.rules -+++ b/frysk-common/Makefile.rules -@@ -2,6 +2,7 @@ - # - # Copyright 2005, 2006, 2007, 2008, Red Hat Inc. - # Copyright 2007 Oracle Corporation. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -139,6 +140,7 @@ ACLOCAL_AMFLAGS = -I common/m4 - - SOURCEPATH = $(subst $(space),:,$(strip $(GEN_SOURCEPATH))) - CLASSPATH = $(subst $(space),:,$(strip $(GEN_CLASSPATH))) -+INSTALLED_CLASSPATH = $(patsubst %,:%,$(subst $(space),:,$(filter /%.jar,$(GEN_CLASSPATH)))) - - AM_CXXFLAGS = \ - -I$(srcdir) \ -diff --git a/frysk-core/Makefile.am b/frysk-core/Makefile.am -index 3b0a09d..fbe11ef 100644 ---- a/frysk-core/Makefile.am -+++ b/frysk-core/Makefile.am -@@ -1,6 +1,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2007, 2008, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -43,7 +44,7 @@ include Makefile.gen - - GEN_CLASSPATH += ../frysk-sys/frysk-sys.jar - GEN_CLASSPATH += ../frysk-imports/jline.jar --GEN_CLASSPATH += ../frysk-imports/antlr.jar -+GEN_CLASSPATH += $(ANTLR_JAR) - GEN_CLASSPATH += ../frysk-imports/junit.jar - GEN_CLASSPATH += ../frysk-imports/getopt.jar - -diff --git a/frysk-core/bootstrap.sh b/frysk-core/bootstrap.sh -index 03c07ef..4ed9a1c 100755 ---- a/frysk-core/bootstrap.sh -+++ b/frysk-core/bootstrap.sh -@@ -2,6 +2,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2006, 2007, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -42,7 +43,7 @@ set -e - - # Generate everything (always run with --add-missing). - --sh -eu ./common/Makefile.gen.sh frysk prog -+sh -eu ./common/Makefile.gen.sh frysk prog ANTLR_JAR - - echo "Running aclocal ..." - aclocal -I common/m4 -diff --git a/frysk-core/configure.ac b/frysk-core/configure.ac -index d92c4f4..7abf364 100644 ---- a/frysk-core/configure.ac -+++ b/frysk-core/configure.ac -@@ -1,6 +1,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2007, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -45,6 +46,7 @@ AC_INIT(frysk, [FRYSK_VERSION]) - m4_include([common/frysk-common.ac]) - - AM_INIT_AUTOMAKE([subdir-objects foreign no-installinfo no-exeext no-dist]) -+AC_FIND_FILE([antlr.jar], [/usr/share/java], ANTLR_JAR) - - AC_CONFIG_FILES([Makefile]) - AC_OUTPUT -diff --git a/frysk-imports/bootstrap.sh b/frysk-imports/bootstrap.sh -index 83edd9b..87ddd6b 100755 ---- a/frysk-imports/bootstrap.sh -+++ b/frysk-imports/bootstrap.sh -@@ -2,6 +2,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2006, 2007, 2008, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -42,7 +43,6 @@ set -e - - FILE_LIST="\ - junit/junit.jar \ -- ANTLR_JAR \ - jline/jline.jar \ - getopt/getopt.jar \ - " -@@ -50,12 +50,6 @@ FILE_LIST="\ - ./common/Makefile.gen.sh $FILE_LIST - - ( -- cd antlr -- echo "Running autoconf ... for antlr" -- autoconf -Werror -f --) -- --( - cd libunwind - mkdir -p config - echo "Running aclocal ... for libunwind" -diff --git a/frysk-imports/configure.ac b/frysk-imports/configure.ac -index d22a250..df4ad25 100644 ---- a/frysk-imports/configure.ac -+++ b/frysk-imports/configure.ac -@@ -1,6 +1,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2006, 2007, 2008, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -46,7 +47,6 @@ m4_include([common/frysk-common.ac]) - - AM_INIT_AUTOMAKE([subdir-objects foreign no-installinfo no-exeext no-dist]) - --AC_FIND_FILE([antlr.jar], [/usr/share/java /usr/share/frysk/java], ANTLR_JAR) - AC_FIND_FILE([libaudit.h], [/usr/include/], LIBAUDIT_H) - - AC_CONFIG_FILES([ -diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am -index d121507..7465edf 100644 ---- a/frysk-sys/Makefile.am -+++ b/frysk-sys/Makefile.am -@@ -1,6 +1,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2007, 2008, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -44,7 +45,6 @@ include Makefile.gen - GEN_SOURCEPATH += ../frysk-imports/ - GEN_SOURCEPATH += $(top_srcdir)/../frysk-imports/ - GEN_CLASSPATH += ../frysk-imports/jline.jar --GEN_CLASSPATH += ../frysk-imports/antlr.jar - GEN_CLASSPATH += ../frysk-imports/junit.jar - GEN_CLASSPATH += ../frysk-imports/getopt.jar - diff --git a/frysk-0.4-use-installed-jline.patch b/frysk-0.4-use-installed-jline.patch deleted file mode 100644 index 55b485c..0000000 --- a/frysk-0.4-use-installed-jline.patch +++ /dev/null @@ -1,172 +0,0 @@ -commit 174732c1b6329e7cc61dcdcfdc47ab9aee2e37e3 -Author: Andrew Cagney -Date: Wed Apr 13 18:17:17 2016 -0400 - - Use installed jline, don't bundle jline.jar - - Patch: frysk-0.4-use-installed-jline.patch - -diff --git a/frysk-core/Makefile.am b/frysk-core/Makefile.am -index 7938aa8..94deefa 100644 ---- a/frysk-core/Makefile.am -+++ b/frysk-core/Makefile.am -@@ -43,7 +43,7 @@ include common/Makefile.rules - include Makefile.gen - - GEN_CLASSPATH += ../frysk-sys/frysk-sys.jar --GEN_CLASSPATH += ../frysk-imports/jline.jar -+GEN_CLASSPATH += $(JLINE_JAR) - GEN_CLASSPATH += $(ANTLR_JAR) - GEN_CLASSPATH += $(JUNIT_JAR) - GEN_CLASSPATH += ../frysk-imports/getopt.jar -diff --git a/frysk-core/bootstrap.sh b/frysk-core/bootstrap.sh -index ce80e1c..ffb62a8 100755 ---- a/frysk-core/bootstrap.sh -+++ b/frysk-core/bootstrap.sh -@@ -43,7 +43,7 @@ set -e - - # Generate everything (always run with --add-missing). - --sh -eu ./common/Makefile.gen.sh frysk prog ANTLR_JAR JUNIT_JAR -+sh -eu ./common/Makefile.gen.sh frysk prog ANTLR_JAR JUNIT_JAR JLINE_JAR - - echo "Running aclocal ..." - aclocal -I common/m4 -diff --git a/frysk-core/configure.ac b/frysk-core/configure.ac -index 910dd0c..065bc52 100644 ---- a/frysk-core/configure.ac -+++ b/frysk-core/configure.ac -@@ -48,6 +48,7 @@ m4_include([common/frysk-common.ac]) - AM_INIT_AUTOMAKE([subdir-objects foreign no-installinfo no-exeext no-dist]) - AC_FIND_FILE([antlr.jar], [/usr/share/java], ANTLR_JAR) - AC_FIND_FILE([junit.jar], [/usr/share/java], JUNIT_JAR) -+AC_FIND_FILE([jline-1.0.jar], [/usr/lib/java/jline1], JLINE_JAR) - - AC_CONFIG_FILES([Makefile]) - AC_OUTPUT -diff --git a/frysk-core/frysk/util/PtyTerminal.java b/frysk-core/frysk/util/PtyTerminal.java -index 2d6f0d9..23bb95a 100644 ---- a/frysk-core/frysk/util/PtyTerminal.java -+++ b/frysk-core/frysk/util/PtyTerminal.java -@@ -44,6 +44,7 @@ import java.io.InputStream; - import java.io.IOException; - - import jline.Terminal; -+import jline.UnixTerminal; - - import frysk.sys.FileDescriptor; - import frysk.sys.Size; -@@ -53,7 +54,7 @@ import frysk.sys.termios.Termios; - - - /** Class that implements the jline Terminal abstract class using -- * frysk.sys.termios calls. This copies jline.PtyTerminal pretty closely. -+ * frysk.sys.termios calls. This copies UnixTerminal pretty closely. - */ - public class PtyTerminal - extends Terminal -@@ -156,19 +157,19 @@ public class PtyTerminal - // in Unix terminals, arrow keys are represented by - // a sequence of 3 characters. E.g., the up arrow - // key yields 27, 91, 68 -- if (c == jline.PtyTerminal.ARROW_START) -+ if (c == UnixTerminal.ARROW_START) - { - c = readCharacter (in); -- if (c == jline.PtyTerminal.ARROW_PREFIX) -+ if (c == UnixTerminal.ARROW_PREFIX) - { - c = readCharacter (in); -- if (c == jline.PtyTerminal.ARROW_UP) -+ if (c == UnixTerminal.ARROW_UP) - return CTRL_P; -- else if (c == jline.PtyTerminal.ARROW_DOWN) -+ else if (c == UnixTerminal.ARROW_DOWN) - return CTRL_N; -- else if (c == jline.PtyTerminal.ARROW_LEFT) -+ else if (c == UnixTerminal.ARROW_LEFT) - return CTRL_B; -- else if (c == jline.PtyTerminal.ARROW_RIGHT) -+ else if (c == UnixTerminal.ARROW_RIGHT) - return CTRL_F; - } - } -@@ -185,6 +186,23 @@ public class PtyTerminal - return false; - } - -+ public boolean isEchoEnabled() { -+ final Termios termios = new Termios(fd); -+ return termios.get(Local.ECHO_INPUT); -+ } -+ -+ public void disableEcho() { -+ final Termios termios = new Termios(fd); -+ termios.set(Local.ECHO_INPUT, false); -+ termios.set(fd); -+ } -+ -+ public void enableEcho() { -+ final Termios termios = new Termios(fd); -+ termios.set(Local.ECHO_INPUT, true); -+ termios.set(fd); -+ } -+ - /** - * Returns the value of "stty size" width param. - */ -@@ -202,4 +220,4 @@ public class PtyTerminal - Size size = fd.getSize(); - return size.getColumns(); - } --} -\ No newline at end of file -+} -diff --git a/frysk-imports/Makefile.am b/frysk-imports/Makefile.am -index c09f9cf..3066eeb 100644 ---- a/frysk-imports/Makefile.am -+++ b/frysk-imports/Makefile.am -@@ -57,7 +57,6 @@ LIBUNWIND_ARCH_DIRS = libunwind-i386 libunwind-x86_64 libunwind-ppc32 libunwind- - # compiled with UNW_REMOTE_ONLY and so wouldn't be running the normal - # tests. - CHECK_SUBDIRS = \ -- jline \ - getopt \ - $(LIBUNWIND_DIR) - -diff --git a/frysk-imports/bootstrap.sh b/frysk-imports/bootstrap.sh -index 9b878e5..cb0c0a5 100755 ---- a/frysk-imports/bootstrap.sh -+++ b/frysk-imports/bootstrap.sh -@@ -42,7 +42,6 @@ - set -e - - FILE_LIST="\ -- jline/jline.jar \ - getopt/getopt.jar \ - " - -diff --git a/frysk-imports/configure.ac b/frysk-imports/configure.ac -index 2652f47..4c4f209 100644 ---- a/frysk-imports/configure.ac -+++ b/frysk-imports/configure.ac -@@ -51,7 +51,6 @@ AC_FIND_FILE([libaudit.h], [/usr/include/], LIBAUDIT_H) - - AC_CONFIG_FILES([ - Makefile -- jline/Makefile - getopt/Makefile]) - - # Even though "libunwind" is not built, it is still included in the -diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am -index d5ab9bc..c0eda26 100644 ---- a/frysk-sys/Makefile.am -+++ b/frysk-sys/Makefile.am -@@ -44,7 +44,6 @@ include Makefile.gen - - GEN_SOURCEPATH += ../frysk-imports/ - GEN_SOURCEPATH += $(top_srcdir)/../frysk-imports/ --GEN_CLASSPATH += ../frysk-imports/jline.jar - GEN_CLASSPATH += ../frysk-imports/getopt.jar - GEN_CLASSPATH += $(JUNIT_JAR) - diff --git a/frysk-0.4-use-installed-junit.patch b/frysk-0.4-use-installed-junit.patch deleted file mode 100644 index 97f8011..0000000 --- a/frysk-0.4-use-installed-junit.patch +++ /dev/null @@ -1,290 +0,0 @@ -commit 312b37c31d06ffb54bc3a174badf9daa6e781a14 -Author: Andrew Cagney -Date: Wed Apr 13 09:52:58 2016 -0400 - - Use installed junit, don't bundle junit.jar. - - Patch: frysk-0.4-use-installed-junit.patch - -diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh -index 6213a7e..c83a85e 100755 ---- a/frysk-common/Makefile.gen.sh -+++ b/frysk-common/Makefile.gen.sh -@@ -509,7 +509,7 @@ for suffix in .java .java-sh .mkenum .shenum .java-in ; do - ${name}: Makefile - mkdir -p ${d} - echo "#!/bin/sh" >> ${name}.tmp -- echo exec /usr/bin/java -cp \"\$(javadir)/*\$(INSTALLED_CLASSPATH)\" ${name} \"\\\$\$@\" >> ${name}.tmp -+ echo exec /usr/bin/java -cp \"\$(INSTALLED_CLASSPATH)\" ${name} \"\\\$\$@\" >> ${name}.tmp - chmod a+x ${name}.tmp - mv ${name}.tmp ${name} - EOF -diff --git a/frysk-common/Makefile.rules b/frysk-common/Makefile.rules -index 84ee611..92e4c3d 100644 ---- a/frysk-common/Makefile.rules -+++ b/frysk-common/Makefile.rules -@@ -140,7 +140,7 @@ ACLOCAL_AMFLAGS = -I common/m4 - - SOURCEPATH = $(subst $(space),:,$(strip $(GEN_SOURCEPATH))) - CLASSPATH = $(subst $(space),:,$(strip $(GEN_CLASSPATH))) --INSTALLED_CLASSPATH = $(patsubst %,:%,$(subst $(space),:,$(filter /%.jar,$(GEN_CLASSPATH)))) -+INSTALLED_CLASSPATH = $(subst $(space),:,$(javadir)/* $(filter /%.jar,$(GEN_CLASSPATH))) - - AM_CXXFLAGS = \ - -I$(srcdir) \ -@@ -499,7 +499,7 @@ SUFFIXES += .antlred .g - mv $$gen $$t/$$b.gen ; \ - i=@abs_srcdir@/$$d/$$b.sed ; \ - o=$$t/$$b.sed ; \ -- if test -r $$i ; then \ -+ if test -r $$i ; then \ - cp $$i $$o.sed ; \ - else \ - cp /dev/null $$o ; \ -@@ -536,7 +536,7 @@ SUFFIXES += .antlred .g - for fix in $$t/*.antlr-fixes ; do \ - b=`basename $$fix .antlr-fixes` ; \ - test -r "$$t/$$b.sed" || continue ; \ -- sort -n $$t/$$b.sed $$fix | uniq > $$t/$$b.tmp ; \ -+ sort -n $$t/$$b.sed $$fix | uniq > $$t/$$b.tmp ; \ - if ( set -x ; cmp -s $$t/$$b.tmp $$t/$$b.sed ) ; then \ - echo "***" ; \ - echo "*** $$t/$$b.sed already contains all fixes!" ; \ -@@ -545,7 +545,7 @@ SUFFIXES += .antlred .g - continue ; \ - fi ; \ - mv -f $$t/$$b.tmp $$t/$$b.sed ; \ -- edits=true ; \ -+ edits=true ; \ - done ; \ - done ; \ - done || true -@@ -599,7 +599,7 @@ SUFFIXES += .fig .jpg .pdf .eps .gif .txt - clean-local: clean-local-po - .PHONY: clean-local-po - clean-local-po: -- find $(GEN_DIRS) -name '*.Po' -exec cp /dev/null \{\} \; -+ test "x$(GEN_DIRS)" == x || find $(GEN_DIRS) -name '*.Po' -exec cp /dev/null \{\} \; - - # Remove any directories, why isn't this part of automake? - -@@ -662,18 +662,16 @@ ${GEN_DIRNAME}.jar: files-java.list $(GEN_CLASSPATH) - check-local: checked-for-import-junit-framework - .PHONY: checked-for-import-junit-framework - checked-for-import-junit-framework: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) -- @echo "" ; \ -- if for dir in $(GEN_DIRS) ; do \ -+ @if test "x$(GEN_DIRS)" != x && for dir in $(GEN_DIRS) ; do \ - find $(srcdir)/$$dir ./$$dir \ - -type f -name '[a-zA-Z]*.java' -print \ -- -o -name inua -prune \ -- -o -name junit -prune ; \ -+ -o -name inua -prune ; \ - done | xargs -r grep -H -n -e 'import *junit\.framework' ; \ - then \ -- echo "FAIL: code uses frysk.junit" ; \ -+ echo "FAIL: code only uses frysk.junit" ; \ - exit 1 ; \ - else \ -- echo "PASS: code uses frysk.junit" ; \ -+ echo "PASS: code only uses frysk.junit" ; \ - fi - - # Check that everything is calling fail() with a parameter. -@@ -681,7 +679,7 @@ checked-for-import-junit-framework: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) - check-local: checked-for-parameterless-junit-fail - .PHONY: checked-for-parameterless-junit-fail - checked-for-parameterless-junit-fail: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) -- @if for dir in $(GEN_DIRS) ; do \ -+ @if test "x$(GEN_DIRS)" != x && for dir in $(GEN_DIRS) ; do \ - find $(srcdir)/$$dir ./$$dir \ - -type f -name '[a-zA-Z]*.java' -print \ - -o -name inua -prune \ -@@ -699,7 +697,7 @@ checked-for-parameterless-junit-fail: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) - check-local: checked-for-null-equals - .PHONY: checked-for-null-equals - checked-for-null-equals: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) -- @if for dir in $(GEN_DIRS) ; do \ -+ @if test "x$(GEN_DIRS)" != x && for dir in $(GEN_DIRS) ; do \ - find $(srcdir)/$$dir \ - -type f -name '[a-zA-Z]*.java' -print \ - -o -type f -name '[a-zA-Z]*.cxx' -print \ -@@ -720,7 +718,7 @@ checked-for-null-equals: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) - check-local: checked-for-at-author - .PHONY: checked-for-at-author - checked-for-at-author: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) -- @if for dir in $(GEN_DIRS) ; do \ -+ @if test "x$(GEN_DIRS)" != x && for dir in $(GEN_DIRS) ; do \ - find $(srcdir)/$$dir \ - -type f -name '[a-zA-Z]*.java' -print \ - -o -name inua -prune \ -@@ -737,7 +735,7 @@ checked-for-at-author: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) - check-local: checked-for-eclipse-residue - .PHONY: checked-for-eclipse-residue - checked-for-eclipse-residue: $(if $(GEN_DIRS),$(GEN_DIRNAME).jar) -- @if for dir in $(GEN_DIRS) ; do \ -+ @if test "x$(GEN_DIRS)" != x && for dir in $(GEN_DIRS) ; do \ - find $(srcdir)/$$dir \ - -type f -name '[a-zA-Z]*.java' -print \ - -o -name inua -prune \ -diff --git a/frysk-common/frysk-common.ac b/frysk-common/frysk-common.ac -index 511c4fc..a112cfb 100644 ---- a/frysk-common/frysk-common.ac -+++ b/frysk-common/frysk-common.ac -@@ -96,7 +96,7 @@ AU_DEFUN([AC_LANG_JAVAC], [AC_LANG(Java)]) - AC_LANG(Java) - - JAVAC='$(JAVA) -cp $(ECJ_JAR):$(CLASSPATH) org.eclipse.jdt.internal.compiler.batch.Main -1.4' --JAVACFLAGS='-warn:+semicolon -sourcepath $(SOURCEPATH) -classpath $(CLASSPATH)' -+JAVACFLAGS='-warn:+semicolon $(if $(SOURCEPATH),-sourcepath $(SOURCEPATH)) $(if $(CLASSPATH),-classpath $(CLASSPATH))' - AC_SUBST([JAVAC]) - AC_SUBST([JAVACFLAGS]) - -diff --git a/frysk-core/Makefile.am b/frysk-core/Makefile.am -index fbe11ef..7938aa8 100644 ---- a/frysk-core/Makefile.am -+++ b/frysk-core/Makefile.am -@@ -45,7 +45,7 @@ include Makefile.gen - GEN_CLASSPATH += ../frysk-sys/frysk-sys.jar - GEN_CLASSPATH += ../frysk-imports/jline.jar - GEN_CLASSPATH += $(ANTLR_JAR) --GEN_CLASSPATH += ../frysk-imports/junit.jar -+GEN_CLASSPATH += $(JUNIT_JAR) - GEN_CLASSPATH += ../frysk-imports/getopt.jar - - # For TestExec.java -diff --git a/frysk-core/bootstrap.sh b/frysk-core/bootstrap.sh -index 4ed9a1c..ce80e1c 100755 ---- a/frysk-core/bootstrap.sh -+++ b/frysk-core/bootstrap.sh -@@ -43,7 +43,7 @@ set -e - - # Generate everything (always run with --add-missing). - --sh -eu ./common/Makefile.gen.sh frysk prog ANTLR_JAR -+sh -eu ./common/Makefile.gen.sh frysk prog ANTLR_JAR JUNIT_JAR - - echo "Running aclocal ..." - aclocal -I common/m4 -diff --git a/frysk-core/configure.ac b/frysk-core/configure.ac -index 7abf364..910dd0c 100644 ---- a/frysk-core/configure.ac -+++ b/frysk-core/configure.ac -@@ -47,6 +47,7 @@ m4_include([common/frysk-common.ac]) - - AM_INIT_AUTOMAKE([subdir-objects foreign no-installinfo no-exeext no-dist]) - AC_FIND_FILE([antlr.jar], [/usr/share/java], ANTLR_JAR) -+AC_FIND_FILE([junit.jar], [/usr/share/java], JUNIT_JAR) - - AC_CONFIG_FILES([Makefile]) - AC_OUTPUT -diff --git a/frysk-imports/Makefile.am b/frysk-imports/Makefile.am -index c94af36..c09f9cf 100644 ---- a/frysk-imports/Makefile.am -+++ b/frysk-imports/Makefile.am -@@ -1,6 +1,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2006, 2007, 2008, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -57,7 +58,6 @@ LIBUNWIND_ARCH_DIRS = libunwind-i386 libunwind-x86_64 libunwind-ppc32 libunwind- - # tests. - CHECK_SUBDIRS = \ - jline \ -- junit \ - getopt \ - $(LIBUNWIND_DIR) - -@@ -81,16 +81,6 @@ uninstall-info-recursive \ - uninstall-recursive: SUBDIRS = - - GEN_CLASSPATH += getopt.jar --GEN_CLASSPATH += junit.jar --GEN_GCJ_LDADD_LIST += libfrysk-getopt.a --GEN_GCJ_LDADD_LIST += libfrysk-junit.a --GEN_GCJ_LDADD_LIST += -lstdc++ --GEN_GCJ_LDADD_LIST += ./libunwind-i386/src/.libs/libunwind-x86.a --GEN_GCJ_LDADD_LIST += ./libunwind-x86_64/src/.libs/libunwind-x86_64.a --GEN_GCJ_LDADD_LIST += ./libunwind-ppc32/src/.libs/libunwind-ppc32.a --GEN_GCJ_LDADD_LIST += ./libunwind-ppc64/src/.libs/libunwind-ppc64.a --# For auding of system calls. --GEN_GCJ_LDADD_LIST += -laudit - - # Need to get this into the distribution - noinst_HEADERS = \ -diff --git a/frysk-imports/bootstrap.sh b/frysk-imports/bootstrap.sh -index 87ddd6b..9b878e5 100755 ---- a/frysk-imports/bootstrap.sh -+++ b/frysk-imports/bootstrap.sh -@@ -42,7 +42,6 @@ - set -e - - FILE_LIST="\ -- junit/junit.jar \ - jline/jline.jar \ - getopt/getopt.jar \ - " -diff --git a/frysk-imports/configure.ac b/frysk-imports/configure.ac -index df4ad25..2652f47 100644 ---- a/frysk-imports/configure.ac -+++ b/frysk-imports/configure.ac -@@ -52,8 +52,7 @@ AC_FIND_FILE([libaudit.h], [/usr/include/], LIBAUDIT_H) - AC_CONFIG_FILES([ - Makefile - jline/Makefile -- getopt/Makefile -- junit/Makefile]) -+ getopt/Makefile]) - - # Even though "libunwind" is not built, it is still included in the - # list of configured subdirectories so that it can be included in -diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am -index 7465edf..d5ab9bc 100644 ---- a/frysk-sys/Makefile.am -+++ b/frysk-sys/Makefile.am -@@ -45,8 +45,8 @@ include Makefile.gen - GEN_SOURCEPATH += ../frysk-imports/ - GEN_SOURCEPATH += $(top_srcdir)/../frysk-imports/ - GEN_CLASSPATH += ../frysk-imports/jline.jar --GEN_CLASSPATH += ../frysk-imports/junit.jar - GEN_CLASSPATH += ../frysk-imports/getopt.jar -+GEN_CLASSPATH += $(JUNIT_JAR) - - # Force a few dependencies - lib/unwind/cni/Unwind%.cxx: lib/unwind/Unwind%.java lib/unwind/cni/UnwindH.hxx -diff --git a/frysk-sys/bootstrap.sh b/frysk-sys/bootstrap.sh -index a3c1eb6..076cb94 100755 ---- a/frysk-sys/bootstrap.sh -+++ b/frysk-sys/bootstrap.sh -@@ -2,6 +2,7 @@ - # This file is part of the program FRYSK. - # - # Copyright 2005, 2006, 2007, 2008, Red Hat Inc. -+# Copyright 2016, Andrew Cagney - # - # FRYSK is free software; you can redistribute it and/or modify it - # under the terms of the GNU General Public License as published by -@@ -45,7 +46,7 @@ FILE_LIST="frysk \ - inua \ - lib" - --./common/Makefile.gen.sh $FILE_LIST -+./common/Makefile.gen.sh $FILE_LIST JUNIT_JAR - - # Generate everything (always run with --add-missing). - -diff --git a/frysk-sys/configure.ac b/frysk-sys/configure.ac -index d92c4f4..675ee80 100644 ---- a/frysk-sys/configure.ac -+++ b/frysk-sys/configure.ac -@@ -45,6 +45,7 @@ AC_INIT(frysk, [FRYSK_VERSION]) - m4_include([common/frysk-common.ac]) - - AM_INIT_AUTOMAKE([subdir-objects foreign no-installinfo no-exeext no-dist]) -+AC_FIND_FILE([junit.jar], [/usr/share/java], JUNIT_JAR) - - AC_CONFIG_FILES([Makefile]) - AC_OUTPUT diff --git a/frysk-0.4-usererrno.patch b/frysk-0.4-usererrno.patch deleted file mode 100644 index d737571..0000000 --- a/frysk-0.4-usererrno.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- frysk-0.4/frysk-imports/include/ptrace_wait.h.usererrno 2011-02-06 12:38:38.525259999 -0500 -+++ frysk-0.4/frysk-imports/include/ptrace_wait.h 2011-02-06 12:40:45.093259997 -0500 -@@ -71,7 +71,7 @@ - - // Dump the result - if (rpid < 0) { -- printf (" fails (%s)", strerror (errno)); -+ printf (" fails (%s)", strerror (rerrno)); - } - else { - printf (" returns 0x%x ", rstatus); -@@ -87,7 +87,7 @@ - - // validate - if (rpid < 0) { -- if (wif != NULL || errno != reason) { -+ if (wif != NULL || rerrno != reason) { - printf ("\n"); - abort (); - } ---- frysk-0.4/frysk-imports/tests/frysk3595/detach-multi-thread.c.usererrno 2011-02-06 12:54:15.465259998 -0500 -+++ frysk-0.4/frysk-imports/tests/frysk3595/detach-multi-thread.c 2011-02-06 12:54:51.845259997 -0500 -@@ -85,7 +85,7 @@ - - // Dump the result - if (rpid < 0) { -- printf (" fails (%s)", strerror (errno)); -+ printf (" fails (%s)", strerror (rerrno)); - } - else { - printf (" returns 0x%x ", rstatus); -@@ -101,7 +101,7 @@ - - // validate - if (rpid < 0) { -- if (wif != NULL || errno != reason) { -+ if (wif != NULL || rerrno != reason) { - printf ("\n"); - abort (); - } diff --git a/frysk.spec b/frysk.spec index b169d51..51dc6fc 100644 --- a/frysk.spec +++ b/frysk.spec @@ -1,28 +1,23 @@ -Summary: Execution analysis and debugging tool-suite +Summary: Execution analysis and debugging tool-suite. Name: frysk Version: 0.4 -Release: 99%{?dist} +Release: 28%{?dist} -# Fedora 17+ is still waiting for vte et.al. bindings. -%define enable_gnome %{fedora}0 < 170 -%define enable_devel %{fedora}0 < 170 - -# https://docs.fedoraproject.org/en-US/legal/allowed-licenses/ -# https://docs.fedoraproject.org/en-US/legal/license-review-process/ -# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/new -# origin: Legacy Abbreviation -> SPDX -# -# getopt GPLv2+ with exception -> GPL-2.0-or-later WITH Classpath-exception-2.0 -# frysk: GPLv2 with 398-exception -> GPL-2.0 WITH ???redhat??? exception -# libunwind: MIT Modern Style with sublicense -> MIT - -License: GPL-2.0-only WITH 389-exception AND GPL-2.0-or-later WITH Classpath-exception-2.0 AND MIT +# antlrv2 is Public Domain; antlrv3 is BSD. +# getopt is GPLv2 with exception +# elfutils is GPLv2 with exception +# frysk is GPLv2 with exception +# junit licence is CPL (according to the junit rpm) +# jline licence is BSD +# libunwind is BSD +License: GPLv2 with exceptions and BSD and CPL and Public Domain +Group: Development/System URL: http://sourceware.org/frysk Source: ftp://sourceware.org/pub/frysk/%{name}-%{version}.tar.bz2 # Import unreleased fixes -Patch0: frysk-0.4-head.patch +Patch0: frysk-0.4-head.patch # Local fixes. Patch1: frysk-0.4-bash-dollar-star.patch @@ -42,46 +37,8 @@ Patch14: frysk-0.4-nooptimize.patch Patch15: frysk-0.4-skipdecl.patch Patch16: frysk-0.4-flushstat.patch Patch17: frysk-0.4-ftrace.patch -Patch18: frysk-0.4-usererrno.patch -Patch19: frysk-0.4-configure-enable-gnome.patch -Patch20: frysk-0.4-bin-antlr.patch -Patch21: frysk-0.4-nopkglibdir.patch -Patch22: frysk-0.4-no-jdom.patch -Patch23: frysk-0.4-missing-javah-cni-built.patch -Patch24: frysk-0.4-jni.patch -Patch25: frysk-0.4-awk-gensub.patch -Patch26: frysk-0.4-pic-asm.patch -Patch27: frysk-0.4-per-thread-java-id.patch -Patch28: frysk-0.4-unwind-global-id.patch -Patch29: frysk-0.4-use-installed-antlr.patch -Patch30: frysk-0.4-use-installed-junit.patch -Patch31: frysk-0.4-jni-issameobject.patch -Patch32: frysk-0.4-switch-ecj-to-javac.patch -Patch33: frysk-0.4-use-installed-jline.patch -Patch34: frysk-0.4-libunwind-fstack.patch -Patch35: frysk-0.4-clone-cursor.patch -Patch36: frysk-0.4-fedpkg-lint-licence.patch -Patch37: frysk-0.4-fedpkg-lint-solib.patch -Patch38: frysk-0.4-gelf-newphdr.patch -Patch39: frysk-0.4-jnixx-signed-unsigned.patch -Patch40: frysk-0.4-check-p-not-status.patch -Patch41: frysk-0.4-python3.patch -Patch42: frysk-0.4-jline1-to-jline.patch -Patch43: frysk-0.4-disable-arch32-tests.patch -Patch44: frysk-0.4-steptester-indentation.patch -Patch45: frysk-0.4-gcc-fcommon.patch -Patch46: frysk-0.4-javac.patch -Patch47: frysk-0.4-jnixx-union-as-reserved-word.patch -Patch48: frysk-0.4-jnixx-dont-emit-nested-classes.patch -Patch49: frysk-0.4-49-elf-newehdr-null.patch -Patch50: frysk-0.4-50-autoconf-2-70-fixes.patch -Patch51: frysk-0.4-51-debugedit-path.patch -Patch52: frysk-0.4-52-libunwind-tests.patch -Patch53: frysk-0.4-53-no-new-integer.patch -Patch54: frysk-0.4-54-c-warnings.patch Patch100: frysk-0.4-aclocaljavac.patch -Patch101: frysk-0.4-cxx-scope.patch # Do not push these upstream Patch1003: frysk-0.4-nogtkwerror.patch @@ -89,49 +46,51 @@ Patch1003: frysk-0.4-nogtkwerror.patch # Use installed elfutils Patch666: frysk-0.4-sodwfl.patch -BuildRequires: gcc-c++ -BuildRequires: java-25-devel +# revert to 0.133 removing local and fedora rpm fixes +Patch1004: frysk-0.4-elfutils-fixesout.patch +Patch1005: frysk-0.4-elfutils-rpmout.patch +Patch1006: frysk-0.4-elfutils-head.patch +Patch1007: frysk-0.4-elfutils-offt.patch +Patch1100: frysk-0.4-elfutils-maphack.patch +Patch1101: frysk-0.4-elfutils-ldadd.patch +Patch1102: frysk-0.4-elfutils-louser.patch +Patch1103: frysk-0.4-elfutils-ldadd-lzma.patch + +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) + +BuildRequires: gcc-java >= 4.1.2 BuildRequires: junit >= 3.8.1 -BuildRequires: antlr-tool >= 2.7.4 -BuildRequires: xmlto -BuildRequires: sharutils -BuildRequires: transfig >= 3.2.0 -BuildRequires: audit-libs-devel -BuildRequires: autoconf automake libtool -# Some scripts run during the build use python -BuildRequires: python3 -BuildRequires: elfutils-devel >= 0.151 -BuildRequires: jline2 -BuildRequires: debugedit - -# it seems java requires explict runtime requires!?!? -Requires: junit -Requires: antlr-tool -Requires: jline2 - -%if %{enable_gnome} +BuildRequires: antlr >= 2.7.4 BuildRequires: jdom >= 1.0 BuildRequires: glib-java >= 0.2.6 -BuildRequires: cairo-java-devel >= 1.0.3 -BuildRequires: cairo-devel >= 1.0.0 -BuildRequires: gtk2-devel >= 2.8.0 -BuildRequires: libgtk-java-devel >= 2.8.7-6 -BuildRequires: libvte-java-devel >= 0.12.0 +BuildRequires: libgtk-java-devel >= 2.8.7-6 BuildRequires: libglade-java-devel >= 2.12.3 +BuildRequires: cairo-java-devel >= 1.0.3 +BuildRequires: cairo-devel >= 1.0.0 +BuildRequires: gtk2-devel >= 2.8.0 BuildRequires: libglade2-devel >= 2.5.1 -BuildRequires: vte-devel >= 0.12.1 +BuildRequires: libvte-java-devel >= 0.12.0 +BuildRequires: vte-devel >= 0.12.1 +BuildRequires: xmlto +BuildRequires: sharutils +BuildRequires: transfig >= 3.2.0 BuildRequires: gnome-python2-gconf -%endif -BuildRequires: make - +BuildRequires: audit-libs-devel +BuildRequires: autoconf automake libtool +BuildRequires: bison >= 1.875 +BuildRequires: flex >= 2.5.4a +BuildRequires: zlib-devel >= 1.2.2.3 +BuildRequires: bzip2-devel +BuildRequires: xz-devel +# Some generation scripts are being written in python +BuildRequires: python # Bug #305611: PPC Build problems with libunwind # Bug #416961: ALPHA not supported by frysk and libunwind. # Bug #467970: SPARC/SPARC64 not supported by frysk and libunwind. # Bug #467971: ARM not supported by frysk. -# Bug #506961: S390(X) not supported by frysk and libunwind. -# Bug #2104040: native frysk depends on to be removed i686 java-openjdk packages -ExclusiveArch: x86_64 ppc64 +# Bug #506961: S390X not supported by frysk and libunwind. +ExcludeArch: alpha arm ppc sparc sparc64 s390x # We do not want to build a ``cross-debugging version'' i686->i386; # libunwind build would get confused by this. Override the cmd-line @@ -149,19 +108,15 @@ running processes and threads, of locking primitives and will also expose deadlocks, gather data and debug any given process in the system. -%if %{enable_devel} %package devel -Summary: The development part of Frysk -Requires: %{name} = %{version}-%{release} -%endif -%if %{enable_gnome} -Requires: python2-dogtail >= 0.5.2 +Summary: The development part of Frysk +Group: Development/System +Requires: %{name} = %{version}-%{release} +Requires: dogtail >= 0.5.2 # Needed by "dogtail-run-headless -n": Requires: metacity -Requires: python2 -%endif +Requires: python -%if %{enable_devel} %description devel Frysk is an execution-analysis technology implemented using native Java and C++. It is aimed at providing developers and sysadmins with @@ -172,15 +127,14 @@ expose deadlocks, gather data and debug any given process in the system. This package contains the development components of Frysk. -%endif -%if %{enable_gnome} %package gnome -Summary: The GNOME front-end of Frysk -Requires: %{name} = %{version}-%{release} -Requires: libgconf-java -Requires: libglade-java >= 2.12.5 -Requires: libvte-java >= 0.12.0 +Summary: The GNOME front-end of Frysk +Requires: %{name} = %{version}-%{release} +Group: Development/System +Requires: libgconf-java +Requires: libglade-java >= 2.12.5 +Requires: libvte-java >= 0.12.0 %description gnome Frysk is an execution-analysis technology implemented using native @@ -192,110 +146,58 @@ expose deadlocks, gather data and debug any given process in the system. This package contains the GNOME front end for Frysk. -%endif %prep %setup -q -n %{name}-%{version} pwd -%patch -P0 -p1 -z .head +%patch0 -p1 -z .head -%patch -P1 -p1 -z .bash-dollar-star -%patch -P2 -p1 -z .strayelsif -%patch -P3 -p1 -z .fdebugrpm -%patch -P4 -p1 -z .mktlwidgetdir -%patch -P5 -p1 -z .gcc-warnings -%patch -P6 -p1 -z .funitexitman +%patch1 -p1 -z .bash-dollar-star +%patch2 -p1 -z .strayelsif +%patch3 -p1 -z .fdebugrpm +%patch4 -p1 -z .mktlwidgetdir +%patch5 -p1 -z .gcc-warnings +%patch6 -p1 -z .funitexitman mv frysk-core/frysk/pkglibdir/FunitSimpleInterfaceTest.java frysk-core/frysk/pkglibdir/FunitSimpleInterfaceMain.java -%patch -P7 -p1 -z .mvtesttomain -F 1 +%patch7 -p1 -z .mvtesttomain -F 1 mv frysk-core/frysk/util/ProcStopUtil.java frysk-core/frysk/util/TaskStopUtil.java -%patch -P8 -p1 -z .taskstoputil -F 3 -%patch -P9 -p1 -z .publictestbedsymtab -%patch -P10 -p1 -z .noelfmem -%patch -P11 -p1 -z .gccjint -%patch -P12 -p1 -z .taskstoperr -%patch -P13 -p1 -z .lostfork -%patch -P14 -p1 -z .nooptimize -%patch -P15 -p1 -z .skipdecl -%patch -P16 -p1 -z .flushstat -%patch -P17 -p1 -z .ftrace -%patch -P18 -p1 -z .usererrno -%patch -P19 -p1 -z .configure-enable-gnome -%patch -P20 -p1 -z .bin-antlr +%patch8 -p1 -z .taskstoputil -F 3 +%patch9 -p1 -z .publictestbedsymtab +%patch10 -p1 -z .noelfmem +%patch11 -p1 -z .gccjint +%patch12 -p1 -z .taskstoperr +%patch13 -p1 -z .lostfork +%patch14 -p1 -z .nooptimize +%patch15 -p1 -z .skipdecl +%patch16 -p1 -z .flushstat +%patch17 -p1 -z .ftrace %if %{fedora}0 >= 130 -%patch -P100 -p1 -z .aclocaljavac +%patch100 -p1 -z .aclocaljavac %endif -%if %{enable_gnome} -# don't apply - leaves default as build gnome -%else -%patch -P101 -p1 -z .configure-enable-gnome -%endif +%patch1003 -p1 -z .nogtkwerror -%if %{enable_devel} -# don't apply - leaves devel package installed -%else -%patch -P21 -p1 -z .nopkglibdir -%endif - -%patch -P1003 -p1 -z .nogtkwerror - -%patch -P666 -p1 -z .sodwfl +%if %{fedora}0 >= 200 rm -rf frysk-imports/elfutils - -%if %{enable_gnome} -# don't apply, leave jdom around +%patch666 -p1 -z .sodwfl %else -%patch -P22 -p1 -z .no-jdom -rm -rf frysk-core/frysk/dom -rm -rf frysk-core/frysk/rt/LineXXX.java +cd frysk-imports/elfutils +%patch1004 -p1 -z .elfutils-fixesout +%patch1005 -p1 -z .elfutils-rpmout +%patch1006 -p1 -z .elfutils-head +%patch1007 -p1 -z .elfutils-offt +cd ../.. +%patch1100 -p1 -z .elfutils-maphack +%patch1101 -p1 -z .elfutils-ldadd +%patch1102 -p1 -z .elfutils-louser +%patch1103 -p1 -z .elfutils-ldadd-lzma %endif -%patch -P23 -p1 -z .missing-javah-cni-built -%patch -P24 -p1 -z .jni -%patch -P25 -p1 -z .awk-gensub -%patch -P26 -p1 -z .pic-asm -%patch -P27 -p1 -z .per-thread-java-id -%patch -P28 -p1 -z .unwind-global-id -%patch -P29 -p1 -z .use-installed-antlr -rm -rf frysk-imports/antlr -%patch -P30 -p1 -z .use-installed-junit -rm -rf frysk-imports/junit -%patch -P31 -p1 -z .jni-issameobject -%patch -P32 -p1 -z .switch-ecj-to-javac -%patch -P33 -p1 -z .use-installed-jline -rm -rf frysk-imports/jline -# automake doesn't like old names -mv frysk-imports/libunwind/configure.{in,ac} -%patch -P34 -p1 -z .libunwind-fstack -%patch -P35 -p1 -z .clone-cursor -%patch -P36 -p1 -z .fedpkg-lint-licence -%patch -P37 -p1 -z .fedpkg-lint-solib -%patch -P38 -p1 -z .gelf-newphdr -%patch -P39 -p1 -z .jnixx-signed-unsigned -%patch -P40 -p1 -z .check-p-not-status -%patch -P41 -p1 -z .python3 -%patch -P42 -p1 -z .jline1-to-jline -%patch -P43 -p1 -z .disable-arch32-tests -%patch -P44 -p1 -z .steptester-indentation -%patch -P45 -p1 -z .gcc-fcommon -%patch -P46 -p1 -z .javac -%patch -P47 -p1 -z .jnixx-union-as-reserved-word -%patch -P48 -p1 -z .jnixx-dont-emit-nested-classes -%patch -P49 -p1 -z .49-elf-newehdr-null -%patch -P50 -p1 -z .50-autoconf-2-70-fixes -%patch -P51 -p1 -z .51-debugedit-path -%patch -P52 -p1 -z .52-libunwind-tests.patch -%patch -P53 -p1 -z .53-no-new-integer.patch -%patch -P54 -p1 -z .54-c-warnings.patch - echo "%{version}-%{release}" > frysk-common/version.in -# don't try to build assembler test files -rm frysk-core/frysk/pkglibdir/*.S - ./bootstrap.sh %build @@ -311,13 +213,17 @@ rpm -ql xmlto || : ls -l /usr/bin/xmlto || : # Capture the configure line rm -f configure -echo '#!/bin/sh -x' >> configure -echo 'exec ../$(basename $0) "$@"' >> configure +echo '#!/bin/sh -x' >> configure +echo 'exec ../configure "$@"' >> configure chmod a+x configure +# FIXME: Warnings should be fixed, not suppressed: +RPM_OPT_FLAGS=${RPM_OPT_FLAGS/-Wp,-D_FORTIFY_SOURCE=2 /} %configure \ - CFLAGS="$RPM_OPT_FLAGS" \ - CXXFLAGS="$RPM_OPT_FLAGS" + CFLAGS="$RPM_OPT_FLAGS" \ + CXXFLAGS="$RPM_OPT_FLAGS" \ + GCJFLAGS="-g -O -fsource=1.4 -Wextraneous-semicolon" \ + --disable-arch32-tests make %{?_smp_mflags} @@ -330,46 +236,40 @@ mkdir -p $RPM_BUILD_ROOT/usr/share/frysk pwd cd build -make DESTDIR=$RPM_BUILD_ROOT install %{?_smp_mflags} +make DESTDIR=$RPM_BUILD_ROOT install %{?_smp_mflags} -find $RPM_BUILD_ROOT - -%if %{enable_gnome} # Fix timestamp of a generated script: touch -r \ - ../frysk-gui/frysk/gui/FryskGui.java-in \ - $RPM_BUILD_ROOT%{_datadir}/%{name}/dogtail_scripts/frysk_suite.py + ../frysk-gui/frysk/gui/FryskGui.java-in \ + $RPM_BUILD_ROOT%{_datadir}/%{name}/dogtail_scripts/frysk_suite.py # ...and a few other ones: for f in test2866.py test2985.py test3380.py; do - touch -r \ - ../frysk-gui/frysk/gui/test/dogtail_scripts/$f \ - $RPM_BUILD_ROOT%{_datadir}/%{name}/dogtail_scripts/$f + touch -r \ + ../frysk-gui/frysk/gui/test/dogtail_scripts/$f \ + $RPM_BUILD_ROOT%{_datadir}/%{name}/dogtail_scripts/$f done -%endif + +# Workaround for #211824: +rm $RPM_BUILD_ROOT%{_datadir}/java/*.jar # some stray files. -%if %{enable_devel} rm $RPM_BUILD_ROOT%{_libdir}/%{name}/gen-type-funit-tests rm $RPM_BUILD_ROOT%{_datadir}/%{name}/ChangeLog rm $RPM_BUILD_ROOT%{_datadir}/%{name}/test-exe-x86.c.source -%else -rm -rf $RPM_BUILD_ROOT%{_libdir}/%{name}/test-sysroot -rm -rf $RPM_BUILD_ROOT%{_datadir}/%{name} -# do not document uninstalled devel commands -rm -rf $RPM_BUILD_ROOT%{_mandir}/man8 -%endif # We are not yet ready to be in the menu: -%if %{enable_gnome} echo "Hidden=true" >> $RPM_BUILD_ROOT%{_datadir}/applications/frysk.desktop -%endif -%if %{enable_devel} # Remove duplicates; causes tools to complain. rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-exec-alias # Remove debuginfo; confuses elfutils. rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug -%endif + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%clean +rm -rf %{buildroot} %files @@ -391,9 +291,20 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug %{_bindir}/fstep %{_bindir}/ftrace -%{_libdir}/%{name}/libfrysk-sys-jni.so -# See bug 211824 for why these are in lib and not /usr/share/java/* -%{_libdir}/%{name}/java/*.jar +%{_libdir}/libfrysk-antlr.so +%{_libdir}/libfrysk-core.so +%{_libdir}/libfrysk-getopt.so +%{_libdir}/libfrysk-sys.so +%{_libdir}/libfrysk-sys-jni.so +%{_libdir}/libfrysk-jdom.so +%{_libdir}/libfrysk-jline.so + +%dir %{_datadir}/%{name} +%{_datadir}/%{name}/messages.properties +%{_datadir}/%{name}/test-core-x86 +%{_datadir}/%{name}/test-core-x8664 +%{_datadir}/%{name}/test-exe-x86 +%{_datadir}/%{name}/libtest.so %{_mandir}/man1/fauxv.1.gz %{_mandir}/man1/fcatch.1.gz @@ -410,7 +321,6 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug %{_mandir}/man1/ftrace.1.gz %{_mandir}/man7/frysk.7.gz -%if %{enable_devel} %files devel %defattr(-,root,root) @@ -420,6 +330,7 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug %dir %{_libdir}/%{name} %{_libdir}/%{name}/FunitSimpleInterfaceMain %{_libdir}/%{name}/fsystest +%{_libdir}/%{name}/ftail %{_libdir}/%{name}/funit* %{_libdir}/%{name}/hpd-c %{_libdir}/%{name}/sys-tests @@ -427,21 +338,9 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug %{_libdir}/%{name}/test1 %{_datadir}/%{name}/helloworld.o %{_datadir}/%{name}/test_looper.xml -%{_datadir}/%{name}/test-core-x86 -%{_datadir}/%{name}/test-core-x8664 -%{_datadir}/%{name}/test-exe-x86 -%{_datadir}/%{name}/libtest.so - -%{_mandir}/man8/* -%endif - -%if %{enable_gnome} -%{_libdir}/libfrysk-jdom.so -%{_libdir}/%{name}/ftail %{_datadir}/%{name}/dogtail_scripts -%endif +%{_mandir}/man8/* -%if %{enable_gnome} %files gnome %defattr(-,root,root) @@ -457,7 +356,6 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug %{_datadir}/%{name}/glade %{_datadir}/%{name}/images -%{_datadir}/%{name}/messages.properties %{_datadir}/applications/frysk.desktop %{_datadir}/pixmaps/fryskTrayIcon48.png @@ -466,245 +364,7 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug %{_mandir}/man1/frysk.1.gz -%endif - %changelog -* Tue Jul 29 2025 jiri vanek - 0.4-99 -- Rebuilt for java-25-openjdk as preffered jdk - -* Wed Jul 23 2025 Fedora Release Engineering - 0.4-98 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Fri Feb 28 2025 Andrew Cagney - 0.4-97 -- Fix deprecated New Integer() warnings -- Fix unprototyped function - -* Thu Jan 16 2025 Fedora Release Engineering - 0.4-96 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Wed Jul 17 2024 Fedora Release Engineering - 0.4-95 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Tue Feb 27 2024 Jiri Vanek - 0.4-94 -- Rebuilt for java-21-openjdk as system jdk - -* Wed Jan 24 2024 Fedora Release Engineering - 0.4-93 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 19 2024 Fedora Release Engineering - 0.4-92 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Wed Jul 19 2023 Fedora Release Engineering - 0.4-91 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Mon May 15 2023 Andrew Cagney - 0.4-90 -- drop hack mangling _FORTIFY_SOURCE; fix 2161322 - -* Mon Apr 3 2023 Andrew Cagney - 0.4-89 -- update frysk licence - -* Thu Mar 9 2023 Andrew Cagney - 0.4-88 -- update getopt and libunwind sub licences - -* Thu Jan 19 2023 Fedora Release Engineering - 0.4-87 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Sep 29 2022 Andrew Cagney - 0.4-86 -- don't build libunwind tests; frysk-0.4-52-libunwind-tests.patch - -* Thu Jul 21 2022 Andrew Cagney - 0.4-85 -- ding dong the 32-bit Java is dead; #2104040 - -* Thu Jul 21 2022 Fedora Release Engineering - 0.4-84 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Sat Feb 05 2022 Jiri Vanek - 0.4-83 -- Rebuilt for java-17-openjdk as system jdk - -* Thu Jan 20 2022 Fedora Release Engineering - 0.4-82 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Wed Aug 4 2021 Andrew Cagney - 0.4-81 -- require debugedit; fix hardwired path - -* Wed Aug 4 2021 Andrew Cagney - 0.4-80 -- Allow autoconf 2.69 - -* Wed Jul 21 2021 Fedora Release Engineering - 0.4-79 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Mon Apr 12 2021 Andrew Cagney - 0.4-78 -- autoconf 2.70 - -* Tue Jan 26 2021 Fedora Release Engineering - 0.4-77 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Mon Dec 14 2020 Jerry James - 0.4-76 -- Depend on jline2, not jline - -* Fri Dec 11 2020 Fedora Release Engineering - 0.4-75 -- fix check of elf_newehdr()'s return value - -* Mon Jul 27 2020 Fedora Release Engineering - 0.4-74 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Thu Jul 16 2020 Andrew Cagney - 0.4-73 -- 'union' onto 'union$' - frysk-0.4-jnixx-union-as-reserved-word.patch -- omit nested local classes - frysk-0.4-jnixx-dont-emit-nested-classes.patch - -* Fri Jul 10 2020 Jiri Vanek - 0.4-72 -- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11 - -* Tue Jun 9 2020 Andrew Cagney - 0.4-71 -- drop -source 1.4 -- frysk-0.4-javac.patch - -* Tue Jan 28 2020 Andrew Cagney - 0.4-70 -- pacify gcc -fcommon - -* Tue Jan 28 2020 Fedora Release Engineering - 0.4-69 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Thu Nov 14 2019 Andrew Cagney - 0.4-68 -- make runtime java dependencies explicit - found by Magnus Glantz -- depend on antlr-tool instead of antlr - -* Thu Sep 5 2019 Andrew Cagney - 0.4-67 -- Updates for jline(2) -- Pacify GCC - fix some indentation -- Default to no 32-bit tests (drop config's --disable-arch32-tests) - -* Thu Sep 5 2019 Andrew Cagney - 0.4-66 -- Depend on jline, not jline1 - -* Thu Jul 25 2019 Fedora Release Engineering - 0.4-65 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Fri Feb 15 2019 Andrew Cagney - 0.4-64 -- Update README cribsheet - -* Thu Jan 31 2019 Fedora Release Engineering - 0.4-63 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Tue Jul 24 2018 Andrew Cagney - 0.4-62 -- Deal with python 3 - -* Fri Jul 13 2018 Fedora Release Engineering - 0.4-61 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Thu Mar 15 2018 Iryna Shcherbina - 0.4-60 -- Update Python 2 dependency declarations to new packaging standards - (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) - -* Wed Feb 07 2018 Fedora Release Engineering - 0.4-59 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Wed Aug 02 2017 Fedora Release Engineering - 0.4-58 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 0.4-57 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri Feb 10 2017 Andrew Cagney - 0.4-56 -- fix warnings/errors from latest compilers - -* Fri Feb 10 2017 Fedora Release Engineering - 0.4-55 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Fri Jan 6 2017 Andrew Cagney - 0.4-54 -- work around evolving gelf_newphdr() interface - -* Tue Apr 19 2016 Andrew Cagney - 0.4-53 -- fix some fedpkg lint problems -- add frysk-0.4-fedpkg-lint-licence.patch -- add frysk-0.4-fedpkg-lint-solib.patch -- use Fedora approved name for libunwind licence - -* Tue Apr 19 2016 Andrew Cagney - 0.4-52 -- clone the jobject when cloning the cursor - frysk-0.4-clone-cursor.patch - -* Mon Apr 18 2016 Andrew Cagney - 0.4-51 -- better handle prelink - frysk-0.4-libunwind-fstack.patch - -* Tue Apr 12 2016 Andrew Cagney - 0.4-50 -- do not ship a local copy of junit.jar - frysk-0.4-use-installed-junit.patch -- do not ship a local copy of jline.jar - frysk-0.4-use-installed-jline.patch -- update licence list - drop unbundled code -- remove long dead configurations -- in JNIXX operator== use IsSameObject - frysk-0.4-jni-issameobject.patch -- use javac - frysk-0.4-switch-ecj-to-javac.patch - -* Tue Apr 12 2016 Andrew Cagney - 0.4-49 -- do not ship a local copy of antlr.jar - frysk-0.4-use-installed-antlr.patch - -* Tue Apr 12 2016 Andrew Cagney - 0.4-48 -- Use a global java ID in libunwind - frysk-0.4-unwind-global-id.patch - -* Wed Apr 06 2016 Andrew Cagney - 0.4-47 -- Use java ID for local thread - frysk-0.4-per-thread-java-id.patch - -* Wed Feb 03 2016 Fedora Release Engineering - 0.4-46 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Mon Aug 17 2015 Andrew Cagney - 0.4.45 -- Fix AWK gensub parameter 3; new warning about it is being printed to - STDOUT instead of STDERR and, hence, ends up in generated Java files -- Don't build assembler test files as conflicts with building PIC. - -* Wed Jun 17 2015 Fedora Release Engineering - 0.4-44 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Sat Aug 16 2014 Fedora Release Engineering -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Sat Jun 21 2014 Andrew Cagney - 0.4-42 -- Switch from the CNI to the JNI native bindings -- Build using Java/ECJ removing dependency on gcc-java -- Added patch frysk-0.4-jni.patch - -* Sat Jun 07 2014 Fedora Release Engineering - 0.4-41 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Sat Aug 03 2013 Fedora Release Engineering - 0.4-40 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Thu Feb 14 2013 Andrew Cagney - 0.4-39 -- Don't build jdom, no longer needed -- Force the generation of some cni headers -- Pacify automake by giving config files names it likes - -* Sat Jan 26 2013 Andrew Cagney - 0.4-38 -- Rebuild unchanged against new gcj so it picks up libgcj.so.14. - -* Tue Aug 7 2012 Andrew Cagney - 0.4-37 -- Add java-1.5.0-gcj to BuildRequires list. - -* Thu Jul 19 2012 Fedora Release Engineering - 0.4-36 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Sat Feb 11 2012 Andrew Cagney - 0.4-35 -- Clean up pkglibdir and pkglibdata dir, devel package not needed. - -* Sat Jan 21 2012 Andrew Cagney - 0.4-34 -- Add frysk-0.4-configure-enable-gnome.patch as no vte/java bindings. -- Use installed antlr - frysk-0.4-bin-antlr.patch -- Fix scope warning from latest c++ - frysk-04-cxx-scope.patch - -* Fri Jan 13 2012 Fedora Release Engineering - 0.4-33 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Tue Dec 06 2011 Adam Jackson - 0.4-32 -- Rebuild for new libpng - -* Fri Mar 11 2011 Dan Horák - 0.4-31 -- switch to ExclusiveArch - -* Tue Feb 08 2011 Fedora Release Engineering - 0.4-30 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Sun Feb 6 2011 Andrew Cagney - 0.4-29 -- enable use of host's elfutils when f15; final bug appears fixed -- fix unused rerrno variable; frysk-04-usererrno.patch - * Tue Sep 28 2010 Tom "spot" Callaway - 0.4-28 - rebuild, fix lzma linking @@ -800,15 +460,15 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug * Mon Dec 01 2008 Ignacio Vazquez-Abrams - 0.4-3 - Rebuild for Python 2.6 -* Mon Oct 27 2008 Andrew Cagney - 0.4-2 +* Mon Oct 27 2008 Andrew Cagney - 0.4-2 - drop EPL from licence list; cdtparser deleted - re-enable SMP make - disable -Werror flag to gcj -* Mon Oct 20 2008 Andrew Cagney - 0.4-1 +* Tue Oct 20 2008 Andrew Cagney - 0.4-1 - add sparc and arm to ExcludeArch. -* Mon Jun 9 2008 Sami Wagiaalla - 0.4-0 +* Mon Jun 9 2008 Sami Wagiaalla - 0.4-0 - import frysk-0.4.tar.bz2 - removed Patch7: frysk-0.0.1.2008.02.29.rh1-jboolean-array.patch - removed Patch8: frysk-0.0.1.2008.02.29.rh1-asm-includes.patch @@ -820,19 +480,19 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug - remove test_main_looper from file list. - remove libfrysk-cdtparser from file list. -* Fri Apr 4 2008 Andrew Cagney - 0.2.1-2 +* Fri Apr 4 2008 Andrew Cagney - 0.2.1-2 - add patch11, frysk-0.2.1-ppc-build.patch. -* Fri Apr 4 2008 Andrew Cagney - 0.2.1-1 +* Fri Apr 4 2008 Andrew Cagney - 0.2.1-1 - re-instate patch10, install fparser's manpage in man8 - drop patch6, frysk-0.0.1.2008.01.18.rh1-elfutils-werror.patch. -* Fri Apr 4 2008 Andrew Cagney - 0.2.1-0 +* Fri Apr 4 2008 Andrew Cagney - 0.2.1-0 - import frysk-0.2.1.tar.bz2 - drop patch9, frysk-elfutils-src.patch. - drop patch10, install fparser's manpage in man8 -* Tue Mar 25 2008 Andrew Cagney - 0.0.1.2008.03.19.rh1-1 +* Tue Mar 25 2008 Andrew Cagney - 0.0.1.2008.03.19.rh1-1 - import 0.0.1.2008.03.19.rh1 (35c076f3436b95a116cba33f52e0c9a592607dfa) - move fparser to pkglibdir. - add ferror to frysk's file list. @@ -842,13 +502,13 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug - add Patch9 frysk-elfutils-crc.patch, work-around broken CRC check. - add Patch10, install fparser's manpage in man8 -* Tue Mar 11 2008 Sami Wagiaalla - 0.0.1.2008.03.11-2 +* Fri Mar 11 2008 Sami Wagiaalla - 0.0.1.2008.03.11-2 - Added statements to check for xmlto. -* Tue Mar 11 2008 Sami Wagiaalla - 0.0.1.2008.03.11-1 +* Fri Mar 11 2008 Sami Wagiaalla - 0.0.1.2008.03.11-1 - Import 0.0.1.2008.03.11 (84bcf09e5a329252d81e853e49f0cf1449f937c2) -* Tue Mar 11 2008 Sami Wagiaalla - 0.0.1.2008.02.29.rh1-2 +* Fri Mar 11 2008 Sami Wagiaalla - 0.0.1.2008.02.29.rh1-2 - Update releease number - added frysk-0.0.1.2008.02.29.rh1-asm-includes.patch - added frysk-0.0.1.2008.02.29.rh1-jboolean-array.patch @@ -866,7 +526,7 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug * Mon Feb 4 2008 Stepan Kasal - 0.0.1.2008.01.18.rh1-2 - rebuild against rebuilt java-gnome -* Sun Jan 20 2008 Andrew Cagney - 0.0.1.2008.01.18.rh1-1 +* Mon Jan 20 2008 Andrew Cagney - 0.0.1.2008.01.18.rh1-1 - Import frysk-0.0.1.2008.01.18.rh1 (4cff0daa2996b28274985fa4674160f15e5fd9e2) - Delete run_make_check code. - Add patch4, frysk-0.0.1.2008.01.18.rh1-no-sysroot.patch to not build @@ -1073,7 +733,7 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug * Wed Aug 2 2006 Stepan Kasal - 0.0.1.2006.07.25.rh1-3 - BuildRequires latest dogtail -* Fri Jul 28 2006 Phil Muldoon - 0.0.1.2006.07.25.rh1-3 +* Fri Jul 28 2006 Phil Muldoon - 0.0.1.2006.07.25.rh1-3 - Add dogtail to BuildRequires * Tue Jul 25 2006 Stepan Kasal - 0.0.1.2006.07.25.rh1-2 @@ -1088,15 +748,15 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug * Tue Jul 18 2006 Stepan Kasal - 0.0.1.2006.07.18.rh1-1 - New upstream version, incorporates the previous two patches. -* Tue Jul 18 2006 Stepan Kasal - 0.0.1.2006.07.14.rh1-2 +* Wed Jul 18 2006 Stepan Kasal - 0.0.1.2006.07.14.rh1-2 - Add two patches from Phil Muldoon: frysk-20060714-observer.patch -- continue even though an observer cannot be load frysk-20060714-timer.patch -- fix incorrect usage of a core timer -* Fri Jul 14 2006 Stepan Kasal - 0.0.1.2006.07.14.rh1-1 +* Wed Jul 14 2006 Stepan Kasal - 0.0.1.2006.07.14.rh1-1 - New upstream version. -* Thu Jul 13 2006 Stepan Kasal - 0.0.1.2006.07.13.rh1-1 +* Wed Jul 13 2006 Stepan Kasal - 0.0.1.2006.07.13.rh1-1 - New upstream version. * Wed Jul 12 2006 Stepan Kasal - 0.0.1.2006.07.12.rh2-1 @@ -1142,7 +802,7 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug - Patch for new linux/unistd.h. - Patch to avoid scanf("%%a[..]"). -* Wed Jun 14 2006 Stepan Kasal - 0.0.1.2006.06.14-0 +* Thu Jun 14 2006 Stepan Kasal - 0.0.1.2006.06.14-0 - New upstream version. - Add BuildRequires: libglade2-devel >= 2.5.1 - Refresh other BuildRequires. @@ -1199,28 +859,28 @@ rm $RPM_BUILD_ROOT%{_libdir}/%{name}/funit-*-nodebug * Fri Dec 09 2005 Jesse Keating - rebuilt -* Wed Nov 16 2005 Igor Foox 0.0.0.20051116-0.3 +* Mon Nov 16 2005 Igor Foox 0.0.0.20051116-0.3 - Added jars under /usr/share/java to distribution. -* Wed Nov 16 2005 Igor Foox 0.0.0.20051116-0.1 +* Mon Nov 16 2005 Igor Foox 0.0.0.20051116-0.1 - Update source. -* Wed Nov 16 2005 Igor Foox 0.0.0.20051114-0.3 +* Mon Nov 16 2005 Igor Foox 0.0.0.20051114-0.3 - Removed runtime dependency for eclipse-cdt, changed buildtime eclipse-cdt dependency to 3.0.0. -* Wed Nov 16 2005 Igor Foox 0.0.0.20051114-0.2 +* Mon Nov 16 2005 Igor Foox 0.0.0.20051114-0.2 - Changed dependency on frysk-cdtparser to eclipse-cdt (it was somehow magically reversed). * Mon Nov 14 2005 Igor Foox 0.0.0.20051114-0.1 - Removed smp flags. -* Thu Nov 10 2005 Igor Foox 0.0.0.20051109-0.3 +* Mon Nov 10 2005 Igor Foox 0.0.0.20051109-0.3 - Update source. -* Thu Nov 10 2005 Igor Foox 0.0.0.20051109-0.2 +* Wed Nov 10 2005 Igor Foox 0.0.0.20051109-0.2 - Added ExclusiveArch for i386. -* Thu Nov 10 2005 Igor Foox 0.0.0.20051109-0.1 +* Wed Nov 10 2005 Igor Foox 0.0.0.20051109-0.1 - Updated source, changed cdtparser dependency to eclipse-cdt. Added build restriction to i386. Added %%{?_smp_flags} to make command.