aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--boehmgc-coroutine-sp-fallback.diff10
-rw-r--r--flake.nix28
-rw-r--r--src/libmain/shared.cc6
-rw-r--r--src/libmain/shared.hh7
4 files changed, 38 insertions, 13 deletions
diff --git a/boehmgc-coroutine-sp-fallback.diff b/boehmgc-coroutine-sp-fallback.diff
index 5066d8278..2afbe9671 100644
--- a/boehmgc-coroutine-sp-fallback.diff
+++ b/boehmgc-coroutine-sp-fallback.diff
@@ -59,12 +59,18 @@ index b5d71e62..aed7b0bf 100644
GC_bool found_me = FALSE;
size_t nthreads = 0;
int i;
-@@ -851,6 +853,31 @@ GC_INNER void GC_push_all_stacks(void)
+@@ -851,6 +853,37 @@ GC_INNER void GC_push_all_stacks(void)
hi = p->altstack + p->altstack_size;
/* FIXME: Need to scan the normal stack too, but how ? */
/* FIXME: Assume stack grows down */
+ } else {
-+ if (pthread_getattr_np(p->id, &pattr)) {
++#ifdef HAVE_PTHREAD_ATTR_GET_NP
++ if (!pthread_attr_init(&pattr)
++ || !pthread_attr_get_np(p->id, &pattr))
++#else /* HAVE_PTHREAD_GETATTR_NP */
++ if (pthread_getattr_np(p->id, &pattr))
++#endif
++ {
+ ABORT("GC_push_all_stacks: pthread_getattr_np failed!");
+ }
+ if (pthread_attr_getstacksize(&pattr, &stack_limit)) {
diff --git a/flake.nix b/flake.nix
index 230bb6031..0722d4a5b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -25,7 +25,10 @@
darwinSystems = [ "x86_64-darwin" "aarch64-darwin" ];
systems = linuxSystems ++ darwinSystems;
- crossSystems = [ "armv6l-linux" "armv7l-linux" ];
+ crossSystems = [
+ "armv6l-linux" "armv7l-linux"
+ "x86_64-freebsd13" "x86_64-netbsd"
+ ];
stdenvs = [ "gccStdenv" "clangStdenv" "clang11Stdenv" "stdenv" "libcxxStdenv" "ccacheStdenv" ];
@@ -86,7 +89,14 @@
nixpkgsFor = forAllSystems
(system: let
make-pkgs = crossSystem: stdenv: import nixpkgs {
- inherit system crossSystem;
+ localSystem = {
+ inherit system;
+ };
+ crossSystem = if crossSystem == null then null else {
+ system = crossSystem;
+ } // lib.optionalAttrs (crossSystem == "x86_64-freebsd13") {
+ useLLVM = true;
+ };
overlays = [
(overlayFor (p: p.${stdenv}))
];
@@ -172,9 +182,9 @@
libarchive
boost
lowdown-nix
+ libsodium
]
++ lib.optionals stdenv.isLinux [libseccomp]
- ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
++ lib.optional stdenv.hostPlatform.isx86_64 libcpuid;
checkDeps = [
@@ -725,6 +735,9 @@
devShells = let
makeShell = pkgs: stdenv:
+ let
+ canRunInstalled = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
+ in
with commonDeps { inherit pkgs; };
stdenv.mkDerivation {
name = "nix";
@@ -732,13 +745,18 @@
outputs = [ "out" "dev" "doc" ];
nativeBuildInputs = nativeBuildDeps
- ++ (lib.optionals stdenv.cc.isClang [ pkgs.bear pkgs.clang-tools ]);
+ ++ lib.optional stdenv.cc.isClang pkgs.buildPackages.bear
+ ++ lib.optional
+ (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform)
+ pkgs.buildPackages.clang-tools
+ ;
buildInputs = buildDeps ++ propagatedDeps
++ awsDeps ++ checkDeps ++ internalApiDocsDeps;
configureFlags = configureFlags
- ++ testConfigureFlags ++ internalApiDocsConfigureFlags;
+ ++ testConfigureFlags ++ internalApiDocsConfigureFlags
+ ++ lib.optional (!canRunInstalled) "--disable-doc-gen";
enableParallelBuilding = true;
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc
index 56f47a4ac..9c2ad039a 100644
--- a/src/libmain/shared.cc
+++ b/src/libmain/shared.cc
@@ -379,9 +379,9 @@ RunPager::RunPager()
});
pid.setKillSignal(SIGINT);
- stdout = fcntl(STDOUT_FILENO, F_DUPFD_CLOEXEC, 0);
+ std_out = fcntl(STDOUT_FILENO, F_DUPFD_CLOEXEC, 0);
if (dup2(toPager.writeSide.get(), STDOUT_FILENO) == -1)
- throw SysError("dupping stdout");
+ throw SysError("dupping standard output");
}
@@ -390,7 +390,7 @@ RunPager::~RunPager()
try {
if (pid != -1) {
std::cout.flush();
- dup2(stdout, STDOUT_FILENO);
+ dup2(std_out, STDOUT_FILENO);
pid.wait();
}
} catch (...) {
diff --git a/src/libmain/shared.hh b/src/libmain/shared.hh
index 7a9e83c6c..9415be78a 100644
--- a/src/libmain/shared.hh
+++ b/src/libmain/shared.hh
@@ -85,8 +85,9 @@ struct LegacyArgs : public MixCommonArgs
void showManPage(const std::string & name);
/**
- * The constructor of this class starts a pager if stdout is a
- * terminal and $PAGER is set. Stdout is redirected to the pager.
+ * The constructor of this class starts a pager if standard output is a
+ * terminal and $PAGER is set. Standard output is redirected to the
+ * pager.
*/
class RunPager
{
@@ -96,7 +97,7 @@ public:
private:
Pid pid;
- int stdout;
+ int std_out;
};
extern volatile ::sig_atomic_t blockInt;