Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9156973e13 | ||
|
|
3d1fd823a1 | ||
|
|
ec8efa4bb4 |
No files matched your search
@@ -113,9 +113,3 @@ ENV/
|
||||
|
||||
# JetBrains IDEs (PyCharm, etc)
|
||||
.idea
|
||||
|
||||
# Sources as unpacked and built by abuild
|
||||
/*/*/src/
|
||||
|
||||
# Allow having untracked packages in aports using a custom-something directory
|
||||
/custom-*/
|
||||
+45
-98
@@ -5,8 +5,8 @@ image: alpine:latest
|
||||
after_script:
|
||||
- .gitlab-ci/move_logs.sh $CI_PROJECT_DIR
|
||||
stages:
|
||||
- lint
|
||||
- build
|
||||
- first
|
||||
- second
|
||||
|
||||
# defaults for "only"
|
||||
# We need to run the CI jobs in a "merge request specific context", if CI is
|
||||
@@ -24,53 +24,44 @@ stages:
|
||||
|
||||
# device documentation
|
||||
wiki:
|
||||
stage: lint
|
||||
stage: first
|
||||
<<: *only-default
|
||||
only:
|
||||
refs:
|
||||
- merge_requests
|
||||
changes:
|
||||
- device/*/device-*/*
|
||||
before_script:
|
||||
- apk -q add python3
|
||||
script:
|
||||
- .gitlab-ci/check_devices_in_wiki.py --booting
|
||||
|
||||
# testcases linting
|
||||
testcases-linting:
|
||||
stage: lint
|
||||
# static code analysis (shellcheck is not in Alpine, so we use Debian)
|
||||
py-sh-static:
|
||||
stage: first
|
||||
<<: *only-default
|
||||
only:
|
||||
refs:
|
||||
- merge_requests
|
||||
changes:
|
||||
- .gitlab-ci/*
|
||||
- .gitlab-ci/*/*
|
||||
image: python:3.6-slim-stretch
|
||||
before_script:
|
||||
- apk -q add py-flake8
|
||||
- apt -q update >/dev/null
|
||||
- apt -y install flake8 shellcheck >/dev/null
|
||||
script:
|
||||
- flake8 --ignore E501,F401,E722,W504,W605
|
||||
- .gitlab-ci/static_code_analysis.sh
|
||||
|
||||
# shellcheck
|
||||
shellcheck:
|
||||
stage: lint
|
||||
# coding style check
|
||||
clang-format-static:
|
||||
stage: first
|
||||
<<: *only-default
|
||||
image: alpine:edge
|
||||
before_script:
|
||||
- apk -q upgrade
|
||||
- apk -q add shellcheck
|
||||
- apk -q add clang git
|
||||
script:
|
||||
- .gitlab-ci/shellcheck.sh
|
||||
- .gitlab-ci/static_clang-format.sh
|
||||
|
||||
# aports checks (generic)
|
||||
aports-static:
|
||||
stage: lint
|
||||
stage: first
|
||||
<<: *only-default
|
||||
before_script:
|
||||
- wget "https://gitlab.com/postmarketOS/ci-common/-/raw/master/install_pmbootstrap.sh"
|
||||
- sh ./install_pmbootstrap.sh pytest
|
||||
- .gitlab-ci/install_pmbootstrap.sh pytest
|
||||
script:
|
||||
- su pmos -c ".gitlab-ci/run_testcases.sh"
|
||||
- apk -q add git
|
||||
- su pmos -c "pmbootstrap kconfig check"
|
||||
- su pmos -c ".gitlab-ci/run_testcases.sh
|
||||
-m 'not pmaports_upstream_compat'"
|
||||
- su pmos -c ".gitlab-ci/check_changed_aports_versions.py"
|
||||
artifacts:
|
||||
when: on_failure
|
||||
@@ -80,84 +71,40 @@ aports-static:
|
||||
- pmbootstrap.cfg
|
||||
expire_in: 1 week
|
||||
|
||||
distfile-check:
|
||||
stage: lint
|
||||
<<: *only-default
|
||||
before_script:
|
||||
- apk -q add make findutils
|
||||
- wget "https://gitlab.com/postmarketOS/ci-common/-/archive/master/ci-common-master.tar.bz2"
|
||||
- tar -xf ci-common-master.tar.bz2
|
||||
- mv ci-common-master/distfile-check/*.sh ci-common-master/distfile-check/Makefile .
|
||||
- rm -r ci-common-master ci-common-master.tar.bz2
|
||||
script:
|
||||
- make -j999
|
||||
|
||||
# APKBUILD linting
|
||||
aport-lint:
|
||||
stage: lint
|
||||
before_script:
|
||||
- wget "https://gitlab.com/postmarketOS/ci-common/-/raw/master/install_pmbootstrap.sh"
|
||||
- sh ./install_pmbootstrap.sh
|
||||
script:
|
||||
- su pmos -c ".gitlab-ci/apkbuild-linting.py"
|
||||
only:
|
||||
- merge_requests
|
||||
allow_failure: true
|
||||
|
||||
# kernel kconfig check
|
||||
kernel-kconfig:
|
||||
stage: lint
|
||||
only:
|
||||
refs:
|
||||
- master
|
||||
- merge_requests
|
||||
changes:
|
||||
- device/*/linux-*/config-*
|
||||
- main/linux-*/config-*
|
||||
before_script:
|
||||
- wget "https://gitlab.com/postmarketOS/ci-common/-/raw/master/install_pmbootstrap.sh"
|
||||
- sh ./install_pmbootstrap.sh pytest
|
||||
script:
|
||||
- su pmos -c "pmbootstrap kconfig check"
|
||||
|
||||
# MR settings
|
||||
# (Checks for "Allow commits from members who can merge to the target branch")
|
||||
mr-settings:
|
||||
stage: lint
|
||||
stage: first
|
||||
only:
|
||||
- merge_requests
|
||||
before_script:
|
||||
- apk -q add python3
|
||||
script:
|
||||
- wget -q "https://gitlab.com/postmarketOS/ci-common/-/raw/master/check_mr_settings.py"
|
||||
- python3 ./check_mr_settings.py
|
||||
- .gitlab-ci/check_mr_settings.py
|
||||
|
||||
# aports checks (upstream compatibility)
|
||||
aports-static-upstream:
|
||||
stage: second
|
||||
only:
|
||||
- master@postmarketOS/pmaports
|
||||
before_script:
|
||||
- .gitlab-ci/install_pmbootstrap.sh pytest
|
||||
script:
|
||||
- su pmos -c ".gitlab-ci/run_testcases.sh
|
||||
-m 'pmaports_upstream_compat'"
|
||||
artifacts:
|
||||
when: on_failure
|
||||
paths:
|
||||
- log.txt
|
||||
- log_testsuite_pmaports.txt
|
||||
- pmbootstrap.cfg
|
||||
expire_in: 1 week
|
||||
|
||||
# build changed aports
|
||||
.build:
|
||||
stage: build
|
||||
aports-build:
|
||||
stage: second
|
||||
<<: *only-default
|
||||
before_script:
|
||||
- wget "https://gitlab.com/postmarketOS/ci-common/-/raw/master/install_pmbootstrap.sh"
|
||||
- sh ./install_pmbootstrap.sh
|
||||
- .gitlab-ci/install_pmbootstrap.sh git
|
||||
script:
|
||||
- .gitlab-ci/build.sh
|
||||
- cp -r /home/pmos/.local/var/pmbootstrap/packages/ packages/ || true
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
paths:
|
||||
- packages/
|
||||
|
||||
build-x86_64:
|
||||
extends: .build
|
||||
|
||||
build-x86:
|
||||
extends: .build
|
||||
|
||||
build-aarch64:
|
||||
extends: .build
|
||||
|
||||
build-armv7:
|
||||
extends: .build
|
||||
|
||||
build-armhf:
|
||||
extends: .build
|
||||
- PYTHONUNBUFFERED=1 su pmos -c ".gitlab-ci/build_changed_aports.py"
|
||||
@@ -1,32 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import common
|
||||
import os.path
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
common.add_upstream_git_remote()
|
||||
apkbuilds = {file for file in common.get_changed_files(removed=False)
|
||||
if os.path.basename(file) == "APKBUILD"}
|
||||
if len(apkbuilds) < 1:
|
||||
print("No APKBUILDs to lint")
|
||||
sys.exit(0)
|
||||
|
||||
issues = []
|
||||
for apkbuild in apkbuilds:
|
||||
if apkbuild.startswith("temp/") or apkbuild.startswith("cross/"):
|
||||
print(f"NOTE: Skipping linting of {apkbuild}")
|
||||
continue
|
||||
|
||||
package = os.path.basename(os.path.dirname(apkbuild))
|
||||
result = common.run_pmbootstrap(["-q", "lint", package], output_return=True)
|
||||
if len(result) > 0:
|
||||
issues.append([apkbuild, result])
|
||||
|
||||
if len(issues) > 0:
|
||||
print("Linting issues found:")
|
||||
for issue in issues:
|
||||
print(issue[0] + ": " + issue[1])
|
||||
|
||||
sys.exit(1)
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
# Convenience wrapper for short arch-specific build jobs in .gitlab-ci.yml
|
||||
|
||||
export PYTHONUNBUFFERED=1
|
||||
JOB_ARCH="${CI_JOB_NAME#build-}"
|
||||
|
||||
set -x
|
||||
su pmos -c ".gitlab-ci/build_changed_aports.py $JOB_ARCH"
|
||||
@@ -1,83 +1,37 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
import sys
|
||||
|
||||
# Same dir
|
||||
import common
|
||||
|
||||
# pmbootstrap
|
||||
import testcases.add_pmbootstrap_to_import_path
|
||||
import pmb.parse
|
||||
import pmb.parse._apkbuild
|
||||
import pmb.helpers.pmaports
|
||||
|
||||
|
||||
def build_strict(packages, arch):
|
||||
def check_build(packages, verify_only=False):
|
||||
# Initialize build environment with less logging
|
||||
common.run_pmbootstrap(["build_init"])
|
||||
common.run_pmbootstrap(["--details-to-stdout", "build", "--strict",
|
||||
"--force", "--arch", arch] + list(packages))
|
||||
|
||||
|
||||
def verify_checksums(packages, arch):
|
||||
# Only do this with one build-{arch} job
|
||||
arch_verify = "x86_64"
|
||||
if arch != arch_verify:
|
||||
print(f"NOTE: doing checksum verification in build-{arch_verify} job,"
|
||||
" not here.")
|
||||
return
|
||||
|
||||
if len(packages) == 0:
|
||||
print("no packages changed, not doing any checksums verification")
|
||||
return
|
||||
|
||||
common.run_pmbootstrap(["build_init"])
|
||||
common.run_pmbootstrap(["--details-to-stdout", "checksum", "--verify"] +
|
||||
list(packages))
|
||||
if verify_only:
|
||||
common.run_pmbootstrap(["--details-to-stdout", "checksum",
|
||||
"--verify"] + list(packages))
|
||||
else:
|
||||
common.run_pmbootstrap(["--details-to-stdout", "build", "--strict",
|
||||
"--force"] + list(packages))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Architecture to build for (as in build-{arch})
|
||||
if len(sys.argv) != 2:
|
||||
print("usage: build_changed_aports.py ARCH")
|
||||
sys.exit(1)
|
||||
arch = sys.argv[1]
|
||||
|
||||
# Get and print modified packages
|
||||
common.add_upstream_git_remote()
|
||||
packages = common.get_changed_packages()
|
||||
|
||||
# Package count sanity check
|
||||
# Build changed packages
|
||||
common.get_changed_packages_sanity_check(len(packages))
|
||||
|
||||
# [ci:skip-build]: verify checksums and stop
|
||||
verify_only = common.commit_message_has_string("[ci:skip-build]")
|
||||
if verify_only:
|
||||
print("WARNING: not building changed packages ([ci:skip-build])!")
|
||||
print("verifying checksums: " + ", ".join(packages))
|
||||
verify_checksums(packages, arch)
|
||||
sys.exit(0)
|
||||
|
||||
# Prepare "args" to use pmbootstrap code
|
||||
sys.argv = ["pmbootstrap", "chroot"]
|
||||
args = pmb.parse.arguments()
|
||||
|
||||
# Filter out packages that can't be built for given arch
|
||||
# (Iterate over copy of packages, because we modify it in this loop)
|
||||
for package in packages.copy():
|
||||
apkbuild_path = pmb.helpers.pmaports.find(args, package)
|
||||
apkbuild = pmb.parse._apkbuild.apkbuild(args,
|
||||
f"{apkbuild_path}/APKBUILD")
|
||||
|
||||
if not pmb.helpers.pmaports.check_arches(apkbuild["arch"], arch):
|
||||
print(f"{package}: not enabled for {arch}, skipping")
|
||||
packages.remove(package)
|
||||
|
||||
# No packages: skip build
|
||||
if len(packages) == 0:
|
||||
print(f"no packages changed, which can be built for {arch}")
|
||||
sys.exit(0)
|
||||
|
||||
# Build packages
|
||||
print(f"building in strict mode for {arch}: {', '.join(packages)}")
|
||||
build_strict(packages, arch)
|
||||
print("no aports changed in this branch")
|
||||
else:
|
||||
verify_only = common.commit_message_has_string("[ci:skip-build]")
|
||||
if verify_only:
|
||||
print("WARNING: not building changed packages ([ci:skip-build])!")
|
||||
print("verifying checksums: " + ", ".join(packages))
|
||||
else:
|
||||
print("building in strict mode: " + ", ".join(packages))
|
||||
check_build(packages, verify_only)
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import glob
|
||||
@@ -19,15 +19,15 @@ import pmb.helpers.logging
|
||||
|
||||
def get_package_version(args, package, revision, check=True):
|
||||
# Redirect stderr to /dev/null, so git doesn't complain about files not
|
||||
# existing in upstream branch for new packages
|
||||
# existing in master for new packages
|
||||
stderr = None
|
||||
if not check:
|
||||
stderr = subprocess.DEVNULL
|
||||
|
||||
# Run something like "git show upstream/master:main/hello-world/APKBUILD"
|
||||
pmaports_dir = common.get_pmaports_dir()
|
||||
pattern = pmaports_dir + "/**/" + package + "/APKBUILD"
|
||||
path = glob.glob(pattern, recursive=True)[0][len(pmaports_dir + "/"):]
|
||||
pattern = pmaports_dir + "/*/" + package + "/APKBUILD"
|
||||
path = glob.glob(pattern)[0][len(pmaports_dir + "/"):]
|
||||
apkbuild_content = common.run_git(["show", revision + ":" + path], check,
|
||||
stderr)
|
||||
if not apkbuild_content:
|
||||
@@ -56,23 +56,20 @@ def version_compare_operator(result):
|
||||
|
||||
|
||||
def exit_with_error_message():
|
||||
branch = common.get_upstream_branch()
|
||||
print()
|
||||
print("ERROR: Modified package(s) don't have an increased version or a")
|
||||
print("new package has a nonzero pkgrel!")
|
||||
print("ERROR: Modified package(s) don't have an increased version!")
|
||||
print()
|
||||
print("This can happen if you added a new package with a nonzero")
|
||||
print("pkgrel, or if you did not change the pkgver/pkgrel")
|
||||
print("This can either happen if you did not change the pkgver/pkgrel")
|
||||
print("variables in the APKBUILDs. Or you did change them, but the")
|
||||
print(f"packages have been updated in the official '{branch}' branch, and")
|
||||
print("now your versions are not higher anymore.")
|
||||
print("packages have been updated in the official master branch, and now")
|
||||
print("your versions are not higher anymore.")
|
||||
print()
|
||||
print("Your options:")
|
||||
print("a) If you made changes to the packages, and did not increase the")
|
||||
print(" pkgrel/pkgver: increase them now, and force push your branch.")
|
||||
print(" => https://postmarketos.org/howto-bump-pkgrel-pkgver")
|
||||
print("b) If you had already increased the package versions, rebase on")
|
||||
print(f" '{branch}', increase the versions again and then force push:")
|
||||
print(" master, increase the versions again and then force push:")
|
||||
print(" => https://postmarketos.org/rebase")
|
||||
print("c) If you made a change, that does not require rebuilding the")
|
||||
print(" packages, such as only changing the arch=... line: you can")
|
||||
@@ -86,34 +83,29 @@ def exit_with_error_message():
|
||||
def check_versions(args, packages):
|
||||
error = False
|
||||
|
||||
# Get relevant commits: compare HEAD against upstream branch or HEAD~1
|
||||
# (the latter if this CI check is running on upstream branch). Note that
|
||||
# Get relevant commits: compare HEAD against upstream/master or HEAD~1
|
||||
# (the latter if this CI check is running on upstream/master). Note that
|
||||
# for the common.get_changed_files() code, we don't check against
|
||||
# upstream branch HEAD, but against the latest common ancestor. This is not
|
||||
# upstream/master, but against the latest common ancestor. This is not
|
||||
# desired here, since we already know what packages changed, and really
|
||||
# want to check if the version was increased towards *current* upstream
|
||||
# branch HEAD.
|
||||
commit = f"upstream/{common.get_upstream_branch()}"
|
||||
# want to check if the version was increased towards *current* master.
|
||||
commit = "upstream/master"
|
||||
if common.run_git(["rev-parse", "HEAD"]) == common.run_git(["rev-parse",
|
||||
commit]):
|
||||
print(f"NOTE: {commit} is on same commit as HEAD, comparing"
|
||||
print("NOTE: upstream/master is on same commit as HEAD, comparing"
|
||||
" HEAD against HEAD~1.")
|
||||
commit = "HEAD~1"
|
||||
|
||||
for package in packages:
|
||||
# Get versions, skip new packages
|
||||
head = get_package_version(args, package, "HEAD")
|
||||
upstream = get_package_version(args, package, commit, False)
|
||||
if not upstream:
|
||||
if head.rpartition('r')[2] != "0":
|
||||
print(f"- {package}: {head} (HEAD) (new package) [ERROR]")
|
||||
error = True
|
||||
else:
|
||||
print(f"- {package}: {head} (HEAD) (new package)")
|
||||
master = get_package_version(args, package, commit, False)
|
||||
if not master:
|
||||
print("- {}: {} (HEAD) (new package)".format(package, head))
|
||||
continue
|
||||
|
||||
# Compare head and upstream versions
|
||||
result = pmb.parse.version.compare(head, upstream)
|
||||
# Compare head and master versions
|
||||
result = pmb.parse.version.compare(head, master)
|
||||
if result != 1:
|
||||
error = True
|
||||
|
||||
@@ -122,7 +114,7 @@ def check_versions(args, packages):
|
||||
if result != 1:
|
||||
formatstr += " [ERROR]"
|
||||
operator = version_compare_operator(result)
|
||||
print(formatstr.format(package, head, operator, upstream, commit))
|
||||
print(formatstr.format(package, head, operator, master, commit))
|
||||
|
||||
if error:
|
||||
exit_with_error_message()
|
||||
@@ -132,7 +124,6 @@ if __name__ == "__main__":
|
||||
# Get and print modified packages
|
||||
common.add_upstream_git_remote()
|
||||
packages = common.get_changed_packages()
|
||||
print(f"Changed packages: {packages}")
|
||||
|
||||
# Verify modified package count
|
||||
common.get_changed_packages_sanity_check(len(packages))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import argparse
|
||||
@@ -14,7 +14,7 @@ def get_devices():
|
||||
ret = []
|
||||
pmaports = (os.path.realpath(os.path.join(os.path.dirname(__file__) +
|
||||
"/..")))
|
||||
for path in glob.glob(pmaports + "/device/*/device-*/"):
|
||||
for path in glob.glob(pmaports + "/device/device-*/"):
|
||||
device = os.path.dirname(path).split("device-", 1)[1]
|
||||
ret.append(device)
|
||||
return sorted(ret)
|
||||
@@ -37,7 +37,7 @@ def get_wiki_devices_html(path):
|
||||
content = urllib.request.urlopen(url).read().decode("utf-8")
|
||||
|
||||
# Split into booting and not booting
|
||||
split = content.split("<span class=\"mw-headline\" id=\"Non-booting_devices\">")
|
||||
split = content.split("<span class=\"mw-headline\" id=\"Not_booting\">")
|
||||
|
||||
if len(split) != 2:
|
||||
print("*** Failed to parse wiki page")
|
||||
|
||||
Executable
+156
@@ -0,0 +1,156 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
|
||||
|
||||
def check_environment_variables():
|
||||
""" Make sure that all environment variables from GitLab CI are present,
|
||||
and exit right here when a variable is missing. """
|
||||
keys = ["CI_MERGE_REQUEST_IID",
|
||||
"CI_MERGE_REQUEST_PROJECT_PATH",
|
||||
"CI_MERGE_REQUEST_SOURCE_PROJECT_URL"]
|
||||
for key in keys:
|
||||
if key in os.environ:
|
||||
continue
|
||||
print("ERROR: missing environment variable: " + key)
|
||||
print("Reference: https://docs.gitlab.com/ee/ci/variables/")
|
||||
exit(1)
|
||||
|
||||
|
||||
def get_url_api():
|
||||
""" :returns: single merge request API URL, as documented here:
|
||||
https://docs.gitlab.com/ee/api/merge_requests.html#get-single-mr """
|
||||
project_path = os.environ["CI_MERGE_REQUEST_PROJECT_PATH"]
|
||||
project_path = urllib.parse.quote_plus(project_path)
|
||||
mr_id = os.environ["CI_MERGE_REQUEST_IID"]
|
||||
|
||||
url = "https://gitlab.com/api/v4/projects/{}/merge_requests/{}"
|
||||
return url.format(project_path, mr_id)
|
||||
|
||||
|
||||
def get_url_mr_edit():
|
||||
""" :returns: the link where the user can edit their own MR """
|
||||
url = "https://gitlab.com/{}/merge_requests/{}/edit"
|
||||
return url.format(os.environ["CI_MERGE_REQUEST_PROJECT_PATH"],
|
||||
os.environ["CI_MERGE_REQUEST_IID"])
|
||||
|
||||
|
||||
def get_url_repo_settings():
|
||||
""" :returns: link to the user's forked pmaports project's settings """
|
||||
prefix = os.environ["CI_MERGE_REQUEST_SOURCE_PROJECT_URL"]
|
||||
return prefix + "/settings/repository"
|
||||
|
||||
|
||||
def get_mr_settings(path):
|
||||
""" Get the merge request API data and parse it as JSON. Print the whole
|
||||
thing on failure.
|
||||
|
||||
:param path: to a local file with the saved API data (will download a
|
||||
fresh copy when set to None)
|
||||
:returns: dict of settings data (see GitLab API reference) """
|
||||
content = ""
|
||||
if path:
|
||||
# Read file
|
||||
with open(path, encoding="utf-8") as handle:
|
||||
content = handle.read()
|
||||
else:
|
||||
# Download from GitLab API
|
||||
url = get_url_api()
|
||||
print("Download " + url)
|
||||
content = urllib.request.urlopen(url).read().decode("utf-8")
|
||||
|
||||
# Parse JSON
|
||||
try:
|
||||
return json.loads(content)
|
||||
except:
|
||||
print("ERROR: failed to decode JSON. Here's the whole content for"
|
||||
" debugging:")
|
||||
print("---")
|
||||
print(content)
|
||||
exit(1)
|
||||
|
||||
|
||||
def settings_read(settings, key):
|
||||
if key not in settings:
|
||||
print("ERROR: missing '" + key + "' key in settings!")
|
||||
print("Here are the whole settings for debugging:")
|
||||
print("---")
|
||||
print(settings)
|
||||
exit(1)
|
||||
return settings[key]
|
||||
|
||||
|
||||
def check_allow_push(settings):
|
||||
""" :returns: True when maintainers are allowed to push to the branch
|
||||
(what we want!), False otherwise """
|
||||
|
||||
# Check if source branch is in same repository
|
||||
source = settings_read(settings, "source_project_id")
|
||||
target = settings_read(settings, "target_project_id")
|
||||
if source == target:
|
||||
return True
|
||||
|
||||
return settings_read(settings, "allow_maintainer_to_push")
|
||||
|
||||
|
||||
def main():
|
||||
# Parse arguments
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--path", help="use a local file instead of querying"
|
||||
" the GitLab API", default=None)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Check the merge request
|
||||
check_environment_variables()
|
||||
settings = get_mr_settings(args.path)
|
||||
|
||||
# Make sure that squashing is disabled
|
||||
if settings_read(settings, "squash"):
|
||||
print("*** MR settings check failed!")
|
||||
print('ERROR: Please turn off the "Squash commits when merge request'
|
||||
' is accepted." option in the merge request settings.')
|
||||
return 1
|
||||
if check_allow_push(settings):
|
||||
print("*** MR settings check successful!")
|
||||
else:
|
||||
print("*** MR settings check failed!")
|
||||
print()
|
||||
print("We need to be able to push changes to your merge request.")
|
||||
print("So we can rebase it on master right before merging, add the")
|
||||
print("MR-ID to the commit messages, etc.")
|
||||
print()
|
||||
print("How to fix it:")
|
||||
print("1) Open the 'edit' page of your merge request:")
|
||||
print(" " + get_url_mr_edit())
|
||||
print("2) Enable this option and save:")
|
||||
print(" 'Allow commits from members who can merge to the target"
|
||||
" branch'")
|
||||
print("3) Run these tests again with an empty commit in your MR:")
|
||||
print(" $ git commit --allow-empty -m 'run mr-settings test again'")
|
||||
print()
|
||||
print("If that setting is disabled, then you have created the MR from")
|
||||
print("a protected branch. When you had forked the repository from")
|
||||
print("postmarketOS, the protected branch settings were copied to")
|
||||
print("your fork.")
|
||||
print()
|
||||
print("Resolve this with:")
|
||||
print("1) Open your repository settings:")
|
||||
print(" " + get_url_repo_settings())
|
||||
print("2) Scroll down to 'Protected Branches' and expand it")
|
||||
print("3) Click 'unprotect' next to the branch from your MR")
|
||||
print("4) Follow steps 1-3 from the first list again, the option")
|
||||
print(" should not be disabled anymore.")
|
||||
print()
|
||||
print("Thank you and sorry for the inconvenience.")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
sys.exit(main())
|
||||
+37
-93
@@ -1,25 +1,16 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# Various functions used in CI scripts
|
||||
|
||||
import configparser
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
cache = {}
|
||||
|
||||
|
||||
def get_pmaports_dir():
|
||||
global cache
|
||||
if "pmaports_dir" in cache:
|
||||
return cache["pmaports_dir"]
|
||||
ret = os.path.realpath(os.path.join(os.path.dirname(__file__) + "/.."))
|
||||
cache["pmaports_dir"] = ret
|
||||
return ret
|
||||
return os.path.realpath(os.path.join(os.path.dirname(__file__) + "/.."))
|
||||
|
||||
|
||||
def run_git(parameters, check=True, stderr=None):
|
||||
@@ -44,79 +35,42 @@ def commit_message_has_string(needle):
|
||||
return needle in run_git(["show", "-s", "--format=full", "HEAD"])
|
||||
|
||||
|
||||
def run_pmbootstrap(parameters, output_return=False):
|
||||
def run_pmbootstrap(parameters):
|
||||
""" Run pmbootstrap with the pmaports dir as --aports """
|
||||
cmd = ["pmbootstrap", "--aports", get_pmaports_dir()] + parameters
|
||||
stdout = subprocess.PIPE if output_return else None
|
||||
result = subprocess.run(cmd, stdout=stdout, universal_newlines=True)
|
||||
result.check_returncode()
|
||||
if output_return:
|
||||
return result.stdout
|
||||
process = subprocess.Popen(cmd)
|
||||
process.communicate()
|
||||
if process.returncode != 0:
|
||||
print("** Test failed")
|
||||
exit(1)
|
||||
|
||||
|
||||
def get_upstream_branch():
|
||||
""" Use pmaports.cfg from current branch (e.g. "v20.05_fix-ci") and
|
||||
channels.cfg from master to retrieve the upstream branch.
|
||||
|
||||
:returns: branch name, e.g. "v20.05" """
|
||||
global cache
|
||||
if "upstream_branch" in cache:
|
||||
return cache["upstream_branch"]
|
||||
|
||||
# Get channel (e.g. "stable") from pmaports.cfg
|
||||
# https://postmarketos.org/pmaports.cfg
|
||||
pmaports_dir = get_pmaports_dir()
|
||||
pmaports_cfg = configparser.ConfigParser()
|
||||
pmaports_cfg.read(f"{pmaports_dir}/pmaports.cfg")
|
||||
channel = pmaports_cfg["pmaports"]["channel"]
|
||||
|
||||
# Get branch_pmaports (e.g. "v20.05") from channels.cfg
|
||||
# https://postmarketos.org/channels.cfg
|
||||
channels_cfg_str = run_git(["show", "upstream/master:channels.cfg"])
|
||||
channels_cfg = configparser.ConfigParser()
|
||||
channels_cfg.read_string(channels_cfg_str)
|
||||
assert channel in channels_cfg, \
|
||||
f"Channel '{channel}' from pmaports.cfg in your branch is unknown." \
|
||||
" This appears to be an old branch, consider recreating your change" \
|
||||
" on top of master."
|
||||
|
||||
ret = channels_cfg[channel]["branch_pmaports"]
|
||||
cache["upstream_branch"] = ret
|
||||
return ret
|
||||
|
||||
|
||||
def get_changed_files(removed=True):
|
||||
def get_changed_files():
|
||||
""" Get all changed files and print them, as well as the branch and the
|
||||
commit that was used for the diff.
|
||||
:param removed: also return removed files (default: True)
|
||||
:returns: set of changed files
|
||||
:returns: list of changed files
|
||||
"""
|
||||
branch_upstream = f"upstream/{get_upstream_branch()}"
|
||||
commit_head = run_git(["rev-parse", "HEAD"])[:-1]
|
||||
commit_upstream = run_git(["rev-parse", branch_upstream])[:-1]
|
||||
commit_upstream_master = run_git(["rev-parse", "upstream/master"])[:-1]
|
||||
print("commit HEAD: " + commit_head)
|
||||
print(f"commit {branch_upstream}: f{commit_upstream}")
|
||||
print("commit upstream/master: " + commit_upstream_master)
|
||||
|
||||
# Check if we are HEAD on the upstream branch
|
||||
if commit_head == commit_upstream:
|
||||
# Check if we are latest upstream/master
|
||||
if commit_head == commit_upstream_master:
|
||||
# then compare with previous commit
|
||||
commit = "HEAD~1"
|
||||
else:
|
||||
# otherwise compare with latest common ancestor
|
||||
commit = run_git(["merge-base", branch_upstream, "HEAD"])[:-1]
|
||||
commit = run_git(["merge-base", "upstream/master", "HEAD"])[:-1]
|
||||
print("comparing HEAD with: " + commit)
|
||||
|
||||
# Changed files
|
||||
ret = set()
|
||||
ret = run_git(["diff", "--name-only", commit, "HEAD"]).splitlines()
|
||||
print("changed file(s):")
|
||||
for file in run_git(["diff", "--name-only", commit, "HEAD"]).splitlines():
|
||||
for file in ret:
|
||||
message = " " + file
|
||||
if not os.path.exists(file):
|
||||
message += " (deleted)"
|
||||
if removed:
|
||||
ret.add(file)
|
||||
else:
|
||||
ret.add(file)
|
||||
print(message)
|
||||
return ret
|
||||
|
||||
@@ -129,7 +83,6 @@ def get_changed_packages_sanity_check(count):
|
||||
if count <= 10:
|
||||
return
|
||||
|
||||
branch = get_upstream_branch()
|
||||
print()
|
||||
print("ERROR: Too many packages have changed!")
|
||||
print()
|
||||
@@ -139,7 +92,7 @@ def get_changed_packages_sanity_check(count):
|
||||
print()
|
||||
print("Your options:")
|
||||
print("a) If you *did not* modify everything listed above, then rebase")
|
||||
print(f" your branch on the official postmarketOS/pmaports.git {branch}")
|
||||
print(" your branch on the official postmarketOS/pmaports.git master")
|
||||
print(" branch. Feel free to ask in the chat for help if you need any.")
|
||||
print("b) If you *did* modify all these packages, and you assume that")
|
||||
print(" they will build within one hour: skip this sanity check by")
|
||||
@@ -156,37 +109,28 @@ def get_changed_packages_sanity_check(count):
|
||||
|
||||
|
||||
def get_changed_packages():
|
||||
files = get_changed_files()
|
||||
ret = set()
|
||||
for file in get_changed_files():
|
||||
dirname, filename = os.path.split(file)
|
||||
|
||||
for file in files:
|
||||
# Skip files:
|
||||
# * in the root dir of pmaports (e.g. README.md)
|
||||
# * path with a dot (e.g. .gitlab-ci/, device/.shared-patches/)
|
||||
if not dirname or file.startswith(".") or "/." in file:
|
||||
# * path beginning with a dot (e.g. .gitlab-ci/)
|
||||
# * non-existing files (deleted packages)
|
||||
if "/" not in file or file.startswith(".") or not os.path.exists(file):
|
||||
continue
|
||||
|
||||
if filename != "APKBUILD":
|
||||
# Walk up directories until we (eventually) find the package
|
||||
# the file belongs to (could be in a subdirectory of a package)
|
||||
while dirname and not os.path.exists(os.path.join(dirname, "APKBUILD")):
|
||||
dirname = os.path.dirname(dirname)
|
||||
|
||||
# Unable to find APKBUILD the file belong to
|
||||
if not dirname:
|
||||
# ... maybe the package was deleted entirely?
|
||||
if not os.path.exists(file):
|
||||
continue
|
||||
|
||||
# Weird, file does not belong to any package?
|
||||
# Here we just warn, there is an extra check
|
||||
# to make sure that files are organized properly.
|
||||
print(f"WARNING: Changed file {file} does not belong to any package")
|
||||
continue
|
||||
|
||||
elif not os.path.exists(file):
|
||||
continue # APKBUILD was deleted
|
||||
|
||||
ret.add(os.path.basename(dirname))
|
||||
|
||||
# Add to the ret set (removes duplicated automatically)
|
||||
ret.add(file.split("/")[1])
|
||||
return ret
|
||||
|
||||
|
||||
def check_build(packages, verify_only=False):
|
||||
# Initialize build environment with less logging
|
||||
run_pmbootstrap(["build_init"])
|
||||
|
||||
if verify_only:
|
||||
run_pmbootstrap(["--details-to-stdout", "checksum", "--verify"] +
|
||||
list(packages))
|
||||
else:
|
||||
run_pmbootstrap(["--details-to-stdout", "build", "--strict",
|
||||
"--force"] + list(packages))
|
||||
Executable
+49
@@ -0,0 +1,49 @@
|
||||
#!/bin/sh -e
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# usage: install_pmbootstrap.sh [ADDITIONAL_PACKAGE, ...]
|
||||
|
||||
# Config: pmbootstrap tag (or branch)
|
||||
tag="master"
|
||||
|
||||
# Get download URL and pmaports path
|
||||
url="https://gitlab.com/postmarketOS/pmbootstrap/-/archive/$tag/pmbootstrap-$tag.tar.bz2"
|
||||
pmaports="$(cd $(dirname $0)/..; pwd -P)"
|
||||
|
||||
# Set up depends and binfmt_misc
|
||||
depends="coreutils openssl python3 sudo $@"
|
||||
echo "Installing dependencies: $depends"
|
||||
apk -q add $depends
|
||||
mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
|
||||
|
||||
# Create pmos user
|
||||
echo "Creating pmos user"
|
||||
adduser -D pmos
|
||||
chown -R pmos:pmos .
|
||||
echo 'pmos ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
||||
|
||||
# Download pmbootstrap (to /tmp/pmbootstrap)
|
||||
echo "Downloading pmbootstrap ($tag): $url"
|
||||
cd /tmp
|
||||
wget -q -O "pmb.tar.bz2" "$url"
|
||||
tar -xf "pmb.tar.bz2"
|
||||
mv pmbootstrap-* pmbootstrap
|
||||
|
||||
# Install to $PATH and init
|
||||
ln -s /tmp/pmbootstrap/pmbootstrap.py /usr/local/bin/pmbootstrap
|
||||
echo "Initializing pmbootstrap"
|
||||
if ! su pmos -c "yes '' | pmbootstrap -q --aports '$pmaports' init"; then
|
||||
echo "ERROR: pmbootstrap init failed!"
|
||||
echo
|
||||
echo "Most likely, this means that pmbootstrap requires a newer"
|
||||
echo "pmaports version. Please rebase on the official pmaports.git"
|
||||
echo "master branch and try again."
|
||||
echo
|
||||
echo "Let us know in the chat or issues if you have trouble with that"
|
||||
echo "and we will be happy to help. Sorry for the inconvenience."
|
||||
echo
|
||||
echo "(If that does not help, click on 'Browse' in the 'Job artifacts'"
|
||||
echo "next to this log output, and have a look at log.txt.)"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/sh -e
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/sh -e
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# Require pmbootstrap
|
||||
@@ -22,8 +22,8 @@ pmbootstrap -q shutdown
|
||||
|
||||
# Make sure we have a valid device (pmbootstrap#1128)
|
||||
device="$(pmbootstrap config device)"
|
||||
deviceinfo="$pmaports/device/*/device-$device/deviceinfo"
|
||||
if ! [ -e $deviceinfo ]; then
|
||||
deviceinfo="$pmaports/device/device-$device/deviceinfo"
|
||||
if ! [ -e "$deviceinfo" ]; then
|
||||
echo "ERROR: Could not find deviceinfo file for selected device '$device'."
|
||||
echo "Expected path: $deviceinfo"
|
||||
echo "Maybe you have switched to a branch where your device does not exist?"
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
# Copyright 2020 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
set -e
|
||||
DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
||||
cd "$DIR/.."
|
||||
|
||||
# Find CHANGEMEs in APKBUILDs
|
||||
if grep -qr '(CHANGEME!)' *; then
|
||||
echo "ERROR: Please replace '(CHANGEME!)' in the following files:"
|
||||
grep --color=always -r '(CHANGEME!)' *
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Shell: shellcheck
|
||||
sh_files="
|
||||
./main/postmarketos-base/firmwareload.sh
|
||||
./main/postmarketos-base/elogind-system-suspend-disable-conditions.hook
|
||||
./main/postmarketos-mkinitfs/init.sh.in
|
||||
./main/postmarketos-mkinitfs/init_functions.sh
|
||||
./main/postmarketos-mkinitfs/mkinitfs.sh
|
||||
./main/postmarketos-mkinitfs/mkinitfs_functions.sh
|
||||
./main/postmarketos-mkinitfs/mkinitfs_test.sh
|
||||
./main/postmarketos-mkinitfs-hook-debug-shell/20-debug-shell.sh
|
||||
./main/postmarketos-update-kernel/update-kernel.sh
|
||||
./main/mdss-fb-init-hack/mdss-fb-init-hack.sh
|
||||
|
||||
$(find . -path './main/postmarketos-ui-*/*.sh')
|
||||
$(find . -path './main/postmarketos-ui-*/*.pre-install')
|
||||
$(find . -path './main/postmarketos-ui-*/*.post-install')
|
||||
$(find . -path './main/postmarketos-ui-*/*.pre-upgrade')
|
||||
$(find . -path './main/postmarketos-ui-*/*.post-upgrade')
|
||||
$(find . -path './main/postmarketos-ui-*/*.pre-deinstall')
|
||||
$(find . -path './main/postmarketos-ui-*/*.post-deinstall')
|
||||
|
||||
$(find . -name '*.trigger')
|
||||
$(find . -path './main/devicepkg-dev/*.sh')
|
||||
|
||||
$(find . -path '.gitlab-ci/*.sh')
|
||||
"
|
||||
for file in $sh_files; do
|
||||
echo "Test with shellcheck: $file"
|
||||
cd "$DIR/../$(dirname "$file")"
|
||||
shellcheck -e SC1008 -x "$(basename "$file")"
|
||||
done
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
clang-format -i $(find . -name "*.c")
|
||||
|
||||
git diff > differences.patch
|
||||
|
||||
if [ -s differences.patch ]; then
|
||||
echo "C-Code formatting check failed!"
|
||||
echo "Please make sure, the code is formatted properly!"
|
||||
echo "Run:"
|
||||
echo ' clang-format -i $(find . -name "*.c")'
|
||||
echo
|
||||
cat differences.patch
|
||||
echo
|
||||
rm differences.patch
|
||||
exit 1
|
||||
else
|
||||
echo "C-Code formatting check is sucessful!"
|
||||
exit 0
|
||||
fi
|
||||
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/bin/sh -e
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
set -e
|
||||
DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
||||
cd "$DIR/.."
|
||||
|
||||
# Find CHANGEMEs in APKBUILDs
|
||||
if grep -qr '(CHANGEME!)' device; then
|
||||
echo "ERROR: Please replace '(CHANGEME!)' in the following files:"
|
||||
grep --color=always -r '(CHANGEME!)' device
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Shell: shellcheck
|
||||
sh_files="
|
||||
./main/postmarketos-base/firmwareload.sh
|
||||
./main/postmarketos-mkinitfs/init.sh.in
|
||||
./main/postmarketos-mkinitfs/init_functions.sh
|
||||
./main/postmarketos-mkinitfs-hook-debug-shell/20-debug-shell.sh
|
||||
./main/postmarketos-update-kernel/update-kernel.sh
|
||||
./main/postmarketos-android-recovery-installer/build_zip.sh
|
||||
./main/postmarketos-android-recovery-installer/pmos_chroot
|
||||
./main/postmarketos-android-recovery-installer/pmos_install
|
||||
./main/postmarketos-android-recovery-installer/pmos_install_functions
|
||||
./main/postmarketos-android-recovery-installer/pmos_setpw
|
||||
./main/postmarketos-android-recovery-installer/update-binary
|
||||
./main/mdss-fb-init-hack/mdss-fb-init-hack.sh
|
||||
./main/postmarketos-ui-hildon/postmarketos-ui-hildon.post-install
|
||||
$(find . -path './main/postmarketos-ui-hildon/*.sh')
|
||||
$(find . -name '*.trigger')
|
||||
$(find . -path './main/devicepkg-dev/*.sh')
|
||||
|
||||
$(find . -path '.gitlab-ci/*.sh')
|
||||
"
|
||||
for file in ${sh_files}; do
|
||||
echo "Test with shellcheck: $file"
|
||||
cd "$DIR/../$(dirname "$file")"
|
||||
shellcheck -e SC1008 -x "$(basename "$file")"
|
||||
done
|
||||
|
||||
# Python: flake8
|
||||
# E501: max line length
|
||||
# F401: imported, but not used (false positive: add_pmbootstrap_to_import_path)
|
||||
# E722: do not use bare except
|
||||
cd "$DIR/.."
|
||||
|
||||
echo "Test with flake8: testcases"
|
||||
# shellcheck disable=SC2086
|
||||
flake8 --ignore E501,F401,E722,W504,W605 $(find . -path "./.gitlab-ci/testcases/*.py")
|
||||
|
||||
echo "Test with flake8: all other Python files"
|
||||
# shellcheck disable=SC2086
|
||||
flake8 --ignore E501,E722,W504,W605 $(find . -not -path './.gitlab-ci/testcases/*' -a -name '*.py')
|
||||
|
||||
# Done
|
||||
echo "Success!"
|
||||
@@ -1,12 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import shutil
|
||||
import sys
|
||||
import os
|
||||
import importlib
|
||||
import importlib.util
|
||||
from distutils.sysconfig import get_python_lib
|
||||
|
||||
|
||||
@@ -35,7 +33,5 @@ def path_pmbootstrap():
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
# Check if pmb module can be imported
|
||||
if importlib.util.find_spec("pmb") is None:
|
||||
# Add pmbootstrap dir to import path
|
||||
sys.path.append(os.path.realpath(path_pmbootstrap()))
|
||||
# Add pmbootstrap dir to import path
|
||||
sys.path.append(os.path.realpath(path_pmbootstrap()))
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import glob
|
||||
@@ -10,8 +10,6 @@ import os
|
||||
import add_pmbootstrap_to_import_path
|
||||
import pmb.parse
|
||||
import pmb.parse._apkbuild
|
||||
import pmb.parse.apkindex
|
||||
import pmb.helpers.repo
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -49,7 +47,7 @@ def test_deviceinfo(args):
|
||||
# Iterate over all devices
|
||||
last_exception = None
|
||||
count = 0
|
||||
for folder in glob.glob(args.aports + "/device/*/device-*"):
|
||||
for folder in glob.glob(args.aports + "/device/device-*"):
|
||||
device = folder[len(args.aports):].split("-", 1)[1]
|
||||
|
||||
try:
|
||||
@@ -78,43 +76,11 @@ def test_deviceinfo(args):
|
||||
raise last_exception
|
||||
|
||||
|
||||
def device_dependency_check(apkbuild, path):
|
||||
""" Raise an error if a device package has a dependency that is not allowed
|
||||
(e.g. because it should be in a subpackage instead). """
|
||||
|
||||
# asus-me176c: without this, the device will simply run the broken ACPI
|
||||
# DSDT table, so we might as well update it. See pmaports!699.
|
||||
firmware_ok = {"device-asus-me176c": ["firmware-asus-me176c-acpi"]}
|
||||
|
||||
pkgname = apkbuild["pkgname"]
|
||||
for depend in apkbuild["depends"]:
|
||||
if (depend.startswith("firmware-") or
|
||||
depend.startswith("linux-firmware")):
|
||||
if pkgname in firmware_ok and depend in firmware_ok[pkgname]:
|
||||
continue
|
||||
raise RuntimeError("Firmware package '" + depend + "' found in"
|
||||
" depends of " + path + ". These go into"
|
||||
" subpackages now, see"
|
||||
" <https://postmarketos.org/devicepkg>.")
|
||||
|
||||
|
||||
def test_aports_kernel(args):
|
||||
"""
|
||||
Various tests performed on the /**/linux-* aports.
|
||||
"""
|
||||
for path in glob.iglob(args.aports + "**/linux-*/APKBUILD", recursive=True):
|
||||
apkbuild = pmb.parse.apkbuild(args, path)
|
||||
|
||||
if "pmb:cross-native" not in apkbuild["options"]:
|
||||
raise RuntimeError("\"pmb:cross-native\" missing in"
|
||||
f" options= line: {path}")
|
||||
|
||||
|
||||
def test_aports_device(args):
|
||||
"""
|
||||
Various tests performed on the /device/*/device-* aports.
|
||||
Various tests performed on the /device/device-* aports.
|
||||
"""
|
||||
for path in glob.iglob(args.aports + "/device/*/device-*/APKBUILD"):
|
||||
for path in glob.glob(args.aports + "/device/device-*/APKBUILD"):
|
||||
apkbuild = pmb.parse.apkbuild(args, path)
|
||||
|
||||
# Depends: Require "postmarketos-base"
|
||||
@@ -124,7 +90,12 @@ def test_aports_device(args):
|
||||
|
||||
# Depends: Must not have firmware packages
|
||||
for depend in apkbuild["depends"]:
|
||||
device_dependency_check(apkbuild, path)
|
||||
if (depend.startswith("firmware-") or
|
||||
depend.startswith("linux-firmware")):
|
||||
raise RuntimeError("Firmware package '" + depend + "' found in"
|
||||
" depends of " + path + ". These go into"
|
||||
" subpackages now, see"
|
||||
" <https://postmarketos.org/devicepkg>.")
|
||||
|
||||
# Architecture
|
||||
device = apkbuild["pkgname"][len("device-"):]
|
||||
@@ -141,10 +112,16 @@ def test_aports_device_kernel(args):
|
||||
Verify the kernels specified in the device packages:
|
||||
* Kernel must not be in depends when kernels are in subpackages
|
||||
* Check if only one kernel is defined in depends
|
||||
* Validate kernel subpackage names
|
||||
"""
|
||||
# Generate list of valid subpackages
|
||||
valid_subpackages = ["downstream", "rpi", "rpi2", "longts", "shortts"]
|
||||
for path in glob.glob(args.aports + "/main/linux-postmarketos-*"):
|
||||
suffix = os.path.basename(path)[len("linux-postmarketos-"):]
|
||||
valid_subpackages.append(suffix)
|
||||
|
||||
# Iterate over device aports
|
||||
for path in glob.glob(args.aports + "/device/*/device-*/APKBUILD"):
|
||||
for path in glob.glob(args.aports + "/device/device-*/APKBUILD"):
|
||||
# Parse apkbuild and kernels from subpackages
|
||||
apkbuild = pmb.parse.apkbuild(args, path)
|
||||
device = apkbuild["pkgname"][len("device-"):]
|
||||
@@ -175,70 +152,10 @@ def test_aports_device_kernel(args):
|
||||
" <https://postmarketos.org/devicepkg>): " +
|
||||
path)
|
||||
|
||||
|
||||
def test_aports_unreferenced_files(args):
|
||||
"""
|
||||
Raise an error if an unreferenced file is found
|
||||
"""
|
||||
for apkbuild_path in glob.iglob(args.aports + "/**/APKBUILD", recursive=True):
|
||||
print(f"Checking {apkbuild_path}...")
|
||||
apkbuild = pmb.parse.apkbuild(args, apkbuild_path)
|
||||
|
||||
# Collect install files from subpackages
|
||||
subpackage_installs = []
|
||||
if apkbuild["subpackages"]:
|
||||
for subpackage in apkbuild["subpackages"].values():
|
||||
if not subpackage:
|
||||
continue
|
||||
try:
|
||||
subpackage_installs += subpackage["install"]
|
||||
except KeyError:
|
||||
continue
|
||||
|
||||
# Collect trigger files
|
||||
trigger_sources = []
|
||||
if apkbuild["triggers"]:
|
||||
for trigger in apkbuild["triggers"]:
|
||||
trigger_sources.append(trigger.split("=")[0])
|
||||
|
||||
dirname = os.path.dirname(apkbuild_path)
|
||||
for file in glob.iglob(dirname + "/**", recursive=True):
|
||||
rel_file_path = os.path.relpath(file, dirname)
|
||||
# Skip APKBUILDs and directories
|
||||
if rel_file_path == "APKBUILD" or os.path.isdir(file):
|
||||
continue
|
||||
|
||||
if rel_file_path not in apkbuild["source"] \
|
||||
and rel_file_path not in apkbuild["install"] \
|
||||
and rel_file_path not in subpackage_installs \
|
||||
and rel_file_path not in trigger_sources:
|
||||
raise RuntimeError(f"{apkbuild_path}: found unreferenced file: {rel_file_path}")
|
||||
|
||||
|
||||
def test_aports_ui(args):
|
||||
"""
|
||||
Raise an error if package in _pmb_recommends is not found
|
||||
"""
|
||||
for arch in pmb.config.build_device_architectures:
|
||||
for path in glob.iglob(args.aports + "/main/postmarketos-ui-*/APKBUILD"):
|
||||
apkbuild = pmb.parse.apkbuild(args, path)
|
||||
# Skip if arch isn't enabled
|
||||
if not pmb.helpers.package.check_arch(args, apkbuild["pkgname"], arch, False):
|
||||
continue
|
||||
|
||||
for package in apkbuild["_pmb_recommends"]:
|
||||
depend = pmb.helpers.package.get(args, package,
|
||||
arch, must_exist=False)
|
||||
if depend is None or not pmb.helpers.package.check_arch(args, package, arch):
|
||||
raise RuntimeError(f"{path}: package '{package}' from"
|
||||
f" _pmb_recommends not found for arch '{arch}'")
|
||||
|
||||
# Check packages from "_pmb_recommends" of -extras subpackage if one exists
|
||||
if f"{apkbuild['pkgname']}-extras" in apkbuild["subpackages"]:
|
||||
apkbuild = apkbuild["subpackages"][f"{apkbuild['pkgname']}-extras"]
|
||||
for package in apkbuild["_pmb_recommends"]:
|
||||
depend = pmb.helpers.package.get(args, package,
|
||||
arch, must_exist=False)
|
||||
if depend is None or not pmb.helpers.package.check_arch(args, package, arch):
|
||||
raise RuntimeError(f"{path}: package '{package}' from _pmb_recommends "
|
||||
f"of -extras subpackage is not found for arch '{arch}'")
|
||||
# Verify subpackages
|
||||
if kernels_subpackages:
|
||||
for subpackage in kernels_subpackages:
|
||||
if subpackage not in valid_subpackages:
|
||||
raise RuntimeError("Invalid kernel subpackage name '" +
|
||||
subpackage + "', valid: " +
|
||||
str(valid_subpackages))
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2020 Oliver Smith
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
""" Make sure that components of frameworks (Qt, KDE, ...) have the same
|
||||
@@ -52,9 +52,6 @@ def get_categorized_packages(args):
|
||||
if pkgver == "9999":
|
||||
pkgver = apkbuild["_pkgver"]
|
||||
|
||||
if "_git" in pkgver:
|
||||
continue
|
||||
|
||||
# Categorize by URL
|
||||
category = "other"
|
||||
if "https://www.kde.org/workspaces/plasmadesktop" in url:
|
||||
@@ -65,10 +62,6 @@ def get_categorized_packages(args):
|
||||
"https://www.qt.io/developers/"]:
|
||||
category = "qt"
|
||||
|
||||
# Remove hotfix number (i.e. 5.16.90.1 becomes 5.16.90)
|
||||
if category in ["kde", "plasma"]:
|
||||
pkgver = ".".join(pkgver.split(".")[0:3])
|
||||
|
||||
# Save result
|
||||
if category not in ret:
|
||||
ret[category] = {}
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
import glob
|
||||
import os
|
||||
import stat
|
||||
|
||||
expected_directories = [
|
||||
"console",
|
||||
"cross",
|
||||
"device/community",
|
||||
"device/main",
|
||||
"device/testing",
|
||||
"kde",
|
||||
"maemo",
|
||||
"main",
|
||||
"modem",
|
||||
"sxmo",
|
||||
"temp",
|
||||
]
|
||||
|
||||
|
||||
# pmbootstrap allows placing APKBUILDs in arbitrarily nested directories.
|
||||
# This test makes sure all of them are in one of the expected locations.
|
||||
def test_directories():
|
||||
apkbuilds = set(glob.iglob("**/APKBUILD", recursive=True))
|
||||
expected = set(f for d in expected_directories for f in glob.iglob(d + "/*/APKBUILD"))
|
||||
assert apkbuilds == expected, "Found APKBUILD in unexpected directory. " \
|
||||
"Note that we moved firmware/* to device/{main,community,testing}/*."
|
||||
|
||||
|
||||
# Ensure no file in pmaports are executable.
|
||||
# see https://gitlab.com/postmarketOS/pmaports/-/issues/593.
|
||||
def test_executable_files():
|
||||
for file in glob.iglob("**/*", recursive=True):
|
||||
if os.path.isdir(file) or os.path.islink(file):
|
||||
continue
|
||||
# still check other less common inode types
|
||||
permissions = os.stat(file).st_mode
|
||||
executable_bits = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
|
||||
if permissions & executable_bits != 0:
|
||||
raise RuntimeError(f"\"{file}\" is executable. Files in pmaports" +
|
||||
" should not be executables. post-* files" +
|
||||
" don't need to be executable and executables" +
|
||||
" should be installed using `install -D" +
|
||||
"m0755` or a variation thereof.")
|
||||
|
||||
|
||||
# Make sure files are either:
|
||||
# - in root directory (README.md)
|
||||
# - hidden (.gitlab-ci/, device/.shared-patches/)
|
||||
# - or belong to a package (below a directory with APKBUILD)
|
||||
def test_files_belong_to_package():
|
||||
# Walk directories and set package_dir when we find an APKBUILD
|
||||
# This allows matching files in subdirectories to the package directory.
|
||||
package_dir = None
|
||||
for dirpath, dirs, files in os.walk("."):
|
||||
# Skip "hidden" directories
|
||||
dirs[:] = [d for d in dirs if not d.startswith(".")]
|
||||
# Ignore files in root directory
|
||||
if dirpath == '.':
|
||||
continue
|
||||
|
||||
# Switched to another directory?
|
||||
if package_dir and not dirpath.startswith(package_dir + os.sep):
|
||||
package_dir = None
|
||||
|
||||
if 'APKBUILD' in files:
|
||||
assert not package_dir, f"Nested packages: {package_dir} and {dirpath} " \
|
||||
"both contain an APKBUILD"
|
||||
package_dir = dirpath
|
||||
|
||||
assert not files or package_dir, "Found files that do not belong to any package: " \
|
||||
f"{dirpath}/{files}"
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
"""
|
||||
This file uses pmb.helper.pkgrel_bump to check if the aports need a pkgrel bump
|
||||
for any package, caused by a soname bump. Example: A new libressl/openssl
|
||||
version was released, which increased the soname version, and now all packages
|
||||
that link against it, need to be rebuilt.
|
||||
"""
|
||||
|
||||
import os
|
||||
import pytest
|
||||
import sys
|
||||
|
||||
import add_pmbootstrap_to_import_path
|
||||
import pmb.helpers.pkgrel_bump
|
||||
import pmb.helpers.logging
|
||||
import pmb.parse
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def args(request):
|
||||
# Initialize args
|
||||
sys.argv = ["pmbootstrap",
|
||||
"--aports", os.path.dirname(__file__) + "/../..",
|
||||
"--log", "$WORK/log_testsuite_pmaports.txt"
|
||||
"chroot"]
|
||||
args = pmb.parse.arguments()
|
||||
|
||||
# Initialize logging
|
||||
pmb.helpers.logging.init(args)
|
||||
request.addfinalizer(args.logfd.close)
|
||||
return args
|
||||
|
||||
|
||||
@pytest.mark.pmaports_upstream_compat
|
||||
def test_soname_bump(args):
|
||||
if pmb.helpers.pkgrel_bump.auto(args, True):
|
||||
raise RuntimeError("One or more packages need to be rebuilt, because"
|
||||
" a library they link against had an incompatible"
|
||||
" upgrade (soname bump). Run 'pmbootstrap"
|
||||
" pkgrel_bump --auto' to automatically increase the"
|
||||
" pkgrel in order to trigger a rebuild. If this"
|
||||
" test case failed during a pull request, the issue"
|
||||
" needs to be fixed on the 'master' branch first,"
|
||||
" then rebase your PR on 'master' afterwards.")
|
||||
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env python3
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import os
|
||||
import sys
|
||||
import glob
|
||||
import pytest
|
||||
|
||||
import add_pmbootstrap_to_import_path
|
||||
import pmb.helpers.logging
|
||||
import pmb.parse.apkindex
|
||||
import pmb.parse
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def args(request):
|
||||
# Initialize args
|
||||
sys.argv = ["pmbootstrap",
|
||||
"--aports", os.path.dirname(__file__) + "/../..",
|
||||
"--log", "$WORK/log_testsuite_pmaports.txt"
|
||||
"chroot"]
|
||||
args = pmb.parse.arguments()
|
||||
|
||||
# Initialize logging
|
||||
pmb.helpers.logging.init(args)
|
||||
request.addfinalizer(args.logfd.close)
|
||||
return args
|
||||
|
||||
|
||||
@pytest.mark.pmaports_upstream_compat
|
||||
def test_qt_versions(args):
|
||||
"""
|
||||
Verify, that all postmarketOS qt5- package versions match with Alpine's
|
||||
qt5-qtbase version.
|
||||
"""
|
||||
# Upstream version
|
||||
index = pmb.helpers.repo.alpine_apkindex_path(args, "community", "x86_64")
|
||||
index_data = pmb.parse.apkindex.package(args, "qt5-qtbase",
|
||||
indexes=[index])
|
||||
pkgver_upstream = index_data["version"].split("-r")[0]
|
||||
|
||||
# Iterate over our packages
|
||||
failed = []
|
||||
for path in glob.glob(args.aports + "/*/qt5-*/APKBUILD"):
|
||||
# Read the pkgver
|
||||
apkbuild = pmb.parse.apkbuild(args, path)
|
||||
pkgname = apkbuild["pkgname"]
|
||||
pkgver = apkbuild["pkgver"]
|
||||
|
||||
# When we temporarily override packages from Alpine, we set the pkgver
|
||||
# to 9999 and _pkgver contains the real version (see #994).
|
||||
if pkgver == "9999":
|
||||
pkgver = apkbuild["_pkgver"]
|
||||
|
||||
# We had to add a few qt5 git packages for unity8 (!27), obviously we
|
||||
# can't compare the version there.
|
||||
if "_git" in pkgver:
|
||||
continue
|
||||
|
||||
# Compare
|
||||
if pkgver == pkgver_upstream:
|
||||
continue
|
||||
failed.append(pkgname + ": " + pkgver + " != " +
|
||||
pkgver_upstream)
|
||||
|
||||
assert [] == failed
|
||||
|
||||
|
||||
@pytest.mark.pmaports_upstream_compat
|
||||
def test_aportgen_versions(args):
|
||||
"""
|
||||
Verify that the packages generated by 'pmbootstrap aportgen' have
|
||||
the same version (pkgver *and* pkgrel!) as the upstream packages
|
||||
they are based on.
|
||||
"""
|
||||
# Get Alpine's "main" repository APKINDEX path
|
||||
index = pmb.helpers.repo.alpine_apkindex_path(args, "main", "x86_64")
|
||||
|
||||
# Alpine packages and patterns for our derivatives
|
||||
# binutils: frozen at 2.31 for now, until #295 is resolved!
|
||||
map = {"busybox": "busybox-static-*",
|
||||
"gcc": "gcc-*",
|
||||
"grub": "grub-efi-*",
|
||||
"musl": "musl-*"}
|
||||
|
||||
# Iterate over Alpine packages
|
||||
failed = []
|
||||
generated = "# Automatically generated aport, do not edit!"
|
||||
for pkgname, pattern in map.items():
|
||||
# Upstream version
|
||||
index_data = pmb.parse.apkindex.package(args, pkgname,
|
||||
indexes=[index])
|
||||
version_upstream = index_data["version"]
|
||||
|
||||
# Iterate over our packages
|
||||
for path in glob.glob(args.aports + "/*/" + pattern + "/APKBUILD"):
|
||||
# Skip non-aportgen APKBUILDs
|
||||
with open(path) as handle:
|
||||
if generated not in handle.read():
|
||||
continue
|
||||
|
||||
# Compare the version
|
||||
print("Checking " + path)
|
||||
apkbuild = pmb.parse.apkbuild(args, path)
|
||||
version = apkbuild["pkgver"] + "-r" + apkbuild["pkgrel"]
|
||||
if version != version_upstream:
|
||||
failed.append(apkbuild["pkgname"] + ": " + version +
|
||||
" != " + version_upstream +
|
||||
" (from " + pkgname + ")")
|
||||
continue
|
||||
|
||||
assert [] == failed
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"subject_format": {
|
||||
"pass": [
|
||||
"^[a-z]+/[a-z-0-9*{}]+: new aport(s|)( \\(MR \\d+\\)|)$",
|
||||
"^[a-z]+/[a-z-0-9*{}]+: pkgrel bump( \\(MR \\d+\\)|)$",
|
||||
"^[a-z-0-9*{}]+: new device \\([^\\)]+\\)( \\(MR \\d+\\)|)",
|
||||
"^[a-z]+/[a-z-0-9*{}]+: upgrade to [0-9\\.a-z\\-_]+( \\(MR \\d+\\)|)$",
|
||||
"^[a-z]+/[a-z-0-9*{}]+: remove( \\(MR \\d+\\)|)$",
|
||||
"^[a-z]+/[a-z-0-9*{}]+: remove, upstreamed( \\(MR \\d+\\)|)$",
|
||||
"^CI: [a-z-0-9*{}\\(\\)\\.,_ ][A-Za-z\\/\\-0-9*{}\\(\\)\\.,_ ]+( \\(MR \\d+\\)|)$",
|
||||
"^mrhlpr.json: [a-z-0-9*{}\\(\\)\\.,_ ][A-Za-z\\/\\-0-9*{}\\(\\)\\.,_ ]+( \\(MR \\d+\\)|)$",
|
||||
"^pmaports.cfg: [a-z-0-9*{}\\(\\)\\.,_ ][A-Za-z\\/\\-0-9*{}\\(\\)\\.,_ ]+( \\(MR \\d+\\)|)$"
|
||||
],
|
||||
"unknown": [
|
||||
"^[a-z-0-9_.*{}\\/]+: [a-z-0-9*{}\\(\\)\\.,_ ][A-Za-z\\/\\-0-9*{}\\(\\)\\.,_ ]+( \\(MR \\d+\\)|)$"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
Executable
+31
@@ -0,0 +1,31 @@
|
||||
#!/bin/sh -e
|
||||
# Copyright 2019 Oliver Smith
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
# Config: pmbootstrap tag (or branch)
|
||||
|
||||
if [ "$1" != "" ]; then
|
||||
tag="$1"
|
||||
else
|
||||
tag="master"
|
||||
fi
|
||||
|
||||
# Get download URL and pmaports path
|
||||
url="https://gitlab.com/postmarketOS/pmbootstrap/-/archive/$tag/pmbootstrap-$tag.tar.bz2"
|
||||
pmaports="$(cd $(dirname $0)/..; pwd -P)"
|
||||
|
||||
# Set up binfmt_misc
|
||||
echo "Setting-up binfmt_misc"
|
||||
sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
|
||||
|
||||
# Download pmbootstrap (to /tmp/pmbootstrap)
|
||||
echo "Downloading pmbootstrap ($tag): $url"
|
||||
cd /tmp
|
||||
wget -q -O "pmb.tar.bz2" "$url"
|
||||
tar -xf "pmb.tar.bz2"
|
||||
mv pmbootstrap-* pmbootstrap
|
||||
|
||||
# Install to $PATH and init
|
||||
sudo ln -s /tmp/pmbootstrap/pmbootstrap.py /usr/bin/pmbootstrap
|
||||
echo "Initializing pmbootstrap with aports at '$pmaports'"
|
||||
yes '' | pmbootstrap -q --aports "$pmaports" init
|
||||
Executable
+74
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import argparse
|
||||
import json
|
||||
|
||||
import requests
|
||||
|
||||
commit_default = os.environ['COMMIT'] if 'COMMIT' in os.environ else None
|
||||
|
||||
parser = argparse.ArgumentParser(description='tool to send data to build.postmarketos.org')
|
||||
parser.add_argument('--token', default='~/.pmos_token', help='secret token to authenticate to build.postmarketos.org')
|
||||
parser.add_argument('--host', default='https://build.postmarketos.org', help='base url for the submit request')
|
||||
parser.add_argument('--commit', default=commit_default, help='value for the X-Commit header')
|
||||
parser.add_argument('--arch', default='x86_64', help='value for the X-Arch header')
|
||||
parser.add_argument('--id', help='id of the job in the queue, value for the X-Id header')
|
||||
parser.add_argument('--json', action='store_true', help='datafile is a json file, do extra sanity checks')
|
||||
parser.add_argument('--verbose', '-v', action='store_true', help='show more debug info')
|
||||
parser.add_argument('endpoint', help='endpoint name on the API')
|
||||
parser.add_argument('datafile', help='file containing the data to be submitted', nargs='+')
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.commit is None:
|
||||
print('You need to either add COMMIT to the environment or specify --commit')
|
||||
exit(1)
|
||||
|
||||
if args.verbose:
|
||||
print('Environment:')
|
||||
print(os.environ)
|
||||
|
||||
with open(os.path.expanduser(args.token), encoding="utf-8") as handle:
|
||||
secret = handle.read().strip()
|
||||
|
||||
url = '{}/api/{}'.format(args.host, args.endpoint)
|
||||
|
||||
if args.json:
|
||||
if len(args.datafile) > 1:
|
||||
print("json mode doesn't support multiple input files")
|
||||
exit(1)
|
||||
|
||||
# Send contents of file as HTTP POST with json payload
|
||||
with open(args.datafile[0], encoding="utf-8") as handle:
|
||||
data = handle.read()
|
||||
data = json.loads(data)
|
||||
|
||||
print('Sending json data to {}'.format(url))
|
||||
response = requests.post(url, json=data, headers={
|
||||
'X-Secret': secret,
|
||||
'X-Commit': args.commit,
|
||||
'X-Arch': args.arch
|
||||
})
|
||||
else:
|
||||
files = []
|
||||
|
||||
for file in args.datafile:
|
||||
filename = os.path.basename(file)
|
||||
# Send contents of file as HTTP POST with multipart/formdata payload
|
||||
files.append(('file[]', (filename, open(file, 'rb'), 'application/octet-stream')))
|
||||
|
||||
print('Uploading {} to {}'.format(filename, url))
|
||||
|
||||
response = requests.post(url, files=files, headers={
|
||||
'X-Secret': secret,
|
||||
'X-Commit': args.commit,
|
||||
'X-Arch': args.arch,
|
||||
'X-Id': args.id
|
||||
})
|
||||
|
||||
if response.status_code > 399:
|
||||
print('Error occurred:')
|
||||
print(response.content.decode())
|
||||
exit(1)
|
||||
|
||||
else:
|
||||
print(response.content.decode())
|
||||
@@ -1,15 +0,0 @@
|
||||
# Reference: https://postmarketos.org/channels.cfg
|
||||
[channels.cfg]
|
||||
recommended=edge
|
||||
|
||||
[edge]
|
||||
description=Rolling release channel
|
||||
branch_pmaports=master
|
||||
branch_aports=master
|
||||
mirrordir_alpine=edge
|
||||
|
||||
[stable]
|
||||
description=Stable release channel (first beta v20.05, does not have many devices yet)
|
||||
branch_pmaports=v20.05
|
||||
branch_aports=3.12-stable
|
||||
mirrordir_alpine=v3.12
|
||||
@@ -12,7 +12,7 @@ pkgdesc="Wrappers for ccache + distcc (native and foreign chroots)"
|
||||
url="https://postmarketOS.org"
|
||||
arch="all"
|
||||
license="MIT"
|
||||
options="!check !tracedeps pmb:cross-native"
|
||||
options="!check !tracedeps"
|
||||
|
||||
package() {
|
||||
# Architectures and binaries
|
||||
|
||||
-86
@@ -1,86 +0,0 @@
|
||||
From b1faf99f3e546df2cd302bb1ad36a2078224fe8b Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 30 Oct 2020 16:59:48 -0600
|
||||
Subject: [PATCH] Revert "PR25882, .gnu.attributes are not checked for shared
|
||||
libraries"
|
||||
|
||||
This reverts commit a8acd6eeb6dc2cc5460ece90f90ebe36b56b20ba.
|
||||
---
|
||||
bfd/ChangeLog | 6 ------
|
||||
bfd/elf32-tic6x.c | 3 ---
|
||||
ld/ChangeLog | 6 ------
|
||||
ld/ldlang.c | 9 ++++-----
|
||||
4 files changed, 4 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
|
||||
index 9fac12538a..b5461494e8 100644
|
||||
--- a/bfd/ChangeLog
|
||||
+++ b/bfd/ChangeLog
|
||||
@@ -1422,12 +1422,6 @@
|
||||
accessing root.u.def of symbols. Also check root.u.def.section
|
||||
is non-NULL. Reverse tests so as to make the logic positive.
|
||||
|
||||
-2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
-
|
||||
- PR 25882
|
||||
- * elf32-tic6x.c (elf32_tic6x_merge_attributes): Don't transfer
|
||||
- Tag_ABI_PIC or Tag_ABI_PID from dynamic objects to the output.
|
||||
-
|
||||
2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 25882
|
||||
diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c
|
||||
index b8b916bfd3..91bb6a10b1 100644
|
||||
--- a/bfd/elf32-tic6x.c
|
||||
+++ b/bfd/elf32-tic6x.c
|
||||
@@ -3748,9 +3748,6 @@ elf32_tic6x_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
|
||||
|
||||
case Tag_ABI_PIC:
|
||||
case Tag_ABI_PID:
|
||||
- /* Don't transfer these tags from dynamic objects. */
|
||||
- if ((ibfd->flags & DYNAMIC) != 0)
|
||||
- continue;
|
||||
if (out_attr[i].i > in_attr[i].i)
|
||||
out_attr[i].i = in_attr[i].i;
|
||||
break;
|
||||
diff --git a/ld/ChangeLog b/ld/ChangeLog
|
||||
index 4eec7d2977..b93452f70c 100644
|
||||
--- a/ld/ChangeLog
|
||||
+++ b/ld/ChangeLog
|
||||
@@ -1319,12 +1319,6 @@
|
||||
* testsuite/ld-aarch64/farcall-group.d: New test driver.
|
||||
* testsuite/ld-aarch64/aarch64-elf.exp: Run the new test.
|
||||
|
||||
-2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
-
|
||||
- PR 25882
|
||||
- * ldlang.c (lang_check): Call bfd_merge_private_bfd_data for
|
||||
- shared libraries.
|
||||
-
|
||||
2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* po/BLD-POTFILES.in: Regenerate.
|
||||
diff --git a/ld/ldlang.c b/ld/ldlang.c
|
||||
index 9977195074..173d8ec349 100644
|
||||
--- a/ld/ldlang.c
|
||||
+++ b/ld/ldlang.c
|
||||
@@ -6972,12 +6972,11 @@ lang_check (void)
|
||||
bfd_printable_name (input_bfd), input_bfd,
|
||||
bfd_printable_name (link_info.output_bfd));
|
||||
}
|
||||
-
|
||||
- /* If the input bfd has no contents, it shouldn't set the
|
||||
- private data of the output bfd. */
|
||||
- else if ((input_bfd->flags & DYNAMIC) != 0
|
||||
- || bfd_count_sections (input_bfd) != 0)
|
||||
+ else if (bfd_count_sections (input_bfd))
|
||||
{
|
||||
+ /* If the input bfd has no contents, it shouldn't set the
|
||||
+ private data of the output bfd. */
|
||||
+
|
||||
bfd_error_handler_type pfn = NULL;
|
||||
|
||||
/* If we aren't supposed to warn about mismatched input
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -2,19 +2,25 @@
|
||||
# Generator: pmbootstrap aportgen binutils-aarch64
|
||||
# Based on: main/binutils
|
||||
|
||||
pkgname=binutils-aarch64
|
||||
pkgver=2.35.1
|
||||
pkgrel=1
|
||||
|
||||
pkgname="binutils-aarch64"
|
||||
pkgver=2.31.1
|
||||
pkgrel=2
|
||||
pkgdesc="Tools necessary to build programs for aarch64 targets"
|
||||
url="https://www.gnu.org/software/binutils/"
|
||||
makedepends="gettext libtool autoconf automake bison texinfo"
|
||||
arch="x86_64"
|
||||
depends=""
|
||||
makedepends_build=""
|
||||
makedepends_host=""
|
||||
makedepends="gettext libtool autoconf automake bison"
|
||||
arch="armhf armv7 x86_64 x86"
|
||||
license="GPL-2.0 GPL-3.0-or-later LGPL-2.0 BSD"
|
||||
source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz
|
||||
subpackages=""
|
||||
source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2
|
||||
x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
|
||||
x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
|
||||
x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||
binutils-ld-fix-static-linking.patch
|
||||
gold-mips.patch
|
||||
ld-bfd-mips.patch
|
||||
0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
|
||||
"
|
||||
builddir="$srcdir/binutils-$pkgver"
|
||||
|
||||
@@ -25,16 +31,12 @@ if [ "$CHOST" != "$CTARGET" ]; then
|
||||
fi
|
||||
|
||||
# secfixes:
|
||||
# 2.32-r0:
|
||||
# - CVE-2018-19931
|
||||
# - CVE-2018-19932
|
||||
# - CVE-2018-20002
|
||||
# - CVE-2018-20712
|
||||
# 2.28-r1:
|
||||
# - CVE-2017-7614
|
||||
# - CVE-2017-7614
|
||||
|
||||
build() {
|
||||
_target="$(arch_to_hostspec aarch64)"
|
||||
cd "$builddir"
|
||||
"$builddir"/configure \
|
||||
--build="$CBUILD" \
|
||||
--target=$_target \
|
||||
@@ -52,6 +54,7 @@ build() {
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$builddir"
|
||||
make install DESTDIR="$pkgdir"
|
||||
|
||||
# remove man, info folders
|
||||
@@ -60,8 +63,9 @@ package() {
|
||||
|
||||
|
||||
|
||||
sha512sums="94ff72708403413b70b247f3af4099ebaa882b6659249869f1ed9941a0f1912e313f08357d470f9fd2359e7f5e5b0eb86285e5eaf883fa8187789d6b1bd304eb binutils-2.35.1.tar.xz
|
||||
sha512sums="b42954e6f49a0adcd2676bdd77dfb59bfc25cec8184b007521d1e2b1d5d0593b58639e3d9448d5a40fe024c3cea386a37743627d6bb16d502f52a4a32b9573bd binutils-2.31.1.tar.bz2
|
||||
d95fd77e1c2c4670a2a11979d6811b358ba0f067b917b33d241eca20cfe66553f6a6fccc5ec26d8d29045e487cb74389fbf86426f80cf81df95608835a566cfc x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
|
||||
ce5d3c935057d624c1ce75722e7b5e4583812d46797edce8c381a94b2643f44f7bd0165e7e9b8e358955f4d979074ee487598efbf24389a4013681f99ff7c595 x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
|
||||
1878bed194529afb2430af21ba9712d6819c5fdfdc5c8db652175bf86d0a0c710ac2bd3ec728bf874887301bd187d91bf60a374c47850c7bd2eafbf6653d74d8 x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||
ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch
|
||||
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch
|
||||
314d2ef9071c89940aa6c8118e8a1e2f191a5d0a4bf596da1ad9cc84f884d8bc7dea8bd7b9fc3f8f1bddd3fd41c6eb017e1e804044b3bf084df1ed9e6e095e2d ld-bfd-mips.patch
|
||||
642c617db6c6e491f78f053d60f3aa369bad7bf8c1bc7ce267de6cf8fddf6c0d4cf63ce8c8f6e2f225dedbce7cb930d8e87e168fd8f72ca0837c77266ee2b5f8 0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch"
|
||||
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch"
|
||||
@@ -1,19 +0,0 @@
|
||||
--- ./ld/configure.tgt.orig
|
||||
+++ ./ld/configure.tgt
|
||||
@@ -541,12 +541,12 @@
|
||||
;;
|
||||
mips*-*-windiss) targ_emul=elf32mipswindiss
|
||||
;;
|
||||
-mips64*el-*-linux-*) targ_emul=elf32ltsmipn32
|
||||
- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
|
||||
+mips64*el-*-linux-*) targ_emul=elf64ltsmip
|
||||
+ targ_extra_emuls="elf32ltsmipn32 elf32btsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
-mips64*-*-linux-*) targ_emul=elf32btsmipn32
|
||||
- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
|
||||
+mips64*-*-linux-*) targ_emul=elf64btsmip
|
||||
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
mips*el-*-linux-*) targ_emul=elf32ltsmip
|
||||
@@ -0,0 +1,567 @@
|
||||
From 6737a6b34f4823deb7142f27b4074831a37ac1e1 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Fri, 20 Jul 2018 09:18:47 -0700
|
||||
Subject: [PATCH] x86: Add a GNU_PROPERTY_X86_ISA_1_USED note if needed
|
||||
|
||||
When -z separate-code, which is enabled by default for Linux/x86, is
|
||||
used to create executable, ld won't place any data in the code-only
|
||||
PT_LOAD segment. If there are no data sections placed before the
|
||||
code-only PT_LOAD segment, the program headers won't be mapped into
|
||||
any PT_LOAD segment. When the executable tries to access it (based
|
||||
on the program header address passed in AT_PHDR), it will lead to
|
||||
segfault. This patch inserts a GNU_PROPERTY_X86_ISA_1_USED note if
|
||||
there may be no data sections before the text section so that the
|
||||
first PT_LOAD segment won't be code-only and will contain the program
|
||||
header.
|
||||
|
||||
Testcases are adjusted to either pass "-z noseparate-code" to ld or
|
||||
discard the .note.gnu.property section. A Linux/x86 run-time test is
|
||||
added.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23428
|
||||
* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): If the
|
||||
separate code program header is needed, make sure that the first
|
||||
read-only PT_LOAD segment has no code by adding a
|
||||
GNU_PROPERTY_X86_ISA_1_USED note.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23428
|
||||
* testsuite/ld-elf/linux-x86.S: New file.
|
||||
* testsuite/ld-elf/linux-x86.exp: Likewise.
|
||||
* testsuite/ld-elf/pr23428.c: Likewise.
|
||||
* testsuite/ld-elf/sec64k.exp: Pass "-z noseparate-code" to ld
|
||||
for Linux/x86 targets.
|
||||
* testsuite/ld-i386/abs-iamcu.d: Likewise.
|
||||
* testsuite/ld-i386/abs.d: Likewise.
|
||||
* testsuite/ld-i386/pr12718.d: Likewise.
|
||||
* testsuite/ld-i386/pr12921.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs-k1om.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs-l1om.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr12718.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr12921.d: Likewise.
|
||||
* testsuite/ld-linkonce/zeroeh.ld: Discard .note.gnu.property
|
||||
section.
|
||||
* testsuite/ld-scripts/print-memory-usage.t: Likewise.
|
||||
* testsuite/ld-scripts/size-2.t: Likewise.
|
||||
* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use ld
|
||||
to create executable if language is "asm".
|
||||
|
||||
(cherry picked from commit 241e64e3b42cd9eba514b8e0ad2ef39a337f10a5)
|
||||
---
|
||||
bfd/ChangeLog | 8 ++++
|
||||
bfd/elfxx-x86.c | 60 +++++++++++++++++++-------
|
||||
ld/ChangeLog | 24 +++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.S | 63 ++++++++++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.exp | 46 ++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/pr23428.c | 43 +++++++++++++++++++
|
||||
ld/testsuite/ld-elf/sec64k.exp | 2 +
|
||||
ld/testsuite/ld-i386/abs-iamcu.d | 2 +-
|
||||
ld/testsuite/ld-i386/abs.d | 2 +-
|
||||
ld/testsuite/ld-i386/pr12718.d | 2 +-
|
||||
ld/testsuite/ld-i386/pr12921.d | 2 +-
|
||||
ld/testsuite/ld-linkonce/zeroeh.ld | 1 +
|
||||
ld/testsuite/ld-scripts/print-memory-usage.t | 2 +
|
||||
ld/testsuite/ld-scripts/size-2.t | 1 +
|
||||
ld/testsuite/ld-x86-64/abs-k1om.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/abs-l1om.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/abs.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/pr12718.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/pr12921.d | 2 +-
|
||||
ld/testsuite/lib/ld-lib.exp | 5 ++-
|
||||
20 files changed, 248 insertions(+), 25 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-elf/linux-x86.S
|
||||
create mode 100644 ld/testsuite/ld-elf/linux-x86.exp
|
||||
create mode 100644 ld/testsuite/ld-elf/pr23428.c
|
||||
|
||||
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
|
||||
index 1c1174a..d3831b7 100644
|
||||
--- a/bfd/ChangeLog
|
||||
+++ b/bfd/ChangeLog
|
||||
@@ -1,3 +1,11 @@
|
||||
+2018-07-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
+
|
||||
+ PR ld/23428
|
||||
+ * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): If the
|
||||
+ separate code program header is needed, make sure that the first
|
||||
+ read-only PT_LOAD segment has no code by adding a
|
||||
+ GNU_PROPERTY_X86_ISA_1_USED note.
|
||||
+
|
||||
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* development.sh: Set to true.
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index a2497aa..2e4ff88 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2524,6 +2524,7 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
const struct elf_backend_data *bed;
|
||||
unsigned int class_align = ABI_64_P (info->output_bfd) ? 3 : 2;
|
||||
unsigned int got_align;
|
||||
+ bfd_boolean has_text = FALSE;
|
||||
|
||||
features = 0;
|
||||
if (info->ibt)
|
||||
@@ -2538,24 +2539,59 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
if (bfd_get_flavour (pbfd) == bfd_target_elf_flavour
|
||||
&& bfd_count_sections (pbfd) != 0)
|
||||
{
|
||||
+ if (!has_text)
|
||||
+ {
|
||||
+ /* Check if there is no non-empty text section. */
|
||||
+ sec = bfd_get_section_by_name (pbfd, ".text");
|
||||
+ if (sec != NULL && sec->size != 0)
|
||||
+ has_text = TRUE;
|
||||
+ }
|
||||
+
|
||||
ebfd = pbfd;
|
||||
|
||||
if (elf_properties (pbfd) != NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
- if (ebfd != NULL && features)
|
||||
+ bed = get_elf_backend_data (info->output_bfd);
|
||||
+
|
||||
+ htab = elf_x86_hash_table (info, bed->target_id);
|
||||
+ if (htab == NULL)
|
||||
+ return pbfd;
|
||||
+
|
||||
+ if (ebfd != NULL)
|
||||
{
|
||||
- /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
- GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
- prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_FEATURE_1_AND,
|
||||
- 4);
|
||||
- prop->u.number |= features;
|
||||
- prop->pr_kind = property_number;
|
||||
+ prop = NULL;
|
||||
+ if (features)
|
||||
+ {
|
||||
+ /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
+ GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_FEATURE_1_AND,
|
||||
+ 4);
|
||||
+ prop->u.number |= features;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
+ else if (has_text
|
||||
+ && elf_properties (ebfd) == NULL
|
||||
+ && elf_tdata (info->output_bfd)->o->build_id.sec == NULL
|
||||
+ && !htab->elf.dynamic_sections_created
|
||||
+ && !info->traditional_format
|
||||
+ && (info->output_bfd->flags & D_PAGED) != 0
|
||||
+ && info->separate_code)
|
||||
+ {
|
||||
+ /* If the separate code program header is needed, make sure
|
||||
+ that the first read-only PT_LOAD segment has no code by
|
||||
+ adding a GNU_PROPERTY_X86_ISA_1_USED note. */
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_ISA_1_USED,
|
||||
+ 4);
|
||||
+ prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
|
||||
/* Create the GNU property note section if needed. */
|
||||
- if (pbfd == NULL)
|
||||
+ if (prop != NULL && pbfd == NULL)
|
||||
{
|
||||
sec = bfd_make_section_with_flags (ebfd,
|
||||
NOTE_GNU_PROPERTY_SECTION_NAME,
|
||||
@@ -2581,12 +2617,6 @@ error_alignment:
|
||||
|
||||
pbfd = _bfd_elf_link_setup_gnu_properties (info);
|
||||
|
||||
- bed = get_elf_backend_data (info->output_bfd);
|
||||
-
|
||||
- htab = elf_x86_hash_table (info, bed->target_id);
|
||||
- if (htab == NULL)
|
||||
- return pbfd;
|
||||
-
|
||||
htab->r_info = init_table->r_info;
|
||||
htab->r_sym = init_table->r_sym;
|
||||
|
||||
diff --git a/ld/ChangeLog b/ld/ChangeLog
|
||||
index c07e442..cfadbd4 100644
|
||||
--- a/ld/ChangeLog
|
||||
+++ b/ld/ChangeLog
|
||||
@@ -1,3 +1,27 @@
|
||||
+2018-07-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
+
|
||||
+ PR ld/23428
|
||||
+ * testsuite/ld-elf/linux-x86.S: New file.
|
||||
+ * testsuite/ld-elf/linux-x86.exp: Likewise.
|
||||
+ * testsuite/ld-elf/pr23428.c: Likewise.
|
||||
+ * testsuite/ld-elf/sec64k.exp: Pass "-z noseparate-code" to ld
|
||||
+ for Linux/x86 targets.
|
||||
+ * testsuite/ld-i386/abs-iamcu.d: Likewise.
|
||||
+ * testsuite/ld-i386/abs.d: Likewise.
|
||||
+ * testsuite/ld-i386/pr12718.d: Likewise.
|
||||
+ * testsuite/ld-i386/pr12921.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs-k1om.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs-l1om.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/pr12718.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/pr12921.d: Likewise.
|
||||
+ * testsuite/ld-linkonce/zeroeh.ld: Discard .note.gnu.property
|
||||
+ section.
|
||||
+ * testsuite/ld-scripts/print-memory-usage.t: Likewise.
|
||||
+ * testsuite/ld-scripts/size-2.t: Likewise.
|
||||
+ * testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use ld to
|
||||
+ create executable if language is "asm".
|
||||
+
|
||||
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
2.31.1 Release point.
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
|
||||
new file mode 100644
|
||||
index 0000000..bdf40c6
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.S
|
||||
@@ -0,0 +1,63 @@
|
||||
+ .text
|
||||
+ .globl _start
|
||||
+ .type _start,@function
|
||||
+ .p2align 4
|
||||
+_start:
|
||||
+ xorl %ebp, %ebp
|
||||
+#ifdef __LP64__
|
||||
+ popq %rdi
|
||||
+ movq %rsp, %rsi
|
||||
+ andq $~15, %rsp
|
||||
+#elif defined __x86_64__
|
||||
+ mov (%rsp),%edi
|
||||
+ addl $4,%esp
|
||||
+ movl %esp, %esi
|
||||
+ andl $~15, %esp
|
||||
+#else
|
||||
+ popl %esi
|
||||
+ movl %esp, %ecx
|
||||
+ andl $~15, %esp
|
||||
+
|
||||
+ subl $8,%esp
|
||||
+ pushl %ecx
|
||||
+ pushl %esi
|
||||
+#endif
|
||||
+
|
||||
+ call main
|
||||
+
|
||||
+ hlt
|
||||
+
|
||||
+ .type syscall, @function
|
||||
+ .globl syscall
|
||||
+ .p2align 4
|
||||
+syscall:
|
||||
+#ifdef __x86_64__
|
||||
+ movq %rdi, %rax /* Syscall number -> rax. */
|
||||
+ movq %rsi, %rdi /* shift arg1 - arg5. */
|
||||
+ movq %rdx, %rsi
|
||||
+ movq %rcx, %rdx
|
||||
+ movq %r8, %r10
|
||||
+ movq %r9, %r8
|
||||
+ movq 8(%rsp),%r9 /* arg6 is on the stack. */
|
||||
+ syscall /* Do the system call. */
|
||||
+#else
|
||||
+ push %ebp
|
||||
+ push %edi
|
||||
+ push %esi
|
||||
+ push %ebx
|
||||
+ mov 0x2c(%esp),%ebp
|
||||
+ mov 0x28(%esp),%edi
|
||||
+ mov 0x24(%esp),%esi
|
||||
+ mov 0x20(%esp),%edx
|
||||
+ mov 0x1c(%esp),%ecx
|
||||
+ mov 0x18(%esp),%ebx
|
||||
+ mov 0x14(%esp),%eax
|
||||
+ int $0x80
|
||||
+ pop %ebx
|
||||
+ pop %esi
|
||||
+ pop %edi
|
||||
+ pop %ebp
|
||||
+#endif
|
||||
+ ret /* Return to caller. */
|
||||
+ .size syscall, .-syscall
|
||||
+ .section .note.GNU-stack,"",@progbits
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
new file mode 100644
|
||||
index 0000000..36217c6
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
@@ -0,0 +1,46 @@
|
||||
+# Expect script for simple native Linux/x86 tests.
|
||||
+# Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
+#
|
||||
+# This file is part of the GNU Binutils.
|
||||
+#
|
||||
+# 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 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
+# MA 02110-1301, USA.
|
||||
+#
|
||||
+
|
||||
+# Test very simple native Linux/x86 programs with linux-x86.S.
|
||||
+if { ![isnative] || [which $CC] == 0 \
|
||||
+ || (![istarget "i?86-*-linux*"] \
|
||||
+ && ![istarget "x86_64-*-linux*"] \
|
||||
+ && ![istarget "amd64-*-linux*"]) } {
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
+# Add $PLT_CFLAGS if PLT is expected.
|
||||
+global PLT_CFLAGS
|
||||
+# Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required.
|
||||
+global NOPIE_CFLAGS NOPIE_LDFLAGS
|
||||
+
|
||||
+run_ld_link_exec_tests [list \
|
||||
+ [list \
|
||||
+ "Run PR ld/23428 test" \
|
||||
+ "--no-dynamic-linker -z separate-code" \
|
||||
+ "" \
|
||||
+ { linux-x86.S pr23428.c } \
|
||||
+ "pr23428" \
|
||||
+ "pass.out" \
|
||||
+ "$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
|
||||
+ "asm" \
|
||||
+ ] \
|
||||
+]
|
||||
diff --git a/ld/testsuite/ld-elf/pr23428.c b/ld/testsuite/ld-elf/pr23428.c
|
||||
new file mode 100644
|
||||
index 0000000..3631ed7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/pr23428.c
|
||||
@@ -0,0 +1,43 @@
|
||||
+#include <unistd.h>
|
||||
+#include <link.h>
|
||||
+#include <syscall.h>
|
||||
+
|
||||
+#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
|
||||
+
|
||||
+int
|
||||
+main (int argc, char **argv)
|
||||
+{
|
||||
+ char **ev = &argv[argc + 1];
|
||||
+ char **evp = ev;
|
||||
+ ElfW(auxv_t) *av;
|
||||
+ const ElfW(Phdr) *phdr = NULL;
|
||||
+ size_t phnum = 0;
|
||||
+ size_t loadnum = 0;
|
||||
+ int fd = STDOUT_FILENO;
|
||||
+ size_t i;
|
||||
+
|
||||
+ while (*evp++ != NULL)
|
||||
+ ;
|
||||
+
|
||||
+ av = (ElfW(auxv_t) *) evp;
|
||||
+
|
||||
+ for (; av->a_type != AT_NULL; ++av)
|
||||
+ switch (av->a_type)
|
||||
+ {
|
||||
+ case AT_PHDR:
|
||||
+ phdr = (const void *) av->a_un.a_val;
|
||||
+ break;
|
||||
+ case AT_PHNUM:
|
||||
+ phnum = av->a_un.a_val;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < phnum; i++, phdr++)
|
||||
+ if (phdr->p_type == PT_LOAD)
|
||||
+ loadnum++;
|
||||
+
|
||||
+ syscall (SYS_write, fd, STRING_COMMA_LEN ("PASS\n"));
|
||||
+
|
||||
+ syscall (SYS_exit, !loadnum);
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/ld/testsuite/ld-elf/sec64k.exp b/ld/testsuite/ld-elf/sec64k.exp
|
||||
index b58139e..3909c0e 100644
|
||||
--- a/ld/testsuite/ld-elf/sec64k.exp
|
||||
+++ b/ld/testsuite/ld-elf/sec64k.exp
|
||||
@@ -177,6 +177,8 @@ if { ![istarget "d10v-*-*"]
|
||||
foreach sfile $sfiles { puts $ofd "#source: $sfile" }
|
||||
if { [istarget spu*-*-*] } {
|
||||
puts $ofd "#ld: --local-store 0:0"
|
||||
+ } elseif { [istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
|
||||
+ puts $ofd "#ld: -z noseparate-code"
|
||||
} else {
|
||||
puts $ofd "#ld:"
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-i386/abs-iamcu.d b/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
index ac9beff..aba7d6b 100644
|
||||
--- a/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
+++ b/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: abs.s
|
||||
#source: zero.s
|
||||
#as: --32 -march=iamcu
|
||||
-#ld: -m elf_iamcu
|
||||
+#ld: -m elf_iamcu -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-i386/abs.d b/ld/testsuite/ld-i386/abs.d
|
||||
index e660aca..191ee44 100644
|
||||
--- a/ld/testsuite/ld-i386/abs.d
|
||||
+++ b/ld/testsuite/ld-i386/abs.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#as: --32
|
||||
#source: abs.s
|
||||
#source: zero.s
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#objdump: -rs
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-i386/pr12718.d b/ld/testsuite/ld-i386/pr12718.d
|
||||
index ec51540..7eba52d 100644
|
||||
--- a/ld/testsuite/ld-i386/pr12718.d
|
||||
+++ b/ld/testsuite/ld-i386/pr12718.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12718
|
||||
#as: --32
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#readelf: -S
|
||||
|
||||
There are 5 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-i386/pr12921.d b/ld/testsuite/ld-i386/pr12921.d
|
||||
index e49079b..ea2da3e 100644
|
||||
--- a/ld/testsuite/ld-i386/pr12921.d
|
||||
+++ b/ld/testsuite/ld-i386/pr12921.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12921
|
||||
#as: --32
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 7 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-linkonce/zeroeh.ld b/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
index b22eaa1..f89855a 100644
|
||||
--- a/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
+++ b/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
@@ -2,4 +2,5 @@ SECTIONS {
|
||||
.text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
|
||||
.gcc_except_table 0x2000 : { *(.gcc_except_table) }
|
||||
.eh_frame 0x4000 : { *(.eh_frame) }
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-scripts/print-memory-usage.t b/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
index 5ff057a..6eda1d2 100644
|
||||
--- a/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
+++ b/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
@@ -11,4 +11,6 @@ SECTIONS
|
||||
*(.data)
|
||||
*(.rw)
|
||||
}
|
||||
+
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-scripts/size-2.t b/ld/testsuite/ld-scripts/size-2.t
|
||||
index 7238639..c3c4edd 100644
|
||||
--- a/ld/testsuite/ld-scripts/size-2.t
|
||||
+++ b/ld/testsuite/ld-scripts/size-2.t
|
||||
@@ -18,4 +18,5 @@ SECTIONS
|
||||
LONG (SIZEOF (.tdata))
|
||||
LONG (SIZEOF (.tbss))
|
||||
} :image
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs-k1om.d b/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
index 2c26639..6b0fde0 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
#as: --64 -march=k1om
|
||||
-#ld: -m elf_k1om
|
||||
+#ld: -m elf_k1om -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs-l1om.d b/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
index 1fb96d4..f87869f 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
#as: --64 -march=l1om
|
||||
-#ld: -m elf_l1om
|
||||
+#ld: -m elf_l1om -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
#target: x86_64-*-linux*
|
||||
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs.d b/ld/testsuite/ld-x86-64/abs.d
|
||||
index b24b018..d99ab46 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs.d
|
||||
@@ -1,7 +1,7 @@
|
||||
#name: Absolute non-overflowing relocs
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
-#ld:
|
||||
+#ld: -z noseparate-code
|
||||
#objdump: -rs
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr12718.d b/ld/testsuite/ld-x86-64/pr12718.d
|
||||
index 07d1732..2c503ff 100644
|
||||
--- a/ld/testsuite/ld-x86-64/pr12718.d
|
||||
+++ b/ld/testsuite/ld-x86-64/pr12718.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12718
|
||||
#as: --64
|
||||
-#ld: -melf_x86_64
|
||||
+#ld: -melf_x86_64 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 5 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr12921.d b/ld/testsuite/ld-x86-64/pr12921.d
|
||||
index 6fe6abe..1162d55 100644
|
||||
--- a/ld/testsuite/ld-x86-64/pr12921.d
|
||||
+++ b/ld/testsuite/ld-x86-64/pr12921.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12921
|
||||
#as: --64
|
||||
-#ld: -melf_x86_64
|
||||
+#ld: -melf_x86_64 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 7 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
|
||||
index cfbefe9..1095091 100644
|
||||
--- a/ld/testsuite/lib/ld-lib.exp
|
||||
+++ b/ld/testsuite/lib/ld-lib.exp
|
||||
@@ -1482,7 +1482,10 @@ proc run_ld_link_exec_tests { ldtests args } {
|
||||
continue
|
||||
}
|
||||
|
||||
- if { [ string match "c++" $lang ] } {
|
||||
+ if { [ string match "asm" $lang ] } {
|
||||
+ set link_proc ld_link
|
||||
+ set link_cmd $ld
|
||||
+ } elseif { [ string match "c++" $lang ] } {
|
||||
set link_proc ld_link
|
||||
set link_cmd $CXX
|
||||
} else {
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,139 @@
|
||||
From 28a27bdbb9500797e6767f80c8128b09112aeed5 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Sat, 11 Aug 2018 06:41:33 -0700
|
||||
Subject: [PATCH] x86: Properly add X86_ISA_1_NEEDED property
|
||||
|
||||
Existing properties may be removed during property merging. We avoid
|
||||
adding X86_ISA_1_NEEDED property only if existing properties won't be
|
||||
removed.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23428
|
||||
* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Don't
|
||||
add X86_ISA_1_NEEDED property only if existing properties won't
|
||||
be removed.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23428
|
||||
* testsuite/ld-elf/dummy.s: New file.
|
||||
* testsuite/ld-elf/linux-x86.S: Add X86_FEATURE_1_AND property.
|
||||
* testsuite/ld-elf/linux-x86.exp: Add dummy.s to pr23428.
|
||||
|
||||
(cherry picked from commit ab9e342807d132182892de1be1a92d6e91a5c1da)
|
||||
---
|
||||
bfd/ChangeLog | 7 +++++++
|
||||
bfd/elfxx-x86.c | 28 ++++++++++++++++++++++------
|
||||
ld/ChangeLog | 7 +++++++
|
||||
ld/testsuite/ld-elf/dummy.s | 1 +
|
||||
ld/testsuite/ld-elf/linux-x86.S | 28 ++++++++++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.exp | 2 +-
|
||||
6 files changed, 66 insertions(+), 7 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-elf/dummy.s
|
||||
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index 7ccfd25..2d8f7b6 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2588,7 +2588,6 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
prop->pr_kind = property_number;
|
||||
}
|
||||
else if (has_text
|
||||
- && elf_properties (ebfd) == NULL
|
||||
&& elf_tdata (info->output_bfd)->o->build_id.sec == NULL
|
||||
&& !htab->elf.dynamic_sections_created
|
||||
&& !info->traditional_format
|
||||
@@ -2598,11 +2597,28 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
/* If the separate code program header is needed, make sure
|
||||
that the first read-only PT_LOAD segment has no code by
|
||||
adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */
|
||||
- prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
- 4);
|
||||
- prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
- prop->pr_kind = property_number;
|
||||
+ elf_property_list *list;
|
||||
+ bfd_boolean need_property = TRUE;
|
||||
+
|
||||
+ for (list = elf_properties (ebfd); list; list = list->next)
|
||||
+ switch (list->property.pr_type)
|
||||
+ {
|
||||
+ case GNU_PROPERTY_STACK_SIZE:
|
||||
+ case GNU_PROPERTY_NO_COPY_ON_PROTECTED:
|
||||
+ case GNU_PROPERTY_X86_ISA_1_NEEDED:
|
||||
+ /* These properties won't be removed during merging. */
|
||||
+ need_property = FALSE;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (need_property)
|
||||
+ {
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
+ 4);
|
||||
+ prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Create the GNU property note section if needed. */
|
||||
diff --git a/ld/testsuite/ld-elf/dummy.s b/ld/testsuite/ld-elf/dummy.s
|
||||
new file mode 100644
|
||||
index 0000000..403f980
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/dummy.s
|
||||
@@ -0,0 +1 @@
|
||||
+# Dummy
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
|
||||
index bdf40c6..d94abc1 100644
|
||||
--- a/ld/testsuite/ld-elf/linux-x86.S
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.S
|
||||
@@ -61,3 +61,31 @@ syscall:
|
||||
ret /* Return to caller. */
|
||||
.size syscall, .-syscall
|
||||
.section .note.GNU-stack,"",@progbits
|
||||
+
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+ .long 1f - 0f /* name length */
|
||||
+ .long 5f - 2f /* data length */
|
||||
+ .long 5 /* note type */
|
||||
+0: .asciz "GNU" /* vendor name */
|
||||
+1:
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+2: .long 0xc0000002 /* pr_type. */
|
||||
+ .long 4f - 3f /* pr_datasz. */
|
||||
+3:
|
||||
+ .long 0x2
|
||||
+4:
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+5:
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
index 36217c6..f6f5a80 100644
|
||||
--- a/ld/testsuite/ld-elf/linux-x86.exp
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
@@ -37,7 +37,7 @@ run_ld_link_exec_tests [list \
|
||||
"Run PR ld/23428 test" \
|
||||
"--no-dynamic-linker -z separate-code" \
|
||||
"" \
|
||||
- { linux-x86.S pr23428.c } \
|
||||
+ { linux-x86.S pr23428.c dummy.s } \
|
||||
"pr23428" \
|
||||
"pass.out" \
|
||||
"$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,587 @@
|
||||
From d55c3e36094f06bb1fb02f5eac19fdccf1d91f7e Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Wed, 8 Aug 2018 06:09:15 -0700
|
||||
Subject: [PATCH] x86: Properly merge GNU_PROPERTY_X86_ISA_1_USED
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=utf8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Without the GNU_PROPERTY_X86_ISA_1_USED property, all ISAs may be used.
|
||||
If a bit in the GNU_PROPERTY_X86_ISA_1_USED property is unset, the
|
||||
corresponding x86 instruction set isnât used. When merging properties
|
||||
from 2 input files and one input file doesn't have the
|
||||
GNU_PROPERTY_X86_ISA_1_USED property, the output file shouldn't have
|
||||
it neither. This patch removes the GNU_PROPERTY_X86_ISA_1_USED
|
||||
property if an input file doesn't have it.
|
||||
|
||||
This patch replaces the GNU_PROPERTY_X86_ISA_1_USED property with the
|
||||
GNU_PROPERTY_X86_ISA_1_NEEDED property which is the minimum ISA
|
||||
requirement.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23486
|
||||
* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Remove
|
||||
GNU_PROPERTY_X86_ISA_1_USED if an input file doesn't have it.
|
||||
(_bfd_x86_elf_link_setup_gnu_properties): Adding the
|
||||
GNU_PROPERTY_X86_ISA_1_NEEDED, instead of
|
||||
GNU_PROPERTY_X86_ISA_1_USED, property.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23486
|
||||
* testsuite/ld-i386/i386.exp: Run PR ld/23486 tests.
|
||||
* testsuite/ld-x86-64/x86-64.exp: Likewise.
|
||||
* testsuite/ld-i386/pr23486a.d: New file.
|
||||
* testsuite/ld-i386/pr23486b.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a.s: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b.s: Likewise.
|
||||
* testsuite/ld-i386/property-3.r: Remove "x86 ISA used".
|
||||
* testsuite/ld-i386/property-4.r: Likewise.
|
||||
* testsuite/ld-i386/property-5.r: Likewise.
|
||||
* testsuite/ld-i386/property-x86-ibt3a.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-ibt3b.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-shstk3a.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-shstk3b.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-3.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-4.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-5.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise.
|
||||
|
||||
(cherry picked from commit f7309df20c4e787041cedc4a6aced89c15259e54)
|
||||
---
|
||||
bfd/ChangeLog | 9 +++++++
|
||||
bfd/elfxx-x86.c | 25 ++++++++++++++----
|
||||
ld/ChangeLog | 32 +++++++++++++++++++++++
|
||||
ld/testsuite/ld-i386/i386.exp | 2 ++
|
||||
ld/testsuite/ld-i386/pr23486a.d | 10 +++++++
|
||||
ld/testsuite/ld-i386/pr23486b.d | 10 +++++++
|
||||
ld/testsuite/ld-i386/property-3.r | 1 -
|
||||
ld/testsuite/ld-i386/property-4.r | 1 -
|
||||
ld/testsuite/ld-i386/property-5.r | 1 -
|
||||
ld/testsuite/ld-i386/property-x86-ibt3a.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-ibt3b.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-shstk3a.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-shstk3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/pr23486a-x32.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486a.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486a.s | 30 +++++++++++++++++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b-x32.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b.s | 30 +++++++++++++++++++++
|
||||
ld/testsuite/ld-x86-64/property-3.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-4.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-5.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3a.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3a.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/x86-64.exp | 4 +++
|
||||
31 files changed, 211 insertions(+), 47 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-i386/pr23486a.d
|
||||
create mode 100644 ld/testsuite/ld-i386/pr23486b.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a.s
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b.s
|
||||
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index 2e4ff88..7ccfd25 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2407,12 +2407,27 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
|
||||
switch (pr_type)
|
||||
{
|
||||
case GNU_PROPERTY_X86_ISA_1_USED:
|
||||
+ if (aprop == NULL || bprop == NULL)
|
||||
+ {
|
||||
+ /* Only one of APROP and BPROP can be NULL. */
|
||||
+ if (aprop != NULL)
|
||||
+ {
|
||||
+ /* Remove this property since the other input file doesn't
|
||||
+ have it. */
|
||||
+ aprop->pr_kind = property_remove;
|
||||
+ updated = TRUE;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ goto or_property;
|
||||
+
|
||||
case GNU_PROPERTY_X86_ISA_1_NEEDED:
|
||||
if (aprop != NULL && bprop != NULL)
|
||||
{
|
||||
+or_property:
|
||||
number = aprop->u.number;
|
||||
aprop->u.number = number | bprop->u.number;
|
||||
- /* Remove the property if ISA bits are empty. */
|
||||
+ /* Remove the property if all bits are empty. */
|
||||
if (aprop->u.number == 0)
|
||||
{
|
||||
aprop->pr_kind = property_remove;
|
||||
@@ -2428,14 +2443,14 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
|
||||
{
|
||||
if (aprop->u.number == 0)
|
||||
{
|
||||
- /* Remove APROP if ISA bits are empty. */
|
||||
+ /* Remove APROP if all bits are empty. */
|
||||
aprop->pr_kind = property_remove;
|
||||
updated = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
- /* Return TRUE if APROP is NULL and ISA bits of BPROP
|
||||
+ /* Return TRUE if APROP is NULL and all bits of BPROP
|
||||
aren't empty to indicate that BPROP should be added
|
||||
to ABFD. */
|
||||
updated = bprop->u.number != 0;
|
||||
@@ -2582,9 +2597,9 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
{
|
||||
/* If the separate code program header is needed, make sure
|
||||
that the first read-only PT_LOAD segment has no code by
|
||||
- adding a GNU_PROPERTY_X86_ISA_1_USED note. */
|
||||
+ adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */
|
||||
prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_ISA_1_USED,
|
||||
+ GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
4);
|
||||
prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
prop->pr_kind = property_number;
|
||||
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
|
||||
index 6d794fe..78dad02 100644
|
||||
--- a/ld/testsuite/ld-i386/i386.exp
|
||||
+++ b/ld/testsuite/ld-i386/i386.exp
|
||||
@@ -462,6 +462,8 @@ run_dump_test "pr23189"
|
||||
run_dump_test "pr23194"
|
||||
run_dump_test "pr23372a"
|
||||
run_dump_test "pr23372b"
|
||||
+run_dump_test "pr23486a"
|
||||
+run_dump_test "pr23486b"
|
||||
|
||||
if { !([istarget "i?86-*-linux*"]
|
||||
|| [istarget "i?86-*-gnu*"]
|
||||
diff --git a/ld/testsuite/ld-i386/pr23486a.d b/ld/testsuite/ld-i386/pr23486a.d
|
||||
new file mode 100644
|
||||
index 0000000..41a6dcf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23486a.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: ../ld-x86-64/pr23486a.s
|
||||
+#source: ../ld-x86-64/pr23486b.s
|
||||
+#as: --32
|
||||
+#ld: -r -m elf_i386
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-i386/pr23486b.d b/ld/testsuite/ld-i386/pr23486b.d
|
||||
new file mode 100644
|
||||
index 0000000..08019b7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23486b.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: ../ld-x86-64/pr23486b.s
|
||||
+#source: ../ld-x86-64/pr23486a.s
|
||||
+#as: --32
|
||||
+#ld: -r -m elf_i386
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-i386/property-3.r b/ld/testsuite/ld-i386/property-3.r
|
||||
index 0ed91f5..d03203c 100644
|
||||
--- a/ld/testsuite/ld-i386/property-3.r
|
||||
+++ b/ld/testsuite/ld-i386/property-3.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: 586, SSE
|
||||
x86 ISA needed: i486, 586
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-4.r b/ld/testsuite/ld-i386/property-4.r
|
||||
index cb2bc15..da295eb 100644
|
||||
--- a/ld/testsuite/ld-i386/property-4.r
|
||||
+++ b/ld/testsuite/ld-i386/property-4.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-5.r b/ld/testsuite/ld-i386/property-5.r
|
||||
index 5529650..e414159 100644
|
||||
--- a/ld/testsuite/ld-i386/property-5.r
|
||||
+++ b/ld/testsuite/ld-i386/property-5.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x900000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-ibt3a.d b/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
index 4bb35b0..0aedea1 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-ibt3b.d b/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
index 418d58a..bd69ac6 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-shstk3a.d b/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
index e261038..76d2a39 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-shstk3b.d b/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
index 25f3d23..e770ecf 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a-x32.d b/ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
new file mode 100644
|
||||
index 0000000..6d9fa68
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --x32
|
||||
+#ld: -r -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a.d b/ld/testsuite/ld-x86-64/pr23486a.d
|
||||
new file mode 100644
|
||||
index 0000000..dc2b7bf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -r -m elf_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a.s b/ld/testsuite/ld-x86-64/pr23486a.s
|
||||
new file mode 100644
|
||||
index 0000000..a07d0c7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_USED */
|
||||
+ .long 0xc0000000 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0xa
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b-x32.d b/ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
new file mode 100644
|
||||
index 0000000..0445e69
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486b.s
|
||||
+#source: pr23486a.s
|
||||
+#as: --x32
|
||||
+#ld: -r -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b.d b/ld/testsuite/ld-x86-64/pr23486b.d
|
||||
new file mode 100644
|
||||
index 0000000..dc2b7bf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -r -m elf_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b.s b/ld/testsuite/ld-x86-64/pr23486b.s
|
||||
new file mode 100644
|
||||
index 0000000..c5167ee
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_NEEDED */
|
||||
+ .long 0xc0000001 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x3
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-3.r b/ld/testsuite/ld-x86-64/property-3.r
|
||||
index 0ed91f5..d03203c 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-3.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-3.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: 586, SSE
|
||||
x86 ISA needed: i486, 586
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-4.r b/ld/testsuite/ld-x86-64/property-4.r
|
||||
index cb2bc15..da295eb 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-4.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-4.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-5.r b/ld/testsuite/ld-x86-64/property-5.r
|
||||
index 5529650..e414159 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-5.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-5.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x900000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
index 011426f..4cec728 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
index 1b4229a..a8df49a 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
index 290ed6a..c112626 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
index 1142e03..f10dffd 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
index 819542d..0147a3c 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
index 4c5d0e0..1f8c2dc 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
index ba181e0..7ca2539 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
index 5216f38..f66a40e 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
index 6edb9e8..ae21e55 100644
|
||||
--- a/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
@@ -403,6 +403,10 @@ run_dump_test "pr23372a"
|
||||
run_dump_test "pr23372a-x32"
|
||||
run_dump_test "pr23372b"
|
||||
run_dump_test "pr23372b-x32"
|
||||
+run_dump_test "pr23486a"
|
||||
+run_dump_test "pr23486a-x32"
|
||||
+run_dump_test "pr23486b"
|
||||
+run_dump_test "pr23486b-x32"
|
||||
|
||||
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
|
||||
return
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
From b1faf99f3e546df2cd302bb1ad36a2078224fe8b Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 30 Oct 2020 16:59:48 -0600
|
||||
Subject: [PATCH] Revert "PR25882, .gnu.attributes are not checked for shared
|
||||
libraries"
|
||||
|
||||
This reverts commit a8acd6eeb6dc2cc5460ece90f90ebe36b56b20ba.
|
||||
---
|
||||
bfd/ChangeLog | 6 ------
|
||||
bfd/elf32-tic6x.c | 3 ---
|
||||
ld/ChangeLog | 6 ------
|
||||
ld/ldlang.c | 9 ++++-----
|
||||
4 files changed, 4 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
|
||||
index 9fac12538a..b5461494e8 100644
|
||||
--- a/bfd/ChangeLog
|
||||
+++ b/bfd/ChangeLog
|
||||
@@ -1422,12 +1422,6 @@
|
||||
accessing root.u.def of symbols. Also check root.u.def.section
|
||||
is non-NULL. Reverse tests so as to make the logic positive.
|
||||
|
||||
-2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
-
|
||||
- PR 25882
|
||||
- * elf32-tic6x.c (elf32_tic6x_merge_attributes): Don't transfer
|
||||
- Tag_ABI_PIC or Tag_ABI_PID from dynamic objects to the output.
|
||||
-
|
||||
2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 25882
|
||||
diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c
|
||||
index b8b916bfd3..91bb6a10b1 100644
|
||||
--- a/bfd/elf32-tic6x.c
|
||||
+++ b/bfd/elf32-tic6x.c
|
||||
@@ -3748,9 +3748,6 @@ elf32_tic6x_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
|
||||
|
||||
case Tag_ABI_PIC:
|
||||
case Tag_ABI_PID:
|
||||
- /* Don't transfer these tags from dynamic objects. */
|
||||
- if ((ibfd->flags & DYNAMIC) != 0)
|
||||
- continue;
|
||||
if (out_attr[i].i > in_attr[i].i)
|
||||
out_attr[i].i = in_attr[i].i;
|
||||
break;
|
||||
diff --git a/ld/ChangeLog b/ld/ChangeLog
|
||||
index 4eec7d2977..b93452f70c 100644
|
||||
--- a/ld/ChangeLog
|
||||
+++ b/ld/ChangeLog
|
||||
@@ -1319,12 +1319,6 @@
|
||||
* testsuite/ld-aarch64/farcall-group.d: New test driver.
|
||||
* testsuite/ld-aarch64/aarch64-elf.exp: Run the new test.
|
||||
|
||||
-2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
-
|
||||
- PR 25882
|
||||
- * ldlang.c (lang_check): Call bfd_merge_private_bfd_data for
|
||||
- shared libraries.
|
||||
-
|
||||
2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* po/BLD-POTFILES.in: Regenerate.
|
||||
diff --git a/ld/ldlang.c b/ld/ldlang.c
|
||||
index 9977195074..173d8ec349 100644
|
||||
--- a/ld/ldlang.c
|
||||
+++ b/ld/ldlang.c
|
||||
@@ -6972,12 +6972,11 @@ lang_check (void)
|
||||
bfd_printable_name (input_bfd), input_bfd,
|
||||
bfd_printable_name (link_info.output_bfd));
|
||||
}
|
||||
-
|
||||
- /* If the input bfd has no contents, it shouldn't set the
|
||||
- private data of the output bfd. */
|
||||
- else if ((input_bfd->flags & DYNAMIC) != 0
|
||||
- || bfd_count_sections (input_bfd) != 0)
|
||||
+ else if (bfd_count_sections (input_bfd))
|
||||
{
|
||||
+ /* If the input bfd has no contents, it shouldn't set the
|
||||
+ private data of the output bfd. */
|
||||
+
|
||||
bfd_error_handler_type pfn = NULL;
|
||||
|
||||
/* If we aren't supposed to warn about mismatched input
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -2,19 +2,25 @@
|
||||
# Generator: pmbootstrap aportgen binutils-armhf
|
||||
# Based on: main/binutils
|
||||
|
||||
pkgname=binutils-armhf
|
||||
pkgver=2.35.1
|
||||
pkgrel=1
|
||||
|
||||
pkgname="binutils-armhf"
|
||||
pkgver=2.31.1
|
||||
pkgrel=2
|
||||
pkgdesc="Tools necessary to build programs for armhf targets"
|
||||
url="https://www.gnu.org/software/binutils/"
|
||||
makedepends="gettext libtool autoconf automake bison texinfo"
|
||||
arch="x86_64"
|
||||
depends=""
|
||||
makedepends_build=""
|
||||
makedepends_host=""
|
||||
makedepends="gettext libtool autoconf automake bison"
|
||||
arch="armv7 aarch64 x86_64 x86"
|
||||
license="GPL-2.0 GPL-3.0-or-later LGPL-2.0 BSD"
|
||||
source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz
|
||||
subpackages=""
|
||||
source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2
|
||||
x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
|
||||
x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
|
||||
x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||
binutils-ld-fix-static-linking.patch
|
||||
gold-mips.patch
|
||||
ld-bfd-mips.patch
|
||||
0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
|
||||
"
|
||||
builddir="$srcdir/binutils-$pkgver"
|
||||
|
||||
@@ -25,16 +31,12 @@ if [ "$CHOST" != "$CTARGET" ]; then
|
||||
fi
|
||||
|
||||
# secfixes:
|
||||
# 2.32-r0:
|
||||
# - CVE-2018-19931
|
||||
# - CVE-2018-19932
|
||||
# - CVE-2018-20002
|
||||
# - CVE-2018-20712
|
||||
# 2.28-r1:
|
||||
# - CVE-2017-7614
|
||||
# - CVE-2017-7614
|
||||
|
||||
build() {
|
||||
_target="$(arch_to_hostspec armhf)"
|
||||
cd "$builddir"
|
||||
"$builddir"/configure \
|
||||
--build="$CBUILD" \
|
||||
--target=$_target \
|
||||
@@ -52,6 +54,7 @@ build() {
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$builddir"
|
||||
make install DESTDIR="$pkgdir"
|
||||
|
||||
# remove man, info folders
|
||||
@@ -60,8 +63,9 @@ package() {
|
||||
|
||||
|
||||
|
||||
sha512sums="94ff72708403413b70b247f3af4099ebaa882b6659249869f1ed9941a0f1912e313f08357d470f9fd2359e7f5e5b0eb86285e5eaf883fa8187789d6b1bd304eb binutils-2.35.1.tar.xz
|
||||
sha512sums="b42954e6f49a0adcd2676bdd77dfb59bfc25cec8184b007521d1e2b1d5d0593b58639e3d9448d5a40fe024c3cea386a37743627d6bb16d502f52a4a32b9573bd binutils-2.31.1.tar.bz2
|
||||
d95fd77e1c2c4670a2a11979d6811b358ba0f067b917b33d241eca20cfe66553f6a6fccc5ec26d8d29045e487cb74389fbf86426f80cf81df95608835a566cfc x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
|
||||
ce5d3c935057d624c1ce75722e7b5e4583812d46797edce8c381a94b2643f44f7bd0165e7e9b8e358955f4d979074ee487598efbf24389a4013681f99ff7c595 x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
|
||||
1878bed194529afb2430af21ba9712d6819c5fdfdc5c8db652175bf86d0a0c710ac2bd3ec728bf874887301bd187d91bf60a374c47850c7bd2eafbf6653d74d8 x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||
ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch
|
||||
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch
|
||||
314d2ef9071c89940aa6c8118e8a1e2f191a5d0a4bf596da1ad9cc84f884d8bc7dea8bd7b9fc3f8f1bddd3fd41c6eb017e1e804044b3bf084df1ed9e6e095e2d ld-bfd-mips.patch
|
||||
642c617db6c6e491f78f053d60f3aa369bad7bf8c1bc7ce267de6cf8fddf6c0d4cf63ce8c8f6e2f225dedbce7cb930d8e87e168fd8f72ca0837c77266ee2b5f8 0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch"
|
||||
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch"
|
||||
@@ -1,19 +0,0 @@
|
||||
--- ./ld/configure.tgt.orig
|
||||
+++ ./ld/configure.tgt
|
||||
@@ -541,12 +541,12 @@
|
||||
;;
|
||||
mips*-*-windiss) targ_emul=elf32mipswindiss
|
||||
;;
|
||||
-mips64*el-*-linux-*) targ_emul=elf32ltsmipn32
|
||||
- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
|
||||
+mips64*el-*-linux-*) targ_emul=elf64ltsmip
|
||||
+ targ_extra_emuls="elf32ltsmipn32 elf32btsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
-mips64*-*-linux-*) targ_emul=elf32btsmipn32
|
||||
- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
|
||||
+mips64*-*-linux-*) targ_emul=elf64btsmip
|
||||
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
mips*el-*-linux-*) targ_emul=elf32ltsmip
|
||||
@@ -0,0 +1,567 @@
|
||||
From 6737a6b34f4823deb7142f27b4074831a37ac1e1 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Fri, 20 Jul 2018 09:18:47 -0700
|
||||
Subject: [PATCH] x86: Add a GNU_PROPERTY_X86_ISA_1_USED note if needed
|
||||
|
||||
When -z separate-code, which is enabled by default for Linux/x86, is
|
||||
used to create executable, ld won't place any data in the code-only
|
||||
PT_LOAD segment. If there are no data sections placed before the
|
||||
code-only PT_LOAD segment, the program headers won't be mapped into
|
||||
any PT_LOAD segment. When the executable tries to access it (based
|
||||
on the program header address passed in AT_PHDR), it will lead to
|
||||
segfault. This patch inserts a GNU_PROPERTY_X86_ISA_1_USED note if
|
||||
there may be no data sections before the text section so that the
|
||||
first PT_LOAD segment won't be code-only and will contain the program
|
||||
header.
|
||||
|
||||
Testcases are adjusted to either pass "-z noseparate-code" to ld or
|
||||
discard the .note.gnu.property section. A Linux/x86 run-time test is
|
||||
added.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23428
|
||||
* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): If the
|
||||
separate code program header is needed, make sure that the first
|
||||
read-only PT_LOAD segment has no code by adding a
|
||||
GNU_PROPERTY_X86_ISA_1_USED note.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23428
|
||||
* testsuite/ld-elf/linux-x86.S: New file.
|
||||
* testsuite/ld-elf/linux-x86.exp: Likewise.
|
||||
* testsuite/ld-elf/pr23428.c: Likewise.
|
||||
* testsuite/ld-elf/sec64k.exp: Pass "-z noseparate-code" to ld
|
||||
for Linux/x86 targets.
|
||||
* testsuite/ld-i386/abs-iamcu.d: Likewise.
|
||||
* testsuite/ld-i386/abs.d: Likewise.
|
||||
* testsuite/ld-i386/pr12718.d: Likewise.
|
||||
* testsuite/ld-i386/pr12921.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs-k1om.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs-l1om.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr12718.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr12921.d: Likewise.
|
||||
* testsuite/ld-linkonce/zeroeh.ld: Discard .note.gnu.property
|
||||
section.
|
||||
* testsuite/ld-scripts/print-memory-usage.t: Likewise.
|
||||
* testsuite/ld-scripts/size-2.t: Likewise.
|
||||
* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use ld
|
||||
to create executable if language is "asm".
|
||||
|
||||
(cherry picked from commit 241e64e3b42cd9eba514b8e0ad2ef39a337f10a5)
|
||||
---
|
||||
bfd/ChangeLog | 8 ++++
|
||||
bfd/elfxx-x86.c | 60 +++++++++++++++++++-------
|
||||
ld/ChangeLog | 24 +++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.S | 63 ++++++++++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.exp | 46 ++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/pr23428.c | 43 +++++++++++++++++++
|
||||
ld/testsuite/ld-elf/sec64k.exp | 2 +
|
||||
ld/testsuite/ld-i386/abs-iamcu.d | 2 +-
|
||||
ld/testsuite/ld-i386/abs.d | 2 +-
|
||||
ld/testsuite/ld-i386/pr12718.d | 2 +-
|
||||
ld/testsuite/ld-i386/pr12921.d | 2 +-
|
||||
ld/testsuite/ld-linkonce/zeroeh.ld | 1 +
|
||||
ld/testsuite/ld-scripts/print-memory-usage.t | 2 +
|
||||
ld/testsuite/ld-scripts/size-2.t | 1 +
|
||||
ld/testsuite/ld-x86-64/abs-k1om.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/abs-l1om.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/abs.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/pr12718.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/pr12921.d | 2 +-
|
||||
ld/testsuite/lib/ld-lib.exp | 5 ++-
|
||||
20 files changed, 248 insertions(+), 25 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-elf/linux-x86.S
|
||||
create mode 100644 ld/testsuite/ld-elf/linux-x86.exp
|
||||
create mode 100644 ld/testsuite/ld-elf/pr23428.c
|
||||
|
||||
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
|
||||
index 1c1174a..d3831b7 100644
|
||||
--- a/bfd/ChangeLog
|
||||
+++ b/bfd/ChangeLog
|
||||
@@ -1,3 +1,11 @@
|
||||
+2018-07-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
+
|
||||
+ PR ld/23428
|
||||
+ * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): If the
|
||||
+ separate code program header is needed, make sure that the first
|
||||
+ read-only PT_LOAD segment has no code by adding a
|
||||
+ GNU_PROPERTY_X86_ISA_1_USED note.
|
||||
+
|
||||
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* development.sh: Set to true.
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index a2497aa..2e4ff88 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2524,6 +2524,7 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
const struct elf_backend_data *bed;
|
||||
unsigned int class_align = ABI_64_P (info->output_bfd) ? 3 : 2;
|
||||
unsigned int got_align;
|
||||
+ bfd_boolean has_text = FALSE;
|
||||
|
||||
features = 0;
|
||||
if (info->ibt)
|
||||
@@ -2538,24 +2539,59 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
if (bfd_get_flavour (pbfd) == bfd_target_elf_flavour
|
||||
&& bfd_count_sections (pbfd) != 0)
|
||||
{
|
||||
+ if (!has_text)
|
||||
+ {
|
||||
+ /* Check if there is no non-empty text section. */
|
||||
+ sec = bfd_get_section_by_name (pbfd, ".text");
|
||||
+ if (sec != NULL && sec->size != 0)
|
||||
+ has_text = TRUE;
|
||||
+ }
|
||||
+
|
||||
ebfd = pbfd;
|
||||
|
||||
if (elf_properties (pbfd) != NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
- if (ebfd != NULL && features)
|
||||
+ bed = get_elf_backend_data (info->output_bfd);
|
||||
+
|
||||
+ htab = elf_x86_hash_table (info, bed->target_id);
|
||||
+ if (htab == NULL)
|
||||
+ return pbfd;
|
||||
+
|
||||
+ if (ebfd != NULL)
|
||||
{
|
||||
- /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
- GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
- prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_FEATURE_1_AND,
|
||||
- 4);
|
||||
- prop->u.number |= features;
|
||||
- prop->pr_kind = property_number;
|
||||
+ prop = NULL;
|
||||
+ if (features)
|
||||
+ {
|
||||
+ /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
+ GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_FEATURE_1_AND,
|
||||
+ 4);
|
||||
+ prop->u.number |= features;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
+ else if (has_text
|
||||
+ && elf_properties (ebfd) == NULL
|
||||
+ && elf_tdata (info->output_bfd)->o->build_id.sec == NULL
|
||||
+ && !htab->elf.dynamic_sections_created
|
||||
+ && !info->traditional_format
|
||||
+ && (info->output_bfd->flags & D_PAGED) != 0
|
||||
+ && info->separate_code)
|
||||
+ {
|
||||
+ /* If the separate code program header is needed, make sure
|
||||
+ that the first read-only PT_LOAD segment has no code by
|
||||
+ adding a GNU_PROPERTY_X86_ISA_1_USED note. */
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_ISA_1_USED,
|
||||
+ 4);
|
||||
+ prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
|
||||
/* Create the GNU property note section if needed. */
|
||||
- if (pbfd == NULL)
|
||||
+ if (prop != NULL && pbfd == NULL)
|
||||
{
|
||||
sec = bfd_make_section_with_flags (ebfd,
|
||||
NOTE_GNU_PROPERTY_SECTION_NAME,
|
||||
@@ -2581,12 +2617,6 @@ error_alignment:
|
||||
|
||||
pbfd = _bfd_elf_link_setup_gnu_properties (info);
|
||||
|
||||
- bed = get_elf_backend_data (info->output_bfd);
|
||||
-
|
||||
- htab = elf_x86_hash_table (info, bed->target_id);
|
||||
- if (htab == NULL)
|
||||
- return pbfd;
|
||||
-
|
||||
htab->r_info = init_table->r_info;
|
||||
htab->r_sym = init_table->r_sym;
|
||||
|
||||
diff --git a/ld/ChangeLog b/ld/ChangeLog
|
||||
index c07e442..cfadbd4 100644
|
||||
--- a/ld/ChangeLog
|
||||
+++ b/ld/ChangeLog
|
||||
@@ -1,3 +1,27 @@
|
||||
+2018-07-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
+
|
||||
+ PR ld/23428
|
||||
+ * testsuite/ld-elf/linux-x86.S: New file.
|
||||
+ * testsuite/ld-elf/linux-x86.exp: Likewise.
|
||||
+ * testsuite/ld-elf/pr23428.c: Likewise.
|
||||
+ * testsuite/ld-elf/sec64k.exp: Pass "-z noseparate-code" to ld
|
||||
+ for Linux/x86 targets.
|
||||
+ * testsuite/ld-i386/abs-iamcu.d: Likewise.
|
||||
+ * testsuite/ld-i386/abs.d: Likewise.
|
||||
+ * testsuite/ld-i386/pr12718.d: Likewise.
|
||||
+ * testsuite/ld-i386/pr12921.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs-k1om.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs-l1om.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/pr12718.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/pr12921.d: Likewise.
|
||||
+ * testsuite/ld-linkonce/zeroeh.ld: Discard .note.gnu.property
|
||||
+ section.
|
||||
+ * testsuite/ld-scripts/print-memory-usage.t: Likewise.
|
||||
+ * testsuite/ld-scripts/size-2.t: Likewise.
|
||||
+ * testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use ld to
|
||||
+ create executable if language is "asm".
|
||||
+
|
||||
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
2.31.1 Release point.
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
|
||||
new file mode 100644
|
||||
index 0000000..bdf40c6
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.S
|
||||
@@ -0,0 +1,63 @@
|
||||
+ .text
|
||||
+ .globl _start
|
||||
+ .type _start,@function
|
||||
+ .p2align 4
|
||||
+_start:
|
||||
+ xorl %ebp, %ebp
|
||||
+#ifdef __LP64__
|
||||
+ popq %rdi
|
||||
+ movq %rsp, %rsi
|
||||
+ andq $~15, %rsp
|
||||
+#elif defined __x86_64__
|
||||
+ mov (%rsp),%edi
|
||||
+ addl $4,%esp
|
||||
+ movl %esp, %esi
|
||||
+ andl $~15, %esp
|
||||
+#else
|
||||
+ popl %esi
|
||||
+ movl %esp, %ecx
|
||||
+ andl $~15, %esp
|
||||
+
|
||||
+ subl $8,%esp
|
||||
+ pushl %ecx
|
||||
+ pushl %esi
|
||||
+#endif
|
||||
+
|
||||
+ call main
|
||||
+
|
||||
+ hlt
|
||||
+
|
||||
+ .type syscall, @function
|
||||
+ .globl syscall
|
||||
+ .p2align 4
|
||||
+syscall:
|
||||
+#ifdef __x86_64__
|
||||
+ movq %rdi, %rax /* Syscall number -> rax. */
|
||||
+ movq %rsi, %rdi /* shift arg1 - arg5. */
|
||||
+ movq %rdx, %rsi
|
||||
+ movq %rcx, %rdx
|
||||
+ movq %r8, %r10
|
||||
+ movq %r9, %r8
|
||||
+ movq 8(%rsp),%r9 /* arg6 is on the stack. */
|
||||
+ syscall /* Do the system call. */
|
||||
+#else
|
||||
+ push %ebp
|
||||
+ push %edi
|
||||
+ push %esi
|
||||
+ push %ebx
|
||||
+ mov 0x2c(%esp),%ebp
|
||||
+ mov 0x28(%esp),%edi
|
||||
+ mov 0x24(%esp),%esi
|
||||
+ mov 0x20(%esp),%edx
|
||||
+ mov 0x1c(%esp),%ecx
|
||||
+ mov 0x18(%esp),%ebx
|
||||
+ mov 0x14(%esp),%eax
|
||||
+ int $0x80
|
||||
+ pop %ebx
|
||||
+ pop %esi
|
||||
+ pop %edi
|
||||
+ pop %ebp
|
||||
+#endif
|
||||
+ ret /* Return to caller. */
|
||||
+ .size syscall, .-syscall
|
||||
+ .section .note.GNU-stack,"",@progbits
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
new file mode 100644
|
||||
index 0000000..36217c6
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
@@ -0,0 +1,46 @@
|
||||
+# Expect script for simple native Linux/x86 tests.
|
||||
+# Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
+#
|
||||
+# This file is part of the GNU Binutils.
|
||||
+#
|
||||
+# 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 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
+# MA 02110-1301, USA.
|
||||
+#
|
||||
+
|
||||
+# Test very simple native Linux/x86 programs with linux-x86.S.
|
||||
+if { ![isnative] || [which $CC] == 0 \
|
||||
+ || (![istarget "i?86-*-linux*"] \
|
||||
+ && ![istarget "x86_64-*-linux*"] \
|
||||
+ && ![istarget "amd64-*-linux*"]) } {
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
+# Add $PLT_CFLAGS if PLT is expected.
|
||||
+global PLT_CFLAGS
|
||||
+# Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required.
|
||||
+global NOPIE_CFLAGS NOPIE_LDFLAGS
|
||||
+
|
||||
+run_ld_link_exec_tests [list \
|
||||
+ [list \
|
||||
+ "Run PR ld/23428 test" \
|
||||
+ "--no-dynamic-linker -z separate-code" \
|
||||
+ "" \
|
||||
+ { linux-x86.S pr23428.c } \
|
||||
+ "pr23428" \
|
||||
+ "pass.out" \
|
||||
+ "$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
|
||||
+ "asm" \
|
||||
+ ] \
|
||||
+]
|
||||
diff --git a/ld/testsuite/ld-elf/pr23428.c b/ld/testsuite/ld-elf/pr23428.c
|
||||
new file mode 100644
|
||||
index 0000000..3631ed7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/pr23428.c
|
||||
@@ -0,0 +1,43 @@
|
||||
+#include <unistd.h>
|
||||
+#include <link.h>
|
||||
+#include <syscall.h>
|
||||
+
|
||||
+#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
|
||||
+
|
||||
+int
|
||||
+main (int argc, char **argv)
|
||||
+{
|
||||
+ char **ev = &argv[argc + 1];
|
||||
+ char **evp = ev;
|
||||
+ ElfW(auxv_t) *av;
|
||||
+ const ElfW(Phdr) *phdr = NULL;
|
||||
+ size_t phnum = 0;
|
||||
+ size_t loadnum = 0;
|
||||
+ int fd = STDOUT_FILENO;
|
||||
+ size_t i;
|
||||
+
|
||||
+ while (*evp++ != NULL)
|
||||
+ ;
|
||||
+
|
||||
+ av = (ElfW(auxv_t) *) evp;
|
||||
+
|
||||
+ for (; av->a_type != AT_NULL; ++av)
|
||||
+ switch (av->a_type)
|
||||
+ {
|
||||
+ case AT_PHDR:
|
||||
+ phdr = (const void *) av->a_un.a_val;
|
||||
+ break;
|
||||
+ case AT_PHNUM:
|
||||
+ phnum = av->a_un.a_val;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < phnum; i++, phdr++)
|
||||
+ if (phdr->p_type == PT_LOAD)
|
||||
+ loadnum++;
|
||||
+
|
||||
+ syscall (SYS_write, fd, STRING_COMMA_LEN ("PASS\n"));
|
||||
+
|
||||
+ syscall (SYS_exit, !loadnum);
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/ld/testsuite/ld-elf/sec64k.exp b/ld/testsuite/ld-elf/sec64k.exp
|
||||
index b58139e..3909c0e 100644
|
||||
--- a/ld/testsuite/ld-elf/sec64k.exp
|
||||
+++ b/ld/testsuite/ld-elf/sec64k.exp
|
||||
@@ -177,6 +177,8 @@ if { ![istarget "d10v-*-*"]
|
||||
foreach sfile $sfiles { puts $ofd "#source: $sfile" }
|
||||
if { [istarget spu*-*-*] } {
|
||||
puts $ofd "#ld: --local-store 0:0"
|
||||
+ } elseif { [istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
|
||||
+ puts $ofd "#ld: -z noseparate-code"
|
||||
} else {
|
||||
puts $ofd "#ld:"
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-i386/abs-iamcu.d b/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
index ac9beff..aba7d6b 100644
|
||||
--- a/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
+++ b/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: abs.s
|
||||
#source: zero.s
|
||||
#as: --32 -march=iamcu
|
||||
-#ld: -m elf_iamcu
|
||||
+#ld: -m elf_iamcu -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-i386/abs.d b/ld/testsuite/ld-i386/abs.d
|
||||
index e660aca..191ee44 100644
|
||||
--- a/ld/testsuite/ld-i386/abs.d
|
||||
+++ b/ld/testsuite/ld-i386/abs.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#as: --32
|
||||
#source: abs.s
|
||||
#source: zero.s
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#objdump: -rs
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-i386/pr12718.d b/ld/testsuite/ld-i386/pr12718.d
|
||||
index ec51540..7eba52d 100644
|
||||
--- a/ld/testsuite/ld-i386/pr12718.d
|
||||
+++ b/ld/testsuite/ld-i386/pr12718.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12718
|
||||
#as: --32
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#readelf: -S
|
||||
|
||||
There are 5 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-i386/pr12921.d b/ld/testsuite/ld-i386/pr12921.d
|
||||
index e49079b..ea2da3e 100644
|
||||
--- a/ld/testsuite/ld-i386/pr12921.d
|
||||
+++ b/ld/testsuite/ld-i386/pr12921.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12921
|
||||
#as: --32
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 7 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-linkonce/zeroeh.ld b/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
index b22eaa1..f89855a 100644
|
||||
--- a/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
+++ b/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
@@ -2,4 +2,5 @@ SECTIONS {
|
||||
.text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
|
||||
.gcc_except_table 0x2000 : { *(.gcc_except_table) }
|
||||
.eh_frame 0x4000 : { *(.eh_frame) }
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-scripts/print-memory-usage.t b/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
index 5ff057a..6eda1d2 100644
|
||||
--- a/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
+++ b/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
@@ -11,4 +11,6 @@ SECTIONS
|
||||
*(.data)
|
||||
*(.rw)
|
||||
}
|
||||
+
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-scripts/size-2.t b/ld/testsuite/ld-scripts/size-2.t
|
||||
index 7238639..c3c4edd 100644
|
||||
--- a/ld/testsuite/ld-scripts/size-2.t
|
||||
+++ b/ld/testsuite/ld-scripts/size-2.t
|
||||
@@ -18,4 +18,5 @@ SECTIONS
|
||||
LONG (SIZEOF (.tdata))
|
||||
LONG (SIZEOF (.tbss))
|
||||
} :image
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs-k1om.d b/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
index 2c26639..6b0fde0 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
#as: --64 -march=k1om
|
||||
-#ld: -m elf_k1om
|
||||
+#ld: -m elf_k1om -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs-l1om.d b/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
index 1fb96d4..f87869f 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
#as: --64 -march=l1om
|
||||
-#ld: -m elf_l1om
|
||||
+#ld: -m elf_l1om -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
#target: x86_64-*-linux*
|
||||
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs.d b/ld/testsuite/ld-x86-64/abs.d
|
||||
index b24b018..d99ab46 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs.d
|
||||
@@ -1,7 +1,7 @@
|
||||
#name: Absolute non-overflowing relocs
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
-#ld:
|
||||
+#ld: -z noseparate-code
|
||||
#objdump: -rs
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr12718.d b/ld/testsuite/ld-x86-64/pr12718.d
|
||||
index 07d1732..2c503ff 100644
|
||||
--- a/ld/testsuite/ld-x86-64/pr12718.d
|
||||
+++ b/ld/testsuite/ld-x86-64/pr12718.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12718
|
||||
#as: --64
|
||||
-#ld: -melf_x86_64
|
||||
+#ld: -melf_x86_64 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 5 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr12921.d b/ld/testsuite/ld-x86-64/pr12921.d
|
||||
index 6fe6abe..1162d55 100644
|
||||
--- a/ld/testsuite/ld-x86-64/pr12921.d
|
||||
+++ b/ld/testsuite/ld-x86-64/pr12921.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12921
|
||||
#as: --64
|
||||
-#ld: -melf_x86_64
|
||||
+#ld: -melf_x86_64 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 7 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
|
||||
index cfbefe9..1095091 100644
|
||||
--- a/ld/testsuite/lib/ld-lib.exp
|
||||
+++ b/ld/testsuite/lib/ld-lib.exp
|
||||
@@ -1482,7 +1482,10 @@ proc run_ld_link_exec_tests { ldtests args } {
|
||||
continue
|
||||
}
|
||||
|
||||
- if { [ string match "c++" $lang ] } {
|
||||
+ if { [ string match "asm" $lang ] } {
|
||||
+ set link_proc ld_link
|
||||
+ set link_cmd $ld
|
||||
+ } elseif { [ string match "c++" $lang ] } {
|
||||
set link_proc ld_link
|
||||
set link_cmd $CXX
|
||||
} else {
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,139 @@
|
||||
From 28a27bdbb9500797e6767f80c8128b09112aeed5 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Sat, 11 Aug 2018 06:41:33 -0700
|
||||
Subject: [PATCH] x86: Properly add X86_ISA_1_NEEDED property
|
||||
|
||||
Existing properties may be removed during property merging. We avoid
|
||||
adding X86_ISA_1_NEEDED property only if existing properties won't be
|
||||
removed.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23428
|
||||
* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Don't
|
||||
add X86_ISA_1_NEEDED property only if existing properties won't
|
||||
be removed.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23428
|
||||
* testsuite/ld-elf/dummy.s: New file.
|
||||
* testsuite/ld-elf/linux-x86.S: Add X86_FEATURE_1_AND property.
|
||||
* testsuite/ld-elf/linux-x86.exp: Add dummy.s to pr23428.
|
||||
|
||||
(cherry picked from commit ab9e342807d132182892de1be1a92d6e91a5c1da)
|
||||
---
|
||||
bfd/ChangeLog | 7 +++++++
|
||||
bfd/elfxx-x86.c | 28 ++++++++++++++++++++++------
|
||||
ld/ChangeLog | 7 +++++++
|
||||
ld/testsuite/ld-elf/dummy.s | 1 +
|
||||
ld/testsuite/ld-elf/linux-x86.S | 28 ++++++++++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.exp | 2 +-
|
||||
6 files changed, 66 insertions(+), 7 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-elf/dummy.s
|
||||
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index 7ccfd25..2d8f7b6 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2588,7 +2588,6 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
prop->pr_kind = property_number;
|
||||
}
|
||||
else if (has_text
|
||||
- && elf_properties (ebfd) == NULL
|
||||
&& elf_tdata (info->output_bfd)->o->build_id.sec == NULL
|
||||
&& !htab->elf.dynamic_sections_created
|
||||
&& !info->traditional_format
|
||||
@@ -2598,11 +2597,28 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
/* If the separate code program header is needed, make sure
|
||||
that the first read-only PT_LOAD segment has no code by
|
||||
adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */
|
||||
- prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
- 4);
|
||||
- prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
- prop->pr_kind = property_number;
|
||||
+ elf_property_list *list;
|
||||
+ bfd_boolean need_property = TRUE;
|
||||
+
|
||||
+ for (list = elf_properties (ebfd); list; list = list->next)
|
||||
+ switch (list->property.pr_type)
|
||||
+ {
|
||||
+ case GNU_PROPERTY_STACK_SIZE:
|
||||
+ case GNU_PROPERTY_NO_COPY_ON_PROTECTED:
|
||||
+ case GNU_PROPERTY_X86_ISA_1_NEEDED:
|
||||
+ /* These properties won't be removed during merging. */
|
||||
+ need_property = FALSE;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (need_property)
|
||||
+ {
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
+ 4);
|
||||
+ prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Create the GNU property note section if needed. */
|
||||
diff --git a/ld/testsuite/ld-elf/dummy.s b/ld/testsuite/ld-elf/dummy.s
|
||||
new file mode 100644
|
||||
index 0000000..403f980
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/dummy.s
|
||||
@@ -0,0 +1 @@
|
||||
+# Dummy
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
|
||||
index bdf40c6..d94abc1 100644
|
||||
--- a/ld/testsuite/ld-elf/linux-x86.S
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.S
|
||||
@@ -61,3 +61,31 @@ syscall:
|
||||
ret /* Return to caller. */
|
||||
.size syscall, .-syscall
|
||||
.section .note.GNU-stack,"",@progbits
|
||||
+
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+ .long 1f - 0f /* name length */
|
||||
+ .long 5f - 2f /* data length */
|
||||
+ .long 5 /* note type */
|
||||
+0: .asciz "GNU" /* vendor name */
|
||||
+1:
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+2: .long 0xc0000002 /* pr_type. */
|
||||
+ .long 4f - 3f /* pr_datasz. */
|
||||
+3:
|
||||
+ .long 0x2
|
||||
+4:
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+5:
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
index 36217c6..f6f5a80 100644
|
||||
--- a/ld/testsuite/ld-elf/linux-x86.exp
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
@@ -37,7 +37,7 @@ run_ld_link_exec_tests [list \
|
||||
"Run PR ld/23428 test" \
|
||||
"--no-dynamic-linker -z separate-code" \
|
||||
"" \
|
||||
- { linux-x86.S pr23428.c } \
|
||||
+ { linux-x86.S pr23428.c dummy.s } \
|
||||
"pr23428" \
|
||||
"pass.out" \
|
||||
"$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,587 @@
|
||||
From d55c3e36094f06bb1fb02f5eac19fdccf1d91f7e Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Wed, 8 Aug 2018 06:09:15 -0700
|
||||
Subject: [PATCH] x86: Properly merge GNU_PROPERTY_X86_ISA_1_USED
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=utf8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Without the GNU_PROPERTY_X86_ISA_1_USED property, all ISAs may be used.
|
||||
If a bit in the GNU_PROPERTY_X86_ISA_1_USED property is unset, the
|
||||
corresponding x86 instruction set isnât used. When merging properties
|
||||
from 2 input files and one input file doesn't have the
|
||||
GNU_PROPERTY_X86_ISA_1_USED property, the output file shouldn't have
|
||||
it neither. This patch removes the GNU_PROPERTY_X86_ISA_1_USED
|
||||
property if an input file doesn't have it.
|
||||
|
||||
This patch replaces the GNU_PROPERTY_X86_ISA_1_USED property with the
|
||||
GNU_PROPERTY_X86_ISA_1_NEEDED property which is the minimum ISA
|
||||
requirement.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23486
|
||||
* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Remove
|
||||
GNU_PROPERTY_X86_ISA_1_USED if an input file doesn't have it.
|
||||
(_bfd_x86_elf_link_setup_gnu_properties): Adding the
|
||||
GNU_PROPERTY_X86_ISA_1_NEEDED, instead of
|
||||
GNU_PROPERTY_X86_ISA_1_USED, property.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23486
|
||||
* testsuite/ld-i386/i386.exp: Run PR ld/23486 tests.
|
||||
* testsuite/ld-x86-64/x86-64.exp: Likewise.
|
||||
* testsuite/ld-i386/pr23486a.d: New file.
|
||||
* testsuite/ld-i386/pr23486b.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a.s: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b.s: Likewise.
|
||||
* testsuite/ld-i386/property-3.r: Remove "x86 ISA used".
|
||||
* testsuite/ld-i386/property-4.r: Likewise.
|
||||
* testsuite/ld-i386/property-5.r: Likewise.
|
||||
* testsuite/ld-i386/property-x86-ibt3a.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-ibt3b.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-shstk3a.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-shstk3b.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-3.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-4.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-5.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise.
|
||||
|
||||
(cherry picked from commit f7309df20c4e787041cedc4a6aced89c15259e54)
|
||||
---
|
||||
bfd/ChangeLog | 9 +++++++
|
||||
bfd/elfxx-x86.c | 25 ++++++++++++++----
|
||||
ld/ChangeLog | 32 +++++++++++++++++++++++
|
||||
ld/testsuite/ld-i386/i386.exp | 2 ++
|
||||
ld/testsuite/ld-i386/pr23486a.d | 10 +++++++
|
||||
ld/testsuite/ld-i386/pr23486b.d | 10 +++++++
|
||||
ld/testsuite/ld-i386/property-3.r | 1 -
|
||||
ld/testsuite/ld-i386/property-4.r | 1 -
|
||||
ld/testsuite/ld-i386/property-5.r | 1 -
|
||||
ld/testsuite/ld-i386/property-x86-ibt3a.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-ibt3b.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-shstk3a.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-shstk3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/pr23486a-x32.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486a.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486a.s | 30 +++++++++++++++++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b-x32.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b.s | 30 +++++++++++++++++++++
|
||||
ld/testsuite/ld-x86-64/property-3.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-4.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-5.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3a.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3a.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/x86-64.exp | 4 +++
|
||||
31 files changed, 211 insertions(+), 47 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-i386/pr23486a.d
|
||||
create mode 100644 ld/testsuite/ld-i386/pr23486b.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a.s
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b.s
|
||||
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index 2e4ff88..7ccfd25 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2407,12 +2407,27 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
|
||||
switch (pr_type)
|
||||
{
|
||||
case GNU_PROPERTY_X86_ISA_1_USED:
|
||||
+ if (aprop == NULL || bprop == NULL)
|
||||
+ {
|
||||
+ /* Only one of APROP and BPROP can be NULL. */
|
||||
+ if (aprop != NULL)
|
||||
+ {
|
||||
+ /* Remove this property since the other input file doesn't
|
||||
+ have it. */
|
||||
+ aprop->pr_kind = property_remove;
|
||||
+ updated = TRUE;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ goto or_property;
|
||||
+
|
||||
case GNU_PROPERTY_X86_ISA_1_NEEDED:
|
||||
if (aprop != NULL && bprop != NULL)
|
||||
{
|
||||
+or_property:
|
||||
number = aprop->u.number;
|
||||
aprop->u.number = number | bprop->u.number;
|
||||
- /* Remove the property if ISA bits are empty. */
|
||||
+ /* Remove the property if all bits are empty. */
|
||||
if (aprop->u.number == 0)
|
||||
{
|
||||
aprop->pr_kind = property_remove;
|
||||
@@ -2428,14 +2443,14 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
|
||||
{
|
||||
if (aprop->u.number == 0)
|
||||
{
|
||||
- /* Remove APROP if ISA bits are empty. */
|
||||
+ /* Remove APROP if all bits are empty. */
|
||||
aprop->pr_kind = property_remove;
|
||||
updated = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
- /* Return TRUE if APROP is NULL and ISA bits of BPROP
|
||||
+ /* Return TRUE if APROP is NULL and all bits of BPROP
|
||||
aren't empty to indicate that BPROP should be added
|
||||
to ABFD. */
|
||||
updated = bprop->u.number != 0;
|
||||
@@ -2582,9 +2597,9 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
{
|
||||
/* If the separate code program header is needed, make sure
|
||||
that the first read-only PT_LOAD segment has no code by
|
||||
- adding a GNU_PROPERTY_X86_ISA_1_USED note. */
|
||||
+ adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */
|
||||
prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_ISA_1_USED,
|
||||
+ GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
4);
|
||||
prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
prop->pr_kind = property_number;
|
||||
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
|
||||
index 6d794fe..78dad02 100644
|
||||
--- a/ld/testsuite/ld-i386/i386.exp
|
||||
+++ b/ld/testsuite/ld-i386/i386.exp
|
||||
@@ -462,6 +462,8 @@ run_dump_test "pr23189"
|
||||
run_dump_test "pr23194"
|
||||
run_dump_test "pr23372a"
|
||||
run_dump_test "pr23372b"
|
||||
+run_dump_test "pr23486a"
|
||||
+run_dump_test "pr23486b"
|
||||
|
||||
if { !([istarget "i?86-*-linux*"]
|
||||
|| [istarget "i?86-*-gnu*"]
|
||||
diff --git a/ld/testsuite/ld-i386/pr23486a.d b/ld/testsuite/ld-i386/pr23486a.d
|
||||
new file mode 100644
|
||||
index 0000000..41a6dcf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23486a.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: ../ld-x86-64/pr23486a.s
|
||||
+#source: ../ld-x86-64/pr23486b.s
|
||||
+#as: --32
|
||||
+#ld: -r -m elf_i386
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-i386/pr23486b.d b/ld/testsuite/ld-i386/pr23486b.d
|
||||
new file mode 100644
|
||||
index 0000000..08019b7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23486b.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: ../ld-x86-64/pr23486b.s
|
||||
+#source: ../ld-x86-64/pr23486a.s
|
||||
+#as: --32
|
||||
+#ld: -r -m elf_i386
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-i386/property-3.r b/ld/testsuite/ld-i386/property-3.r
|
||||
index 0ed91f5..d03203c 100644
|
||||
--- a/ld/testsuite/ld-i386/property-3.r
|
||||
+++ b/ld/testsuite/ld-i386/property-3.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: 586, SSE
|
||||
x86 ISA needed: i486, 586
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-4.r b/ld/testsuite/ld-i386/property-4.r
|
||||
index cb2bc15..da295eb 100644
|
||||
--- a/ld/testsuite/ld-i386/property-4.r
|
||||
+++ b/ld/testsuite/ld-i386/property-4.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-5.r b/ld/testsuite/ld-i386/property-5.r
|
||||
index 5529650..e414159 100644
|
||||
--- a/ld/testsuite/ld-i386/property-5.r
|
||||
+++ b/ld/testsuite/ld-i386/property-5.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x900000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-ibt3a.d b/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
index 4bb35b0..0aedea1 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-ibt3b.d b/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
index 418d58a..bd69ac6 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-shstk3a.d b/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
index e261038..76d2a39 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-shstk3b.d b/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
index 25f3d23..e770ecf 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a-x32.d b/ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
new file mode 100644
|
||||
index 0000000..6d9fa68
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --x32
|
||||
+#ld: -r -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a.d b/ld/testsuite/ld-x86-64/pr23486a.d
|
||||
new file mode 100644
|
||||
index 0000000..dc2b7bf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -r -m elf_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a.s b/ld/testsuite/ld-x86-64/pr23486a.s
|
||||
new file mode 100644
|
||||
index 0000000..a07d0c7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_USED */
|
||||
+ .long 0xc0000000 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0xa
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b-x32.d b/ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
new file mode 100644
|
||||
index 0000000..0445e69
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486b.s
|
||||
+#source: pr23486a.s
|
||||
+#as: --x32
|
||||
+#ld: -r -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b.d b/ld/testsuite/ld-x86-64/pr23486b.d
|
||||
new file mode 100644
|
||||
index 0000000..dc2b7bf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -r -m elf_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b.s b/ld/testsuite/ld-x86-64/pr23486b.s
|
||||
new file mode 100644
|
||||
index 0000000..c5167ee
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_NEEDED */
|
||||
+ .long 0xc0000001 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x3
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-3.r b/ld/testsuite/ld-x86-64/property-3.r
|
||||
index 0ed91f5..d03203c 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-3.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-3.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: 586, SSE
|
||||
x86 ISA needed: i486, 586
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-4.r b/ld/testsuite/ld-x86-64/property-4.r
|
||||
index cb2bc15..da295eb 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-4.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-4.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-5.r b/ld/testsuite/ld-x86-64/property-5.r
|
||||
index 5529650..e414159 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-5.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-5.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x900000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
index 011426f..4cec728 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
index 1b4229a..a8df49a 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
index 290ed6a..c112626 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
index 1142e03..f10dffd 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
index 819542d..0147a3c 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
index 4c5d0e0..1f8c2dc 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
index ba181e0..7ca2539 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
index 5216f38..f66a40e 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
index 6edb9e8..ae21e55 100644
|
||||
--- a/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
@@ -403,6 +403,10 @@ run_dump_test "pr23372a"
|
||||
run_dump_test "pr23372a-x32"
|
||||
run_dump_test "pr23372b"
|
||||
run_dump_test "pr23372b-x32"
|
||||
+run_dump_test "pr23486a"
|
||||
+run_dump_test "pr23486a-x32"
|
||||
+run_dump_test "pr23486b"
|
||||
+run_dump_test "pr23486b-x32"
|
||||
|
||||
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
|
||||
return
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
From b1faf99f3e546df2cd302bb1ad36a2078224fe8b Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 30 Oct 2020 16:59:48 -0600
|
||||
Subject: [PATCH] Revert "PR25882, .gnu.attributes are not checked for shared
|
||||
libraries"
|
||||
|
||||
This reverts commit a8acd6eeb6dc2cc5460ece90f90ebe36b56b20ba.
|
||||
---
|
||||
bfd/ChangeLog | 6 ------
|
||||
bfd/elf32-tic6x.c | 3 ---
|
||||
ld/ChangeLog | 6 ------
|
||||
ld/ldlang.c | 9 ++++-----
|
||||
4 files changed, 4 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
|
||||
index 9fac12538a..b5461494e8 100644
|
||||
--- a/bfd/ChangeLog
|
||||
+++ b/bfd/ChangeLog
|
||||
@@ -1422,12 +1422,6 @@
|
||||
accessing root.u.def of symbols. Also check root.u.def.section
|
||||
is non-NULL. Reverse tests so as to make the logic positive.
|
||||
|
||||
-2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
-
|
||||
- PR 25882
|
||||
- * elf32-tic6x.c (elf32_tic6x_merge_attributes): Don't transfer
|
||||
- Tag_ABI_PIC or Tag_ABI_PID from dynamic objects to the output.
|
||||
-
|
||||
2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 25882
|
||||
diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c
|
||||
index b8b916bfd3..91bb6a10b1 100644
|
||||
--- a/bfd/elf32-tic6x.c
|
||||
+++ b/bfd/elf32-tic6x.c
|
||||
@@ -3748,9 +3748,6 @@ elf32_tic6x_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
|
||||
|
||||
case Tag_ABI_PIC:
|
||||
case Tag_ABI_PID:
|
||||
- /* Don't transfer these tags from dynamic objects. */
|
||||
- if ((ibfd->flags & DYNAMIC) != 0)
|
||||
- continue;
|
||||
if (out_attr[i].i > in_attr[i].i)
|
||||
out_attr[i].i = in_attr[i].i;
|
||||
break;
|
||||
diff --git a/ld/ChangeLog b/ld/ChangeLog
|
||||
index 4eec7d2977..b93452f70c 100644
|
||||
--- a/ld/ChangeLog
|
||||
+++ b/ld/ChangeLog
|
||||
@@ -1319,12 +1319,6 @@
|
||||
* testsuite/ld-aarch64/farcall-group.d: New test driver.
|
||||
* testsuite/ld-aarch64/aarch64-elf.exp: Run the new test.
|
||||
|
||||
-2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
-
|
||||
- PR 25882
|
||||
- * ldlang.c (lang_check): Call bfd_merge_private_bfd_data for
|
||||
- shared libraries.
|
||||
-
|
||||
2020-05-01 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* po/BLD-POTFILES.in: Regenerate.
|
||||
diff --git a/ld/ldlang.c b/ld/ldlang.c
|
||||
index 9977195074..173d8ec349 100644
|
||||
--- a/ld/ldlang.c
|
||||
+++ b/ld/ldlang.c
|
||||
@@ -6972,12 +6972,11 @@ lang_check (void)
|
||||
bfd_printable_name (input_bfd), input_bfd,
|
||||
bfd_printable_name (link_info.output_bfd));
|
||||
}
|
||||
-
|
||||
- /* If the input bfd has no contents, it shouldn't set the
|
||||
- private data of the output bfd. */
|
||||
- else if ((input_bfd->flags & DYNAMIC) != 0
|
||||
- || bfd_count_sections (input_bfd) != 0)
|
||||
+ else if (bfd_count_sections (input_bfd))
|
||||
{
|
||||
+ /* If the input bfd has no contents, it shouldn't set the
|
||||
+ private data of the output bfd. */
|
||||
+
|
||||
bfd_error_handler_type pfn = NULL;
|
||||
|
||||
/* If we aren't supposed to warn about mismatched input
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -2,19 +2,25 @@
|
||||
# Generator: pmbootstrap aportgen binutils-armv7
|
||||
# Based on: main/binutils
|
||||
|
||||
pkgname=binutils-armv7
|
||||
pkgver=2.35.1
|
||||
pkgrel=1
|
||||
|
||||
pkgname="binutils-armv7"
|
||||
pkgver=2.31.1
|
||||
pkgrel=2
|
||||
pkgdesc="Tools necessary to build programs for armv7 targets"
|
||||
url="https://www.gnu.org/software/binutils/"
|
||||
makedepends="gettext libtool autoconf automake bison texinfo"
|
||||
arch="x86_64"
|
||||
depends=""
|
||||
makedepends_build=""
|
||||
makedepends_host=""
|
||||
makedepends="gettext libtool autoconf automake bison"
|
||||
arch="armhf aarch64 x86_64 x86"
|
||||
license="GPL-2.0 GPL-3.0-or-later LGPL-2.0 BSD"
|
||||
source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz
|
||||
subpackages=""
|
||||
source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.bz2
|
||||
x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
|
||||
x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
|
||||
x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||
binutils-ld-fix-static-linking.patch
|
||||
gold-mips.patch
|
||||
ld-bfd-mips.patch
|
||||
0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
|
||||
"
|
||||
builddir="$srcdir/binutils-$pkgver"
|
||||
|
||||
@@ -25,16 +31,12 @@ if [ "$CHOST" != "$CTARGET" ]; then
|
||||
fi
|
||||
|
||||
# secfixes:
|
||||
# 2.32-r0:
|
||||
# - CVE-2018-19931
|
||||
# - CVE-2018-19932
|
||||
# - CVE-2018-20002
|
||||
# - CVE-2018-20712
|
||||
# 2.28-r1:
|
||||
# - CVE-2017-7614
|
||||
# - CVE-2017-7614
|
||||
|
||||
build() {
|
||||
_target="$(arch_to_hostspec armv7)"
|
||||
cd "$builddir"
|
||||
"$builddir"/configure \
|
||||
--build="$CBUILD" \
|
||||
--target=$_target \
|
||||
@@ -52,6 +54,7 @@ build() {
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$builddir"
|
||||
make install DESTDIR="$pkgdir"
|
||||
|
||||
# remove man, info folders
|
||||
@@ -60,8 +63,9 @@ package() {
|
||||
|
||||
|
||||
|
||||
sha512sums="94ff72708403413b70b247f3af4099ebaa882b6659249869f1ed9941a0f1912e313f08357d470f9fd2359e7f5e5b0eb86285e5eaf883fa8187789d6b1bd304eb binutils-2.35.1.tar.xz
|
||||
sha512sums="b42954e6f49a0adcd2676bdd77dfb59bfc25cec8184b007521d1e2b1d5d0593b58639e3d9448d5a40fe024c3cea386a37743627d6bb16d502f52a4a32b9573bd binutils-2.31.1.tar.bz2
|
||||
d95fd77e1c2c4670a2a11979d6811b358ba0f067b917b33d241eca20cfe66553f6a6fccc5ec26d8d29045e487cb74389fbf86426f80cf81df95608835a566cfc x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
|
||||
ce5d3c935057d624c1ce75722e7b5e4583812d46797edce8c381a94b2643f44f7bd0165e7e9b8e358955f4d979074ee487598efbf24389a4013681f99ff7c595 x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
|
||||
1878bed194529afb2430af21ba9712d6819c5fdfdc5c8db652175bf86d0a0c710ac2bd3ec728bf874887301bd187d91bf60a374c47850c7bd2eafbf6653d74d8 x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||
ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch
|
||||
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch
|
||||
314d2ef9071c89940aa6c8118e8a1e2f191a5d0a4bf596da1ad9cc84f884d8bc7dea8bd7b9fc3f8f1bddd3fd41c6eb017e1e804044b3bf084df1ed9e6e095e2d ld-bfd-mips.patch
|
||||
642c617db6c6e491f78f053d60f3aa369bad7bf8c1bc7ce267de6cf8fddf6c0d4cf63ce8c8f6e2f225dedbce7cb930d8e87e168fd8f72ca0837c77266ee2b5f8 0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch"
|
||||
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch"
|
||||
@@ -1,19 +0,0 @@
|
||||
--- ./ld/configure.tgt.orig
|
||||
+++ ./ld/configure.tgt
|
||||
@@ -541,12 +541,12 @@
|
||||
;;
|
||||
mips*-*-windiss) targ_emul=elf32mipswindiss
|
||||
;;
|
||||
-mips64*el-*-linux-*) targ_emul=elf32ltsmipn32
|
||||
- targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
|
||||
+mips64*el-*-linux-*) targ_emul=elf64ltsmip
|
||||
+ targ_extra_emuls="elf32ltsmipn32 elf32btsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
-mips64*-*-linux-*) targ_emul=elf32btsmipn32
|
||||
- targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
|
||||
+mips64*-*-linux-*) targ_emul=elf64btsmip
|
||||
+ targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
|
||||
targ_extra_libpath=$targ_extra_emuls
|
||||
;;
|
||||
mips*el-*-linux-*) targ_emul=elf32ltsmip
|
||||
@@ -0,0 +1,567 @@
|
||||
From 6737a6b34f4823deb7142f27b4074831a37ac1e1 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Fri, 20 Jul 2018 09:18:47 -0700
|
||||
Subject: [PATCH] x86: Add a GNU_PROPERTY_X86_ISA_1_USED note if needed
|
||||
|
||||
When -z separate-code, which is enabled by default for Linux/x86, is
|
||||
used to create executable, ld won't place any data in the code-only
|
||||
PT_LOAD segment. If there are no data sections placed before the
|
||||
code-only PT_LOAD segment, the program headers won't be mapped into
|
||||
any PT_LOAD segment. When the executable tries to access it (based
|
||||
on the program header address passed in AT_PHDR), it will lead to
|
||||
segfault. This patch inserts a GNU_PROPERTY_X86_ISA_1_USED note if
|
||||
there may be no data sections before the text section so that the
|
||||
first PT_LOAD segment won't be code-only and will contain the program
|
||||
header.
|
||||
|
||||
Testcases are adjusted to either pass "-z noseparate-code" to ld or
|
||||
discard the .note.gnu.property section. A Linux/x86 run-time test is
|
||||
added.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23428
|
||||
* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): If the
|
||||
separate code program header is needed, make sure that the first
|
||||
read-only PT_LOAD segment has no code by adding a
|
||||
GNU_PROPERTY_X86_ISA_1_USED note.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23428
|
||||
* testsuite/ld-elf/linux-x86.S: New file.
|
||||
* testsuite/ld-elf/linux-x86.exp: Likewise.
|
||||
* testsuite/ld-elf/pr23428.c: Likewise.
|
||||
* testsuite/ld-elf/sec64k.exp: Pass "-z noseparate-code" to ld
|
||||
for Linux/x86 targets.
|
||||
* testsuite/ld-i386/abs-iamcu.d: Likewise.
|
||||
* testsuite/ld-i386/abs.d: Likewise.
|
||||
* testsuite/ld-i386/pr12718.d: Likewise.
|
||||
* testsuite/ld-i386/pr12921.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs-k1om.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs-l1om.d: Likewise.
|
||||
* testsuite/ld-x86-64/abs.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr12718.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr12921.d: Likewise.
|
||||
* testsuite/ld-linkonce/zeroeh.ld: Discard .note.gnu.property
|
||||
section.
|
||||
* testsuite/ld-scripts/print-memory-usage.t: Likewise.
|
||||
* testsuite/ld-scripts/size-2.t: Likewise.
|
||||
* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use ld
|
||||
to create executable if language is "asm".
|
||||
|
||||
(cherry picked from commit 241e64e3b42cd9eba514b8e0ad2ef39a337f10a5)
|
||||
---
|
||||
bfd/ChangeLog | 8 ++++
|
||||
bfd/elfxx-x86.c | 60 +++++++++++++++++++-------
|
||||
ld/ChangeLog | 24 +++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.S | 63 ++++++++++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.exp | 46 ++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/pr23428.c | 43 +++++++++++++++++++
|
||||
ld/testsuite/ld-elf/sec64k.exp | 2 +
|
||||
ld/testsuite/ld-i386/abs-iamcu.d | 2 +-
|
||||
ld/testsuite/ld-i386/abs.d | 2 +-
|
||||
ld/testsuite/ld-i386/pr12718.d | 2 +-
|
||||
ld/testsuite/ld-i386/pr12921.d | 2 +-
|
||||
ld/testsuite/ld-linkonce/zeroeh.ld | 1 +
|
||||
ld/testsuite/ld-scripts/print-memory-usage.t | 2 +
|
||||
ld/testsuite/ld-scripts/size-2.t | 1 +
|
||||
ld/testsuite/ld-x86-64/abs-k1om.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/abs-l1om.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/abs.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/pr12718.d | 2 +-
|
||||
ld/testsuite/ld-x86-64/pr12921.d | 2 +-
|
||||
ld/testsuite/lib/ld-lib.exp | 5 ++-
|
||||
20 files changed, 248 insertions(+), 25 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-elf/linux-x86.S
|
||||
create mode 100644 ld/testsuite/ld-elf/linux-x86.exp
|
||||
create mode 100644 ld/testsuite/ld-elf/pr23428.c
|
||||
|
||||
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
|
||||
index 1c1174a..d3831b7 100644
|
||||
--- a/bfd/ChangeLog
|
||||
+++ b/bfd/ChangeLog
|
||||
@@ -1,3 +1,11 @@
|
||||
+2018-07-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
+
|
||||
+ PR ld/23428
|
||||
+ * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): If the
|
||||
+ separate code program header is needed, make sure that the first
|
||||
+ read-only PT_LOAD segment has no code by adding a
|
||||
+ GNU_PROPERTY_X86_ISA_1_USED note.
|
||||
+
|
||||
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* development.sh: Set to true.
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index a2497aa..2e4ff88 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2524,6 +2524,7 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
const struct elf_backend_data *bed;
|
||||
unsigned int class_align = ABI_64_P (info->output_bfd) ? 3 : 2;
|
||||
unsigned int got_align;
|
||||
+ bfd_boolean has_text = FALSE;
|
||||
|
||||
features = 0;
|
||||
if (info->ibt)
|
||||
@@ -2538,24 +2539,59 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
if (bfd_get_flavour (pbfd) == bfd_target_elf_flavour
|
||||
&& bfd_count_sections (pbfd) != 0)
|
||||
{
|
||||
+ if (!has_text)
|
||||
+ {
|
||||
+ /* Check if there is no non-empty text section. */
|
||||
+ sec = bfd_get_section_by_name (pbfd, ".text");
|
||||
+ if (sec != NULL && sec->size != 0)
|
||||
+ has_text = TRUE;
|
||||
+ }
|
||||
+
|
||||
ebfd = pbfd;
|
||||
|
||||
if (elf_properties (pbfd) != NULL)
|
||||
break;
|
||||
}
|
||||
|
||||
- if (ebfd != NULL && features)
|
||||
+ bed = get_elf_backend_data (info->output_bfd);
|
||||
+
|
||||
+ htab = elf_x86_hash_table (info, bed->target_id);
|
||||
+ if (htab == NULL)
|
||||
+ return pbfd;
|
||||
+
|
||||
+ if (ebfd != NULL)
|
||||
{
|
||||
- /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
- GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
- prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_FEATURE_1_AND,
|
||||
- 4);
|
||||
- prop->u.number |= features;
|
||||
- prop->pr_kind = property_number;
|
||||
+ prop = NULL;
|
||||
+ if (features)
|
||||
+ {
|
||||
+ /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
|
||||
+ GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_FEATURE_1_AND,
|
||||
+ 4);
|
||||
+ prop->u.number |= features;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
+ else if (has_text
|
||||
+ && elf_properties (ebfd) == NULL
|
||||
+ && elf_tdata (info->output_bfd)->o->build_id.sec == NULL
|
||||
+ && !htab->elf.dynamic_sections_created
|
||||
+ && !info->traditional_format
|
||||
+ && (info->output_bfd->flags & D_PAGED) != 0
|
||||
+ && info->separate_code)
|
||||
+ {
|
||||
+ /* If the separate code program header is needed, make sure
|
||||
+ that the first read-only PT_LOAD segment has no code by
|
||||
+ adding a GNU_PROPERTY_X86_ISA_1_USED note. */
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_ISA_1_USED,
|
||||
+ 4);
|
||||
+ prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
|
||||
/* Create the GNU property note section if needed. */
|
||||
- if (pbfd == NULL)
|
||||
+ if (prop != NULL && pbfd == NULL)
|
||||
{
|
||||
sec = bfd_make_section_with_flags (ebfd,
|
||||
NOTE_GNU_PROPERTY_SECTION_NAME,
|
||||
@@ -2581,12 +2617,6 @@ error_alignment:
|
||||
|
||||
pbfd = _bfd_elf_link_setup_gnu_properties (info);
|
||||
|
||||
- bed = get_elf_backend_data (info->output_bfd);
|
||||
-
|
||||
- htab = elf_x86_hash_table (info, bed->target_id);
|
||||
- if (htab == NULL)
|
||||
- return pbfd;
|
||||
-
|
||||
htab->r_info = init_table->r_info;
|
||||
htab->r_sym = init_table->r_sym;
|
||||
|
||||
diff --git a/ld/ChangeLog b/ld/ChangeLog
|
||||
index c07e442..cfadbd4 100644
|
||||
--- a/ld/ChangeLog
|
||||
+++ b/ld/ChangeLog
|
||||
@@ -1,3 +1,27 @@
|
||||
+2018-07-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
+
|
||||
+ PR ld/23428
|
||||
+ * testsuite/ld-elf/linux-x86.S: New file.
|
||||
+ * testsuite/ld-elf/linux-x86.exp: Likewise.
|
||||
+ * testsuite/ld-elf/pr23428.c: Likewise.
|
||||
+ * testsuite/ld-elf/sec64k.exp: Pass "-z noseparate-code" to ld
|
||||
+ for Linux/x86 targets.
|
||||
+ * testsuite/ld-i386/abs-iamcu.d: Likewise.
|
||||
+ * testsuite/ld-i386/abs.d: Likewise.
|
||||
+ * testsuite/ld-i386/pr12718.d: Likewise.
|
||||
+ * testsuite/ld-i386/pr12921.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs-k1om.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs-l1om.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/abs.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/pr12718.d: Likewise.
|
||||
+ * testsuite/ld-x86-64/pr12921.d: Likewise.
|
||||
+ * testsuite/ld-linkonce/zeroeh.ld: Discard .note.gnu.property
|
||||
+ section.
|
||||
+ * testsuite/ld-scripts/print-memory-usage.t: Likewise.
|
||||
+ * testsuite/ld-scripts/size-2.t: Likewise.
|
||||
+ * testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use ld to
|
||||
+ create executable if language is "asm".
|
||||
+
|
||||
2018-07-18 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
2.31.1 Release point.
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
|
||||
new file mode 100644
|
||||
index 0000000..bdf40c6
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.S
|
||||
@@ -0,0 +1,63 @@
|
||||
+ .text
|
||||
+ .globl _start
|
||||
+ .type _start,@function
|
||||
+ .p2align 4
|
||||
+_start:
|
||||
+ xorl %ebp, %ebp
|
||||
+#ifdef __LP64__
|
||||
+ popq %rdi
|
||||
+ movq %rsp, %rsi
|
||||
+ andq $~15, %rsp
|
||||
+#elif defined __x86_64__
|
||||
+ mov (%rsp),%edi
|
||||
+ addl $4,%esp
|
||||
+ movl %esp, %esi
|
||||
+ andl $~15, %esp
|
||||
+#else
|
||||
+ popl %esi
|
||||
+ movl %esp, %ecx
|
||||
+ andl $~15, %esp
|
||||
+
|
||||
+ subl $8,%esp
|
||||
+ pushl %ecx
|
||||
+ pushl %esi
|
||||
+#endif
|
||||
+
|
||||
+ call main
|
||||
+
|
||||
+ hlt
|
||||
+
|
||||
+ .type syscall, @function
|
||||
+ .globl syscall
|
||||
+ .p2align 4
|
||||
+syscall:
|
||||
+#ifdef __x86_64__
|
||||
+ movq %rdi, %rax /* Syscall number -> rax. */
|
||||
+ movq %rsi, %rdi /* shift arg1 - arg5. */
|
||||
+ movq %rdx, %rsi
|
||||
+ movq %rcx, %rdx
|
||||
+ movq %r8, %r10
|
||||
+ movq %r9, %r8
|
||||
+ movq 8(%rsp),%r9 /* arg6 is on the stack. */
|
||||
+ syscall /* Do the system call. */
|
||||
+#else
|
||||
+ push %ebp
|
||||
+ push %edi
|
||||
+ push %esi
|
||||
+ push %ebx
|
||||
+ mov 0x2c(%esp),%ebp
|
||||
+ mov 0x28(%esp),%edi
|
||||
+ mov 0x24(%esp),%esi
|
||||
+ mov 0x20(%esp),%edx
|
||||
+ mov 0x1c(%esp),%ecx
|
||||
+ mov 0x18(%esp),%ebx
|
||||
+ mov 0x14(%esp),%eax
|
||||
+ int $0x80
|
||||
+ pop %ebx
|
||||
+ pop %esi
|
||||
+ pop %edi
|
||||
+ pop %ebp
|
||||
+#endif
|
||||
+ ret /* Return to caller. */
|
||||
+ .size syscall, .-syscall
|
||||
+ .section .note.GNU-stack,"",@progbits
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
new file mode 100644
|
||||
index 0000000..36217c6
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
@@ -0,0 +1,46 @@
|
||||
+# Expect script for simple native Linux/x86 tests.
|
||||
+# Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
+#
|
||||
+# This file is part of the GNU Binutils.
|
||||
+#
|
||||
+# 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 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+#
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+#
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program; if not, write to the Free Software
|
||||
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
+# MA 02110-1301, USA.
|
||||
+#
|
||||
+
|
||||
+# Test very simple native Linux/x86 programs with linux-x86.S.
|
||||
+if { ![isnative] || [which $CC] == 0 \
|
||||
+ || (![istarget "i?86-*-linux*"] \
|
||||
+ && ![istarget "x86_64-*-linux*"] \
|
||||
+ && ![istarget "amd64-*-linux*"]) } {
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
+# Add $PLT_CFLAGS if PLT is expected.
|
||||
+global PLT_CFLAGS
|
||||
+# Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required.
|
||||
+global NOPIE_CFLAGS NOPIE_LDFLAGS
|
||||
+
|
||||
+run_ld_link_exec_tests [list \
|
||||
+ [list \
|
||||
+ "Run PR ld/23428 test" \
|
||||
+ "--no-dynamic-linker -z separate-code" \
|
||||
+ "" \
|
||||
+ { linux-x86.S pr23428.c } \
|
||||
+ "pr23428" \
|
||||
+ "pass.out" \
|
||||
+ "$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
|
||||
+ "asm" \
|
||||
+ ] \
|
||||
+]
|
||||
diff --git a/ld/testsuite/ld-elf/pr23428.c b/ld/testsuite/ld-elf/pr23428.c
|
||||
new file mode 100644
|
||||
index 0000000..3631ed7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/pr23428.c
|
||||
@@ -0,0 +1,43 @@
|
||||
+#include <unistd.h>
|
||||
+#include <link.h>
|
||||
+#include <syscall.h>
|
||||
+
|
||||
+#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
|
||||
+
|
||||
+int
|
||||
+main (int argc, char **argv)
|
||||
+{
|
||||
+ char **ev = &argv[argc + 1];
|
||||
+ char **evp = ev;
|
||||
+ ElfW(auxv_t) *av;
|
||||
+ const ElfW(Phdr) *phdr = NULL;
|
||||
+ size_t phnum = 0;
|
||||
+ size_t loadnum = 0;
|
||||
+ int fd = STDOUT_FILENO;
|
||||
+ size_t i;
|
||||
+
|
||||
+ while (*evp++ != NULL)
|
||||
+ ;
|
||||
+
|
||||
+ av = (ElfW(auxv_t) *) evp;
|
||||
+
|
||||
+ for (; av->a_type != AT_NULL; ++av)
|
||||
+ switch (av->a_type)
|
||||
+ {
|
||||
+ case AT_PHDR:
|
||||
+ phdr = (const void *) av->a_un.a_val;
|
||||
+ break;
|
||||
+ case AT_PHNUM:
|
||||
+ phnum = av->a_un.a_val;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < phnum; i++, phdr++)
|
||||
+ if (phdr->p_type == PT_LOAD)
|
||||
+ loadnum++;
|
||||
+
|
||||
+ syscall (SYS_write, fd, STRING_COMMA_LEN ("PASS\n"));
|
||||
+
|
||||
+ syscall (SYS_exit, !loadnum);
|
||||
+ return 0;
|
||||
+}
|
||||
diff --git a/ld/testsuite/ld-elf/sec64k.exp b/ld/testsuite/ld-elf/sec64k.exp
|
||||
index b58139e..3909c0e 100644
|
||||
--- a/ld/testsuite/ld-elf/sec64k.exp
|
||||
+++ b/ld/testsuite/ld-elf/sec64k.exp
|
||||
@@ -177,6 +177,8 @@ if { ![istarget "d10v-*-*"]
|
||||
foreach sfile $sfiles { puts $ofd "#source: $sfile" }
|
||||
if { [istarget spu*-*-*] } {
|
||||
puts $ofd "#ld: --local-store 0:0"
|
||||
+ } elseif { [istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
|
||||
+ puts $ofd "#ld: -z noseparate-code"
|
||||
} else {
|
||||
puts $ofd "#ld:"
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-i386/abs-iamcu.d b/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
index ac9beff..aba7d6b 100644
|
||||
--- a/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
+++ b/ld/testsuite/ld-i386/abs-iamcu.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: abs.s
|
||||
#source: zero.s
|
||||
#as: --32 -march=iamcu
|
||||
-#ld: -m elf_iamcu
|
||||
+#ld: -m elf_iamcu -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-i386/abs.d b/ld/testsuite/ld-i386/abs.d
|
||||
index e660aca..191ee44 100644
|
||||
--- a/ld/testsuite/ld-i386/abs.d
|
||||
+++ b/ld/testsuite/ld-i386/abs.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#as: --32
|
||||
#source: abs.s
|
||||
#source: zero.s
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#objdump: -rs
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-i386/pr12718.d b/ld/testsuite/ld-i386/pr12718.d
|
||||
index ec51540..7eba52d 100644
|
||||
--- a/ld/testsuite/ld-i386/pr12718.d
|
||||
+++ b/ld/testsuite/ld-i386/pr12718.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12718
|
||||
#as: --32
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#readelf: -S
|
||||
|
||||
There are 5 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-i386/pr12921.d b/ld/testsuite/ld-i386/pr12921.d
|
||||
index e49079b..ea2da3e 100644
|
||||
--- a/ld/testsuite/ld-i386/pr12921.d
|
||||
+++ b/ld/testsuite/ld-i386/pr12921.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12921
|
||||
#as: --32
|
||||
-#ld: -melf_i386
|
||||
+#ld: -melf_i386 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 7 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-linkonce/zeroeh.ld b/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
index b22eaa1..f89855a 100644
|
||||
--- a/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
+++ b/ld/testsuite/ld-linkonce/zeroeh.ld
|
||||
@@ -2,4 +2,5 @@ SECTIONS {
|
||||
.text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
|
||||
.gcc_except_table 0x2000 : { *(.gcc_except_table) }
|
||||
.eh_frame 0x4000 : { *(.eh_frame) }
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-scripts/print-memory-usage.t b/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
index 5ff057a..6eda1d2 100644
|
||||
--- a/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
+++ b/ld/testsuite/ld-scripts/print-memory-usage.t
|
||||
@@ -11,4 +11,6 @@ SECTIONS
|
||||
*(.data)
|
||||
*(.rw)
|
||||
}
|
||||
+
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-scripts/size-2.t b/ld/testsuite/ld-scripts/size-2.t
|
||||
index 7238639..c3c4edd 100644
|
||||
--- a/ld/testsuite/ld-scripts/size-2.t
|
||||
+++ b/ld/testsuite/ld-scripts/size-2.t
|
||||
@@ -18,4 +18,5 @@ SECTIONS
|
||||
LONG (SIZEOF (.tdata))
|
||||
LONG (SIZEOF (.tbss))
|
||||
} :image
|
||||
+ /DISCARD/ : { *(.note.gnu.property) }
|
||||
}
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs-k1om.d b/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
index 2c26639..6b0fde0 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs-k1om.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
#as: --64 -march=k1om
|
||||
-#ld: -m elf_k1om
|
||||
+#ld: -m elf_k1om -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs-l1om.d b/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
index 1fb96d4..f87869f 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs-l1om.d
|
||||
@@ -2,7 +2,7 @@
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
#as: --64 -march=l1om
|
||||
-#ld: -m elf_l1om
|
||||
+#ld: -m elf_l1om -z noseparate-code
|
||||
#objdump: -rs -j .text
|
||||
#target: x86_64-*-linux*
|
||||
|
||||
diff --git a/ld/testsuite/ld-x86-64/abs.d b/ld/testsuite/ld-x86-64/abs.d
|
||||
index b24b018..d99ab46 100644
|
||||
--- a/ld/testsuite/ld-x86-64/abs.d
|
||||
+++ b/ld/testsuite/ld-x86-64/abs.d
|
||||
@@ -1,7 +1,7 @@
|
||||
#name: Absolute non-overflowing relocs
|
||||
#source: ../ld-i386/abs.s
|
||||
#source: ../ld-i386/zero.s
|
||||
-#ld:
|
||||
+#ld: -z noseparate-code
|
||||
#objdump: -rs
|
||||
|
||||
.*: file format .*
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr12718.d b/ld/testsuite/ld-x86-64/pr12718.d
|
||||
index 07d1732..2c503ff 100644
|
||||
--- a/ld/testsuite/ld-x86-64/pr12718.d
|
||||
+++ b/ld/testsuite/ld-x86-64/pr12718.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12718
|
||||
#as: --64
|
||||
-#ld: -melf_x86_64
|
||||
+#ld: -melf_x86_64 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 5 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr12921.d b/ld/testsuite/ld-x86-64/pr12921.d
|
||||
index 6fe6abe..1162d55 100644
|
||||
--- a/ld/testsuite/ld-x86-64/pr12921.d
|
||||
+++ b/ld/testsuite/ld-x86-64/pr12921.d
|
||||
@@ -1,6 +1,6 @@
|
||||
#name: PR ld/12921
|
||||
#as: --64
|
||||
-#ld: -melf_x86_64
|
||||
+#ld: -melf_x86_64 -z noseparate-code
|
||||
#readelf: -S --wide
|
||||
|
||||
There are 7 section headers, starting at offset 0x[0-9a-f]+:
|
||||
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
|
||||
index cfbefe9..1095091 100644
|
||||
--- a/ld/testsuite/lib/ld-lib.exp
|
||||
+++ b/ld/testsuite/lib/ld-lib.exp
|
||||
@@ -1482,7 +1482,10 @@ proc run_ld_link_exec_tests { ldtests args } {
|
||||
continue
|
||||
}
|
||||
|
||||
- if { [ string match "c++" $lang ] } {
|
||||
+ if { [ string match "asm" $lang ] } {
|
||||
+ set link_proc ld_link
|
||||
+ set link_cmd $ld
|
||||
+ } elseif { [ string match "c++" $lang ] } {
|
||||
set link_proc ld_link
|
||||
set link_cmd $CXX
|
||||
} else {
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,139 @@
|
||||
From 28a27bdbb9500797e6767f80c8128b09112aeed5 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Sat, 11 Aug 2018 06:41:33 -0700
|
||||
Subject: [PATCH] x86: Properly add X86_ISA_1_NEEDED property
|
||||
|
||||
Existing properties may be removed during property merging. We avoid
|
||||
adding X86_ISA_1_NEEDED property only if existing properties won't be
|
||||
removed.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23428
|
||||
* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Don't
|
||||
add X86_ISA_1_NEEDED property only if existing properties won't
|
||||
be removed.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23428
|
||||
* testsuite/ld-elf/dummy.s: New file.
|
||||
* testsuite/ld-elf/linux-x86.S: Add X86_FEATURE_1_AND property.
|
||||
* testsuite/ld-elf/linux-x86.exp: Add dummy.s to pr23428.
|
||||
|
||||
(cherry picked from commit ab9e342807d132182892de1be1a92d6e91a5c1da)
|
||||
---
|
||||
bfd/ChangeLog | 7 +++++++
|
||||
bfd/elfxx-x86.c | 28 ++++++++++++++++++++++------
|
||||
ld/ChangeLog | 7 +++++++
|
||||
ld/testsuite/ld-elf/dummy.s | 1 +
|
||||
ld/testsuite/ld-elf/linux-x86.S | 28 ++++++++++++++++++++++++++++
|
||||
ld/testsuite/ld-elf/linux-x86.exp | 2 +-
|
||||
6 files changed, 66 insertions(+), 7 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-elf/dummy.s
|
||||
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index 7ccfd25..2d8f7b6 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2588,7 +2588,6 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
prop->pr_kind = property_number;
|
||||
}
|
||||
else if (has_text
|
||||
- && elf_properties (ebfd) == NULL
|
||||
&& elf_tdata (info->output_bfd)->o->build_id.sec == NULL
|
||||
&& !htab->elf.dynamic_sections_created
|
||||
&& !info->traditional_format
|
||||
@@ -2598,11 +2597,28 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
/* If the separate code program header is needed, make sure
|
||||
that the first read-only PT_LOAD segment has no code by
|
||||
adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */
|
||||
- prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
- 4);
|
||||
- prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
- prop->pr_kind = property_number;
|
||||
+ elf_property_list *list;
|
||||
+ bfd_boolean need_property = TRUE;
|
||||
+
|
||||
+ for (list = elf_properties (ebfd); list; list = list->next)
|
||||
+ switch (list->property.pr_type)
|
||||
+ {
|
||||
+ case GNU_PROPERTY_STACK_SIZE:
|
||||
+ case GNU_PROPERTY_NO_COPY_ON_PROTECTED:
|
||||
+ case GNU_PROPERTY_X86_ISA_1_NEEDED:
|
||||
+ /* These properties won't be removed during merging. */
|
||||
+ need_property = FALSE;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (need_property)
|
||||
+ {
|
||||
+ prop = _bfd_elf_get_property (ebfd,
|
||||
+ GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
+ 4);
|
||||
+ prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
+ prop->pr_kind = property_number;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Create the GNU property note section if needed. */
|
||||
diff --git a/ld/testsuite/ld-elf/dummy.s b/ld/testsuite/ld-elf/dummy.s
|
||||
new file mode 100644
|
||||
index 0000000..403f980
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-elf/dummy.s
|
||||
@@ -0,0 +1 @@
|
||||
+# Dummy
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
|
||||
index bdf40c6..d94abc1 100644
|
||||
--- a/ld/testsuite/ld-elf/linux-x86.S
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.S
|
||||
@@ -61,3 +61,31 @@ syscall:
|
||||
ret /* Return to caller. */
|
||||
.size syscall, .-syscall
|
||||
.section .note.GNU-stack,"",@progbits
|
||||
+
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+ .long 1f - 0f /* name length */
|
||||
+ .long 5f - 2f /* data length */
|
||||
+ .long 5 /* note type */
|
||||
+0: .asciz "GNU" /* vendor name */
|
||||
+1:
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+2: .long 0xc0000002 /* pr_type. */
|
||||
+ .long 4f - 3f /* pr_datasz. */
|
||||
+3:
|
||||
+ .long 0x2
|
||||
+4:
|
||||
+#ifdef __LP64__
|
||||
+ .p2align 3
|
||||
+#else
|
||||
+ .p2align 2
|
||||
+#endif
|
||||
+5:
|
||||
diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
index 36217c6..f6f5a80 100644
|
||||
--- a/ld/testsuite/ld-elf/linux-x86.exp
|
||||
+++ b/ld/testsuite/ld-elf/linux-x86.exp
|
||||
@@ -37,7 +37,7 @@ run_ld_link_exec_tests [list \
|
||||
"Run PR ld/23428 test" \
|
||||
"--no-dynamic-linker -z separate-code" \
|
||||
"" \
|
||||
- { linux-x86.S pr23428.c } \
|
||||
+ { linux-x86.S pr23428.c dummy.s } \
|
||||
"pr23428" \
|
||||
"pass.out" \
|
||||
"$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -0,0 +1,587 @@
|
||||
From d55c3e36094f06bb1fb02f5eac19fdccf1d91f7e Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Wed, 8 Aug 2018 06:09:15 -0700
|
||||
Subject: [PATCH] x86: Properly merge GNU_PROPERTY_X86_ISA_1_USED
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=utf8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Without the GNU_PROPERTY_X86_ISA_1_USED property, all ISAs may be used.
|
||||
If a bit in the GNU_PROPERTY_X86_ISA_1_USED property is unset, the
|
||||
corresponding x86 instruction set isnât used. When merging properties
|
||||
from 2 input files and one input file doesn't have the
|
||||
GNU_PROPERTY_X86_ISA_1_USED property, the output file shouldn't have
|
||||
it neither. This patch removes the GNU_PROPERTY_X86_ISA_1_USED
|
||||
property if an input file doesn't have it.
|
||||
|
||||
This patch replaces the GNU_PROPERTY_X86_ISA_1_USED property with the
|
||||
GNU_PROPERTY_X86_ISA_1_NEEDED property which is the minimum ISA
|
||||
requirement.
|
||||
|
||||
bfd/
|
||||
|
||||
PR ld/23486
|
||||
* elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Remove
|
||||
GNU_PROPERTY_X86_ISA_1_USED if an input file doesn't have it.
|
||||
(_bfd_x86_elf_link_setup_gnu_properties): Adding the
|
||||
GNU_PROPERTY_X86_ISA_1_NEEDED, instead of
|
||||
GNU_PROPERTY_X86_ISA_1_USED, property.
|
||||
|
||||
ld/
|
||||
|
||||
PR ld/23486
|
||||
* testsuite/ld-i386/i386.exp: Run PR ld/23486 tests.
|
||||
* testsuite/ld-x86-64/x86-64.exp: Likewise.
|
||||
* testsuite/ld-i386/pr23486a.d: New file.
|
||||
* testsuite/ld-i386/pr23486b.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486a.s: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b.d: Likewise.
|
||||
* testsuite/ld-x86-64/pr23486b.s: Likewise.
|
||||
* testsuite/ld-i386/property-3.r: Remove "x86 ISA used".
|
||||
* testsuite/ld-i386/property-4.r: Likewise.
|
||||
* testsuite/ld-i386/property-5.r: Likewise.
|
||||
* testsuite/ld-i386/property-x86-ibt3a.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-ibt3b.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-shstk3a.d: Likewise.
|
||||
* testsuite/ld-i386/property-x86-shstk3b.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-3.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-4.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-5.r: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise.
|
||||
* testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise.
|
||||
|
||||
(cherry picked from commit f7309df20c4e787041cedc4a6aced89c15259e54)
|
||||
---
|
||||
bfd/ChangeLog | 9 +++++++
|
||||
bfd/elfxx-x86.c | 25 ++++++++++++++----
|
||||
ld/ChangeLog | 32 +++++++++++++++++++++++
|
||||
ld/testsuite/ld-i386/i386.exp | 2 ++
|
||||
ld/testsuite/ld-i386/pr23486a.d | 10 +++++++
|
||||
ld/testsuite/ld-i386/pr23486b.d | 10 +++++++
|
||||
ld/testsuite/ld-i386/property-3.r | 1 -
|
||||
ld/testsuite/ld-i386/property-4.r | 1 -
|
||||
ld/testsuite/ld-i386/property-5.r | 1 -
|
||||
ld/testsuite/ld-i386/property-x86-ibt3a.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-ibt3b.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-shstk3a.d | 5 ++--
|
||||
ld/testsuite/ld-i386/property-x86-shstk3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/pr23486a-x32.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486a.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486a.s | 30 +++++++++++++++++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b-x32.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b.d | 10 +++++++
|
||||
ld/testsuite/ld-x86-64/pr23486b.s | 30 +++++++++++++++++++++
|
||||
ld/testsuite/ld-x86-64/property-3.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-4.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-5.r | 1 -
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3a.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-ibt3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3a.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/property-x86-shstk3b.d | 5 ++--
|
||||
ld/testsuite/ld-x86-64/x86-64.exp | 4 +++
|
||||
31 files changed, 211 insertions(+), 47 deletions(-)
|
||||
create mode 100644 ld/testsuite/ld-i386/pr23486a.d
|
||||
create mode 100644 ld/testsuite/ld-i386/pr23486b.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486a.s
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b.d
|
||||
create mode 100644 ld/testsuite/ld-x86-64/pr23486b.s
|
||||
|
||||
diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c
|
||||
index 2e4ff88..7ccfd25 100644
|
||||
--- a/bfd/elfxx-x86.c
|
||||
+++ b/bfd/elfxx-x86.c
|
||||
@@ -2407,12 +2407,27 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
|
||||
switch (pr_type)
|
||||
{
|
||||
case GNU_PROPERTY_X86_ISA_1_USED:
|
||||
+ if (aprop == NULL || bprop == NULL)
|
||||
+ {
|
||||
+ /* Only one of APROP and BPROP can be NULL. */
|
||||
+ if (aprop != NULL)
|
||||
+ {
|
||||
+ /* Remove this property since the other input file doesn't
|
||||
+ have it. */
|
||||
+ aprop->pr_kind = property_remove;
|
||||
+ updated = TRUE;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ goto or_property;
|
||||
+
|
||||
case GNU_PROPERTY_X86_ISA_1_NEEDED:
|
||||
if (aprop != NULL && bprop != NULL)
|
||||
{
|
||||
+or_property:
|
||||
number = aprop->u.number;
|
||||
aprop->u.number = number | bprop->u.number;
|
||||
- /* Remove the property if ISA bits are empty. */
|
||||
+ /* Remove the property if all bits are empty. */
|
||||
if (aprop->u.number == 0)
|
||||
{
|
||||
aprop->pr_kind = property_remove;
|
||||
@@ -2428,14 +2443,14 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
|
||||
{
|
||||
if (aprop->u.number == 0)
|
||||
{
|
||||
- /* Remove APROP if ISA bits are empty. */
|
||||
+ /* Remove APROP if all bits are empty. */
|
||||
aprop->pr_kind = property_remove;
|
||||
updated = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
- /* Return TRUE if APROP is NULL and ISA bits of BPROP
|
||||
+ /* Return TRUE if APROP is NULL and all bits of BPROP
|
||||
aren't empty to indicate that BPROP should be added
|
||||
to ABFD. */
|
||||
updated = bprop->u.number != 0;
|
||||
@@ -2582,9 +2597,9 @@ _bfd_x86_elf_link_setup_gnu_properties
|
||||
{
|
||||
/* If the separate code program header is needed, make sure
|
||||
that the first read-only PT_LOAD segment has no code by
|
||||
- adding a GNU_PROPERTY_X86_ISA_1_USED note. */
|
||||
+ adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */
|
||||
prop = _bfd_elf_get_property (ebfd,
|
||||
- GNU_PROPERTY_X86_ISA_1_USED,
|
||||
+ GNU_PROPERTY_X86_ISA_1_NEEDED,
|
||||
4);
|
||||
prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
|
||||
prop->pr_kind = property_number;
|
||||
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
|
||||
index 6d794fe..78dad02 100644
|
||||
--- a/ld/testsuite/ld-i386/i386.exp
|
||||
+++ b/ld/testsuite/ld-i386/i386.exp
|
||||
@@ -462,6 +462,8 @@ run_dump_test "pr23189"
|
||||
run_dump_test "pr23194"
|
||||
run_dump_test "pr23372a"
|
||||
run_dump_test "pr23372b"
|
||||
+run_dump_test "pr23486a"
|
||||
+run_dump_test "pr23486b"
|
||||
|
||||
if { !([istarget "i?86-*-linux*"]
|
||||
|| [istarget "i?86-*-gnu*"]
|
||||
diff --git a/ld/testsuite/ld-i386/pr23486a.d b/ld/testsuite/ld-i386/pr23486a.d
|
||||
new file mode 100644
|
||||
index 0000000..41a6dcf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23486a.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: ../ld-x86-64/pr23486a.s
|
||||
+#source: ../ld-x86-64/pr23486b.s
|
||||
+#as: --32
|
||||
+#ld: -r -m elf_i386
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-i386/pr23486b.d b/ld/testsuite/ld-i386/pr23486b.d
|
||||
new file mode 100644
|
||||
index 0000000..08019b7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-i386/pr23486b.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: ../ld-x86-64/pr23486b.s
|
||||
+#source: ../ld-x86-64/pr23486a.s
|
||||
+#as: --32
|
||||
+#ld: -r -m elf_i386
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-i386/property-3.r b/ld/testsuite/ld-i386/property-3.r
|
||||
index 0ed91f5..d03203c 100644
|
||||
--- a/ld/testsuite/ld-i386/property-3.r
|
||||
+++ b/ld/testsuite/ld-i386/property-3.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: 586, SSE
|
||||
x86 ISA needed: i486, 586
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-4.r b/ld/testsuite/ld-i386/property-4.r
|
||||
index cb2bc15..da295eb 100644
|
||||
--- a/ld/testsuite/ld-i386/property-4.r
|
||||
+++ b/ld/testsuite/ld-i386/property-4.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-5.r b/ld/testsuite/ld-i386/property-5.r
|
||||
index 5529650..e414159 100644
|
||||
--- a/ld/testsuite/ld-i386/property-5.r
|
||||
+++ b/ld/testsuite/ld-i386/property-5.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x900000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-ibt3a.d b/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
index 4bb35b0..0aedea1 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-ibt3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-ibt3b.d b/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
index 418d58a..bd69ac6 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-ibt3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-shstk3a.d b/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
index e261038..76d2a39 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-shstk3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-i386/property-x86-shstk3b.d b/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
index 25f3d23..e770ecf 100644
|
||||
--- a/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
+++ b/ld/testsuite/ld-i386/property-x86-shstk3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: i486, 586, SSE2, SSE3
|
||||
- x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a-x32.d b/ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
new file mode 100644
|
||||
index 0000000..6d9fa68
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a-x32.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --x32
|
||||
+#ld: -r -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a.d b/ld/testsuite/ld-x86-64/pr23486a.d
|
||||
new file mode 100644
|
||||
index 0000000..dc2b7bf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -r -m elf_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486a.s b/ld/testsuite/ld-x86-64/pr23486a.s
|
||||
new file mode 100644
|
||||
index 0000000..a07d0c7
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486a.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_USED */
|
||||
+ .long 0xc0000000 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0xa
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b-x32.d b/ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
new file mode 100644
|
||||
index 0000000..0445e69
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b-x32.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486b.s
|
||||
+#source: pr23486a.s
|
||||
+#as: --x32
|
||||
+#ld: -r -m elf32_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b.d b/ld/testsuite/ld-x86-64/pr23486b.d
|
||||
new file mode 100644
|
||||
index 0000000..dc2b7bf
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b.d
|
||||
@@ -0,0 +1,10 @@
|
||||
+#source: pr23486a.s
|
||||
+#source: pr23486b.s
|
||||
+#as: --64 -defsym __64_bit__=1
|
||||
+#ld: -r -m elf_x86_64
|
||||
+#readelf: -n
|
||||
+
|
||||
+Displaying notes found in: .note.gnu.property
|
||||
+ Owner Data size Description
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586
|
||||
diff --git a/ld/testsuite/ld-x86-64/pr23486b.s b/ld/testsuite/ld-x86-64/pr23486b.s
|
||||
new file mode 100644
|
||||
index 0000000..c5167ee
|
||||
--- /dev/null
|
||||
+++ b/ld/testsuite/ld-x86-64/pr23486b.s
|
||||
@@ -0,0 +1,30 @@
|
||||
+ .section ".note.gnu.property", "a"
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ .long 1f - 0f /* name length. */
|
||||
+ .long 4f - 1f /* data length. */
|
||||
+ /* NT_GNU_PROPERTY_TYPE_0 */
|
||||
+ .long 5 /* note type. */
|
||||
+0:
|
||||
+ .asciz "GNU" /* vendor name. */
|
||||
+1:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+ /* GNU_PROPERTY_X86_ISA_1_NEEDED */
|
||||
+ .long 0xc0000001 /* pr_type. */
|
||||
+ .long 3f - 2f /* pr_datasz. */
|
||||
+2:
|
||||
+ .long 0x3
|
||||
+3:
|
||||
+.ifdef __64_bit__
|
||||
+ .p2align 3
|
||||
+.else
|
||||
+ .p2align 2
|
||||
+.endif
|
||||
+4:
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-3.r b/ld/testsuite/ld-x86-64/property-3.r
|
||||
index 0ed91f5..d03203c 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-3.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-3.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: 586, SSE
|
||||
x86 ISA needed: i486, 586
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-4.r b/ld/testsuite/ld-x86-64/property-4.r
|
||||
index cb2bc15..da295eb 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-4.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-4.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x800000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-5.r b/ld/testsuite/ld-x86-64/property-5.r
|
||||
index 5529650..e414159 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-5.r
|
||||
+++ b/ld/testsuite/ld-x86-64/property-5.r
|
||||
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: stack size: 0x900000
|
||||
- x86 ISA used: i486, 586, SSE
|
||||
x86 ISA needed: i486, 586, SSE
|
||||
#pass
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
index 011426f..4cec728 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
index 1b4229a..a8df49a 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
index 290ed6a..c112626 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
index 1142e03..f10dffd 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
index 819542d..0147a3c 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
index 4c5d0e0..1f8c2dc 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
index ba181e0..7ca2539 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
index 5216f38..f66a40e 100644
|
||||
--- a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
+++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d
|
||||
@@ -6,6 +6,5 @@
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
- GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
- Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
- x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
+ Properties: x86 ISA needed: i486, 586, SSE2, SSE3
|
||||
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
index 6edb9e8..ae21e55 100644
|
||||
--- a/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
|
||||
@@ -403,6 +403,10 @@ run_dump_test "pr23372a"
|
||||
run_dump_test "pr23372a-x32"
|
||||
run_dump_test "pr23372b"
|
||||
run_dump_test "pr23372b-x32"
|
||||
+run_dump_test "pr23486a"
|
||||
+run_dump_test "pr23486a-x32"
|
||||
+run_dump_test "pr23486b"
|
||||
+run_dump_test "pr23486b-x32"
|
||||
|
||||
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
|
||||
return
|
||||
--
|
||||
2.9.3
|
||||
|
||||
@@ -1,34 +1,29 @@
|
||||
# Automatically generated aport, do not edit!
|
||||
# Generator: pmbootstrap aportgen busybox-static-aarch64
|
||||
|
||||
# Stub for apkbuild-lint
|
||||
if [ -z "$(type -t arch_to_hostspec)" ]; then
|
||||
arch_to_hostspec() { :; }
|
||||
fi
|
||||
|
||||
pkgname=busybox-static-aarch64
|
||||
pkgver=1.32.0
|
||||
pkgrel=4
|
||||
pkgver=1.31.0
|
||||
pkgrel=0
|
||||
|
||||
_arch="aarch64"
|
||||
_mirror="http://dl-2.alpinelinux.org/alpine/"
|
||||
_mirror="http://dl-cdn.alpinelinux.org/alpine/"
|
||||
|
||||
url="http://busybox.net"
|
||||
license="GPL2"
|
||||
arch="x86_64"
|
||||
arch="all"
|
||||
options="!check !strip"
|
||||
pkgdesc="Statically linked Busybox for $_arch"
|
||||
_target="$(arch_to_hostspec $_arch)"
|
||||
|
||||
source="
|
||||
busybox-static-$pkgver-r$pkgrel-$_arch-edge.apk::$_mirror/edge/main/$_arch/busybox-static-$pkgver-r$pkgrel.apk
|
||||
busybox-static-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/busybox-static-$pkgver-r$pkgrel.apk
|
||||
"
|
||||
|
||||
package() {
|
||||
mkdir -p "$pkgdir/usr/$_target"
|
||||
cd "$pkgdir/usr/$_target"
|
||||
tar -xf $srcdir/busybox-static-$pkgver-r$pkgrel-$_arch-edge.apk
|
||||
rm .PKGINFO .SIGN.*
|
||||
mkdir -p "$pkgdir/usr/$_target"
|
||||
cd "$pkgdir/usr/$_target"
|
||||
tar -xf $srcdir/busybox-static-$pkgver-r$pkgrel-$_arch.apk
|
||||
rm .PKGINFO .SIGN.*
|
||||
}
|
||||
|
||||
sha512sums="c101e490becccf14381bece807738bf29827d53f7d803b198068f7ecf420d46b77701185da98faa3cc19ea2b6a2ac6b564665e0dedb5aa56cb59f1a4931f278b busybox-static-1.32.0-r4-aarch64-edge.apk"
|
||||
sha512sums="1b189b920f6a6163ef20128215c25f90f04169d0992ab25f6d1eaa26ae2bf435e0cf553db90bfcf681acbc31eb99d1c9df7ce61738e39355e4ff2c4e8f09e286 busybox-static-1.31.0-r0-aarch64.apk"
|
||||
@@ -1,34 +1,29 @@
|
||||
# Automatically generated aport, do not edit!
|
||||
# Generator: pmbootstrap aportgen busybox-static-armhf
|
||||
|
||||
# Stub for apkbuild-lint
|
||||
if [ -z "$(type -t arch_to_hostspec)" ]; then
|
||||
arch_to_hostspec() { :; }
|
||||
fi
|
||||
|
||||
pkgname=busybox-static-armhf
|
||||
pkgver=1.32.0
|
||||
pkgrel=4
|
||||
pkgver=1.31.0
|
||||
pkgrel=0
|
||||
|
||||
_arch="armhf"
|
||||
_mirror="http://dl-2.alpinelinux.org/alpine/"
|
||||
_mirror="http://dl-cdn.alpinelinux.org/alpine/"
|
||||
|
||||
url="http://busybox.net"
|
||||
license="GPL2"
|
||||
arch="x86_64"
|
||||
arch="all"
|
||||
options="!check !strip"
|
||||
pkgdesc="Statically linked Busybox for $_arch"
|
||||
_target="$(arch_to_hostspec $_arch)"
|
||||
|
||||
source="
|
||||
busybox-static-$pkgver-r$pkgrel-$_arch-edge.apk::$_mirror/edge/main/$_arch/busybox-static-$pkgver-r$pkgrel.apk
|
||||
busybox-static-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/busybox-static-$pkgver-r$pkgrel.apk
|
||||
"
|
||||
|
||||
package() {
|
||||
mkdir -p "$pkgdir/usr/$_target"
|
||||
cd "$pkgdir/usr/$_target"
|
||||
tar -xf $srcdir/busybox-static-$pkgver-r$pkgrel-$_arch-edge.apk
|
||||
rm .PKGINFO .SIGN.*
|
||||
mkdir -p "$pkgdir/usr/$_target"
|
||||
cd "$pkgdir/usr/$_target"
|
||||
tar -xf $srcdir/busybox-static-$pkgver-r$pkgrel-$_arch.apk
|
||||
rm .PKGINFO .SIGN.*
|
||||
}
|
||||
|
||||
sha512sums="52acbc4b39adf80b5c31cc221aee96666327803c1b5eb70377e245b3cdc4da05bd81d095b4a8e7d01a8c2e379198e5ae4df0c7d21dc7fa6a7843b3e64460b382 busybox-static-1.32.0-r4-armhf-edge.apk"
|
||||
sha512sums="05645d2ffc8e3af2c17ebd7881c777e392e1bbaeaef2da0bbbb73d0045a218b00da54df99ac64570c4a3f1c6e1a43dfe5657b8b3d2ed69f52683d12c88d8d932 busybox-static-1.31.0-r0-armhf.apk"
|
||||
@@ -1,34 +1,29 @@
|
||||
# Automatically generated aport, do not edit!
|
||||
# Generator: pmbootstrap aportgen busybox-static-armv7
|
||||
|
||||
# Stub for apkbuild-lint
|
||||
if [ -z "$(type -t arch_to_hostspec)" ]; then
|
||||
arch_to_hostspec() { :; }
|
||||
fi
|
||||
|
||||
pkgname=busybox-static-armv7
|
||||
pkgver=1.32.0
|
||||
pkgrel=4
|
||||
pkgver=1.31.0
|
||||
pkgrel=0
|
||||
|
||||
_arch="armv7"
|
||||
_mirror="http://dl-2.alpinelinux.org/alpine/"
|
||||
_mirror="http://dl-cdn.alpinelinux.org/alpine/"
|
||||
|
||||
url="http://busybox.net"
|
||||
license="GPL2"
|
||||
arch="x86_64"
|
||||
arch="all"
|
||||
options="!check !strip"
|
||||
pkgdesc="Statically linked Busybox for $_arch"
|
||||
_target="$(arch_to_hostspec $_arch)"
|
||||
|
||||
source="
|
||||
busybox-static-$pkgver-r$pkgrel-$_arch-edge.apk::$_mirror/edge/main/$_arch/busybox-static-$pkgver-r$pkgrel.apk
|
||||
busybox-static-$pkgver-r$pkgrel-$_arch.apk::$_mirror/edge/main/$_arch/busybox-static-$pkgver-r$pkgrel.apk
|
||||
"
|
||||
|
||||
package() {
|
||||
mkdir -p "$pkgdir/usr/$_target"
|
||||
cd "$pkgdir/usr/$_target"
|
||||
tar -xf $srcdir/busybox-static-$pkgver-r$pkgrel-$_arch-edge.apk
|
||||
rm .PKGINFO .SIGN.*
|
||||
mkdir -p "$pkgdir/usr/$_target"
|
||||
cd "$pkgdir/usr/$_target"
|
||||
tar -xf $srcdir/busybox-static-$pkgver-r$pkgrel-$_arch.apk
|
||||
rm .PKGINFO .SIGN.*
|
||||
}
|
||||
|
||||
sha512sums="fcc7619f591b44992b03268dff2c0cfade24577bcb277006794c628f8de7093107a0c191f320e7d2e307aa0680be3b93d2e433a1d1527c035f966ecdb8ed7b0f busybox-static-1.32.0-r4-armv7-edge.apk"
|
||||
sha512sums="f2f11245bb9fb6056341c57c51185045309470c3de3a32150e716b6e28c12d87fe72faf69edcaffb73297d15af4928a07f8d2b29dd373dd86c9af7ba53165b30 busybox-static-1.31.0-r0-armv7.apk"
|
||||
@@ -4,7 +4,7 @@
|
||||
# ccache, which can then cache the results.
|
||||
|
||||
pkgname=ccache-cross-symlinks
|
||||
pkgver=3
|
||||
pkgver=2
|
||||
pkgrel=0
|
||||
pkgdesc="Enable ccache for cross-compilers with symlinks"
|
||||
url="https://ccache.samba.org/"
|
||||
@@ -30,11 +30,5 @@ package() {
|
||||
# /native/usr/bin/ccache)
|
||||
ln -v -s ../../../bin/ccache ${_hostspec}-${_bin}
|
||||
done
|
||||
|
||||
ln -v -s ../../../bin/ccache gcc4-${_hostspec}-gcc
|
||||
ln -v -s ../../../bin/ccache gcc6-${_hostspec}-gcc
|
||||
done
|
||||
|
||||
ln -v -s ../../../bin/ccache gcc4-gcc
|
||||
ln -v -s ../../../bin/ccache gcc6-gcc
|
||||
}
|
||||
@@ -5,25 +5,22 @@
|
||||
#
|
||||
# /native/usr/lib/crossdirect/armhf/gcc
|
||||
# -> /native/usr/bin/armv6-alpine-linux-muslgnueabihf-gcc
|
||||
# /native/usr/lib/crossdirect/armhf/rustc
|
||||
# -> /native/usr/bin/rustc --target=armv6-alpine-linux-musleabihf ...
|
||||
#
|
||||
# When building packages in the armhf chroot, PATH will get prepended with
|
||||
# "/native/usr/lib/crossdirect/armhf". The end game is of course invoking the
|
||||
# cross compiler from the native chroot, running at native speed, whenever
|
||||
# calling the compiler from the foreign arch chroot. See crossdirect.c for
|
||||
# implementation details of the C version (llvm, fakeroot, rpath). The rust
|
||||
# version is implemented as simple shell wrappers.
|
||||
# implementation details (llvm, fakeroot, rpath).
|
||||
|
||||
pkgname=crossdirect
|
||||
pkgver=4
|
||||
pkgrel=3
|
||||
pkgver=3
|
||||
pkgrel=0
|
||||
pkgdesc="Wrappers to launch native cross compilers in foreign chroots"
|
||||
url="https://postmarketOS.org"
|
||||
arch="all"
|
||||
license="MIT"
|
||||
options="!check"
|
||||
source="crossdirect.c rustc.sh rust-qemu-linker.sh"
|
||||
options=""
|
||||
source="crossdirect.c"
|
||||
|
||||
build() {
|
||||
cd "$srcdir"
|
||||
@@ -40,9 +37,6 @@ build() {
|
||||
-Werror \
|
||||
-DHOSTSPEC="\"$_hostspec\"" \
|
||||
crossdirect.c
|
||||
|
||||
# rustc
|
||||
sed "s/@ARCH@/$_arch/g" rustc.sh >rustc-"$_arch"
|
||||
done
|
||||
}
|
||||
|
||||
@@ -51,32 +45,22 @@ package() {
|
||||
_archs="x86_64 armhf armv7 aarch64"
|
||||
_bins="c++ cc cpp g++ gcc clang clang++"
|
||||
|
||||
# Rust: qemu-linker
|
||||
install -Dm755 "$srcdir/rust-qemu-linker.sh" \
|
||||
"$pkgdir/usr/lib/crossdirect/rust-qemu-linker"
|
||||
|
||||
# Iterate over architectures
|
||||
for _arch in $_archs; do
|
||||
[ "$_arch" == "$CARCH" ] && continue
|
||||
|
||||
# GCC: put arch-specific crossdirect wrapper in arch-specific
|
||||
# bin folder
|
||||
# Put arch-specific crossdirect wrapper in arch-specific bin folder
|
||||
_bindir="$pkgdir/usr/lib/crossdirect/$_arch"
|
||||
_hostspec="$(arch_to_hostspec $_arch)"
|
||||
mkdir -p "$_bindir"
|
||||
cd "$_bindir"
|
||||
cp "$srcdir/crossdirect-$_arch" "./"
|
||||
|
||||
# GCC: create compiler symlinks
|
||||
# Create compiler symlinks
|
||||
for _bin in $_bins; do
|
||||
ln -s "crossdirect-$_arch" "$_bin"
|
||||
ln -s "crossdirect-$_arch" "$_hostspec-$_bin"
|
||||
done
|
||||
|
||||
# Rust: arch-specific rustc wrapper
|
||||
install -Dm755 "$srcdir/rustc-$_arch" "$_bindir/rustc"
|
||||
done
|
||||
}
|
||||
sha512sums="500107e5aff8b34e74b54982ebcd447fc41bc8283956d506561b031a055cb30ec12698047c2604918b4b6d8560fe03db427a63dff2b83c907e8494b7f5233f29 crossdirect.c
|
||||
6be16ba88720e628a3ecc8fa53f8e7a21d2af268b0509745d989139874d6b94b640bfcff09575eaa19073810be6ef91169c1f83e94f5cf8e6819f2670d9408de rustc.sh
|
||||
ea9bf8db3810d03d0a7395057f3d6e57f7127d87c55deaedc171c255288f5f3cc6fbcc680a5a1b92786cf573875d5dc22521173799fe2639acc97d0715ff905b rust-qemu-linker.sh"
|
||||
sha512sums="20b963322820de038257304c1eefa85767b78e242eda7459f06d70a1cfae5540a445aa7d5587024bf4d88a4bee28120ef9f5c2d24a648e71b542b9618318deb2 crossdirect.c"
|
||||
@@ -1,34 +1,4 @@
|
||||
/* Copyright 2020 Zhuowei Zhang, Oliver Smith
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* This program gets built to a set of wrapper executables, which launch native
|
||||
* cross compilers inside foreign arch chroots. Speeds up cross compilation a
|
||||
* lot, compared to using just qemu user mode emulation or using the previous
|
||||
* distcc-based methods.
|
||||
*
|
||||
* How this program gets called:
|
||||
* - pmbootstrap creates one native arch chroot and one foreign arch chroot.
|
||||
* - The native chroot gets mounted as /native in the foreign chroot.
|
||||
* - When calling "abuild", pmbootstrap sets PATH to:
|
||||
* /native/usr/lib/crossdirect/<ARCH>:$PATH
|
||||
* - That crossdirect directory contains a crossdirect-<ARCH> binary built with
|
||||
* the matching HOSTSPEC (e.g. crossdirect-aarch64 binary with HOSTSPEC
|
||||
* aarch64-alpine-linux-musl). This binary is symlinked to:
|
||||
* - <HOSTSPEC>-c++
|
||||
* - <HOSTSPEC>-cc
|
||||
* - <HOSTSPEC>-clang
|
||||
* - <HOSTSPEC>-clang++
|
||||
* - <HOSTSPEC>-cpp
|
||||
* - <HOSTSPEC>-g++
|
||||
* - <HOSTSPEC>-gcc
|
||||
* - c++
|
||||
* - cc
|
||||
* - clang
|
||||
* - clang++
|
||||
* - cpp
|
||||
* - g++
|
||||
* - gcc
|
||||
*/
|
||||
// HOSTSPEC is defined at compile time, see APKBUILD
|
||||
|
||||
#include <errno.h>
|
||||
#include <libgen.h>
|
||||
@@ -82,31 +52,20 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
// Translate "cc" to "gcc": /usr/bin/cc is a symlink to /usr/bin/gcc,
|
||||
// but there is no <HOSTSPEC>-cc symlink (pmaports#732)
|
||||
if (strcmp(executableName, "cc") == 0)
|
||||
executableName = "gcc";
|
||||
|
||||
// prepend the HOSTSPEC to GCC binaries
|
||||
if (isClang || startsWithHostSpec) {
|
||||
snprintf(newExecutable, sizeof(newExecutable), NATIVE_BIN_DIR "/%s", executableName);
|
||||
} else {
|
||||
snprintf(newExecutable, sizeof(newExecutable), NATIVE_BIN_DIR "/" HOSTSPEC "-%s", executableName);
|
||||
}
|
||||
|
||||
// prepare new arguments for GCC / clang
|
||||
char **newArgsPtr = newargv;
|
||||
*newArgsPtr++ = newExecutable;
|
||||
if (isClang) {
|
||||
// clang does not use a HOSTSPEC prefix for the cross compiler
|
||||
// binary, but instead have a -target argument
|
||||
*newArgsPtr++ = "-target";
|
||||
*newArgsPtr++ = HOSTSPEC;
|
||||
}
|
||||
*newArgsPtr++ = "--sysroot=/";
|
||||
|
||||
// add all arguments passed to this executable to GCC / clang and set
|
||||
// the last arg in newargv to NULL to mark its end
|
||||
memcpy(newArgsPtr, argv + 1, sizeof(char *) * (argc - 1));
|
||||
newArgsPtr += (argc - 1);
|
||||
*newArgsPtr = NULL;
|
||||
@@ -126,7 +85,6 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
// finally exec GCC / clang
|
||||
if (execve(newExecutable, newargv, env) == -1) {
|
||||
fprintf(stderr, "ERROR: crossdirect: failed to execute %s: %s\n", newExecutable, strerror(errno));
|
||||
fprintf(stderr, "Maybe the target arch is missing in the ccache-cross-symlinks package?\n");
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
# This wrapper gets called from the native rustc, and runs the qemu gcc for
|
||||
# linking, with LD_LIBRARY_PATH reset so it does not point to /native anymore.
|
||||
# It isn't possible to use the native cross compiler's linker with crossdirect
|
||||
# currently (pmaports#233).
|
||||
|
||||
LD_LIBRARY_PATH=/lib:/usr/lib \
|
||||
gcc "$@"
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
rust_triplet() {
|
||||
# Find the triplets in Alpine's rust APKBUILD or with:
|
||||
# pmbootstrap chroot -barmhf --add=rust -- ls /usr/lib/rustlib
|
||||
case "$1" in
|
||||
x86_64)
|
||||
echo "x86_64-alpine-linux-musl"
|
||||
;;
|
||||
armhf)
|
||||
echo "armv6-alpine-linux-musleabihf"
|
||||
;;
|
||||
armv7)
|
||||
echo "armv7-alpine-linux-musleabihf"
|
||||
;;
|
||||
aarch64)
|
||||
echo "aarch64-alpine-linux-musl"
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: don't know the rust triple for $1!" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
arch="@ARCH@" # filled in by APKBUILD
|
||||
|
||||
if ! LD_LIBRARY_PATH=/native/lib:/native/usr/lib \
|
||||
/native/usr/bin/rustc \
|
||||
-Clinker=/native/usr/lib/crossdirect/rust-qemu-linker \
|
||||
--target=$(rust_triplet "$arch") \
|
||||
--sysroot=/usr \
|
||||
"$@"; then
|
||||
echo "---" >&2
|
||||
echo "WARNING: crossdirect: cross compiling with rustc failed, trying"\
|
||||
"again with rustc + qemu" >&2
|
||||
echo "---" >&2
|
||||
# Usually the crossdirect approach works; however, when passing
|
||||
# --extern to rustc with a dynamic library (.so), it fails with an
|
||||
# error like 'can't find crate for `serde_derive`' (although the crate
|
||||
# does exist). I think it fails to parse the metadata of the so file
|
||||
# for some reason. We probably need to adjust rustc's
|
||||
# librustc_metadata/locator.rs or something (and upstream that
|
||||
# change!), but I've spent enough time on this already. Let's simply
|
||||
# fall back to compiling in qemu in the very few cases where this is
|
||||
# necessary.
|
||||
/usr/bin/rustc "$@"
|
||||
fi
|
||||
@@ -1,42 +0,0 @@
|
||||
From 4ed2cc3054f444c683f54954c32e586a54066337 Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Fri, 26 Jan 2018 20:32:50 +0000
|
||||
Subject: [PATCH 01/40] posix_memalign
|
||||
|
||||
---
|
||||
gcc/config/i386/pmm_malloc.h | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/i386/pmm_malloc.h b/gcc/config/i386/pmm_malloc.h
|
||||
index 87344d9383f..ece428df487 100644
|
||||
--- a/gcc/config/i386/pmm_malloc.h
|
||||
+++ b/gcc/config/i386/pmm_malloc.h
|
||||
@@ -27,12 +27,13 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
/* We can't depend on <stdlib.h> since the prototype of posix_memalign
|
||||
- may not be visible. */
|
||||
+ may not be visible and we can't pollute the namespace either. */
|
||||
#ifndef __cplusplus
|
||||
-extern int posix_memalign (void **, size_t, size_t);
|
||||
+extern int _mm_posix_memalign (void **, size_t, size_t)
|
||||
#else
|
||||
-extern "C" int posix_memalign (void **, size_t, size_t) throw ();
|
||||
+extern "C" int _mm_posix_memalign (void **, size_t, size_t) throw ()
|
||||
#endif
|
||||
+__asm__("posix_memalign");
|
||||
|
||||
static __inline void *
|
||||
_mm_malloc (size_t __size, size_t __alignment)
|
||||
@@ -42,7 +43,7 @@ _mm_malloc (size_t __size, size_t __alignment)
|
||||
return malloc (__size);
|
||||
if (__alignment == 2 || (sizeof (void *) == 8 && __alignment == 4))
|
||||
__alignment = sizeof (void *);
|
||||
- if (posix_memalign (&__ptr, __alignment, __size) == 0)
|
||||
+ if (_mm_posix_memalign (&__ptr, __alignment, __size) == 0)
|
||||
return __ptr;
|
||||
else
|
||||
return NULL;
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,203 +0,0 @@
|
||||
From 09a32a40b34477cd787deb12833c063a09dea7b2 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 29 Mar 2013 08:59:00 +0400
|
||||
Subject: [PATCH 02/40] gcc: poison-system-directories
|
||||
|
||||
Add /sw/include and /opt/include based on the original
|
||||
zecke-no-host-includes.patch patch. The original patch checked for
|
||||
/usr/include, /sw/include and /opt/include and then triggered a failure and
|
||||
aborted.
|
||||
|
||||
Instead, we add the two missing items to the current scan. If the user
|
||||
wants this to be a failure, they can add "-Werror=poison-system-directories".
|
||||
|
||||
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
Upstream-Status: Pending
|
||||
---
|
||||
gcc/common.opt | 4 ++++
|
||||
gcc/config.in | 6 ++++++
|
||||
gcc/configure | 16 ++++++++++++++++
|
||||
gcc/configure.ac | 10 ++++++++++
|
||||
gcc/doc/invoke.texi | 9 +++++++++
|
||||
gcc/gcc.c | 2 ++
|
||||
gcc/incpath.c | 21 +++++++++++++++++++++
|
||||
7 files changed, 68 insertions(+)
|
||||
|
||||
diff --git a/gcc/common.opt b/gcc/common.opt
|
||||
index dfed6ec76ba..8bb65e0e1af 100644
|
||||
--- a/gcc/common.opt
|
||||
+++ b/gcc/common.opt
|
||||
@@ -682,6 +682,10 @@ Wreturn-local-addr
|
||||
Common Var(warn_return_local_addr) Init(1) Warning
|
||||
Warn about returning a pointer/reference to a local or temporary variable.
|
||||
|
||||
+Wpoison-system-directories
|
||||
+Common Var(flag_poison_system_directories) Init(1) Warning
|
||||
+Warn for -I and -L options using system directories if cross compiling
|
||||
+
|
||||
Wshadow
|
||||
Common Var(warn_shadow) Warning
|
||||
Warn when one variable shadows another. Same as -Wshadow=global.
|
||||
diff --git a/gcc/config.in b/gcc/config.in
|
||||
index 364eba47737..9551c0dfdf9 100644
|
||||
--- a/gcc/config.in
|
||||
+++ b/gcc/config.in
|
||||
@@ -224,6 +224,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
+/* Define to warn for use of native system header directories */
|
||||
+#ifndef USED_FOR_TARGET
|
||||
+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Define if you want all operations on RTL (the basic data structure of the
|
||||
optimizer and back end) to be checked for dynamic type safety at runtime.
|
||||
This is quite expensive. */
|
||||
diff --git a/gcc/configure b/gcc/configure
|
||||
index b4088d8fd1e..793530e21cf 100755
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -1010,6 +1010,7 @@ with_system_zlib
|
||||
enable_maintainer_mode
|
||||
enable_link_mutex
|
||||
enable_version_specific_runtime_libs
|
||||
+enable_poison_system_directories
|
||||
enable_plugin
|
||||
enable_host_shared
|
||||
enable_libquadmath_support
|
||||
@@ -1766,6 +1767,8 @@ Optional Features:
|
||||
--enable-version-specific-runtime-libs
|
||||
specify that runtime libraries should be installed
|
||||
in a compiler-specific directory
|
||||
+ --enable-poison-system-directories
|
||||
+ warn for use of native system header directories
|
||||
--enable-plugin enable plugin support
|
||||
--enable-host-shared build host code as shared libraries
|
||||
--disable-libquadmath-support
|
||||
@@ -30271,6 +30274,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then :
|
||||
fi
|
||||
|
||||
|
||||
+# Check whether --enable-poison-system-directories was given.
|
||||
+if test "${enable_poison_system_directories+set}" = set; then :
|
||||
+ enableval=$enable_poison_system_directories;
|
||||
+else
|
||||
+ enable_poison_system_directories=no
|
||||
+fi
|
||||
+
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+
|
||||
+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
|
||||
|
||||
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||||
index 070b9c6c497..0fd438e39e5 100644
|
||||
--- a/gcc/configure.ac
|
||||
+++ b/gcc/configure.ac
|
||||
@@ -6605,6 +6605,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs,
|
||||
[specify that runtime libraries should be
|
||||
installed in a compiler-specific directory])])
|
||||
|
||||
+AC_ARG_ENABLE([poison-system-directories],
|
||||
+ AS_HELP_STRING([--enable-poison-system-directories],
|
||||
+ [warn for use of native system header directories]),,
|
||||
+ [enable_poison_system_directories=no])
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
|
||||
+ [1],
|
||||
+ [Define to warn for use of native system header directories])
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
AC_SUBST(subdirs)
|
||||
AC_SUBST(srcdir)
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
index 0d532a64bfe..86e57038042 100644
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -348,6 +348,7 @@ Objective-C and Objective-C++ Dialects}.
|
||||
-Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded @gol
|
||||
-Wparentheses -Wno-pedantic-ms-format @gol
|
||||
-Wpointer-arith -Wno-pointer-compare -Wno-pointer-to-int-cast @gol
|
||||
+-Wno-poison-system-directories @gol
|
||||
-Wno-pragmas -Wno-prio-ctor-dtor -Wredundant-decls @gol
|
||||
-Wrestrict -Wno-return-local-addr -Wreturn-type @gol
|
||||
-Wno-scalar-storage-order -Wsequence-point @gol
|
||||
@@ -6926,6 +6927,14 @@ made up of data only and thus requires no special treatment. But, for
|
||||
most targets, it is made up of code and thus requires the stack to be
|
||||
made executable in order for the program to work properly.
|
||||
|
||||
+@item -Wno-poison-system-directories
|
||||
+@opindex Wno-poison-system-directories
|
||||
+Do not warn for @option{-I} or @option{-L} options using system
|
||||
+directories such as @file{/usr/include} when cross compiling. This
|
||||
+option is intended for use in chroot environments when such
|
||||
+directories contain the correct headers and libraries for the target
|
||||
+system rather than the host.
|
||||
+
|
||||
@item -Wfloat-equal
|
||||
@opindex Wfloat-equal
|
||||
@opindex Wno-float-equal
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index 9f790db0daf..b2200c5185a 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -1041,6 +1041,8 @@ proper position among the other output files. */
|
||||
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
||||
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
||||
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \
|
||||
+ %{Wno-poison-system-directories:--no-poison-system-directories} \
|
||||
+ %{Werror=poison-system-directories:--error-poison-system-directories} \
|
||||
%{static|no-pie|static-pie:} %@{L*} %(mfwrap) %(link_libgcc) " \
|
||||
VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \
|
||||
%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
|
||||
diff --git a/gcc/incpath.c b/gcc/incpath.c
|
||||
index 8a2bda00f80..9098ab044ab 100644
|
||||
--- a/gcc/incpath.c
|
||||
+++ b/gcc/incpath.c
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "intl.h"
|
||||
#include "incpath.h"
|
||||
#include "cppdefault.h"
|
||||
+#include "diagnostic-core.h"
|
||||
|
||||
/* Microsoft Windows does not natively support inodes.
|
||||
VMS has non-numeric inodes. */
|
||||
@@ -393,6 +394,26 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
|
||||
}
|
||||
fprintf (stderr, _("End of search list.\n"));
|
||||
}
|
||||
+
|
||||
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+ if (flag_poison_system_directories)
|
||||
+ {
|
||||
+ struct cpp_dir *p;
|
||||
+
|
||||
+ for (p = heads[INC_QUOTE]; p; p = p->next)
|
||||
+ {
|
||||
+ if ((!strncmp (p->name, "/usr/include", 12))
|
||||
+ || (!strncmp (p->name, "/usr/local/include", 18))
|
||||
+ || (!strncmp (p->name, "/usr/X11R6/include", 18))
|
||||
+ || (!strncmp (p->name, "/sw/include", 11))
|
||||
+ || (!strncmp (p->name, "/opt/include", 12)))
|
||||
+ warning (OPT_Wpoison_system_directories,
|
||||
+ "include location \"%s\" is unsafe for "
|
||||
+ "cross-compilation",
|
||||
+ p->name);
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* Use given -I paths for #include "..." but not #include <...>, and
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
From 65eb86f3e110998d30489df009d44b4bc1043adc Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Fri, 26 Jan 2018 20:32:50 +0000
|
||||
Subject: [PATCH 02/12] posix_memalign
|
||||
|
||||
---
|
||||
gcc/config/i386/pmm_malloc.h | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/i386/pmm_malloc.h b/gcc/config/i386/pmm_malloc.h
|
||||
index ffbb7f82cf5..b0b890d2403 100644
|
||||
--- a/gcc/config/i386/pmm_malloc.h
|
||||
+++ b/gcc/config/i386/pmm_malloc.h
|
||||
@@ -27,12 +27,13 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
/* We can't depend on <stdlib.h> since the prototype of posix_memalign
|
||||
- may not be visible. */
|
||||
+ may not be visible and we can't pollute the namespace either. */
|
||||
#ifndef __cplusplus
|
||||
-extern int posix_memalign (void **, size_t, size_t);
|
||||
+extern int _mm_posix_memalign (void **, size_t, size_t)
|
||||
#else
|
||||
-extern "C" int posix_memalign (void **, size_t, size_t) throw ();
|
||||
+extern "C" int _mm_posix_memalign (void **, size_t, size_t) throw ()
|
||||
#endif
|
||||
+__asm__("posix_memalign");
|
||||
|
||||
static __inline void *
|
||||
_mm_malloc (size_t __size, size_t __alignment)
|
||||
@@ -42,7 +43,7 @@ _mm_malloc (size_t __size, size_t __alignment)
|
||||
return malloc (__size);
|
||||
if (__alignment == 2 || (sizeof (void *) == 8 && __alignment == 4))
|
||||
__alignment = sizeof (void *);
|
||||
- if (posix_memalign (&__ptr, __alignment, __size) == 0)
|
||||
+ if (_mm_posix_memalign (&__ptr, __alignment, __size) == 0)
|
||||
return __ptr;
|
||||
else
|
||||
return NULL;
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
From 77e75a23e9bdf8863823225567c509b6fed49e6e Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:45:49 +0000
|
||||
Subject: [PATCH 03/40] Turn on -Wl,-z,relro,-z,now by default.
|
||||
|
||||
---
|
||||
gcc/doc/invoke.texi | 3 +++
|
||||
gcc/gcc.c | 1 +
|
||||
2 files changed, 4 insertions(+)
|
||||
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
index 86e57038042..87ff404bc20 100644
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -14645,6 +14645,9 @@ For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the
|
||||
linker. When using the GNU linker, you can also get the same effect with
|
||||
@option{-Wl,-Map=output.map}.
|
||||
|
||||
+NOTE: In Alpine Linux, for LDFLAGS, the option
|
||||
+@option{-Wl,-z,relro,now} is used. To disable, use @option{-Wl,-z,norelro}.
|
||||
+
|
||||
@item -u @var{symbol}
|
||||
@opindex u
|
||||
Pretend the symbol @var{symbol} is undefined, to force linking of
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index b2200c5185a..625c9ab7902 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -1039,6 +1039,7 @@ proper position among the other output files. */
|
||||
"%{flto|flto=*:%<fcompare-debug*} \
|
||||
%{flto} %{fno-lto} %{flto=*} %l " LINK_PIE_SPEC \
|
||||
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
||||
+ "-z relro -z now " \
|
||||
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
||||
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \
|
||||
%{Wno-poison-system-directories:--no-poison-system-directories} \
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -0,0 +1,194 @@
|
||||
From 48c670d2678e0323d88eb72205e039f393cabe05 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 29 Mar 2013 08:59:00 +0400
|
||||
Subject: [PATCH 03/39] gcc: poison-system-directories
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
Upstream-Status: Inappropriate [distribution: codesourcery]
|
||||
---
|
||||
gcc/common.opt | 4 ++++
|
||||
gcc/config.in | 6 ++++++
|
||||
gcc/configure | 16 ++++++++++++++++
|
||||
gcc/configure.ac | 10 ++++++++++
|
||||
gcc/doc/invoke.texi | 9 +++++++++
|
||||
gcc/gcc.c | 2 ++
|
||||
gcc/incpath.c | 19 +++++++++++++++++++
|
||||
7 files changed, 66 insertions(+)
|
||||
|
||||
diff --git a/gcc/common.opt b/gcc/common.opt
|
||||
index d6ef85928f3..7b29efe3882 100644
|
||||
--- a/gcc/common.opt
|
||||
+++ b/gcc/common.opt
|
||||
@@ -679,6 +679,10 @@ Wreturn-local-addr
|
||||
Common Var(warn_return_local_addr) Init(1) Warning
|
||||
Warn about returning a pointer/reference to a local or temporary variable.
|
||||
|
||||
+Wpoison-system-directories
|
||||
+Common Var(flag_poison_system_directories) Init(1) Warning
|
||||
+Warn for -I and -L options using system directories if cross compiling
|
||||
+
|
||||
Wshadow
|
||||
Common Var(warn_shadow) Warning
|
||||
Warn when one variable shadows another. Same as -Wshadow=global.
|
||||
diff --git a/gcc/config.in b/gcc/config.in
|
||||
index 5bccb408016..1c784a8276b 100644
|
||||
--- a/gcc/config.in
|
||||
+++ b/gcc/config.in
|
||||
@@ -194,6 +194,12 @@
|
||||
#endif
|
||||
|
||||
|
||||
+/* Define to warn for use of native system header directories */
|
||||
+#ifndef USED_FOR_TARGET
|
||||
+#undef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
/* Define if you want all operations on RTL (the basic data structure of the
|
||||
optimizer and back end) to be checked for dynamic type safety at runtime.
|
||||
This is quite expensive. */
|
||||
diff --git a/gcc/configure b/gcc/configure
|
||||
index 5c345ce0fd7..cafd05fd150 100755
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -953,6 +953,7 @@ with_system_zlib
|
||||
enable_maintainer_mode
|
||||
enable_link_mutex
|
||||
enable_version_specific_runtime_libs
|
||||
+enable_poison_system_directories
|
||||
enable_plugin
|
||||
enable_host_shared
|
||||
enable_libquadmath_support
|
||||
@@ -1696,6 +1697,8 @@ Optional Features:
|
||||
--enable-version-specific-runtime-libs
|
||||
specify that runtime libraries should be installed
|
||||
in a compiler-specific directory
|
||||
+ --enable-poison-system-directories
|
||||
+ warn for use of native system header directories
|
||||
--enable-plugin enable plugin support
|
||||
--enable-host-shared build host code as shared libraries
|
||||
--disable-libquadmath-support
|
||||
@@ -29715,6 +29718,19 @@ if test "${enable_version_specific_runtime_libs+set}" = set; then :
|
||||
fi
|
||||
|
||||
|
||||
+# Check whether --enable-poison-system-directories was given.
|
||||
+if test "${enable_poison_system_directories+set}" = set; then :
|
||||
+ enableval=$enable_poison_system_directories;
|
||||
+else
|
||||
+ enable_poison_system_directories=no
|
||||
+fi
|
||||
+
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+
|
||||
+$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
|
||||
+
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
|
||||
|
||||
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||||
index 65dbf1f2f80..dd5b38195ce 100644
|
||||
--- a/gcc/configure.ac
|
||||
+++ b/gcc/configure.ac
|
||||
@@ -6341,6 +6341,16 @@ AC_ARG_ENABLE(version-specific-runtime-libs,
|
||||
[specify that runtime libraries should be
|
||||
installed in a compiler-specific directory])])
|
||||
|
||||
+AC_ARG_ENABLE([poison-system-directories],
|
||||
+ AS_HELP_STRING([--enable-poison-system-directories],
|
||||
+ [warn for use of native system header directories]),,
|
||||
+ [enable_poison_system_directories=no])
|
||||
+if test "x${enable_poison_system_directories}" = "xyes"; then
|
||||
+ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
|
||||
+ [1],
|
||||
+ [Define to warn for use of native system header directories])
|
||||
+fi
|
||||
+
|
||||
# Substitute configuration variables
|
||||
AC_SUBST(subdirs)
|
||||
AC_SUBST(srcdir)
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
index 255149fcfb8..cb71b60fe3c 100644
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -303,6 +303,7 @@ Objective-C and Objective-C++ Dialects}.
|
||||
-Wpacked -Wpacked-bitfield-compat -Wpacked-not-aligned -Wpadded @gol
|
||||
-Wparentheses -Wno-pedantic-ms-format @gol
|
||||
-Wplacement-new -Wplacement-new=@var{n} @gol
|
||||
+-Wno-poison-system-directories @gol
|
||||
-Wpointer-arith -Wpointer-compare -Wno-pointer-to-int-cast @gol
|
||||
-Wno-pragmas -Wredundant-decls -Wrestrict -Wno-return-local-addr @gol
|
||||
-Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar @gol
|
||||
@@ -5712,6 +5713,14 @@ made up of data only and thus requires no special treatment. But, for
|
||||
most targets, it is made up of code and thus requires the stack to be
|
||||
made executable in order for the program to work properly.
|
||||
|
||||
+@item -Wno-poison-system-directories
|
||||
+@opindex Wno-poison-system-directories
|
||||
+Do not warn for @option{-I} or @option{-L} options using system
|
||||
+directories such as @file{/usr/include} when cross compiling. This
|
||||
+option is intended for use in chroot environments when such
|
||||
+directories contain the correct headers and libraries for the target
|
||||
+system rather than the host.
|
||||
+
|
||||
@item -Wfloat-equal
|
||||
@opindex Wfloat-equal
|
||||
@opindex Wno-float-equal
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index a716f708259..02b3cd39fc2 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -1037,6 +1037,8 @@ proper position among the other output files. */
|
||||
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
||||
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
||||
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} \
|
||||
+ %{Wno-poison-system-directories:--no-poison-system-directories} \
|
||||
+ %{Werror=poison-system-directories:--error-poison-system-directories} \
|
||||
%{static|no-pie|static-pie:} %{L*} %(mfwrap) %(link_libgcc) " \
|
||||
VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o " CHKP_SPEC " \
|
||||
%{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
|
||||
diff --git a/gcc/incpath.c b/gcc/incpath.c
|
||||
index b11c6a57939..e3b7a21966f 100644
|
||||
--- a/gcc/incpath.c
|
||||
+++ b/gcc/incpath.c
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "intl.h"
|
||||
#include "incpath.h"
|
||||
#include "cppdefault.h"
|
||||
+#include "diagnostic-core.h"
|
||||
|
||||
/* Microsoft Windows does not natively support inodes.
|
||||
VMS has non-numeric inodes. */
|
||||
@@ -393,6 +394,26 @@ merge_include_chains (const char *sysroot, cpp_reader *pfile, int verbose)
|
||||
}
|
||||
fprintf (stderr, _("End of search list.\n"));
|
||||
}
|
||||
+
|
||||
+#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
|
||||
+ if (flag_poison_system_directories)
|
||||
+ {
|
||||
+ struct cpp_dir *p;
|
||||
+
|
||||
+ for (p = heads[INC_QUOTE]; p; p = p->next)
|
||||
+ {
|
||||
+ if ((!strncmp (p->name, "/usr/include", 12))
|
||||
+ || (!strncmp (p->name, "/usr/local/include", 18))
|
||||
+ || (!strncmp (p->name, "/usr/X11R6/include", 18))
|
||||
+ || (!strncmp (p->name, "/sw/include", 11))
|
||||
+ || (!strncmp (p->name, "/opt/include", 12)))
|
||||
+ warning (OPT_Wpoison_system_directories,
|
||||
+ "include location \"%s\" is unsafe for "
|
||||
+ "cross-compilation",
|
||||
+ p->name);
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
}
|
||||
|
||||
/* Use given -I paths for #include "..." but not #include <...>, and
|
||||
--
|
||||
2.17.0
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
From 3b76b0c848746d4adbc4e8db408efd41aefb829c Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:46:22 +0000
|
||||
Subject: [PATCH 04/40] Turn on -D_FORTIFY_SOURCE=2 by default for C, C++,
|
||||
ObjC, ObjC++, if the optimization level is > 0
|
||||
|
||||
---
|
||||
gcc/c-family/c-cppbuiltin.c | 4 ++++
|
||||
gcc/doc/invoke.texi | 6 ++++++
|
||||
2 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c
|
||||
index db91a36794a..ed976c71404 100644
|
||||
--- a/gcc/c-family/c-cppbuiltin.c
|
||||
+++ b/gcc/c-family/c-cppbuiltin.c
|
||||
@@ -1385,6 +1385,10 @@ c_cpp_builtins (cpp_reader *pfile)
|
||||
builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
|
||||
builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
|
||||
|
||||
+ /* Fortify Source enabled by default for optimization levels > 0 */
|
||||
+ if (optimize)
|
||||
+ builtin_define_with_int_value ("_FORTIFY_SOURCE", 2);
|
||||
+
|
||||
/* Misc. */
|
||||
if (flag_gnu89_inline)
|
||||
cpp_define (pfile, "__GNUC_GNU_INLINE__");
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
index 87ff404bc20..01e67e97491 100644
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -9230,6 +9230,12 @@ also turns on the following optimization flags:
|
||||
Please note the warning under @option{-fgcse} about
|
||||
invoking @option{-O2} on programs that use computed gotos.
|
||||
|
||||
+NOTE: In Alpine Linux, @option{-D_FORTIFY_SOURCE=2} is
|
||||
+set by default, and is activated when @option{-O} is set to 2 or higher.
|
||||
+This enables additional compile-time and run-time checks for several libc
|
||||
+functions. To disable, specify either @option{-U_FORTIFY_SOURCE} or
|
||||
+@option{-D_FORTIFY_SOURCE=0}.
|
||||
+
|
||||
@item -O3
|
||||
@opindex O3
|
||||
Optimize yet more. @option{-O3} turns on all optimizations specified
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,269 +0,0 @@
|
||||
From 483912c560424ee8b5cc996990d45802671fc73f Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:46:56 +0000
|
||||
Subject: [PATCH 05/40] On linux targets pass --as-needed by default to the
|
||||
linker, but always link the sanitizer libraries with --no-as-needed.
|
||||
|
||||
---
|
||||
gcc/config/aarch64/aarch64-linux.h | 1 +
|
||||
gcc/config/alpha/linux-elf.h | 2 +-
|
||||
gcc/config/arm/linux-elf.h | 1 +
|
||||
gcc/config/gnu-user.h | 6 +++---
|
||||
gcc/config/i386/gnu-user.h | 2 +-
|
||||
gcc/config/i386/gnu-user64.h | 1 +
|
||||
gcc/config/ia64/linux.h | 2 +-
|
||||
gcc/config/mips/gnu-user.h | 1 +
|
||||
gcc/config/riscv/linux.h | 1 +
|
||||
gcc/config/rs6000/linux64.h | 4 ++--
|
||||
gcc/config/rs6000/sysv4.h | 2 +-
|
||||
gcc/config/s390/linux.h | 2 +-
|
||||
gcc/config/sparc/linux.h | 2 +-
|
||||
gcc/gcc.c | 28 ++++++++++++++++++++--------
|
||||
14 files changed, 36 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/aarch64/aarch64-linux.h b/gcc/config/aarch64/aarch64-linux.h
|
||||
index e587e2e9ad6..1d1017aa523 100644
|
||||
--- a/gcc/config/aarch64/aarch64-linux.h
|
||||
+++ b/gcc/config/aarch64/aarch64-linux.h
|
||||
@@ -35,6 +35,7 @@
|
||||
#define CPP_SPEC "%{pthread:-D_REENTRANT}"
|
||||
|
||||
#define LINUX_TARGET_LINK_SPEC "%{h*} \
|
||||
+ --as-needed \
|
||||
%{static:-Bstatic} \
|
||||
%{shared:-shared} \
|
||||
%{symbolic:-Bsymbolic} \
|
||||
diff --git a/gcc/config/alpha/linux-elf.h b/gcc/config/alpha/linux-elf.h
|
||||
index e25fcac3c59..22b2f7b0d14 100644
|
||||
--- a/gcc/config/alpha/linux-elf.h
|
||||
+++ b/gcc/config/alpha/linux-elf.h
|
||||
@@ -37,7 +37,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
|
||||
#define ELF_DYNAMIC_LINKER GNU_USER_DYNAMIC_LINKER
|
||||
|
||||
-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \
|
||||
+#define LINK_SPEC "-m elf64alpha --as-needed %{G*} %{relax:-relax} \
|
||||
%{O*:-O3} %{!O*:-O1} \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
|
||||
index 0ec3aa53189..f8bda84de2a 100644
|
||||
--- a/gcc/config/arm/linux-elf.h
|
||||
+++ b/gcc/config/arm/linux-elf.h
|
||||
@@ -70,6 +70,7 @@
|
||||
%{rdynamic:-export-dynamic} \
|
||||
%{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \
|
||||
-X \
|
||||
+ --as-needed \
|
||||
%{mbig-endian:-EB} %{mlittle-endian:-EL}" \
|
||||
SUBTARGET_EXTRA_LINK_SPEC
|
||||
|
||||
diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
|
||||
index ff2e880b1fa..7f30c363e4a 100644
|
||||
--- a/gcc/config/gnu-user.h
|
||||
+++ b/gcc/config/gnu-user.h
|
||||
@@ -136,17 +136,17 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
#define LIBASAN_EARLY_SPEC "%{!shared:libasan_preinit%O%s} " \
|
||||
"%{static-libasan:%{!shared:" \
|
||||
LD_STATIC_OPTION " --whole-archive -lasan --no-whole-archive " \
|
||||
- LD_DYNAMIC_OPTION "}}%{!static-libasan:-lasan}"
|
||||
+ LD_DYNAMIC_OPTION "}}%{!static-libasan:%{!fuse-ld=gold:--push-state} --no-as-needed -lasan %{fuse-ld=gold:--as-needed;:--pop-state}}"
|
||||
#undef LIBTSAN_EARLY_SPEC
|
||||
#define LIBTSAN_EARLY_SPEC "%{!shared:libtsan_preinit%O%s} " \
|
||||
"%{static-libtsan:%{!shared:" \
|
||||
LD_STATIC_OPTION " --whole-archive -ltsan --no-whole-archive " \
|
||||
- LD_DYNAMIC_OPTION "}}%{!static-libtsan:-ltsan}"
|
||||
+ LD_DYNAMIC_OPTION "}}%{!static-libtsan:%{!fuse-ld=gold:--push-state} --no-as-needed -ltsan %{fuse-ld=gold:--as-needed;:--pop-state}}"
|
||||
#undef LIBLSAN_EARLY_SPEC
|
||||
#define LIBLSAN_EARLY_SPEC "%{!shared:liblsan_preinit%O%s} " \
|
||||
"%{static-liblsan:%{!shared:" \
|
||||
LD_STATIC_OPTION " --whole-archive -llsan --no-whole-archive " \
|
||||
- LD_DYNAMIC_OPTION "}}%{!static-liblsan:-llsan}"
|
||||
+ LD_DYNAMIC_OPTION "}}%{!static-liblsan:%{!fuse-ld=gold:--push-state} --no-as-needed -llsan %{fuse-ld=gold:--as-needed;:--pop-state}}"
|
||||
#endif
|
||||
|
||||
#undef TARGET_F951_OPTIONS
|
||||
diff --git a/gcc/config/i386/gnu-user.h b/gcc/config/i386/gnu-user.h
|
||||
index ae4aa844f02..54b91c0492a 100644
|
||||
--- a/gcc/config/i386/gnu-user.h
|
||||
+++ b/gcc/config/i386/gnu-user.h
|
||||
@@ -74,7 +74,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
{ "link_emulation", GNU_USER_LINK_EMULATION },\
|
||||
{ "dynamic_linker", GNU_USER_DYNAMIC_LINKER }
|
||||
|
||||
-#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
|
||||
+#define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) --as-needed %{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
%{!static-pie: \
|
||||
diff --git a/gcc/config/i386/gnu-user64.h b/gcc/config/i386/gnu-user64.h
|
||||
index 785c68220b8..21dd66b412a 100644
|
||||
--- a/gcc/config/i386/gnu-user64.h
|
||||
+++ b/gcc/config/i386/gnu-user64.h
|
||||
@@ -56,6 +56,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
"%{" SPEC_64 ":-m " GNU_USER_LINK_EMULATION64 "} \
|
||||
%{" SPEC_32 ":-m " GNU_USER_LINK_EMULATION32 "} \
|
||||
%{" SPEC_X32 ":-m " GNU_USER_LINK_EMULATIONX32 "} \
|
||||
+ --as-needed \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
diff --git a/gcc/config/ia64/linux.h b/gcc/config/ia64/linux.h
|
||||
index ee38e218aec..0325971d818 100644
|
||||
--- a/gcc/config/ia64/linux.h
|
||||
+++ b/gcc/config/ia64/linux.h
|
||||
@@ -58,7 +58,7 @@ do { \
|
||||
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "\
|
||||
+#define LINK_SPEC " --as-needed \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
diff --git a/gcc/config/mips/gnu-user.h b/gcc/config/mips/gnu-user.h
|
||||
index 5d0782100bb..4be5fbb2191 100644
|
||||
--- a/gcc/config/mips/gnu-user.h
|
||||
+++ b/gcc/config/mips/gnu-user.h
|
||||
@@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
#undef GNU_USER_TARGET_LINK_SPEC
|
||||
#define GNU_USER_TARGET_LINK_SPEC "\
|
||||
%{G*} %{EB} %{EL} %{mips*} %{shared} \
|
||||
+ -as-needed \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h
|
||||
index 4afef7c228c..ba1a6e60e05 100644
|
||||
--- a/gcc/config/riscv/linux.h
|
||||
+++ b/gcc/config/riscv/linux.h
|
||||
@@ -58,6 +58,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
"%{mabi=ilp32:_ilp32}"
|
||||
|
||||
#define LINK_SPEC "\
|
||||
+-as-needed \
|
||||
-melf" XLEN_SPEC "lriscv" LD_EMUL_SUFFIX " \
|
||||
%{mno-relax:--no-relax} \
|
||||
%{shared} \
|
||||
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
|
||||
index 2ded3301282..a1e44ddcc0d 100644
|
||||
--- a/gcc/config/rs6000/linux64.h
|
||||
+++ b/gcc/config/rs6000/linux64.h
|
||||
@@ -457,13 +457,13 @@ extern int dot_symbols;
|
||||
" -m elf64ppc")
|
||||
#endif
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC32 LINK_OS_LINUX_EMUL32 " --as-needed %{!shared: %{!static: \
|
||||
%{!static-pie: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
-dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "}}} \
|
||||
%(link_os_extra_spec32)"
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC64 LINK_OS_LINUX_EMUL64 " --as-needed %{!shared: %{!static: \
|
||||
%{!static-pie: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
-dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}} \
|
||||
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
|
||||
index 9ade72114e9..9490b84a153 100644
|
||||
--- a/gcc/config/rs6000/sysv4.h
|
||||
+++ b/gcc/config/rs6000/sysv4.h
|
||||
@@ -789,7 +789,7 @@ GNU_USER_TARGET_CC1_SPEC
|
||||
#define GNU_USER_DYNAMIC_LINKER GLIBC_DYNAMIC_LINKER
|
||||
#endif
|
||||
|
||||
-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
|
||||
+#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --as-needed %{!shared: %{!static: \
|
||||
%{rdynamic:-export-dynamic} \
|
||||
-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
|
||||
|
||||
diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
|
||||
index 6919b468f06..56d52d41b31 100644
|
||||
--- a/gcc/config/s390/linux.h
|
||||
+++ b/gcc/config/s390/linux.h
|
||||
@@ -82,7 +82,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC \
|
||||
- "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
|
||||
+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} --as-needed \
|
||||
%{shared:-shared} \
|
||||
%{!shared: \
|
||||
%{static:-static} \
|
||||
diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h
|
||||
index 63853e60c03..de6d8675456 100644
|
||||
--- a/gcc/config/sparc/linux.h
|
||||
+++ b/gcc/config/sparc/linux.h
|
||||
@@ -81,7 +81,7 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
|
||||
#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
|
||||
|
||||
#undef LINK_SPEC
|
||||
-#define LINK_SPEC "-m elf32_sparc %{shared:-shared} \
|
||||
+#define LINK_SPEC "-m elf32_sparc --as-needed %{shared:-shared} \
|
||||
%{!mno-relax:%{!r:-relax}} \
|
||||
%{!shared: \
|
||||
%{!static: \
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index 625c9ab7902..7aec9d3a016 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -695,8 +695,11 @@ proper position among the other output files. */
|
||||
#ifdef LIBASAN_EARLY_SPEC
|
||||
#define LIBASAN_SPEC STATIC_LIBASAN_LIBS
|
||||
#elif defined(HAVE_LD_STATIC_DYNAMIC)
|
||||
-#define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION \
|
||||
- "} -lasan %{static-libasan:" LD_DYNAMIC_OPTION "}" \
|
||||
+#define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION "}" \
|
||||
+ " %{!static-libasan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " -lasan " \
|
||||
+ " %{static-libasan:" LD_DYNAMIC_OPTION "}" \
|
||||
+ " %{!static-libasan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
STATIC_LIBASAN_LIBS
|
||||
#else
|
||||
#define LIBASAN_SPEC "-lasan" STATIC_LIBASAN_LIBS
|
||||
@@ -713,8 +716,11 @@ proper position among the other output files. */
|
||||
#ifdef LIBTSAN_EARLY_SPEC
|
||||
#define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS
|
||||
#elif defined(HAVE_LD_STATIC_DYNAMIC)
|
||||
-#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION \
|
||||
- "} -ltsan %{static-libtsan:" LD_DYNAMIC_OPTION "}" \
|
||||
+#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \
|
||||
+ " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " -ltsan " \
|
||||
+ " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \
|
||||
+ " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
STATIC_LIBTSAN_LIBS
|
||||
#else
|
||||
#define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS
|
||||
@@ -731,8 +737,11 @@ proper position among the other output files. */
|
||||
#ifdef LIBLSAN_EARLY_SPEC
|
||||
#define LIBLSAN_SPEC STATIC_LIBLSAN_LIBS
|
||||
#elif defined(HAVE_LD_STATIC_DYNAMIC)
|
||||
-#define LIBLSAN_SPEC "%{static-liblsan:" LD_STATIC_OPTION \
|
||||
- "} -llsan %{static-liblsan:" LD_DYNAMIC_OPTION "}" \
|
||||
+#define LIBLSAN_SPEC "%{static-liblsan:" LD_STATIC_OPTION "}" \
|
||||
+ " %{!static-liblsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " -llsan " \
|
||||
+ " %{static-liblsan:" LD_DYNAMIC_OPTION "}" \
|
||||
+ " %{!static-liblsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
STATIC_LIBLSAN_LIBS
|
||||
#else
|
||||
#define LIBLSAN_SPEC "-llsan" STATIC_LIBLSAN_LIBS
|
||||
@@ -747,8 +756,11 @@ proper position among the other output files. */
|
||||
#define STATIC_LIBUBSAN_LIBS \
|
||||
" %{static-libubsan|static:%:include(libsanitizer.spec)%(link_libubsan)}"
|
||||
#ifdef HAVE_LD_STATIC_DYNAMIC
|
||||
-#define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION \
|
||||
- "} -lubsan %{static-libubsan:" LD_DYNAMIC_OPTION "}" \
|
||||
+#define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION "}" \
|
||||
+ " %{!static-libubsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " -lubsan " \
|
||||
+ " %{static-libubsan:" LD_DYNAMIC_OPTION "}" \
|
||||
+ " %{!static-libubsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
STATIC_LIBUBSAN_LIBS
|
||||
#else
|
||||
#define LIBUBSAN_SPEC "-lubsan" STATIC_LIBUBSAN_LIBS
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
From c57a8b43401ca9a1b889fa9fd421ac49c3dbd380 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:47:43 +0000
|
||||
Subject: [PATCH 06/40] Enable -Wformat and -Wformat-security by default.
|
||||
|
||||
---
|
||||
gcc/c-family/c.opt | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
|
||||
index c49da99d395..93f25319005 100644
|
||||
--- a/gcc/c-family/c.opt
|
||||
+++ b/gcc/c-family/c.opt
|
||||
@@ -599,7 +599,7 @@ Warn about function calls with format strings that write past the end
|
||||
of the destination region. Same as -Wformat-overflow=1.
|
||||
|
||||
Wformat-security
|
||||
-C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0)
|
||||
+C ObjC C++ ObjC++ Var(warn_format_security) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0)
|
||||
Warn about possible security problems with format functions.
|
||||
|
||||
Wformat-signedness
|
||||
@@ -620,7 +620,7 @@ C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy(C ObjC C++
|
||||
Warn about zero-length formats.
|
||||
|
||||
Wformat=
|
||||
-C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) IntegerRange(0, 2)
|
||||
+C ObjC C++ ObjC++ Joined RejectNegative UInteger Var(warn_format) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall, 1, 0) IntegerRange(0, 2)
|
||||
Warn about printf/scanf/strftime/strfmon format string anomalies.
|
||||
|
||||
Wformat-overflow=
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From a58dad2c52639422671ac6986c36e48499fc2f20 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:48:24 +0000
|
||||
Subject: [PATCH 07/40] Enable -Wtrampolines by default.
|
||||
|
||||
---
|
||||
gcc/common.opt | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gcc/common.opt b/gcc/common.opt
|
||||
index 8bb65e0e1af..ace932b300d 100644
|
||||
--- a/gcc/common.opt
|
||||
+++ b/gcc/common.opt
|
||||
@@ -774,7 +774,7 @@ Common Var(warn_system_headers) Warning
|
||||
Do not suppress warnings from system headers.
|
||||
|
||||
Wtrampolines
|
||||
-Common Var(warn_trampolines) Warning
|
||||
+Common Var(warn_trampolines) Init(1) Warning
|
||||
Warn whenever a trampoline is generated.
|
||||
|
||||
Wtype-limits
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
From 98b2b8f7de60ed1b6b7602124ef6db278cf3c212 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:49:40 +0000
|
||||
Subject: [PATCH 08/40] Disable ssp on -nostdlib, -nodefaultlibs and
|
||||
-ffreestanding Change the buffer size.
|
||||
|
||||
---
|
||||
gcc/gcc.c | 8 +++++++-
|
||||
gcc/params.opt | 2 +-
|
||||
2 files changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index 7aec9d3a016..daeb4d0c8ea 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -886,6 +886,12 @@ proper position among the other output files. */
|
||||
#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L %G}"
|
||||
#endif
|
||||
|
||||
+#ifdef ENABLE_DEFAULT_SSP
|
||||
+#define NO_SSP_SPEC "%{nostdlib|nodefaultlibs|ffreestanding:-fno-stack-protector} "
|
||||
+#else
|
||||
+#define NO_SSP_SPEC ""
|
||||
+#endif
|
||||
+
|
||||
#ifndef LINK_SSP_SPEC
|
||||
#ifdef TARGET_LIBC_PROVIDES_SSP
|
||||
#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
||||
@@ -1170,7 +1176,7 @@ static const char *cc1_options =
|
||||
%{-version:--version}\
|
||||
%{-help=*:--help=%*}\
|
||||
%{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}}\
|
||||
- %{fsyntax-only:-o %j} %{-param*}\
|
||||
+ %{fsyntax-only:-o %j} %{-param*} " NO_SSP_SPEC "\
|
||||
%{coverage:-fprofile-arcs -ftest-coverage}\
|
||||
%{fprofile-arcs|fprofile-generate*|coverage:\
|
||||
%{!fprofile-update=single:\
|
||||
diff --git a/gcc/params.opt b/gcc/params.opt
|
||||
index 4aec480798b..eaecfab37ad 100644
|
||||
--- a/gcc/params.opt
|
||||
+++ b/gcc/params.opt
|
||||
@@ -853,7 +853,7 @@ Common Joined UInteger Var(param_ssa_name_def_chain_limit) Init(512) Param Optim
|
||||
The maximum number of SSA_NAME assignments to follow in determining a value.
|
||||
|
||||
-param=ssp-buffer-size=
|
||||
-Common Joined UInteger Var(param_ssp_buffer_size) Init(8) IntegerRange(1, 65536) Param Optimization
|
||||
+Common Joined UInteger Var(param_ssp_buffer_size) Init(4) IntegerRange(1, 65536) Param Optimization
|
||||
The lower bound for a buffer to be considered for stack smashing protection.
|
||||
|
||||
-param=stack-clash-protection-guard-size=
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
From b693804c8dba92fea7beee98f0aa520853a0532b Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Thu, 22 Dec 2016 11:22:28 +0000
|
||||
Subject: [PATCH 08/12] s390x muslldso
|
||||
|
||||
---
|
||||
gcc/config/s390/linux.h | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
|
||||
index 525c17c2c9f..2d4f4a0654e 100644
|
||||
--- a/gcc/config/s390/linux.h
|
||||
+++ b/gcc/config/s390/linux.h
|
||||
@@ -76,6 +76,9 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
|
||||
#define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1"
|
||||
|
||||
+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-s390.so.1"
|
||||
+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-s390x.so.1"
|
||||
+
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC \
|
||||
"%{m31:-m elf_s390}%{m64:-m elf64_s390} \
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
From 035775ef38206ed2859500efe5fb42ceec2e858d Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:50:33 +0000
|
||||
Subject: [PATCH 09/40] Ensure that msgfmt doesn't encounter problems during
|
||||
gcc bootstrapping.
|
||||
|
||||
Solves error messages like the following:
|
||||
|
||||
msgfmt: /var/tmp/portage/sys-devel/gcc-4.1.2/work/build/./gcc/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libstdc++.so.6)
|
||||
|
||||
The libgcc_s.so used during build doesn't satisfy the needs of the
|
||||
libstdc++.so that msgfmt is linked against. On the other hand, msgfmt
|
||||
is used as a stand-alone application here, and what library it uses
|
||||
behind the scenes is of no concern to the gcc build process.
|
||||
Therefore, simply invoking it "as usual", i.e. without any special
|
||||
library path, will make it work as expected here.
|
||||
|
||||
2011-09-19 Martin von Gagern
|
||||
|
||||
References:
|
||||
https://bugs.gentoo.org/372377
|
||||
https://bugs.gentoo.org/295480
|
||||
---
|
||||
libstdc++-v3/po/Makefile.am | 1 +
|
||||
libstdc++-v3/po/Makefile.in | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/libstdc++-v3/po/Makefile.am b/libstdc++-v3/po/Makefile.am
|
||||
index a9391d8d167..f7eee24dc8c 100644
|
||||
--- a/libstdc++-v3/po/Makefile.am
|
||||
+++ b/libstdc++-v3/po/Makefile.am
|
||||
@@ -38,6 +38,7 @@ MSGFMT = msgfmt
|
||||
EXTRA_DIST = string_literals.cc POTFILES.in $(PACKAGE).pot $(LOCALE_IN)
|
||||
|
||||
.po.mo:
|
||||
+ env --unset=LD_LIBRARY_PATH \
|
||||
$(MSGFMT) -o $@ $<
|
||||
|
||||
all-local: all-local-$(USE_NLS)
|
||||
diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in
|
||||
index a0f84b0cfa0..ab24a47a2fd 100644
|
||||
--- a/libstdc++-v3/po/Makefile.in
|
||||
+++ b/libstdc++-v3/po/Makefile.in
|
||||
@@ -548,6 +548,7 @@ uninstall-am:
|
||||
|
||||
|
||||
.po.mo:
|
||||
+ env --unset=LD_LIBRARY_PATH \
|
||||
$(MSGFMT) -o $@ $<
|
||||
|
||||
all-local: all-local-$(USE_NLS)
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
From e9875d74e75c601b95dba677bc9e58c869150212 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:52:07 +0000
|
||||
Subject: [PATCH 10/40] Don't declare asprintf if defined as a macro.
|
||||
|
||||
---
|
||||
include/libiberty.h | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/include/libiberty.h b/include/libiberty.h
|
||||
index 141cb886a85..fa0e78eb62f 100644
|
||||
--- a/include/libiberty.h
|
||||
+++ b/include/libiberty.h
|
||||
@@ -645,8 +645,11 @@ extern int pwait (int, int *, int);
|
||||
/* Like sprintf but provides a pointer to malloc'd storage, which must
|
||||
be freed by the caller. */
|
||||
|
||||
+/* asprintf may be declared as a macro by glibc with __USE_FORTIFY_LEVEL. */
|
||||
+#ifndef asprintf
|
||||
extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
/* Like asprintf but allocates memory without fail. This works like
|
||||
xmalloc. */
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
From 47467f3ab0fb2f2fcede81060fe8bb339d0909eb Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Wed, 28 Feb 2018 00:54:05 +0000
|
||||
Subject: [PATCH 10/12] ldbl128 config
|
||||
|
||||
---
|
||||
gcc/configure | 13 +++++++++++++
|
||||
gcc/configure.ac | 16 ++++++++++++++--
|
||||
2 files changed, 27 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gcc/configure b/gcc/configure
|
||||
index 6121e163259..07ff8597d48 100755
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -29309,6 +29309,15 @@ if test "${with_long_double_128+set}" = set; then :
|
||||
withval=$with_long_double_128; gcc_cv_target_ldbl128="$with_long_double_128"
|
||||
else
|
||||
|
||||
+ case "$target" in
|
||||
+ s390*-*-linux-musl*)
|
||||
+ gcc_cv_target_ldbl128=yes
|
||||
+ ;;
|
||||
+ powerpc*-*-linux-musl*)
|
||||
+ gcc_cv_target_ldbl128=no
|
||||
+ ;;
|
||||
+ *)
|
||||
+
|
||||
if test $glibc_version_major -gt 2 \
|
||||
|| ( test $glibc_version_major -eq 2 && test $glibc_version_minor -ge 4 ); then :
|
||||
gcc_cv_target_ldbl128=yes
|
||||
@@ -29320,6 +29329,10 @@ else
|
||||
&& gcc_cv_target_ldbl128=yes
|
||||
|
||||
fi
|
||||
+
|
||||
+ ;;
|
||||
+ esac
|
||||
+
|
||||
fi
|
||||
|
||||
;;
|
||||
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||||
index b066cc609e1..6c15ed898c0 100644
|
||||
--- a/gcc/configure.ac
|
||||
+++ b/gcc/configure.ac
|
||||
@@ -5971,13 +5971,25 @@ case "$target" in
|
||||
AC_ARG_WITH(long-double-128,
|
||||
[AS_HELP_STRING([--with-long-double-128],
|
||||
[use 128-bit long double by default])],
|
||||
- gcc_cv_target_ldbl128="$with_long_double_128",
|
||||
+ gcc_cv_target_ldbl128="$with_long_double_128", [
|
||||
+ case "$target" in
|
||||
+ s390*-*-linux-musl*)
|
||||
+ gcc_cv_target_ldbl128=yes
|
||||
+ ;;
|
||||
+ powerpc*-*-linux-musl*)
|
||||
+ gcc_cv_target_ldbl128=no
|
||||
+ ;;
|
||||
+ *)]
|
||||
[GCC_GLIBC_VERSION_GTE_IFELSE([2], [4], [gcc_cv_target_ldbl128=yes], [
|
||||
[gcc_cv_target_ldbl128=no
|
||||
grep '^[ ]*#[ ]*define[ ][ ]*__LONG_DOUBLE_MATH_OPTIONAL' \
|
||||
$target_header_dir/bits/wordsize.h > /dev/null 2>&1 \
|
||||
&& gcc_cv_target_ldbl128=yes
|
||||
- ]])])
|
||||
+ ]])]
|
||||
+ [
|
||||
+ ;;
|
||||
+ esac
|
||||
+ ])
|
||||
;;
|
||||
esac
|
||||
if test x$gcc_cv_target_ldbl128 = xyes; then
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
From 764e64bba73a7b7eb5154c8537781412252ed33e Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:53:00 +0000
|
||||
Subject: [PATCH 11/40] libiberty: copy PIC objects during build process
|
||||
|
||||
---
|
||||
libiberty/Makefile.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
|
||||
index d6b302e02fd..fd39928546f 100644
|
||||
--- a/libiberty/Makefile.in
|
||||
+++ b/libiberty/Makefile.in
|
||||
@@ -263,6 +263,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
|
||||
$(AR) $(AR_FLAGS) $(TARGETLIB) \
|
||||
$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
|
||||
$(RANLIB) $(TARGETLIB); \
|
||||
+ cp $(TARGETLIB) ../ ; \
|
||||
cd ..; \
|
||||
else true; fi
|
||||
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
From da46d99b1b7661a98064a45bdccf08c1867582b0 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:53:36 +0000
|
||||
Subject: [PATCH 12/40] libitm: disable FORTIFY
|
||||
|
||||
---
|
||||
libitm/configure.tgt | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/libitm/configure.tgt b/libitm/configure.tgt
|
||||
index 04109160e91..107b957ece3 100644
|
||||
--- a/libitm/configure.tgt
|
||||
+++ b/libitm/configure.tgt
|
||||
@@ -46,6 +46,16 @@ if test "$gcc_cv_have_tls" = yes ; then
|
||||
esac
|
||||
fi
|
||||
|
||||
+# FIXME: error: inlining failed in call to always_inline
|
||||
+# ‘int vfprintf(FILE*, const char*, __va_list_tag*)’
|
||||
+# : function body can be overwritten at link time
|
||||
+# Disable Fortify in libitm for now. #508852
|
||||
+case "${target}" in
|
||||
+ *-*-linux*)
|
||||
+ XCFLAGS="${XCFLAGS} -U_FORTIFY_SOURCE"
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
# Map the target cpu to an ARCH sub-directory. At the same time,
|
||||
# work out any special compilation flags as necessary.
|
||||
case "${target_cpu}" in
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
From a4aa319f7c19e564dced3daeb7222c9315af936c Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Sat, 18 Aug 2018 23:58:45 +0000
|
||||
Subject: [PATCH 12/12] static-pie
|
||||
|
||||
in gcc-8 -static means static non-pie, even if -pie or -static-pie
|
||||
are specified, -static-pie can be used to build static pie.
|
||||
|
||||
in musl toolchains -static -pie always meant static pie, so this
|
||||
patch fixes the link specs accordingly, the new -static-pie is just
|
||||
an alias to -static -pie.
|
||||
---
|
||||
gcc/common.opt | 4 ++--
|
||||
gcc/config/gnu-user.h | 12 +++++-------
|
||||
gcc/config/rs6000/sysv4.h | 11 +++++------
|
||||
gcc/gcc.c | 6 +++---
|
||||
4 files changed, 15 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/gcc/common.opt b/gcc/common.opt
|
||||
index b52ef0b38c8..0ce5857e01d 100644
|
||||
--- a/gcc/common.opt
|
||||
+++ b/gcc/common.opt
|
||||
@@ -3197,11 +3197,11 @@ Driver
|
||||
|
||||
no-pie
|
||||
Driver RejectNegative Negative(shared)
|
||||
-Don't create a dynamically linked position independent executable.
|
||||
+Don't create a position independent executable.
|
||||
|
||||
pie
|
||||
Driver RejectNegative Negative(no-pie)
|
||||
-Create a dynamically linked position independent executable.
|
||||
+Create a position independent executable.
|
||||
|
||||
static-pie
|
||||
Driver RejectNegative Negative(pie)
|
||||
diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
|
||||
index 8620de3e42d..235328a2642 100644
|
||||
--- a/gcc/config/gnu-user.h
|
||||
+++ b/gcc/config/gnu-user.h
|
||||
@@ -52,13 +52,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
#define GNU_USER_TARGET_STARTFILE_SPEC \
|
||||
"%{shared:; \
|
||||
pg|p|profile:%{static-pie:grcrt1.o%s;:gcrt1.o%s}; \
|
||||
- static:crt1.o%s; \
|
||||
- static-pie:rcrt1.o%s; \
|
||||
+ static|static-pie:%{" PIE_SPEC ":rcrt1.o%s;:crt1.o%s}; \
|
||||
" PIE_SPEC ":Scrt1.o%s; \
|
||||
:crt1.o%s} \
|
||||
crti.o%s \
|
||||
- %{static:crtbeginT.o%s; \
|
||||
- shared|static-pie|" PIE_SPEC ":crtbeginS.o%s; \
|
||||
+ %{shared|" PIE_SPEC ":crtbeginS.o%s; \
|
||||
+ static:crtbeginT.o%s; \
|
||||
:crtbegin.o%s} \
|
||||
%{fvtable-verify=none:%s; \
|
||||
fvtable-verify=preinit:vtv_start_preinit.o%s; \
|
||||
@@ -92,8 +91,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
"%{fvtable-verify=none:%s; \
|
||||
fvtable-verify=preinit:vtv_end_preinit.o%s; \
|
||||
fvtable-verify=std:vtv_end.o%s} \
|
||||
- %{static:crtend.o%s; \
|
||||
- shared|static-pie|" PIE_SPEC ":crtendS.o%s; \
|
||||
+ %{shared|" PIE_SPEC ":crtendS.o%s; \
|
||||
:crtend.o%s} \
|
||||
crtn.o%s \
|
||||
" CRTOFFLOADEND
|
||||
@@ -133,7 +131,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
|
||||
|
||||
#if defined(HAVE_LD_EH_FRAME_HDR)
|
||||
-#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
|
||||
+#define LINK_EH_SPEC "%{!static|" PIE_SPEC ":--eh-frame-hdr} "
|
||||
#endif
|
||||
|
||||
#undef LINK_GCC_C_SEQUENCE_SPEC
|
||||
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
|
||||
index bb19d0dcd41..bb2a2324eb0 100644
|
||||
--- a/gcc/config/rs6000/sysv4.h
|
||||
+++ b/gcc/config/rs6000/sysv4.h
|
||||
@@ -763,12 +763,12 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
|
||||
#define STARTFILE_LINUX_SPEC \
|
||||
"%{shared:; \
|
||||
pg|p|profile:gcrt1.o%s; \
|
||||
- static:crt1.o%s; \
|
||||
- static-pie|" PIE_SPEC ":Scrt1.o%s; \
|
||||
+ static|static-pie:%{" PIE_SPEC ":rcrt1.o%s;:crt1.o%s}; \
|
||||
+ " PIE_SPEC ":Scrt1.o%s; \
|
||||
:crt1.o%s} \
|
||||
%{mnewlib:ecrti.o%s;:crti.o%s} \
|
||||
- %{static:crtbeginT.o%s; \
|
||||
- shared|static-pie|" PIE_SPEC ":crtbeginS.o%s; \
|
||||
+ %{shared|" PIE_SPEC ":crtbeginS.o%s; \
|
||||
+ static:crtbeginT.o%s; \
|
||||
:crtbegin.o%s} \
|
||||
%{fvtable-verify=none:%s; \
|
||||
fvtable-verify=preinit:vtv_start_preinit.o%s; \
|
||||
@@ -781,8 +781,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
|
||||
"%{fvtable-verify=none:%s; \
|
||||
fvtable-verify=preinit:vtv_end_preinit.o%s; \
|
||||
fvtable-verify=std:vtv_end.o%s} \
|
||||
- %{static:crtend.o%s; \
|
||||
- shared|static-pie|" PIE_SPEC ":crtendS.o%s; \
|
||||
+ %{shared|" PIE_SPEC ":crtendS.o%s; \
|
||||
:crtend.o%s} \
|
||||
%{mnewlib:ecrtn.o%s;:crtn.o%s} \
|
||||
" CRTOFFLOADEND
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index eb1610ba8b0..87560afb03c 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -900,7 +900,7 @@ proper position among the other output files. */
|
||||
#define NO_FPIE_AND_FPIC_SPEC NO_FPIE_SPEC "|" NO_FPIC_SPEC
|
||||
#define FPIE_OR_FPIC_SPEC NO_FPIE_AND_FPIC_SPEC ":;"
|
||||
#else
|
||||
-#define PIE_SPEC "pie"
|
||||
+#define PIE_SPEC "pie|static-pie"
|
||||
#define FPIE1_SPEC "fpie"
|
||||
#define NO_FPIE1_SPEC FPIE1_SPEC ":;"
|
||||
#define FPIE2_SPEC "fPIE"
|
||||
@@ -924,12 +924,12 @@ proper position among the other output files. */
|
||||
#ifndef LINK_PIE_SPEC
|
||||
#ifdef HAVE_LD_PIE
|
||||
#ifndef LD_PIE_SPEC
|
||||
-#define LD_PIE_SPEC "-pie"
|
||||
+#define LD_PIE_SPEC "-pie %{static|static-pie:--no-dynamic-linker -z text -Bsymbolic}"
|
||||
#endif
|
||||
#else
|
||||
#define LD_PIE_SPEC ""
|
||||
#endif
|
||||
-#define LINK_PIE_SPEC "%{static|shared|r:;" PIE_SPEC ":" LD_PIE_SPEC "} "
|
||||
+#define LINK_PIE_SPEC "%{shared|r:;" PIE_SPEC ":" LD_PIE_SPEC "} "
|
||||
#endif
|
||||
|
||||
#ifndef LINK_BUILDID_SPEC
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
From 354f2a8ceb70f9f6e1688ba41c1cc1c17ac87329 Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Sat, 24 Oct 2015 20:09:53 +0000
|
||||
Subject: [PATCH 13/40] libgcc_s
|
||||
|
||||
---
|
||||
gcc/config/i386/i386-expand.c | 4 ++--
|
||||
libgcc/config/i386/cpuinfo.c | 6 +++---
|
||||
libgcc/config/i386/t-linux | 2 +-
|
||||
3 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c
|
||||
index c6033688f51..a60e5162995 100644
|
||||
--- a/gcc/config/i386/i386-expand.c
|
||||
+++ b/gcc/config/i386/i386-expand.c
|
||||
@@ -10966,10 +10966,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget,
|
||||
{
|
||||
case IX86_BUILTIN_CPU_INIT:
|
||||
{
|
||||
- /* Make it call __cpu_indicator_init in libgcc. */
|
||||
+ /* Make it call __cpu_indicator_init_local in libgcc.a. */
|
||||
tree call_expr, fndecl, type;
|
||||
type = build_function_type_list (integer_type_node, NULL_TREE);
|
||||
- fndecl = build_fn_decl ("__cpu_indicator_init", type);
|
||||
+ fndecl = build_fn_decl ("__cpu_indicator_init_local", type);
|
||||
call_expr = build_call_expr (fndecl, 0);
|
||||
return expand_expr (call_expr, target, mode, EXPAND_NORMAL);
|
||||
}
|
||||
diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c
|
||||
index cf5f0884bb4..ed0381e7744 100644
|
||||
--- a/libgcc/config/i386/cpuinfo.c
|
||||
+++ b/libgcc/config/i386/cpuinfo.c
|
||||
@@ -510,7 +510,7 @@ __cpu_indicator_init (void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-#if defined SHARED && defined USE_ELF_SYMVER
|
||||
-__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0");
|
||||
-__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0");
|
||||
+#ifndef SHARED
|
||||
+int __cpu_indicator_init_local (void)
|
||||
+ __attribute__ ((weak, alias ("__cpu_indicator_init")));
|
||||
#endif
|
||||
diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux
|
||||
index 8506a635790..564296f788e 100644
|
||||
--- a/libgcc/config/i386/t-linux
|
||||
+++ b/libgcc/config/i386/t-linux
|
||||
@@ -3,5 +3,5 @@
|
||||
# t-slibgcc-elf-ver and t-linux
|
||||
SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver
|
||||
|
||||
-HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER $(CET_FLAGS)
|
||||
+HOST_LIBGCC2_CFLAGS += -mlong-double-80 $(CET_FLAGS)
|
||||
CRTSTUFF_T_CFLAGS += $(CET_FLAGS)
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
From 7fb84007ff62309abffdbddfa751e69c331e82c3 Mon Sep 17 00:00:00 2001
|
||||
From: Szabolcs Nagy <nsz@port70.net>
|
||||
Date: Sat, 7 Nov 2015 02:08:05 +0000
|
||||
Subject: [PATCH 14/40] nopie
|
||||
|
||||
---
|
||||
gcc/configure | 27 +++++++++++++++++++++++++++
|
||||
gcc/configure.ac | 13 +++++++++++++
|
||||
2 files changed, 40 insertions(+)
|
||||
|
||||
diff --git a/gcc/configure b/gcc/configure
|
||||
index 793530e21cf..2d874d3defe 100755
|
||||
--- a/gcc/configure
|
||||
+++ b/gcc/configure
|
||||
@@ -30779,6 +30779,33 @@ fi
|
||||
$as_echo "$gcc_cv_no_pie" >&6; }
|
||||
if test "$gcc_cv_no_pie" = "yes"; then
|
||||
NO_PIE_FLAG="-no-pie"
|
||||
+else
|
||||
+ # Check if -nopie works.
|
||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -nopie option" >&5
|
||||
+$as_echo_n "checking for -nopie option... " >&6; }
|
||||
+if test "${gcc_cv_nopie+set}" = set; then :
|
||||
+ $as_echo_n "(cached) " >&6
|
||||
+else
|
||||
+ saved_LDFLAGS="$LDFLAGS"
|
||||
+ LDFLAGS="$LDFLAGS -nopie"
|
||||
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
+/* end confdefs.h. */
|
||||
+int main(void) {return 0;}
|
||||
+_ACEOF
|
||||
+if ac_fn_cxx_try_link "$LINENO"; then :
|
||||
+ gcc_cv_nopie=yes
|
||||
+else
|
||||
+ gcc_cv_nopie=no
|
||||
+fi
|
||||
+rm -f core conftest.err conftest.$ac_objext \
|
||||
+ conftest$ac_exeext conftest.$ac_ext
|
||||
+ LDFLAGS="$saved_LDFLAGS"
|
||||
+fi
|
||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_nopie" >&5
|
||||
+$as_echo "$gcc_cv_nopie" >&6; }
|
||||
+ if test "$gcc_cv_nopie" = "yes"; then
|
||||
+ NO_PIE_FLAG="-nopie"
|
||||
+ fi
|
||||
fi
|
||||
|
||||
|
||||
diff --git a/gcc/configure.ac b/gcc/configure.ac
|
||||
index 0fd438e39e5..0b257e687ee 100644
|
||||
--- a/gcc/configure.ac
|
||||
+++ b/gcc/configure.ac
|
||||
@@ -6863,6 +6863,19 @@ AC_CACHE_CHECK([for -no-pie option],
|
||||
LDFLAGS="$saved_LDFLAGS"])
|
||||
if test "$gcc_cv_no_pie" = "yes"; then
|
||||
NO_PIE_FLAG="-no-pie"
|
||||
+else
|
||||
+ # Check if -nopie works.
|
||||
+ AC_CACHE_CHECK([for -nopie option],
|
||||
+ [gcc_cv_nopie],
|
||||
+ [saved_LDFLAGS="$LDFLAGS"
|
||||
+ LDFLAGS="$LDFLAGS -nopie"
|
||||
+ AC_LINK_IFELSE([int main(void) {return 0;}],
|
||||
+ [gcc_cv_nopie=yes],
|
||||
+ [gcc_cv_nopie=no])
|
||||
+ LDFLAGS="$saved_LDFLAGS"])
|
||||
+ if test "$gcc_cv_nopie" = "yes"; then
|
||||
+ NO_PIE_FLAG="-nopie"
|
||||
+ fi
|
||||
fi
|
||||
AC_SUBST([NO_PIE_FLAG])
|
||||
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From 3f764eb6dc371cc48cfdf231cbd40e64b1f2a671 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:57:09 +0000
|
||||
Subject: [PATCH 15/40] libffi: use __linux__ instead of __gnu_linux__ for musl
|
||||
|
||||
---
|
||||
libffi/src/closures.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libffi/src/closures.c b/libffi/src/closures.c
|
||||
index 721ff00ea43..22a699c6340 100644
|
||||
--- a/libffi/src/closures.c
|
||||
+++ b/libffi/src/closures.c
|
||||
@@ -34,7 +34,7 @@
|
||||
#include <ffi_common.h>
|
||||
|
||||
#if !FFI_MMAP_EXEC_WRIT && !FFI_EXEC_TRAMPOLINE_TABLE
|
||||
-# if __gnu_linux__ && !defined(__ANDROID__)
|
||||
+# if __linux__ && !defined(__ANDROID__)
|
||||
/* This macro indicates it may be forbidden to map anonymous memory
|
||||
with both write and execute permission. Code compiled when this
|
||||
option is defined will attempt to map such pages once, but if it
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,425 +0,0 @@
|
||||
From b78dea0f8f09d4092bec52b7ada719ead2552dd2 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:57:51 +0000
|
||||
Subject: [PATCH 16/40] dlang: update zlib binding
|
||||
|
||||
---
|
||||
libphobos/src/std/zlib.d | 266 ++++++++++++++++++++++++++++-----------
|
||||
1 file changed, 196 insertions(+), 70 deletions(-)
|
||||
|
||||
diff --git a/libphobos/src/std/zlib.d b/libphobos/src/std/zlib.d
|
||||
index e6cce240fd5..bd2fe37ebec 100644
|
||||
--- a/libphobos/src/std/zlib.d
|
||||
+++ b/libphobos/src/std/zlib.d
|
||||
@@ -1,7 +1,7 @@
|
||||
// Written in the D programming language.
|
||||
|
||||
/**
|
||||
- * Compress/decompress data using the $(HTTP www._zlib.net, _zlib library).
|
||||
+ * Compress/decompress data using the $(HTTP www.zlib.net, zlib library).
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
@@ -43,12 +43,12 @@
|
||||
* References:
|
||||
* $(HTTP en.wikipedia.org/wiki/Zlib, Wikipedia)
|
||||
*
|
||||
- * Copyright: Copyright Digital Mars 2000 - 2011.
|
||||
+ * Copyright: Copyright The D Language Foundation 2000 - 2011.
|
||||
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
|
||||
* Authors: $(HTTP digitalmars.com, Walter Bright)
|
||||
- * Source: $(PHOBOSSRC std/_zlib.d)
|
||||
+ * Source: $(PHOBOSSRC std/zlib.d)
|
||||
*/
|
||||
-/* Copyright Digital Mars 2000 - 2011.
|
||||
+/* Copyright The D Language Foundation 2000 - 2011.
|
||||
* Distributed under the Boost Software License, Version 1.0.
|
||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||
* http://www.boost.org/LICENSE_1_0.txt)
|
||||
@@ -75,9 +75,9 @@ enum
|
||||
|
||||
class ZlibException : Exception
|
||||
{
|
||||
- this(int errnum)
|
||||
- { string msg;
|
||||
-
|
||||
+ private static string getmsg(int errnum) nothrow @nogc pure @safe
|
||||
+ {
|
||||
+ string msg;
|
||||
switch (errnum)
|
||||
{
|
||||
case Z_STREAM_END: msg = "stream end"; break;
|
||||
@@ -90,7 +90,12 @@ class ZlibException : Exception
|
||||
case Z_VERSION_ERROR: msg = "version error"; break;
|
||||
default: msg = "unknown error"; break;
|
||||
}
|
||||
- super(msg);
|
||||
+ return msg;
|
||||
+ }
|
||||
+
|
||||
+ this(int errnum)
|
||||
+ {
|
||||
+ super(getmsg(errnum));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +109,7 @@ class ZlibException : Exception
|
||||
* buf = buffer containing input data
|
||||
*
|
||||
* Returns:
|
||||
- * A $(D uint) checksum for the provided input data and starting checksum
|
||||
+ * A `uint` checksum for the provided input data and starting checksum
|
||||
*
|
||||
* See_Also:
|
||||
* $(LINK http://en.wikipedia.org/wiki/Adler-32)
|
||||
@@ -147,7 +152,7 @@ uint adler32(uint adler, const(void)[] buf)
|
||||
* buf = buffer containing input data
|
||||
*
|
||||
* Returns:
|
||||
- * A $(D uint) checksum for the provided input data and starting checksum
|
||||
+ * A `uint` checksum for the provided input data and starting checksum
|
||||
*
|
||||
* See_Also:
|
||||
* $(LINK http://en.wikipedia.org/wiki/Cyclic_redundancy_check)
|
||||
@@ -191,13 +196,14 @@ uint crc32(uint crc, const(void)[] buf)
|
||||
ubyte[] compress(const(void)[] srcbuf, int level)
|
||||
in
|
||||
{
|
||||
- assert(-1 <= level && level <= 9);
|
||||
+ assert(-1 <= level && level <= 9, "Compression level needs to be within [-1, 9].");
|
||||
}
|
||||
-body
|
||||
+do
|
||||
{
|
||||
import core.memory : GC;
|
||||
+ import std.array : uninitializedArray;
|
||||
auto destlen = srcbuf.length + ((srcbuf.length + 1023) / 1024) + 12;
|
||||
- auto destbuf = new ubyte[destlen];
|
||||
+ auto destbuf = uninitializedArray!(ubyte[])(destlen);
|
||||
auto err = etc.c.zlib.compress2(destbuf.ptr, &destlen, cast(ubyte *) srcbuf.ptr, srcbuf.length, level);
|
||||
if (err)
|
||||
{
|
||||
@@ -276,7 +282,7 @@ void[] uncompress(const(void)[] srcbuf, size_t destlen = 0u, int winbits = 15)
|
||||
throw new ZlibException(err);
|
||||
}
|
||||
}
|
||||
- assert(0);
|
||||
+ assert(0, "Unreachable code");
|
||||
}
|
||||
|
||||
@system unittest
|
||||
@@ -370,9 +376,9 @@ class Compress
|
||||
this(int level, HeaderFormat header = HeaderFormat.deflate)
|
||||
in
|
||||
{
|
||||
- assert(1 <= level && level <= 9);
|
||||
+ assert(1 <= level && level <= 9, "Legal compression level are in [1, 9].");
|
||||
}
|
||||
- body
|
||||
+ do
|
||||
{
|
||||
this.level = level;
|
||||
this.gzip = header == HeaderFormat.gzip;
|
||||
@@ -406,6 +412,7 @@ class Compress
|
||||
const(void)[] compress(const(void)[] buf)
|
||||
{
|
||||
import core.memory : GC;
|
||||
+ import std.array : uninitializedArray;
|
||||
int err;
|
||||
ubyte[] destbuf;
|
||||
|
||||
@@ -420,7 +427,7 @@ class Compress
|
||||
inited = 1;
|
||||
}
|
||||
|
||||
- destbuf = new ubyte[zs.avail_in + buf.length];
|
||||
+ destbuf = uninitializedArray!(ubyte[])(zs.avail_in + buf.length);
|
||||
zs.next_out = destbuf.ptr;
|
||||
zs.avail_out = to!uint(destbuf.length);
|
||||
|
||||
@@ -461,9 +468,10 @@ class Compress
|
||||
void[] flush(int mode = Z_FINISH)
|
||||
in
|
||||
{
|
||||
- assert(mode == Z_FINISH || mode == Z_SYNC_FLUSH || mode == Z_FULL_FLUSH);
|
||||
+ assert(mode == Z_FINISH || mode == Z_SYNC_FLUSH || mode == Z_FULL_FLUSH,
|
||||
+ "Mode must be either Z_FINISH, Z_SYNC_FLUSH or Z_FULL_FLUSH.");
|
||||
}
|
||||
- body
|
||||
+ do
|
||||
{
|
||||
import core.memory : GC;
|
||||
ubyte[] destbuf;
|
||||
@@ -523,6 +531,7 @@ class UnCompress
|
||||
z_stream zs;
|
||||
int inited;
|
||||
int done;
|
||||
+ bool inputEnded;
|
||||
size_t destbufsize;
|
||||
|
||||
HeaderFormat format;
|
||||
@@ -571,16 +580,16 @@ class UnCompress
|
||||
const(void)[] uncompress(const(void)[] buf)
|
||||
in
|
||||
{
|
||||
- assert(!done);
|
||||
+ assert(!done, "Buffer has been flushed.");
|
||||
}
|
||||
- body
|
||||
+ do
|
||||
{
|
||||
+ if (inputEnded || !buf.length)
|
||||
+ return null;
|
||||
+
|
||||
import core.memory : GC;
|
||||
+ import std.array : uninitializedArray;
|
||||
int err;
|
||||
- ubyte[] destbuf;
|
||||
-
|
||||
- if (buf.length == 0)
|
||||
- return null;
|
||||
|
||||
if (!inited)
|
||||
{
|
||||
@@ -598,26 +607,152 @@ class UnCompress
|
||||
|
||||
if (!destbufsize)
|
||||
destbufsize = to!uint(buf.length) * 2;
|
||||
- destbuf = new ubyte[zs.avail_in * 2 + destbufsize];
|
||||
- zs.next_out = destbuf.ptr;
|
||||
- zs.avail_out = to!uint(destbuf.length);
|
||||
-
|
||||
- if (zs.avail_in)
|
||||
- buf = zs.next_in[0 .. zs.avail_in] ~ cast(ubyte[]) buf;
|
||||
+ auto destbuf = uninitializedArray!(ubyte[])(destbufsize);
|
||||
+ size_t destFill;
|
||||
|
||||
zs.next_in = cast(ubyte*) buf.ptr;
|
||||
zs.avail_in = to!uint(buf.length);
|
||||
|
||||
- err = inflate(&zs, Z_NO_FLUSH);
|
||||
- if (err != Z_STREAM_END && err != Z_OK)
|
||||
+ while (true)
|
||||
{
|
||||
- GC.free(destbuf.ptr);
|
||||
- error(err);
|
||||
+ auto oldAvailIn = zs.avail_in;
|
||||
+
|
||||
+ zs.next_out = destbuf[destFill .. $].ptr;
|
||||
+ zs.avail_out = to!uint(destbuf.length - destFill);
|
||||
+
|
||||
+ err = inflate(&zs, Z_NO_FLUSH);
|
||||
+ if (err == Z_STREAM_END)
|
||||
+ {
|
||||
+ inputEnded = true;
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (err != Z_OK)
|
||||
+ {
|
||||
+ GC.free(destbuf.ptr);
|
||||
+ error(err);
|
||||
+ }
|
||||
+ else if (!zs.avail_in)
|
||||
+ break;
|
||||
+
|
||||
+ /*
|
||||
+ According to the zlib manual inflate() stops when either there's
|
||||
+ no more data to uncompress or the output buffer is full
|
||||
+ So at this point, the output buffer is too full
|
||||
+ */
|
||||
+
|
||||
+ destFill = destbuf.length;
|
||||
+
|
||||
+ if (destbuf.capacity)
|
||||
+ {
|
||||
+ if (destbuf.length < destbuf.capacity)
|
||||
+ destbuf.length = destbuf.capacity;
|
||||
+ else
|
||||
+ {
|
||||
+ auto newLength = GC.extend(destbuf.ptr, destbufsize, destbufsize);
|
||||
+
|
||||
+ if (newLength && destbuf.length < destbuf.capacity)
|
||||
+ destbuf.length = destbuf.capacity;
|
||||
+ else
|
||||
+ destbuf.length += destbufsize;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ destbuf.length += destbufsize;
|
||||
}
|
||||
+
|
||||
destbuf.length = destbuf.length - zs.avail_out;
|
||||
return destbuf;
|
||||
}
|
||||
|
||||
+ // Test for issues 3191 and 9505
|
||||
+ @system unittest
|
||||
+ {
|
||||
+ import std.algorithm.comparison;
|
||||
+ import std.array;
|
||||
+ import std.file;
|
||||
+ import std.zlib;
|
||||
+
|
||||
+ // Data that can be easily compressed
|
||||
+ ubyte[1024] originalData;
|
||||
+
|
||||
+ // This should yield a compression ratio of at least 1/2
|
||||
+ auto compressedData = compress(originalData, 9);
|
||||
+ assert(compressedData.length < originalData.length / 2,
|
||||
+ "The compression ratio is too low to accurately test this situation");
|
||||
+
|
||||
+ auto chunkSize = compressedData.length / 4;
|
||||
+ assert(chunkSize < compressedData.length,
|
||||
+ "The length of the compressed data is too small to accurately test this situation");
|
||||
+
|
||||
+ auto decompressor = new UnCompress();
|
||||
+ ubyte[originalData.length] uncompressedData;
|
||||
+ ubyte[] reusedBuf;
|
||||
+ int progress;
|
||||
+
|
||||
+ reusedBuf.length = chunkSize;
|
||||
+
|
||||
+ for (int i = 0; i < compressedData.length; i += chunkSize)
|
||||
+ {
|
||||
+ auto len = min(chunkSize, compressedData.length - i);
|
||||
+ // simulate reading from a stream in small chunks
|
||||
+ reusedBuf[0 .. len] = compressedData[i .. i + len];
|
||||
+
|
||||
+ // decompress using same input buffer
|
||||
+ auto chunk = decompressor.uncompress(reusedBuf);
|
||||
+ assert(progress + chunk.length <= originalData.length,
|
||||
+ "The uncompressed result is bigger than the original data");
|
||||
+
|
||||
+ uncompressedData[progress .. progress + chunk.length] = cast(const ubyte[]) chunk[];
|
||||
+ progress += chunk.length;
|
||||
+ }
|
||||
+
|
||||
+ auto chunk = decompressor.flush();
|
||||
+ assert(progress + chunk.length <= originalData.length,
|
||||
+ "The uncompressed result is bigger than the original data");
|
||||
+
|
||||
+ uncompressedData[progress .. progress + chunk.length] = cast(const ubyte[]) chunk[];
|
||||
+ progress += chunk.length;
|
||||
+
|
||||
+ assert(progress == originalData.length,
|
||||
+ "The uncompressed and the original data sizes differ");
|
||||
+ assert(originalData[] == uncompressedData[],
|
||||
+ "The uncompressed and the original data differ");
|
||||
+ }
|
||||
+
|
||||
+ @system unittest
|
||||
+ {
|
||||
+ ubyte[1024] invalidData;
|
||||
+ auto decompressor = new UnCompress();
|
||||
+
|
||||
+ try
|
||||
+ {
|
||||
+ auto uncompressedData = decompressor.uncompress(invalidData);
|
||||
+ }
|
||||
+ catch (ZlibException e)
|
||||
+ {
|
||||
+ assert(e.msg == "data error");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ assert(false, "Corrupted data didn't result in an error");
|
||||
+ }
|
||||
+
|
||||
+ @system unittest
|
||||
+ {
|
||||
+ ubyte[2014] originalData = void;
|
||||
+ auto compressedData = compress(originalData, 9);
|
||||
+
|
||||
+ auto decompressor = new UnCompress();
|
||||
+ auto uncompressedData = decompressor.uncompress(compressedData ~ cast(ubyte[]) "whatever");
|
||||
+
|
||||
+ assert(originalData.length == uncompressedData.length,
|
||||
+ "The uncompressed and the original data sizes differ");
|
||||
+ assert(originalData[] == uncompressedData[],
|
||||
+ "The uncompressed and the original data differ");
|
||||
+ assert(!decompressor.uncompress("whatever").length,
|
||||
+ "Compression continued after the end");
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Decompress and return any remaining data.
|
||||
* The returned data should be appended to that returned by uncompress().
|
||||
@@ -626,49 +761,40 @@ class UnCompress
|
||||
void[] flush()
|
||||
in
|
||||
{
|
||||
- assert(!done);
|
||||
+ assert(!done, "Buffer has been flushed before.");
|
||||
}
|
||||
out
|
||||
{
|
||||
- assert(done);
|
||||
+ assert(done, "Flushing failed.");
|
||||
}
|
||||
- body
|
||||
+ do
|
||||
{
|
||||
- import core.memory : GC;
|
||||
- ubyte[] extra;
|
||||
- ubyte[] destbuf;
|
||||
- int err;
|
||||
-
|
||||
done = 1;
|
||||
- if (!inited)
|
||||
- return null;
|
||||
+ return null;
|
||||
+ }
|
||||
|
||||
- L1:
|
||||
- destbuf = new ubyte[zs.avail_in * 2 + 100];
|
||||
- zs.next_out = destbuf.ptr;
|
||||
- zs.avail_out = to!uint(destbuf.length);
|
||||
+ /// Returns true if all input data has been decompressed and no further data
|
||||
+ /// can be decompressed (inflate() returned Z_STREAM_END)
|
||||
+ @property bool empty() const
|
||||
+ {
|
||||
+ return inputEnded;
|
||||
+ }
|
||||
|
||||
- err = etc.c.zlib.inflate(&zs, Z_NO_FLUSH);
|
||||
- if (err == Z_OK && zs.avail_out == 0)
|
||||
- {
|
||||
- extra ~= destbuf;
|
||||
- goto L1;
|
||||
- }
|
||||
- if (err != Z_STREAM_END)
|
||||
- {
|
||||
- GC.free(destbuf.ptr);
|
||||
- if (err == Z_OK)
|
||||
- err = Z_BUF_ERROR;
|
||||
- error(err);
|
||||
- }
|
||||
- destbuf = destbuf.ptr[0 .. zs.next_out - destbuf.ptr];
|
||||
- err = etc.c.zlib.inflateEnd(&zs);
|
||||
- inited = 0;
|
||||
- if (err)
|
||||
- error(err);
|
||||
- if (extra.length)
|
||||
- destbuf = extra ~ destbuf;
|
||||
- return destbuf;
|
||||
+ ///
|
||||
+ @system unittest
|
||||
+ {
|
||||
+ // some random data
|
||||
+ ubyte[1024] originalData = void;
|
||||
+
|
||||
+ // append garbage data (or don't, this works in both cases)
|
||||
+ auto compressedData = cast(ubyte[]) compress(originalData) ~ cast(ubyte[]) "whatever";
|
||||
+
|
||||
+ auto decompressor = new UnCompress();
|
||||
+ auto uncompressedData = decompressor.uncompress(compressedData);
|
||||
+
|
||||
+ assert(uncompressedData[] == originalData[],
|
||||
+ "The uncompressed and the original data differ");
|
||||
+ assert(decompressor.empty, "The UnCompressor reports not being done");
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
--- ./libgomp/configure.tgt.orig 2018-09-25 13:44:16.654561098 -0400
|
||||
+++ ./libgomp/configure.tgt 2018-09-25 13:44:50.452688100 -0400
|
||||
@@ -10,23 +10,6 @@
|
||||
# XCFLAGS Add extra compile flags to use.
|
||||
# XLDFLAGS Add extra link flags to use.
|
||||
|
||||
-# Optimize TLS usage by avoiding the overhead of dynamic allocation.
|
||||
-if test $gcc_cv_have_tls = yes ; then
|
||||
- case "${target}" in
|
||||
-
|
||||
- *-*-k*bsd*-gnu*)
|
||||
- ;;
|
||||
-
|
||||
- *-*-linux* | *-*-gnu*)
|
||||
- XCFLAGS="${XCFLAGS} -ftls-model=initial-exec"
|
||||
- ;;
|
||||
-
|
||||
- *-*-rtems*)
|
||||
- XCFLAGS="${XCFLAGS} -ftls-model=local-exec"
|
||||
- ;;
|
||||
- esac
|
||||
-fi
|
||||
-
|
||||
# Since we require POSIX threads, assume a POSIX system by default.
|
||||
config_path="posix"
|
||||
@@ -1,51 +0,0 @@
|
||||
From 58c529af8a9673b90dc7137065ab788c25b358a8 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:58:22 +0000
|
||||
Subject: [PATCH 17/40] dlang: fix fcntl on mips, add libucontext dep
|
||||
|
||||
---
|
||||
libphobos/configure.tgt | 1 +
|
||||
libphobos/libdruntime/core/sys/posix/fcntl.d | 15 +++++++++++++++
|
||||
2 files changed, 16 insertions(+)
|
||||
|
||||
diff --git a/libphobos/configure.tgt b/libphobos/configure.tgt
|
||||
index 94e42bf5509..73f2e4b7f01 100644
|
||||
--- a/libphobos/configure.tgt
|
||||
+++ b/libphobos/configure.tgt
|
||||
@@ -35,6 +35,7 @@ case "${target}" in
|
||||
;;
|
||||
mips*-*-linux*)
|
||||
LIBPHOBOS_SUPPORTED=yes
|
||||
+ LIBDRUNTIME_NEEDS_UCONTEXT=yes
|
||||
;;
|
||||
power*-*-linux*)
|
||||
LIBPHOBOS_SUPPORTED=yes
|
||||
diff --git a/libphobos/libdruntime/core/sys/posix/fcntl.d b/libphobos/libdruntime/core/sys/posix/fcntl.d
|
||||
index 9febcff849b..cb34e2108bd 100644
|
||||
--- a/libphobos/libdruntime/core/sys/posix/fcntl.d
|
||||
+++ b/libphobos/libdruntime/core/sys/posix/fcntl.d
|
||||
@@ -870,6 +870,21 @@ else version (CRuntime_Musl)
|
||||
F_SETLKW = 7,
|
||||
}
|
||||
}
|
||||
+ else version (MIPS_Any)
|
||||
+ {
|
||||
+ enum
|
||||
+ {
|
||||
+ O_DIRECTORY = 0x010000, // octal 0200000
|
||||
+ O_NOFOLLOW = 0x020000, // octal 0400000
|
||||
+ O_DIRECT = 0x008000, // octal 0100000
|
||||
+ O_LARGEFILE = 0x002000, // octal 0020000
|
||||
+ O_TMPFILE = 0x410000, // octal 020200000
|
||||
+
|
||||
+ F_GETLK = 33,
|
||||
+ F_SETLK = 34,
|
||||
+ F_SETLKW = 35,
|
||||
+ }
|
||||
+ }
|
||||
else
|
||||
static assert(0, "Platform not supported");
|
||||
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
From 2a614f9b702b02c312cd513eddb1fc6745f9a3ad Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:59:16 +0000
|
||||
Subject: [PATCH 18/40] ada: fix shared linking
|
||||
|
||||
---
|
||||
gcc/ada/link.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/gcc/ada/link.c b/gcc/ada/link.c
|
||||
index 02c413a412f..f0e52a87d6e 100644
|
||||
--- a/gcc/ada/link.c
|
||||
+++ b/gcc/ada/link.c
|
||||
@@ -107,9 +107,9 @@ const char *__gnat_default_libgcc_subdir = "lib";
|
||||
|| defined (__NetBSD__) || defined (__OpenBSD__) \
|
||||
|| defined (__QNX__)
|
||||
const char *__gnat_object_file_option = "-Wl,@";
|
||||
-const char *__gnat_run_path_option = "-Wl,-rpath,";
|
||||
-char __gnat_shared_libgnat_default = STATIC;
|
||||
-char __gnat_shared_libgcc_default = STATIC;
|
||||
+const char *__gnat_run_path_option = "";
|
||||
+char __gnat_shared_libgnat_default = SHARED;
|
||||
+char __gnat_shared_libgcc_default = SHARED;
|
||||
int __gnat_link_max = 8192;
|
||||
unsigned char __gnat_objlist_file_supported = 1;
|
||||
const char *__gnat_object_library_extension = ".a";
|
||||
@@ -129,9 +129,9 @@ const char *__gnat_default_libgcc_subdir = "lib";
|
||||
|
||||
#elif defined (__linux__) || defined (__GLIBC__)
|
||||
const char *__gnat_object_file_option = "-Wl,@";
|
||||
-const char *__gnat_run_path_option = "-Wl,-rpath,";
|
||||
-char __gnat_shared_libgnat_default = STATIC;
|
||||
-char __gnat_shared_libgcc_default = STATIC;
|
||||
+const char *__gnat_run_path_option = "";
|
||||
+char __gnat_shared_libgnat_default = SHARED;
|
||||
+char __gnat_shared_libgcc_default = SHARED;
|
||||
int __gnat_link_max = 8192;
|
||||
unsigned char __gnat_objlist_file_supported = 1;
|
||||
const char *__gnat_object_library_extension = ".a";
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
From dab36b973223e0d6853f564e845bc22dadcc4d2d Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 06:59:43 +0000
|
||||
Subject: [PATCH 19/40] build: fix CXXFLAGS_FOR_BUILD passing
|
||||
|
||||
---
|
||||
Makefile.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 36e369df6e7..63627db68cf 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -170,6 +170,7 @@ BUILD_EXPORTS = \
|
||||
# built for the build system to override those in BASE_FLAGS_TO_PASS.
|
||||
EXTRA_BUILD_FLAGS = \
|
||||
CFLAGS="$(CFLAGS_FOR_BUILD)" \
|
||||
+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \
|
||||
LDFLAGS="$(LDFLAGS_FOR_BUILD)"
|
||||
|
||||
# This is the list of directories to built for the host system.
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
From c2efb7703c2ef381a8b1d1cd751222e0a7e10665 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 07:00:17 +0000
|
||||
Subject: [PATCH 20/40] libstdc++: futex: add time64 compatibility
|
||||
|
||||
---
|
||||
libstdc++-v3/src/c++11/futex.cc | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/libstdc++-v3/src/c++11/futex.cc b/libstdc++-v3/src/c++11/futex.cc
|
||||
index c9de11a7ec7..7be702dbeda 100644
|
||||
--- a/libstdc++-v3/src/c++11/futex.cc
|
||||
+++ b/libstdc++-v3/src/c++11/futex.cc
|
||||
@@ -61,7 +61,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||
struct timeval tv;
|
||||
gettimeofday (&tv, NULL);
|
||||
// Convert the absolute timeout value to a relative timeout
|
||||
+#if defined(SYS_futex_time64)
|
||||
+ struct
|
||||
+ {
|
||||
+ long tv_sec;
|
||||
+ long tv_nsec;
|
||||
+ } rt;
|
||||
+#else
|
||||
struct timespec rt;
|
||||
+#endif
|
||||
rt.tv_sec = __s.count() - tv.tv_sec;
|
||||
rt.tv_nsec = __ns.count() - tv.tv_usec * 1000;
|
||||
if (rt.tv_nsec < 0)
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From ca8a8331acef15d0b3b095b8c63539acd1d93e8b Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 07:01:06 +0000
|
||||
Subject: [PATCH 21/40] add fortify-headers paths
|
||||
|
||||
---
|
||||
gcc/config/linux.h | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
|
||||
index 95654bcdb5a..d88df8f154a 100644
|
||||
--- a/gcc/config/linux.h
|
||||
+++ b/gcc/config/linux.h
|
||||
@@ -167,6 +167,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
|
||||
#ifdef NATIVE_SYSTEM_HEADER_DIR
|
||||
#define INCLUDE_DEFAULTS_MUSL_NATIVE \
|
||||
+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 2 }, \
|
||||
+ { NATIVE_SYSTEM_HEADER_DIR "/fortify", 0, 0, 0, 1, 0 }, \
|
||||
{ NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 }, \
|
||||
{ NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 },
|
||||
#else
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
From 23468db70f830e99ac138826d28cc33fa71d3405 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
|
||||
Date: Fri, 21 Aug 2020 07:03:00 +0000
|
||||
Subject: [PATCH 22/40] Alpine musl package provides libssp_nonshared.a. We
|
||||
link to it unconditionally, as otherwise we get link failures if some objects
|
||||
are -fstack-protector built and final link happens with -fno-stack-protector.
|
||||
This seems to be the common case when bootstrapping gcc, the piepatches do
|
||||
not seem to fully fix the crosstoolchain and bootstrap sequence wrt.
|
||||
stack-protector flag usage.
|
||||
|
||||
---
|
||||
gcc/gcc.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index daeb4d0c8ea..6920bec0fa0 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -894,8 +894,7 @@ proper position among the other output files. */
|
||||
|
||||
#ifndef LINK_SSP_SPEC
|
||||
#ifdef TARGET_LIBC_PROVIDES_SSP
|
||||
-#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
||||
- "|fstack-protector-strong|fstack-protector-explicit:}"
|
||||
+#define LINK_SSP_SPEC "-lssp_nonshared"
|
||||
#else
|
||||
#define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
|
||||
"|fstack-protector-strong|fstack-protector-explicit" \
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
From 67513cb76a43014172f54384c3bad0c41e949c8a Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 07:03:42 +0000
|
||||
Subject: [PATCH 23/40] DP: Use --push-state/--pop-state for gold as well when
|
||||
linking libtsan.
|
||||
|
||||
---
|
||||
gcc/gcc.c | 16 ++++++++--------
|
||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/gcc/gcc.c b/gcc/gcc.c
|
||||
index 6920bec0fa0..40e07354b3d 100644
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -696,10 +696,10 @@ proper position among the other output files. */
|
||||
#define LIBASAN_SPEC STATIC_LIBASAN_LIBS
|
||||
#elif defined(HAVE_LD_STATIC_DYNAMIC)
|
||||
#define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION "}" \
|
||||
- " %{!static-libasan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " %{!static-libasan:--push-state --no-as-needed}" \
|
||||
" -lasan " \
|
||||
" %{static-libasan:" LD_DYNAMIC_OPTION "}" \
|
||||
- " %{!static-libasan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
+ " %{!static-libasan:--pop-state}" \
|
||||
STATIC_LIBASAN_LIBS
|
||||
#else
|
||||
#define LIBASAN_SPEC "-lasan" STATIC_LIBASAN_LIBS
|
||||
@@ -717,10 +717,10 @@ proper position among the other output files. */
|
||||
#define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS
|
||||
#elif defined(HAVE_LD_STATIC_DYNAMIC)
|
||||
#define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \
|
||||
- " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " %{!static-libtsan:--push-state --no-as-needed}" \
|
||||
" -ltsan " \
|
||||
" %{static-libtsan:" LD_DYNAMIC_OPTION "}" \
|
||||
- " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
+ " %{!static-libtsan:--pop-state}" \
|
||||
STATIC_LIBTSAN_LIBS
|
||||
#else
|
||||
#define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS
|
||||
@@ -738,10 +738,10 @@ proper position among the other output files. */
|
||||
#define LIBLSAN_SPEC STATIC_LIBLSAN_LIBS
|
||||
#elif defined(HAVE_LD_STATIC_DYNAMIC)
|
||||
#define LIBLSAN_SPEC "%{static-liblsan:" LD_STATIC_OPTION "}" \
|
||||
- " %{!static-liblsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " %{!static-liblsan:--push-state --no-as-needed}" \
|
||||
" -llsan " \
|
||||
" %{static-liblsan:" LD_DYNAMIC_OPTION "}" \
|
||||
- " %{!static-liblsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
+ " %{!static-liblsan:--pop-state}" \
|
||||
STATIC_LIBLSAN_LIBS
|
||||
#else
|
||||
#define LIBLSAN_SPEC "-llsan" STATIC_LIBLSAN_LIBS
|
||||
@@ -757,10 +757,10 @@ proper position among the other output files. */
|
||||
" %{static-libubsan|static:%:include(libsanitizer.spec)%(link_libubsan)}"
|
||||
#ifdef HAVE_LD_STATIC_DYNAMIC
|
||||
#define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION "}" \
|
||||
- " %{!static-libubsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \
|
||||
+ " %{!static-libubsan:--push-state --no-as-needed}" \
|
||||
" -lubsan " \
|
||||
" %{static-libubsan:" LD_DYNAMIC_OPTION "}" \
|
||||
- " %{!static-libubsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \
|
||||
+ " %{!static-libubsan:--pop-state}" \
|
||||
STATIC_LIBUBSAN_LIBS
|
||||
#else
|
||||
#define LIBUBSAN_SPEC "-lubsan" STATIC_LIBUBSAN_LIBS
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
From 5d9d38da4f523c052a5bcd2562d79809b4136f2c Mon Sep 17 00:00:00 2001
|
||||
From: Nils Andreas Svee <me@lochnair.net>
|
||||
Date: Thu, 21 Dec 2017 03:14:33 +0100
|
||||
Subject: [PATCH 24/40] Pure 64-bit MIPS
|
||||
|
||||
---
|
||||
gcc/config/mips/mips.h | 8 ++++----
|
||||
gcc/config/mips/t-linux64 | 6 +++---
|
||||
2 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
|
||||
index 3ce0c19a29a..b9920b49167 100644
|
||||
--- a/gcc/config/mips/mips.h
|
||||
+++ b/gcc/config/mips/mips.h
|
||||
@@ -3424,11 +3424,11 @@ struct GTY(()) machine_function {
|
||||
/* If we are *not* using multilibs and the default ABI is not ABI_32 we
|
||||
need to change these from /lib and /usr/lib. */
|
||||
#if MIPS_ABI_DEFAULT == ABI_N32
|
||||
-#define STANDARD_STARTFILE_PREFIX_1 "/lib32/"
|
||||
-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib32/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_1 "/lib/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/"
|
||||
#elif MIPS_ABI_DEFAULT == ABI_64
|
||||
-#define STANDARD_STARTFILE_PREFIX_1 "/lib64/"
|
||||
-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib64/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_1 "/lib/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/"
|
||||
#endif
|
||||
|
||||
/* Load store bonding is not supported by micromips and fix_24k. The
|
||||
diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64
|
||||
index ceb58d3b5f3..8116e23ebba 100644
|
||||
--- a/gcc/config/mips/t-linux64
|
||||
+++ b/gcc/config/mips/t-linux64
|
||||
@@ -21,6 +21,6 @@ MULTILIB_DIRNAMES = n32 32 64
|
||||
MIPS_EL = $(if $(filter %el, $(firstword $(subst -, ,$(target)))),el)
|
||||
MIPS_SOFT = $(if $(strip $(filter MASK_SOFT_FLOAT_ABI, $(target_cpu_default)) $(filter soft, $(with_float))),soft)
|
||||
MULTILIB_OSDIRNAMES = \
|
||||
- ../lib32$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabin32$(MIPS_SOFT)) \
|
||||
- ../lib$(call if_multiarch,:mips$(MIPS_EL)-linux-gnu$(MIPS_SOFT)) \
|
||||
- ../lib64$(call if_multiarch,:mips64$(MIPS_EL)-linux-gnuabi64$(MIPS_SOFT))
|
||||
+ ../lib \
|
||||
+ ../lib32 \
|
||||
+ ../lib
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,121 +0,0 @@
|
||||
From ac0eeb3237ac2cf75c19be92afe3335c9a0d83bb Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 07:04:40 +0000
|
||||
Subject: [PATCH 25/40] use pure 64-bit configuration where appropriate
|
||||
|
||||
---
|
||||
gcc/config/aarch64/t-aarch64-linux | 2 +-
|
||||
gcc/config/i386/t-linux64 | 4 ++--
|
||||
gcc/config/rs6000/t-linux | 6 ++++--
|
||||
gcc/config/rs6000/t-linux64 | 4 ++--
|
||||
gcc/config/rs6000/t-linux64bele | 4 ++--
|
||||
gcc/config/rs6000/t-linux64lebe | 4 ++--
|
||||
gcc/config/s390/t-linux64 | 4 ++--
|
||||
7 files changed, 15 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/gcc/config/aarch64/t-aarch64-linux b/gcc/config/aarch64/t-aarch64-linux
|
||||
index 83e59e33b85..6ec56fdf6a8 100644
|
||||
--- a/gcc/config/aarch64/t-aarch64-linux
|
||||
+++ b/gcc/config/aarch64/t-aarch64-linux
|
||||
@@ -22,7 +22,7 @@ LIB1ASMSRC = aarch64/lib1funcs.asm
|
||||
LIB1ASMFUNCS = _aarch64_sync_cache_range
|
||||
|
||||
AARCH_BE = $(if $(findstring TARGET_BIG_ENDIAN_DEFAULT=1, $(tm_defines)),_be)
|
||||
-MULTILIB_OSDIRNAMES = mabi.lp64=../lib64$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES = mabi.lp64=../lib
|
||||
MULTIARCH_DIRNAME = $(call if_multiarch,aarch64$(AARCH_BE)-linux-gnu)
|
||||
|
||||
MULTILIB_OSDIRNAMES += mabi.ilp32=../libilp32$(call if_multiarch,:aarch64$(AARCH_BE)-linux-gnu_ilp32)
|
||||
diff --git a/gcc/config/i386/t-linux64 b/gcc/config/i386/t-linux64
|
||||
index 1171e218578..256f8c079ba 100644
|
||||
--- a/gcc/config/i386/t-linux64
|
||||
+++ b/gcc/config/i386/t-linux64
|
||||
@@ -33,6 +33,6 @@
|
||||
comma=,
|
||||
MULTILIB_OPTIONS = $(subst $(comma),/,$(TM_MULTILIB_CONFIG))
|
||||
MULTILIB_DIRNAMES = $(patsubst m%, %, $(subst /, ,$(MULTILIB_OPTIONS)))
|
||||
-MULTILIB_OSDIRNAMES = m64=../lib64$(call if_multiarch,:x86_64-linux-gnu)
|
||||
-MULTILIB_OSDIRNAMES+= m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:i386-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES = m64=../lib
|
||||
+MULTILIB_OSDIRNAMES+= m32=../lib32
|
||||
MULTILIB_OSDIRNAMES+= mx32=../libx32$(call if_multiarch,:x86_64-linux-gnux32)
|
||||
diff --git a/gcc/config/rs6000/t-linux b/gcc/config/rs6000/t-linux
|
||||
index aeb7440c492..ab14c455d8d 100644
|
||||
--- a/gcc/config/rs6000/t-linux
|
||||
+++ b/gcc/config/rs6000/t-linux
|
||||
@@ -2,7 +2,8 @@
|
||||
# or soft-float.
|
||||
ifeq (,$(filter $(with_cpu),$(SOFT_FLOAT_CPUS))$(findstring soft,$(with_float)))
|
||||
ifneq (,$(findstring powerpc64,$(target)))
|
||||
-MULTILIB_OSDIRNAMES := .=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES := m64=../lib
|
||||
+MULTILIB_OSDIRNAMES += m32=../lib32
|
||||
else
|
||||
MULTIARCH_DIRNAME := $(call if_multiarch,powerpc-linux-gnu)
|
||||
endif
|
||||
@@ -10,7 +11,8 @@ ifneq (,$(findstring powerpcle,$(target)))
|
||||
MULTIARCH_DIRNAME := $(subst -linux,le-linux,$(MULTIARCH_DIRNAME))
|
||||
endif
|
||||
ifneq (,$(findstring powerpc64le,$(target)))
|
||||
-MULTILIB_OSDIRNAMES := $(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))
|
||||
+MULTILIB_OSDIRNAMES := m64=../lib
|
||||
+MULTILIB_OSDIRNAMES += m32=../lib32
|
||||
endif
|
||||
endif
|
||||
|
||||
diff --git a/gcc/config/rs6000/t-linux64 b/gcc/config/rs6000/t-linux64
|
||||
index 264a7e27524..d1e460811cc 100644
|
||||
--- a/gcc/config/rs6000/t-linux64
|
||||
+++ b/gcc/config/rs6000/t-linux64
|
||||
@@ -28,8 +28,8 @@
|
||||
MULTILIB_OPTIONS := m64/m32
|
||||
MULTILIB_DIRNAMES := 64 32
|
||||
MULTILIB_EXTRA_OPTS :=
|
||||
-MULTILIB_OSDIRNAMES := m64=../lib64$(call if_multiarch,:powerpc64-linux-gnu)
|
||||
-MULTILIB_OSDIRNAMES += m32=$(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:powerpc-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES := m64=../lib
|
||||
+MULTILIB_OSDIRNAMES += m32=../lib32
|
||||
|
||||
rs6000-linux.o: $(srcdir)/config/rs6000/rs6000-linux.c
|
||||
$(COMPILE) $<
|
||||
diff --git a/gcc/config/rs6000/t-linux64bele b/gcc/config/rs6000/t-linux64bele
|
||||
index 97c1ee6fb4d..08d72639cb6 100644
|
||||
--- a/gcc/config/rs6000/t-linux64bele
|
||||
+++ b/gcc/config/rs6000/t-linux64bele
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
MULTILIB_OPTIONS += mlittle
|
||||
MULTILIB_DIRNAMES += le
|
||||
-MULTILIB_OSDIRNAMES += $(subst =,.mlittle=,$(subst lible32,lib32le,$(subst lible64,lib64le,$(subst lib,lible,$(subst -linux,le-linux,$(MULTILIB_OSDIRNAMES))))))
|
||||
-MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mlittle%,$(MULTILIB_OSDIRNAMES)))
|
||||
+MULTILIB_OSDIRNAMES = m64=../lib
|
||||
+MULTILIB_OSDIRNAMES+= m32=../lib32
|
||||
MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN}
|
||||
diff --git a/gcc/config/rs6000/t-linux64lebe b/gcc/config/rs6000/t-linux64lebe
|
||||
index 2e63bdb9fc9..c6e1c5db65d 100644
|
||||
--- a/gcc/config/rs6000/t-linux64lebe
|
||||
+++ b/gcc/config/rs6000/t-linux64lebe
|
||||
@@ -2,6 +2,6 @@
|
||||
|
||||
MULTILIB_OPTIONS += mbig
|
||||
MULTILIB_DIRNAMES += be
|
||||
-MULTILIB_OSDIRNAMES += $(subst =,.mbig=,$(subst libbe32,lib32be,$(subst libbe64,lib64be,$(subst lib,libbe,$(subst le-linux,-linux,$(MULTILIB_OSDIRNAMES))))))
|
||||
-MULTILIB_OSDIRNAMES += $(subst $(if $(findstring 64,$(target)),m64,m32).,,$(filter $(if $(findstring 64,$(target)),m64,m32).mbig%,$(MULTILIB_OSDIRNAMES)))
|
||||
+MULTILIB_OSDIRNAMES := m64=../lib
|
||||
+MULTILIB_OSDIRNAMES += m32=../lib32
|
||||
MULTILIB_MATCHES := ${MULTILIB_MATCHES_ENDIAN}
|
||||
diff --git a/gcc/config/s390/t-linux64 b/gcc/config/s390/t-linux64
|
||||
index cc6ab367072..7f498ee1cdc 100644
|
||||
--- a/gcc/config/s390/t-linux64
|
||||
+++ b/gcc/config/s390/t-linux64
|
||||
@@ -7,5 +7,5 @@
|
||||
|
||||
MULTILIB_OPTIONS = m64/m31
|
||||
MULTILIB_DIRNAMES = 64 32
|
||||
-MULTILIB_OSDIRNAMES = ../lib64$(call if_multiarch,:s390x-linux-gnu)
|
||||
-MULTILIB_OSDIRNAMES += $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib)$(call if_multiarch,:s390-linux-gnu)
|
||||
+MULTILIB_OSDIRNAMES = m64=../lib
|
||||
+MULTILIB_OSDIRNAMES+= m32=../lib32
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
From 3f35cf750117fa7cbceaf33e4bea008d0688bd93 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 07:05:41 +0000
|
||||
Subject: [PATCH 26/40] always build libgcc_eh.a
|
||||
|
||||
highly inspired by:
|
||||
http://landley.net/hg/aboriginal/file/7e0747a665ab/sources/patches/gcc-core-libgcceh.patch
|
||||
---
|
||||
libgcc/Makefile.in | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
|
||||
index 851e7657d07..99ec513a1a6 100644
|
||||
--- a/libgcc/Makefile.in
|
||||
+++ b/libgcc/Makefile.in
|
||||
@@ -956,8 +956,9 @@ ifneq ($(LIBUNWIND),)
|
||||
all: libunwind.a
|
||||
endif
|
||||
|
||||
+all: libgcc_eh.a
|
||||
ifeq ($(enable_shared),yes)
|
||||
-all: libgcc_eh.a libgcc_s$(SHLIB_EXT)
|
||||
+all: libgcc_s$(SHLIB_EXT)
|
||||
ifneq ($(LIBUNWIND),)
|
||||
all: libunwind$(SHLIB_EXT)
|
||||
libgcc_s$(SHLIB_EXT): libunwind$(SHLIB_EXT)
|
||||
@@ -1159,10 +1160,6 @@ install-libunwind:
|
||||
install-shared:
|
||||
$(mkinstalldirs) $(DESTDIR)$(inst_libdir)
|
||||
|
||||
- $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
|
||||
- chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
|
||||
- $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
|
||||
-
|
||||
$(subst @multilib_dir@,$(MULTIDIR),$(subst \
|
||||
@shlib_base_name@,libgcc_s,$(subst \
|
||||
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(SHLIB_INSTALL))))
|
||||
@@ -1179,6 +1176,10 @@ ifeq ($(enable_gcov),yes)
|
||||
$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
|
||||
endif
|
||||
|
||||
+ $(INSTALL_DATA) libgcc_eh.a $(DESTDIR)$(inst_libdir)/
|
||||
+ chmod 644 $(DESTDIR)$(inst_libdir)/libgcc_eh.a
|
||||
+ $(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc_eh.a
|
||||
+
|
||||
parts="$(INSTALL_PARTS)"; \
|
||||
for file in $$parts; do \
|
||||
rm -f $(DESTDIR)$(inst_libdir)/$$file; \
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
From 48342d154084bb9610b8f02f93fcfc2aa606595a Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 07:06:30 +0000
|
||||
Subject: [PATCH 27/40] ada: libgnarl compatibility for musl
|
||||
|
||||
---
|
||||
gcc/ada/libgnarl/s-osinte__linux.ads | 11 ------
|
||||
gcc/ada/libgnarl/s-taprop__linux.adb | 53 ++--------------------------
|
||||
2 files changed, 3 insertions(+), 61 deletions(-)
|
||||
|
||||
diff --git a/gcc/ada/libgnarl/s-osinte__linux.ads b/gcc/ada/libgnarl/s-osinte__linux.ads
|
||||
index 80cb2b2a793..701b7a3aeab 100644
|
||||
--- a/gcc/ada/libgnarl/s-osinte__linux.ads
|
||||
+++ b/gcc/ada/libgnarl/s-osinte__linux.ads
|
||||
@@ -399,12 +399,6 @@ package System.OS_Interface is
|
||||
PTHREAD_RWLOCK_PREFER_WRITER_NP : constant := 1;
|
||||
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
|
||||
|
||||
- function pthread_rwlockattr_setkind_np
|
||||
- (attr : access pthread_rwlockattr_t;
|
||||
- pref : int) return int;
|
||||
- pragma Import
|
||||
- (C, pthread_rwlockattr_setkind_np, "pthread_rwlockattr_setkind_np");
|
||||
-
|
||||
function pthread_rwlock_init
|
||||
(mutex : access pthread_rwlock_t;
|
||||
attr : access pthread_rwlockattr_t) return int;
|
||||
@@ -466,11 +460,6 @@ package System.OS_Interface is
|
||||
protocol : int) return int;
|
||||
pragma Import (C, pthread_mutexattr_setprotocol);
|
||||
|
||||
- function pthread_mutexattr_setprioceiling
|
||||
- (attr : access pthread_mutexattr_t;
|
||||
- prioceiling : int) return int;
|
||||
- pragma Import (C, pthread_mutexattr_setprioceiling);
|
||||
-
|
||||
type struct_sched_param is record
|
||||
sched_priority : int; -- scheduling priority
|
||||
end record;
|
||||
diff --git a/gcc/ada/libgnarl/s-taprop__linux.adb b/gcc/ada/libgnarl/s-taprop__linux.adb
|
||||
index c45559e5ba0..0b0f173e7d4 100644
|
||||
--- a/gcc/ada/libgnarl/s-taprop__linux.adb
|
||||
+++ b/gcc/ada/libgnarl/s-taprop__linux.adb
|
||||
@@ -202,9 +202,6 @@ package body System.Task_Primitives.Operations is
|
||||
pragma Import
|
||||
(C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
|
||||
|
||||
- function GNAT_has_cap_sys_nice return C.int;
|
||||
- pragma Import
|
||||
- (C, GNAT_has_cap_sys_nice, "__gnat_has_cap_sys_nice");
|
||||
-- We do not have pragma Linker_Options ("-lcap"); here, because this
|
||||
-- library is not present on many Linux systems. 'libcap' is the Linux
|
||||
-- "capabilities" library, called by __gnat_has_cap_sys_nice.
|
||||
@@ -214,38 +211,6 @@ package body System.Task_Primitives.Operations is
|
||||
-- Convert Ada priority to Linux priority. Priorities are 1 .. 99 on
|
||||
-- GNU/Linux, so we map 0 .. 98 to 1 .. 99.
|
||||
|
||||
- function Get_Ceiling_Support return Boolean;
|
||||
- -- Get the value of the Ceiling_Support constant (see below).
|
||||
- -- Note well: If this function or related code is modified, it should be
|
||||
- -- tested by hand, because automated testing doesn't exercise it.
|
||||
-
|
||||
- -------------------------
|
||||
- -- Get_Ceiling_Support --
|
||||
- -------------------------
|
||||
-
|
||||
- function Get_Ceiling_Support return Boolean is
|
||||
- Ceiling_Support : Boolean := False;
|
||||
- begin
|
||||
- if Locking_Policy /= 'C' then
|
||||
- return False;
|
||||
- end if;
|
||||
-
|
||||
- declare
|
||||
- function geteuid return Integer;
|
||||
- pragma Import (C, geteuid, "geteuid");
|
||||
- Superuser : constant Boolean := geteuid = 0;
|
||||
- Has_Cap : constant C.int := GNAT_has_cap_sys_nice;
|
||||
- pragma Assert (Has_Cap in 0 | 1);
|
||||
- begin
|
||||
- Ceiling_Support := Superuser or else Has_Cap = 1;
|
||||
- end;
|
||||
-
|
||||
- return Ceiling_Support;
|
||||
- end Get_Ceiling_Support;
|
||||
-
|
||||
- pragma Warnings (Off, "non-static call not allowed in preelaborated unit");
|
||||
- Ceiling_Support : constant Boolean := Get_Ceiling_Support;
|
||||
- pragma Warnings (On, "non-static call not allowed in preelaborated unit");
|
||||
-- True if the locking policy is Ceiling_Locking, and the current process
|
||||
-- has permission to use this policy. The process has permission if it is
|
||||
-- running as 'root', or if the capability was set by the setcap command,
|
||||
@@ -348,7 +313,9 @@ package body System.Task_Primitives.Operations is
|
||||
-- Init_Mutex --
|
||||
----------------
|
||||
|
||||
+ pragma Warnings (Off, "formal parameter * is not referenced");
|
||||
function Init_Mutex (L : RTS_Lock_Ptr; Prio : Any_Priority) return C.int is
|
||||
+ pragma Warnings (On, "formal parameter * is not referenced");
|
||||
Mutex_Attr : aliased pthread_mutexattr_t;
|
||||
Result, Result_2 : C.int;
|
||||
|
||||
@@ -360,16 +327,7 @@ package body System.Task_Primitives.Operations is
|
||||
return Result;
|
||||
end if;
|
||||
|
||||
- if Ceiling_Support then
|
||||
- Result := pthread_mutexattr_setprotocol
|
||||
- (Mutex_Attr'Access, PTHREAD_PRIO_PROTECT);
|
||||
- pragma Assert (Result = 0);
|
||||
-
|
||||
- Result := pthread_mutexattr_setprioceiling
|
||||
- (Mutex_Attr'Access, Prio_To_Linux_Prio (Prio));
|
||||
- pragma Assert (Result = 0);
|
||||
-
|
||||
- elsif Locking_Policy = 'I' then
|
||||
+ if Locking_Policy = 'I' then
|
||||
Result := pthread_mutexattr_setprotocol
|
||||
(Mutex_Attr'Access, PTHREAD_PRIO_INHERIT);
|
||||
pragma Assert (Result = 0);
|
||||
@@ -409,11 +367,6 @@ package body System.Task_Primitives.Operations is
|
||||
Result := pthread_rwlockattr_init (RWlock_Attr'Access);
|
||||
pragma Assert (Result = 0);
|
||||
|
||||
- Result := pthread_rwlockattr_setkind_np
|
||||
- (RWlock_Attr'Access,
|
||||
- PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
|
||||
- pragma Assert (Result = 0);
|
||||
-
|
||||
Result := pthread_rwlock_init (L.RW'Access, RWlock_Attr'Access);
|
||||
|
||||
pragma Assert (Result in 0 | ENOMEM);
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,223 +0,0 @@
|
||||
From 0d517a7c90f9e21616c8ad0c66e24c1554f6658c Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Fri, 21 Aug 2020 07:07:48 +0000
|
||||
Subject: [PATCH 28/40] ada: musl support fixes
|
||||
|
||||
---
|
||||
gcc/ada/Makefile.rtl | 10 +++++-----
|
||||
gcc/ada/adaint.c | 34 +++++++++++++++++++---------------
|
||||
gcc/ada/adaint.h | 10 ++++------
|
||||
gcc/ada/terminals.c | 8 ++++----
|
||||
4 files changed, 32 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl
|
||||
index 55ff9b0f3d5..0fadf4e4b79 100644
|
||||
--- a/gcc/ada/Makefile.rtl
|
||||
+++ b/gcc/ada/Makefile.rtl
|
||||
@@ -1533,7 +1533,7 @@ ifeq ($(strip $(filter-out %86 linux%,$(target_cpu) $(target_os))),)
|
||||
s-intman.adb<libgnarl/s-intman__posix.adb \
|
||||
s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
|
||||
$(TRASYM_DWARF_UNIX_PAIRS) \
|
||||
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
||||
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
||||
a-exetim.adb<libgnarl/a-exetim__posix.adb \
|
||||
a-exetim.ads<libgnarl/a-exetim__default.ads \
|
||||
s-linux.ads<libgnarl/s-linux.ads \
|
||||
@@ -2083,7 +2083,7 @@ ifeq ($(strip $(filter-out powerpc% linux%,$(target_cpu) $(target_os))),)
|
||||
s-osinte.adb<libgnarl/s-osinte__posix.adb \
|
||||
s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
|
||||
$(TRASYM_DWARF_UNIX_PAIRS) \
|
||||
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
||||
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
||||
$(ATOMICS_TARGET_PAIRS) \
|
||||
$(ATOMICS_BUILTINS_TARGET_PAIRS) \
|
||||
system.ads<libgnat/system-linux-ppc.ads
|
||||
@@ -2112,7 +2112,7 @@ ifeq ($(strip $(filter-out powerpc% linux%,$(target_cpu) $(target_os))),)
|
||||
endif
|
||||
|
||||
# ARM linux, GNU eabi
|
||||
-ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),)
|
||||
+ifeq ($(strip $(filter-out arm% linux-gnueabi% linux-musleabi% linux-muslgnueabi%,$(target_cpu) $(target_os))),)
|
||||
LIBGNAT_TARGET_PAIRS = \
|
||||
a-intnam.ads<libgnarl/a-intnam__linux.ads \
|
||||
s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
|
||||
@@ -2305,7 +2305,7 @@ ifeq ($(strip $(filter-out %ia64 linux%,$(target_cpu) $(target_os))),)
|
||||
s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
|
||||
s-taspri.ads<libgnarl/s-taspri__posix-noaltstack.ads \
|
||||
$(TRASYM_DWARF_UNIX_PAIRS) \
|
||||
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
||||
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
||||
$(ATOMICS_TARGET_PAIRS) \
|
||||
$(ATOMICS_BUILTINS_TARGET_PAIRS) \
|
||||
system.ads<libgnat/system-linux-ia64.ads
|
||||
@@ -2401,7 +2401,7 @@ ifeq ($(strip $(filter-out %x86_64 linux%,$(target_cpu) $(target_os))),)
|
||||
s-tpopsp.adb<libgnarl/s-tpopsp__tls.adb \
|
||||
s-taspri.ads<libgnarl/s-taspri__posix.ads \
|
||||
$(TRASYM_DWARF_UNIX_PAIRS) \
|
||||
- s-tsmona.adb<libgnat/s-tsmona__linux.adb \
|
||||
+ s-tsmona.adb<libgnat/s-tsmona.adb \
|
||||
$(ATOMICS_TARGET_PAIRS) \
|
||||
$(X86_64_TARGET_PAIRS) \
|
||||
system.ads<libgnat/system-linux-x86.ads
|
||||
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
|
||||
index 595abf87d65..00858c24f53 100644
|
||||
--- a/gcc/ada/adaint.c
|
||||
+++ b/gcc/ada/adaint.c
|
||||
@@ -90,6 +90,11 @@
|
||||
#include <sys/param.h>
|
||||
#include <sys/pstat.h>
|
||||
#endif
|
||||
+
|
||||
+#if defined (linux)
|
||||
+#define _GNU_SOURCE 1
|
||||
+#include <sched.h>
|
||||
+#endif
|
||||
|
||||
#ifdef __PikeOS__
|
||||
#define __BSD_VISIBLE 1
|
||||
@@ -3308,7 +3313,6 @@ __gnat_lwp_self (void)
|
||||
#endif
|
||||
|
||||
#if defined (__linux__)
|
||||
-#include <sched.h>
|
||||
|
||||
/* glibc versions earlier than 2.7 do not define the routines to handle
|
||||
dynamically allocated CPU sets. For these targets, we use the static
|
||||
@@ -3318,7 +3322,7 @@ __gnat_lwp_self (void)
|
||||
|
||||
/* Dynamic cpu sets */
|
||||
|
||||
-cpu_set_t *
|
||||
+void *
|
||||
__gnat_cpu_alloc (size_t count)
|
||||
{
|
||||
return CPU_ALLOC (count);
|
||||
@@ -3331,33 +3335,33 @@ __gnat_cpu_alloc_size (size_t count)
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_free (cpu_set_t *set)
|
||||
+__gnat_cpu_free (void *set)
|
||||
{
|
||||
- CPU_FREE (set);
|
||||
+ CPU_FREE ((cpu_set_t *) set);
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_zero (size_t count, cpu_set_t *set)
|
||||
+__gnat_cpu_zero (size_t count, void *set)
|
||||
{
|
||||
- CPU_ZERO_S (count, set);
|
||||
+ CPU_ZERO_S (count, (cpu_set_t *) set);
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_set (int cpu, size_t count, cpu_set_t *set)
|
||||
+__gnat_cpu_set (int cpu, size_t count, void *set)
|
||||
{
|
||||
/* Ada handles CPU numbers starting from 1, while C identifies the first
|
||||
CPU by a 0, so we need to adjust. */
|
||||
- CPU_SET_S (cpu - 1, count, set);
|
||||
+ CPU_SET_S (cpu - 1, count, (cpu_set_t *) set);
|
||||
}
|
||||
|
||||
#else /* !CPU_ALLOC */
|
||||
|
||||
/* Static cpu sets */
|
||||
|
||||
-cpu_set_t *
|
||||
+void *
|
||||
__gnat_cpu_alloc (size_t count ATTRIBUTE_UNUSED)
|
||||
{
|
||||
- return (cpu_set_t *) xmalloc (sizeof (cpu_set_t));
|
||||
+ return xmalloc (sizeof (cpu_set_t));
|
||||
}
|
||||
|
||||
size_t
|
||||
@@ -3367,23 +3371,23 @@ __gnat_cpu_alloc_size (size_t count ATTRIBUTE_UNUSED)
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_free (cpu_set_t *set)
|
||||
+__gnat_cpu_free (void *set)
|
||||
{
|
||||
free (set);
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, cpu_set_t *set)
|
||||
+__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, void *set)
|
||||
{
|
||||
- CPU_ZERO (set);
|
||||
+ CPU_ZERO ((cpu_set_t *) set);
|
||||
}
|
||||
|
||||
void
|
||||
-__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set)
|
||||
+__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, void *set)
|
||||
{
|
||||
/* Ada handles CPU numbers starting from 1, while C identifies the first
|
||||
CPU by a 0, so we need to adjust. */
|
||||
- CPU_SET (cpu - 1, set);
|
||||
+ CPU_SET (cpu - 1, (cpu_set_t *) set);
|
||||
}
|
||||
#endif /* !CPU_ALLOC */
|
||||
#endif /* __linux__ */
|
||||
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
|
||||
index 311e240dfcc..1c4d0050103 100644
|
||||
--- a/gcc/ada/adaint.h
|
||||
+++ b/gcc/ada/adaint.h
|
||||
@@ -316,13 +316,11 @@ extern void *__gnat_lwp_self (void);
|
||||
|
||||
/* Routines for interface to required CPU set primitives */
|
||||
|
||||
-#include <sched.h>
|
||||
-
|
||||
-extern cpu_set_t *__gnat_cpu_alloc (size_t);
|
||||
+extern void * __gnat_cpu_alloc (size_t);
|
||||
extern size_t __gnat_cpu_alloc_size (size_t);
|
||||
-extern void __gnat_cpu_free (cpu_set_t *);
|
||||
-extern void __gnat_cpu_zero (size_t, cpu_set_t *);
|
||||
-extern void __gnat_cpu_set (int, size_t, cpu_set_t *);
|
||||
+extern void __gnat_cpu_free (void *);
|
||||
+extern void __gnat_cpu_zero (size_t, void *);
|
||||
+extern void __gnat_cpu_set (int, size_t, void *);
|
||||
#endif
|
||||
|
||||
#if defined (_WIN32)
|
||||
diff --git a/gcc/ada/terminals.c b/gcc/ada/terminals.c
|
||||
index af4417fab90..bab6bf3ca87 100644
|
||||
--- a/gcc/ada/terminals.c
|
||||
+++ b/gcc/ada/terminals.c
|
||||
@@ -1145,7 +1145,7 @@ __gnat_setup_winsize (void *desc, int rows, int columns)
|
||||
/* POSIX does not specify how to open the master side of a terminal.Several
|
||||
methods are available (system specific):
|
||||
1- using a cloning device (USE_CLONE_DEVICE)
|
||||
- 2- getpt (USE_GETPT)
|
||||
+ 2- posix_openpt (USE_POSIX_OPENPT)
|
||||
3- openpty (USE_OPENPTY)
|
||||
|
||||
When using the cloning device method, the macro USE_CLONE_DEVICE should
|
||||
@@ -1159,7 +1159,7 @@ __gnat_setup_winsize (void *desc, int rows, int columns)
|
||||
#if defined (__APPLE__) || defined (BSD)
|
||||
#define USE_OPENPTY
|
||||
#elif defined (__linux__)
|
||||
-#define USE_GETPT
|
||||
+#define USE_POSIX_OPENPT
|
||||
#elif defined (__sun__)
|
||||
#define USE_CLONE_DEVICE "/dev/ptmx"
|
||||
#elif defined (_AIX)
|
||||
@@ -1208,8 +1208,8 @@ allocate_pty_desc (pty_desc **desc) {
|
||||
int master_fd = -1;
|
||||
char *slave_name = NULL;
|
||||
|
||||
-#ifdef USE_GETPT
|
||||
- master_fd = getpt ();
|
||||
+#if defined(USE_POSIX_OPENPT)
|
||||
+ master_fd = posix_openpt(O_RDWR | O_NOCTTY);
|
||||
#elif defined (USE_OPENPTY)
|
||||
status = openpty (&master_fd, &slave_fd, NULL, NULL, NULL);
|
||||
#elif defined (USE_CLONE_DEVICE)
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
From 3d86ab883c2a67dc9828f73a3d84c9fdb202ec32 Mon Sep 17 00:00:00 2001
|
||||
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
|
||||
Date: Sun, 30 Aug 2020 17:58:08 +0200
|
||||
Subject: [PATCH 29/40] gcc-go: Use _off_t type instead of _loff_t
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Taken from Adélie Linux.
|
||||
---
|
||||
libgo/go/syscall/libcall_linux.go | 16 ++++++++--------
|
||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go
|
||||
index 88286c07b6e..f8f5cfb5011 100644
|
||||
--- a/libgo/go/syscall/libcall_linux.go
|
||||
+++ b/libgo/go/syscall/libcall_linux.go
|
||||
@@ -206,19 +206,19 @@ func Gettid() (tid int) {
|
||||
//sys Setxattr(path string, attr string, data []byte, flags int) (err error)
|
||||
//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
|
||||
|
||||
-//sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
|
||||
-//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
|
||||
+//sys splice(rfd int, roff *_off_t, wfd int, woff *_off_t, len int, flags int) (n int64, err error)
|
||||
+//splice(rfd _C_int, roff *_off_t, wfd _C_int, woff *_off_t, len Size_t, flags _C_uint) Ssize_t
|
||||
func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
|
||||
- var lroff _loff_t
|
||||
- var plroff *_loff_t
|
||||
+ var lroff _off_t
|
||||
+ var plroff *_off_t
|
||||
if roff != nil {
|
||||
- lroff = _loff_t(*roff)
|
||||
+ lroff = _off_t(*roff)
|
||||
plroff = &lroff
|
||||
}
|
||||
- var lwoff _loff_t
|
||||
- var plwoff *_loff_t
|
||||
+ var lwoff _off_t
|
||||
+ var plwoff *_off_t
|
||||
if woff != nil {
|
||||
- lwoff = _loff_t(*woff)
|
||||
+ lwoff = _off_t(*woff)
|
||||
plwoff = &lwoff
|
||||
}
|
||||
n, err = splice(rfd, plroff, wfd, plwoff, len, flags)
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Turn on -Wl,-z,relro,-z,now by default.
|
||||
|
||||
---
|
||||
gcc/doc/invoke.texi | 3 +++
|
||||
gcc/gcc.c | 1 +
|
||||
2 files changed, 4 insertions(+), 0 deletions(-)
|
||||
|
||||
Index: b/gcc/doc/invoke.texi
|
||||
===================================================================
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -11424,6 +11424,9 @@ For example, @option{-Wl,-Map,output.map
|
||||
linker. When using the GNU linker, you can also get the same effect with
|
||||
@option{-Wl,-Map=output.map}.
|
||||
|
||||
+NOTE: In Alpine Linux, for LDFLAGS, the option
|
||||
+@option{-Wl,-z,relro,now} is used. To disable, use @option{-Wl,-z,norelro}.
|
||||
+
|
||||
@item -u @var{symbol}
|
||||
@opindex u
|
||||
Pretend the symbol @var{symbol} is undefined, to force linking of
|
||||
Index: b/gcc/gcc.c
|
||||
===================================================================
|
||||
--- a/gcc/gcc.c
|
||||
+++ b/gcc/gcc.c
|
||||
@@ -890,6 +890,7 @@ proper position among the other output f
|
||||
"%{flto|flto=*:%<fcompare-debug*} \
|
||||
%{flto} %{fno-lto} %{flto=*} %l " LINK_PIE_SPEC \
|
||||
"%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
|
||||
+ "-z relro -z now " \
|
||||
"%X %{o*} %{e*} %{N} %{n} %{r}\
|
||||
%{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} " VTABLE_VERIFICATION_SPEC " \
|
||||
%{static:} %{L*} %(mfwrap) %(link_libgcc) " SANITIZER_EARLY_SPEC " %o\
|
||||
@@ -1,30 +0,0 @@
|
||||
From da63b5262701f91a2261812332f2850be0180634 Mon Sep 17 00:00:00 2001
|
||||
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
|
||||
Date: Sun, 30 Aug 2020 17:58:21 +0200
|
||||
Subject: [PATCH 30/40] gcc-go: Don't include sys/user.h
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Taken from Adélie Linux.
|
||||
---
|
||||
libgo/sysinfo.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c
|
||||
index 0692fd41eb7..c8d987358d9 100644
|
||||
--- a/libgo/sysinfo.c
|
||||
+++ b/libgo/sysinfo.c
|
||||
@@ -73,9 +73,6 @@
|
||||
#include <sys/times.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/un.h>
|
||||
-#if defined(HAVE_SYS_USER_H)
|
||||
-#include <sys/user.h>
|
||||
-#endif
|
||||
#if defined(HAVE_SYS_UTSNAME_H)
|
||||
#include <sys/utsname.h>
|
||||
#endif
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
From 18d6d2d1f62a4232340696fb7d68d248c751e416 Mon Sep 17 00:00:00 2001
|
||||
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
|
||||
Date: Sun, 30 Aug 2020 17:59:22 +0200
|
||||
Subject: [PATCH 31/40] gcc-go: Fix ucontext_t on PPC64
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Taken from Adélie Linux.
|
||||
---
|
||||
libgo/runtime/go-signal.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
|
||||
index b429fdb2403..fd1c885f043 100644
|
||||
--- a/libgo/runtime/go-signal.c
|
||||
+++ b/libgo/runtime/go-signal.c
|
||||
@@ -224,7 +224,7 @@ getSiginfo(siginfo_t *info, void *context __attribute__((unused)))
|
||||
#elif defined(__alpha__) && defined(__linux__)
|
||||
ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.sc_pc;
|
||||
#elif defined(__PPC__) && defined(__linux__)
|
||||
- ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip;
|
||||
+ ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.gp_regs[32];
|
||||
#elif defined(__PPC__) && defined(_AIX)
|
||||
ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.jmp_context.iar;
|
||||
#elif defined(__aarch64__) && defined(__linux__)
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
From d9942a2e54f69dee9c03e5e4339a6c62473e6845 Mon Sep 17 00:00:00 2001
|
||||
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
|
||||
Date: Sun, 30 Aug 2020 17:59:45 +0200
|
||||
Subject: [PATCH 32/40] gcc-go: Fix handling of signal 34 on musl
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Taken from Adélie Linux.
|
||||
---
|
||||
libgo/mksigtab.sh | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libgo/mksigtab.sh b/libgo/mksigtab.sh
|
||||
index 11e4ec436bd..fe866eacb27 100644
|
||||
--- a/libgo/mksigtab.sh
|
||||
+++ b/libgo/mksigtab.sh
|
||||
@@ -82,7 +82,7 @@ checksig _SIGPWR '{_SigNotify, "SIGPWR: power failure restart"}'
|
||||
checksig _SIGEMT '{_SigThrow, "SIGEMT: emulate instruction executed"}'
|
||||
checksig _SIGINFO '{_SigNotify, "SIGINFO: status request from keyboard"}'
|
||||
checksig _SIGTHR '{_SigNotify, "SIGTHR: reserved"}'
|
||||
-checksig _SIGPOLL '{_SigNotify, "SIGPOLL: pollable event occurred"}'
|
||||
+#checksig _SIGPOLL '{_SigNotify, "SIGPOLL: pollable event occurred"}'
|
||||
checksig _SIGWAITING '{_SigNotify, "SIGWAITING: reserved signal no longer used by"}'
|
||||
checksig _SIGLWP '{_SigNotify, "SIGLWP: reserved signal no longer used by"}'
|
||||
checksig _SIGFREEZE '{_SigNotify, "SIGFREEZE: special signal used by CPR"}'
|
||||
@@ -95,10 +95,12 @@ checksig _SIGLOST ' {_SigNotify, "SIGLOST: resource lost (Sun); server died (G
|
||||
|
||||
# Special handling of signals 32 and 33 on GNU/Linux systems,
|
||||
# because they are special to glibc.
|
||||
+# Signal 34 is additionally special to Linux systems with musl.
|
||||
if test "${GOOS}" = "linux"; then
|
||||
- SIGLIST=$SIGLIST"_32__33_"
|
||||
+ SIGLIST=$SIGLIST"_32__33__34_"
|
||||
echo ' 32: {_SigSetStack + _SigUnblock, "signal 32"}, /* SIGCANCEL; see issue 6997 */'
|
||||
echo ' 33: {_SigSetStack + _SigUnblock, "signal 33"}, /* SIGSETXID; see issues 3871, 9400, 12498 */'
|
||||
+ echo ' 34: {_SigSetStack + _SigUnblock, "signal 34"}, /* see issue 30062 */'
|
||||
fi
|
||||
|
||||
if test "${GOOS}" = "aix"; then
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
From 38e7c12086acae4507f9d5067f947431a28c34db Mon Sep 17 00:00:00 2001
|
||||
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
|
||||
Date: Sun, 30 Aug 2020 18:01:03 +0200
|
||||
Subject: [PATCH 33/40] gcc-go: Use int64 type as offset argument for mmap
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Taken from Adélie Linux.
|
||||
---
|
||||
libgo/go/runtime/mem_gccgo.go | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go
|
||||
index ba38ebaa9ab..3c9e5ce9461 100644
|
||||
--- a/libgo/go/runtime/mem_gccgo.go
|
||||
+++ b/libgo/go/runtime/mem_gccgo.go
|
||||
@@ -15,7 +15,7 @@ import (
|
||||
//go:linkname sysFree
|
||||
|
||||
//extern mmap
|
||||
-func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) unsafe.Pointer
|
||||
+func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off int64) unsafe.Pointer
|
||||
|
||||
//extern munmap
|
||||
func munmap(addr unsafe.Pointer, length uintptr) int32
|
||||
@@ -37,7 +37,7 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
-func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) (unsafe.Pointer, int) {
|
||||
+func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off int64) (unsafe.Pointer, int) {
|
||||
p := sysMmap(addr, n, prot, flags, fd, off)
|
||||
if uintptr(p) == _MAP_FAILED {
|
||||
return nil, errno()
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
From a4e800081081b00539bbb6fd8b5cf6b66504cfaa Mon Sep 17 00:00:00 2001
|
||||
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
|
||||
Date: Sun, 30 Aug 2020 18:02:28 +0200
|
||||
Subject: [PATCH 34/40] gcc-go: Fix st_{a,m,c}tim fields in generated
|
||||
sysinfo.go
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
There are more than one st_{a,m,c}tim fields in struct stat on time64 machines.
|
||||
|
||||
Run the Go-isation on all of them.
|
||||
|
||||
Taken from Adélie Linux.
|
||||
---
|
||||
libgo/mksysinfo.sh | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
|
||||
index bd2ba32cba1..972e2c379bc 100755
|
||||
--- a/libgo/mksysinfo.sh
|
||||
+++ b/libgo/mksysinfo.sh
|
||||
@@ -510,9 +510,9 @@ fi | sed -e 's/type _stat64/type Stat_t/' \
|
||||
-e 's/st_size/Size/' \
|
||||
-e 's/st_blksize/Blksize/' \
|
||||
-e 's/st_blocks/Blocks/' \
|
||||
- -e 's/st_atim/Atim/' \
|
||||
- -e 's/st_mtim/Mtim/' \
|
||||
- -e 's/st_ctim/Ctim/' \
|
||||
+ -e 's/st_atim/Atim/g' \
|
||||
+ -e 's/st_mtim/Mtim/g' \
|
||||
+ -e 's/st_ctim/Ctim/g' \
|
||||
-e 's/\([^a-zA-Z0-9_]\)_timeval\([^a-zA-Z0-9_]\)/\1Timeval\2/g' \
|
||||
-e 's/\([^a-zA-Z0-9_]\)_timespec_t\([^a-zA-Z0-9_]\)/\1Timespec\2/g' \
|
||||
-e 's/\([^a-zA-Z0-9_]\)_st_timespec_t\([^a-zA-Z0-9_]\)/\1StTimespec\2/g' \
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
From 57ccf0ad7f0c4b1f998ebfb6cdaa7d1876012d66 Mon Sep 17 00:00:00 2001
|
||||
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
|
||||
Date: Sun, 30 Aug 2020 18:03:03 +0200
|
||||
Subject: [PATCH 35/40] gcc-go: signal 34 is special on musl libc
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Taken from Adélie Linux.
|
||||
---
|
||||
libgo/go/runtime/signal_gccgo.go | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/libgo/go/runtime/signal_gccgo.go b/libgo/go/runtime/signal_gccgo.go
|
||||
index c555712a03c..9e228580d37 100644
|
||||
--- a/libgo/go/runtime/signal_gccgo.go
|
||||
+++ b/libgo/go/runtime/signal_gccgo.go
|
||||
@@ -106,7 +106,7 @@ func getsig(i uint32) uintptr {
|
||||
if sigaction(i, nil, &sa) < 0 {
|
||||
// On GNU/Linux glibc rejects attempts to call
|
||||
// sigaction with signal 32 (SIGCANCEL) or 33 (SIGSETXID).
|
||||
- if GOOS == "linux" && (i == 32 || i == 33) {
|
||||
+ if GOOS == "linux" && (i == 32 || i == 33 || i == 34) {
|
||||
return _SIG_DFL
|
||||
}
|
||||
throw("sigaction read failure")
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
From e6d4cdd4d03cceb01e8ed03bbe7d35b5798abc88 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
|
||||
Date: Sun, 30 Aug 2020 19:26:53 +0200
|
||||
Subject: [PATCH 36/40] gcc-go: Prefer _off_t over _off64_t
|
||||
|
||||
musl does not seem to have _off64_t.
|
||||
---
|
||||
libgo/mksysinfo.sh | 6 +-----
|
||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||
|
||||
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
|
||||
index 972e2c379bc..8d6da15f983 100755
|
||||
--- a/libgo/mksysinfo.sh
|
||||
+++ b/libgo/mksysinfo.sh
|
||||
@@ -379,11 +379,7 @@ fi
|
||||
# Some basic types.
|
||||
echo 'type Size_t _size_t' >> ${OUT}
|
||||
echo "type Ssize_t _ssize_t" >> ${OUT}
|
||||
-if grep '^const _HAVE_OFF64_T = ' gen-sysinfo.go > /dev/null 2>&1; then
|
||||
- echo "type Offset_t _off64_t" >> ${OUT}
|
||||
-else
|
||||
- echo "type Offset_t _off_t" >> ${OUT}
|
||||
-fi
|
||||
+echo "type Offset_t _off_t" >> ${OUT}
|
||||
echo "type Mode_t _mode_t" >> ${OUT}
|
||||
echo "type Pid_t _pid_t" >> ${OUT}
|
||||
echo "type Uid_t _uid_t" >> ${OUT}
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
From ac54a2afa01a3ebb06346f8dac505f0babbbe1a7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
|
||||
Date: Sun, 30 Aug 2020 19:27:51 +0200
|
||||
Subject: [PATCH 37/40] gcc-go: undef SETCONTEXT_CLOBBERS_TLS in proc.c
|
||||
|
||||
---
|
||||
libgo/runtime/proc.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c
|
||||
index 274ce01c0bf..92a540bdde9 100644
|
||||
--- a/libgo/runtime/proc.c
|
||||
+++ b/libgo/runtime/proc.c
|
||||
@@ -66,6 +66,10 @@ static void gscanstack(G*);
|
||||
|
||||
__thread G *g __asm__(GOSYM_PREFIX "runtime.g");
|
||||
|
||||
+/* libucontext does not seem to support tlsbase, undef the macro
|
||||
+ * here to make sure we define initcontext and fixcontext as dummies. */
|
||||
+#undef SETCONTEXT_CLOBBERS_TLS
|
||||
+
|
||||
#ifndef SETCONTEXT_CLOBBERS_TLS
|
||||
|
||||
static inline void
|
||||
--
|
||||
2.29.2
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
From e456a63af7f0bd1f519de98e74f864be0f73572a Mon Sep 17 00:00:00 2001
|
||||
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
|
||||
Date: Mon, 31 Aug 2020 08:59:40 +0200
|
||||
Subject: [PATCH 38/40] gcc-go: link to libucontext
|
||||
|
||||
---
|
||||
Makefile.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 63627db68cf..c7f1f84d683 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -48823,7 +48823,7 @@ configure-target-libgo:
|
||||
esac; \
|
||||
module_srcdir=libgo; \
|
||||
rm -f no-such-file || : ; \
|
||||
- CONFIG_SITE=no-such-file $(SHELL) \
|
||||
+ CONFIG_SITE=no-such-file LIBS="-lucontext $$LIBS" $(SHELL) \
|
||||
$$s/$$module_srcdir/configure \
|
||||
--srcdir=$${topdir}/$$module_srcdir \
|
||||
$(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
|
||||
--
|
||||
2.29.2
|
||||
|
||||
Loaded 100 of 4042 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user