From b3d3216bfeb36ed8f0460b3ea4f020dd9f987af7 Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Wed, 22 Mar 2023 10:14:57 -0700 Subject: [PATCH] Add files missing from initial import --- README.local-patches | 101 +++++++++++++++ _git_upstream_commit | 1 + _patch_order | 200 ++++++++++++++++++++++++++++++ generate-git-repo-from-patches.sh | 72 +++++++++++ generate-patches-from-git-repo.sh | 101 +++++++++++++++ tests/README | 31 +++++ tests/inventory | 3 + tests/tests.yml | 27 ++++ 8 files changed, 536 insertions(+) create mode 100644 README.local-patches create mode 100644 _git_upstream_commit create mode 100644 _patch_order create mode 100755 generate-git-repo-from-patches.sh create mode 100755 generate-patches-from-git-repo.sh create mode 100644 tests/README create mode 100755 tests/inventory create mode 100644 tests/tests.yml diff --git a/README.local-patches b/README.local-patches new file mode 100644 index 0000000..725846e --- /dev/null +++ b/README.local-patches @@ -0,0 +1,101 @@ +Fedora GDB local patches policy +=============================== + +In order to make things easier for the Fedora GDB maintainer, we +choose to auto-generate the local patches by making use of an upstream +git repository. Below you can find a few instructions on how to work +using this method. + +You need to run the following commands from the directory that +contains the "gdb.spec" file. + +### Importing the GDB patches into a git repository + +1) The local patches (*.patch) need to be imported into an upstream +git repository. For example, let's assume you cloned the repository +by doing: + + $ git clone git://sourceware.org/git/binutils-gdb.git + + ## TIP: if you already have the repository cloned somewhere in your + ## system, you can pass a "--reference " to the "git clone" + ## command and it will use your local repository as much as possible + ## to make the clone, speeding up things. + +2) After cloning the upstream repository, you can import your patches +by using the script "generate-git-repo-from-patches.sh": + + $ sh generate-git-repo-from-patches.sh + +The script will basically cd into the repository, checkout the +revision specified in the file "_git_upstream_commit", iterate through +the file "_patch_order" and "git-am" every patch *in that order*. +This operation should complete without errors; if you find a problem +with "git-am", it probably means that the revision specified in the +file "_git_upstream_commit" is wrong. + +### Rebasing the patches against a newer version/release + +1) First, cd into the upstream repository. All you have to do is +choose the revision against which you plan to rebase the patches, and +"git rebase ". git will do the rest, and you will be able +to perform conflict resolution by git's algorithm, which is smarter. + +### Creating new patches + +1) Create the new patch on top of the the others, as usual. Note that +you can use "git rebase" whenever you want to reorder patch order, or +even to delete a patch. + +2) When writing the commit log, you must obey a few rules. The +subject line *must* be the filename of the patch. This line will be +used when exporting the patches from the git repository, and +(obviously) it gives the filename that should be used for this +specific patch. + +3) You can also add comments that will go into the auto-generated +"Patch:" file (see below). To do that, use the special marker ";;" at +the beginning of the line. This way, a commit log that says: + + test-patch.patch + + ;; This is a test patch + ;; Second line + +Will generate the following entry in the auto-generated "Patch:" file: + + # This is a test patch + # Second line + PatchXYZ: test-patch.patch + +### Exporting the GDB patches from the git repository + +1) When you're done working with the patches, go back to the directory +that contains the "gdb.spec" file, and from there you run: + + $ sh generate-patches-from-git-repo.sh + +This will regenerate all of the *.patch files (excluding the ones that +were also excluded from the git repository), and also regenerate a few +control files. These control files are: + + - _gdb.spec.Patch.include: This file contains the "Patch:" directives. + + - _gdb.spec.patch.include: This file contains the "%patch" directives. + + - _patch_order: This file contains the patches, in the exact order + that they must be applied. It is used when importing the patches + into the git repository. + + - _git_upstream_commit: This file contains the last upstream commit + against which the patches were rebased. It is used when importing + the patches into the git repository. + +NOTE: If you did a rebase against a newer upstream version, you need +to specify the commit/tag/branch against which you rebased: + + $ sh generate-patches-from-git-repo.sh + +For example, if you rebased against "gdb-8.1-release": + + $ sh generate-patches-from-git-repo.sh gdb-8.1-release diff --git a/_git_upstream_commit b/_git_upstream_commit new file mode 100644 index 0000000..a76ec7f --- /dev/null +++ b/_git_upstream_commit @@ -0,0 +1 @@ +00f223631fa9803b783515a2f667f86997e2cdbe diff --git a/_patch_order b/_patch_order new file mode 100644 index 0000000..533f942 --- /dev/null +++ b/_patch_order @@ -0,0 +1,200 @@ +gdb-6.3-rh-testversion-20041202.patch +gdb-vla-intel-fortran-strides.patch +gdb-vla-intel-fortran-vla-strings.patch +gdb-vla-intel-stringbt-fix.patch +gdb-6.3-ppc64syscall-20040622.patch +gdb-6.3-ppc64displaysymbol-20041124.patch +gdb-6.3-gstack-20050411.patch +gdb-6.3-test-pie-20050107.patch +gdb-6.3-test-self-20050110.patch +gdb-6.3-test-dtorfix-20050121.patch +gdb-6.3-test-movedir-20050125.patch +gdb-6.3-threaded-watchpoints2-20050225.patch +gdb-6.3-inferior-notification-20050721.patch +gdb-6.3-inheritancetest-20050726.patch +gdb-6.3-readnever-20050907.patch +gdb-6.5-bz203661-emit-relocs.patch +gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch +gdb-6.5-sharedlibrary-path.patch +gdb-6.5-BEA-testsuite.patch +gdb-6.5-last-address-space-byte-test.patch +gdb-6.5-readline-long-line-crash-test.patch +gdb-6.5-bz216711-clone-is-outermost.patch +gdb-6.5-bz218379-ppc-solib-trampoline-test.patch +gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch +gdb-6.5-bz109921-DW_AT_decl_file-test.patch +gdb-6.3-bz140532-ppc-unwinding-test.patch +gdb-6.3-bz202689-exec-from-pthread-test.patch +gdb-6.6-bz230000-power6-disassembly-test.patch +gdb-6.6-bz229517-gcore-without-terminal.patch +gdb-6.6-testsuite-timeouts.patch +gdb-6.6-bz237572-ppc-atomic-sequence-test.patch +gdb-6.6-scheduler_locking-step-is-default.patch +gdb-6.3-attach-see-vdso-test.patch +gdb-6.5-bz243845-stale-testing-zombie-test.patch +gdb-6.6-buildid-locate.patch +gdb-6.6-buildid-locate-solib-missing-ids.patch +gdb-6.6-buildid-locate-rpm.patch +gdb-6.7-charsign-test.patch +gdb-6.7-ppc-clobbered-registers-O2-test.patch +gdb-6.7-testsuite-stable-results.patch +gdb-6.5-ia64-libunwind-leak-test.patch +gdb-6.5-missed-trap-on-step-test.patch +gdb-6.5-gcore-buffer-limit-test.patch +gdb-6.3-mapping-zero-inode-test.patch +gdb-6.3-focus-cmd-prev-test.patch +gdb-6.8-bz442765-threaded-exec-test.patch +gdb-6.8-sparc64-silence-memcpy-check.patch +gdb-6.5-section-num-fixup-test.patch +gdb-6.8-bz436037-reg-no-longer-active.patch +gdb-6.8-watchpoint-conditionals-test.patch +gdb-6.8-bz466901-backtrace-full-prelinked.patch +gdb-simultaneous-step-resume-breakpoint-test.patch +gdb-core-open-vdso-warning.patch +gdb-x86_64-i386-syscall-restart.patch +gdb-bz533176-fortran-omp-step.patch +gdb-follow-child-stale-parent.patch +gdb-ccache-workaround.patch +gdb-archer-pie-addons.patch +gdb-archer-pie-addons-keep-disabled.patch +gdb-lineno-makeup-test.patch +gdb-ppc-power7-test.patch +gdb-bz541866-rwatch-before-run.patch +gdb-moribund-utrace-workaround.patch +gdb-archer-next-over-throw-cxx-exec.patch +gdb-bz601887-dwarf4-rh-test.patch +gdb-6.6-buildid-locate-core-as-arg.patch +gdb-6.6-buildid-locate-rpm-librpm-workaround.patch +gdb-test-bt-cfi-without-die.patch +gdb-bz568248-oom-is-error.patch +gdb-bz634108-solib_address.patch +gdb-test-pid0-core.patch +gdb-test-dw2-aranges.patch +gdb-test-expr-cumulative-archer.patch +gdb-physname-pr11734-test.patch +gdb-physname-pr12273-test.patch +gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch +gdb-test-ivy-bridge.patch +gdb-runtest-pie-override.patch +gdb-attach-fail-reasons-5of5.patch +gdb-glibc-strstr-workaround.patch +gdb-rhel5.9-testcase-xlf-var-inside-mod.patch +gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch +gdb-rhbz795424-bitpos-20of25.patch +gdb-rhbz795424-bitpos-21of25.patch +gdb-rhbz795424-bitpos-22of25.patch +gdb-rhbz795424-bitpos-23of25.patch +gdb-rhbz795424-bitpos-25of25.patch +gdb-rhbz795424-bitpos-25of25-test.patch +gdb-rhbz795424-bitpos-lazyvalue.patch +gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch +gdb-gnat-dwarf-crash-3of3.patch +gdb-rhbz1007614-memleak-infpy_read_memory-test.patch +gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch +gdb-archer-vla-tests.patch +gdb-vla-intel-tests.patch +gdb-btrobust.patch +gdb-fortran-frame-string.patch +gdb-python-gil.patch +gdb-rhbz1156192-recursive-dlopen-test.patch +gdb-jit-reader-multilib.patch +gdb-rhbz1149205-catch-syscall-after-fork-test.patch +gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch +gdb-rhbz1350436-type-printers-error.patch +gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch +gdb-bz1219747-attach-kills.patch +gdb-fedora-libncursesw.patch +gdb-opcodes-clflushopt-test.patch +gdb-dts-rhel6-python-compat.patch +gdb-6.6-buildid-locate-rpm-scl.patch +gdb-readline62-ask-more-rh.patch +gdb-6.8-quit-never-aborts.patch +gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch +gdb-container-rh-pkg.patch +gdb-rhbz1325795-framefilters-test.patch +gdb-linux_perf-bundle.patch +gdb-libexec-add-index.patch +gdb-rhbz1398387-tab-crash-test.patch +gdb-testsuite-readline63-sigint.patch +gdb-archer.patch +gdb-vla-intel-fix-print-char-array.patch +gdb-rhbz1553104-s390x-arch12-test.patch +gdb-rhbz881849-ipv6-1of3.patch +gdb-rhbz881849-ipv6-2of3.patch +gdb-rhbz881849-ipv6-3of3.patch +gdb-rhbz1187581-power8-regs-1of7.patch +gdb-rhbz1187581-power8-regs-2of7.patch +gdb-rhbz1187581-power8-regs-3of7.patch +gdb-rhbz1187581-power8-regs-4of7.patch +gdb-rhbz1187581-power8-regs-5of7.patch +gdb-rhbz1187581-power8-regs-6of7.patch +gdb-rhbz1187581-power8-regs-7of7.patch +gdb-rhbz1491128-batch-mode-exit-status-1of2.patch +gdb-rhbz1491128-batch-mode-exit-status-2of2.patch +gdb-use-pulongest-aarch64-linux-tdep.patch +gdb-rhbz1653410-avoid-crash-when-calling-warning-too-early.patch +gdb-rhbz1639242-fix-dwarf2_find_containing_comp_unit-binary-search.patch +gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-1of5.patch +gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-2of5.patch +gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-3of5.patch +gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-4of5.patch +gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-5of5.patch +gdb-rhbz1666249-suggest-yum-instead-of-dnf.patch +gdb-rhbz1668635-libiberty-demangle_template-memleak.patch +gdb-rhbz1669953-aarch64-sve-binutils.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-01of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-02of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-03of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-04of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-05of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-06of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-07of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-08of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-09of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-10of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-11of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-12of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-13of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-14of15.patch +gdb-rhbz1187581-power8-regs-not-in-8.2-15of15.patch +gdb-rhbz1708192-parse_macro_definition-crash.patch +gdb-rhbz1742099-reject-sections-with-invalid-sizes.patch +gdb-rhbz1768593-s390x-arch13-01.patch +gdb-rhbz1768593-s390x-arch13-02.patch +gdb-rhbz1768593-s390x-arch13-03.patch +gdb-rhbz1659535-z15-record-replay.patch +gdb-rhbz1852580-terminal-woes.patch +gdb-rhbz1842691-corefile-mem-access-1of15.patch +gdb-rhbz1842691-corefile-mem-access-2of15.patch +gdb-rhbz1842691-corefile-mem-access-3of15.patch +gdb-rhbz1842691-corefile-mem-access-4of15.patch +gdb-rhbz1842691-corefile-mem-access-5of15.patch +gdb-rhbz1842691-corefile-mem-access-6of15.patch +gdb-rhbz1842691-corefile-mem-access-7of15.patch +gdb-rhbz1842691-corefile-mem-access-8of15.patch +gdb-rhbz1842691-corefile-mem-access-9of15.patch +gdb-rhbz1842691-corefile-mem-access-10of15.patch +gdb-rhbz1842691-corefile-mem-access-11of15.patch +gdb-rhbz1842691-corefile-mem-access-12of15.patch +gdb-rhbz1842691-corefile-mem-access-13of15.patch +gdb-rhbz1842691-corefile-mem-access-14of15.patch +gdb-rhbz1842691-corefile-mem-access-15of15.patch +gdb-rhbz1878810-bfd-suppress-loadable-section-outside-ELF-sections.patch +gdb-rhbz1905701-DWARF-data_location.patch +gdb-rhbz1903374-s390x-store-on-condition.patch +gdb-rhbz1934673-fortran-nameless-modules.patch +gdb-rhbz1854784-powerpc-remove-region-limit-dawr-1of7.patch +gdb-rhbz1854784-powerpc-remove-region-limit-dawr-2of7.patch +gdb-rhbz1854784-powerpc-remove-region-limit-dawr-3of7.patch +gdb-rhbz1854784-powerpc-remove-region-limit-dawr-4of7.patch +gdb-rhbz1854784-powerpc-remove-region-limit-dawr-5of7.patch +gdb-rhbz1854784-powerpc-remove-region-limit-dawr-6of7.patch +gdb-rhbz1854784-powerpc-remove-region-limit-dawr-7of7.patch +gdb-rhbz2012818-ibmz-update-1of5.patch +gdb-rhbz2012818-ibmz-update-2of5.patch +gdb-rhbz2012818-ibmz-update-3of5.patch +gdb-rhbz2012818-ibmz-update-4of5.patch +gdb-rhbz2012818-ibmz-update-5of5.patch +gdb-rhbz2018504-do-not-update-elf-headers.patch +gdb-rhbz2015131-restore-inferior-terminal-1of2.patch +gdb-rhbz2015131-avoid-sigttou-forks-2of2.patch diff --git a/generate-git-repo-from-patches.sh b/generate-git-repo-from-patches.sh new file mode 100755 index 0000000..6054aef --- /dev/null +++ b/generate-git-repo-from-patches.sh @@ -0,0 +1,72 @@ +#!/bin/sh + +# Generic function to print an error message and bail out. +die () +{ + echo $1 > /dev/stderr + exit 1 +} + +# Print usage +usage () +{ + cat < + + is the directory where the rebase was performed. You +need to clone the repository first. + +Options are: + + -h: Print this message + -u: Uncommit all patches and initialize stgit repo +EOF + exit 0 +} + +test -f gdb.spec || die "This script needs to run from the same directory as gdb.spec." + +test -z $1 && die "You need to specify the repository." +test "$1" = "-h" && usage + +uncommit=0 +if [ "$1" = "-u" ]; then + uncommit=1 + shift +fi + +git_repo=$1 +if [ ! -e $git_repo ]; then + echo "$0: repository \"$git_repo\" does not exist" + exit 1 +fi + +test -f _git_upstream_commit || die "Cannot find _git_upstream_commit file." +test -f _patch_order || die "Cannot find _patch_order file." + +last_ancestor_commit=`cat _git_upstream_commit` + +cd $1 + +git name-rev $last_ancestor_commit +test $? -eq 0 || die "Could not find $last_ancestor_commit in the repository $1. Did you run 'git fetch'?" + +# Create a branch for the checkout; use the distro name in +# the name of this branch. +f=`cd .. && pwd` +name=devel-`basename $f` +git checkout -b $name $last_ancestor_commit +echo "Applying patches..." +for p in `cat ../_patch_order` ; do + git am ../$p + test $? -eq 0 || die "Could not apply patch '$p'." +done + +if (($uncommit)); then + echo "Uncommitting patches..." + stg init + stg uncommit -t $last_ancestor_commit -x +fi diff --git a/generate-patches-from-git-repo.sh b/generate-patches-from-git-repo.sh new file mode 100755 index 0000000..09e7839 --- /dev/null +++ b/generate-patches-from-git-repo.sh @@ -0,0 +1,101 @@ +#!/bin/sh + +# Generic function to print an error message and bail out. +die () +{ + echo $1 > /dev/stderr + exit 1 +} + +# Print usage +usage () +{ + cat < [] + + is the directory where the rebase was performed. + + is the commit or tag or branch against which +the rebase was performed. It generally just needs to be provided if +the file "_git_upstream_commit" doesn't exist, or if you are doing a +rebase. This script will then use 'git merge-base' to find the most +recent common ancestor between HEAD and COMMIT_OR_TAG_OR_BRANCH. + +Options are: + + -h: Print this message +EOF + exit 0 +} + +test -f gdb.spec || die "This script needs to run from the same directory as gdb.spec." + +test -z $1 && die "You need to specify the repository." +test "$1" = "-h" && usage + +commit_or_tag="`cat _git_upstream_commit`" +if test ! -z "$2" ; then + commit_or_tag="$2" +fi + +test -z $commit_or_tag && die "Because the '_git_upstream_commit' file doesn't exist, you need to specify a commit/tag/branch." + +test -d $1 || die "$1 is not a directory." + +# Remove all the current patches +for f in `cat _patch_order` ; do + git rm -f $f +done + +cd $1 + +# If patches were uncommitted when the patches were applied, +# make sure that we're sitting at the top-most patch. Otherwise +# we'll only add patches up to the current top patch. +# It's safe to just assume stgit was used -- the push will simply +# fail. +stg push --all > /dev/null 2>&1 + +git name-rev $commit_or_tag +test $? -eq 0 || die "Could not find $commit_or_tag in the repository. Did you run 'git fetch'?" + +idx=1 +common_ancestor=`git merge-base HEAD $commit_or_tag` + +test -z "$common_ancestor" && die "Could not find common ancestor between HEAD and $commit_or_tag." + +temp_PATCH_file=/tmp/_gdb.spec.Patch.include +temp_patch_file=/tmp/_gdb.spec.patch.include +temp_patch_order_file=/tmp/_patch_order + +rm -f $temp_PATCH_file $temp_patch_file $temp_patch_order_file + +for c in `git rev-list --reverse ${common_ancestor}..HEAD` ; do + fname=`git log -1 --pretty='format:%s' $c` + test -z $fname && die "Could not determine filename for commit $c." + # Because git-format-patch generates patches with the first line + # containing the commit hash, every time we do a git-format-patch + # here we will have a different .patch file from what we had + # before, even if nothing has changed. This is bad, so we replace + # the commit hash by something constant (the string + # "FEDORA_PATCHES"). + git format-patch --no-signature --no-stat -k -1 --stdout $c | sed -e '1 s/^From [0-9a-f]\+ \(.*\)/From FEDORA_PATCHES \1/' -e '/^index [0-9a-f]\+\.\.[0-9a-f]\+.*$/d' > ../$fname + (cd .. && git add $fname) + + cat >> $temp_PATCH_file <> $temp_PATCH_file + printf "%%patch%03d -p1\n" $idx >> $temp_patch_file + echo $fname >> $temp_patch_order_file + idx=`expr $idx + 1` +done + +cd .. +mv $temp_PATCH_file _gdb.spec.Patch.include +mv $temp_patch_file _gdb.spec.patch.include +mv $temp_patch_order_file _patch_order +echo "$common_ancestor" > _git_upstream_commit diff --git a/tests/README b/tests/README new file mode 100644 index 0000000..0a1388a --- /dev/null +++ b/tests/README @@ -0,0 +1,31 @@ +Justification + +Adds tests according to the CI wiki specifically the standard test +interface in the spec. + +The playbook includes Tier1 level test cases that have been tested in +the following contexts and is passing reliably: Classic and +Container. Test logs are stored in the artifacts directory. + +The following steps are used to execute the tests using the standard +test interface: Test environment + +Make sure you have installed packages from the spec + + # rpm -q ansible python2-dnf libselinux-python standard-test-roles + ansible-2.3.2.0-1.fc26.noarch + python2-dnf-2.6.3-11.fc26.noarch + libselinux-python-2.6-7.fc26.x86_64 + standard-test-roles-2.4-1.fc26.noarch + +Run tests for Classic (must be run as root) + + # export ANSIBLE_INVENTORY=$(test -e inventory && echo inventory || echo /usr/share/ansible/inventory) + # ansible-playbook --tags=classic tests.yml + +Run tests for Container (must be run as root) + + # export ANSIBLE_INVENTORY=$(test -e inventory && echo inventory || echo /usr/share/ansible/inventory) + # export TEST_SUBJECTS=docker:docker.io/library/fedora:26 + # ansible-playbook --tags=container tests.yml + diff --git a/tests/inventory b/tests/inventory new file mode 100755 index 0000000..b118a5a --- /dev/null +++ b/tests/inventory @@ -0,0 +1,3 @@ +#!/bin/bash +export TEST_DOCKER_EXTRA_ARGS="--privileged" +exec merge-standard-inventory "$@" diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..98c4bd0 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,27 @@ +--- +# This first play always runs on the local staging system +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + - container + repositories: + - repo: "git://pkgs.devel.redhat.com/tests/gdb" + dest: "gdb" + tests: + - gdb/Sanity/debug-toolset-binary + - gdb/Sanity/debug-system-binary + required_packages: + - gdb + - coreutils + - binutils + - binutils-debuginfo + - glibc + - glibc-debuginfo + - gcc + - gcc-debuginfo + - zlib + - zlib-debuginfo + - coreutils-debuginfo + - which