From c696045af0cd907e21c0e38b62f49de6414b5198 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 19 Oct 2006 10:54:40 +0000 Subject: [PATCH] * dietlibc: copy sys/user.h from Glibc, binutils needs it. * dietlibc: rename the PC macro to __DIETLIBC_PC to prevent name clashes. svn path=/nixpkgs/trunk/; revision=6769 --- pkgs/os-specific/linux/dietlibc/builder.sh | 3 + pkgs/os-specific/linux/dietlibc/default.nix | 7 +- pkgs/os-specific/linux/dietlibc/pc.patch | 78 +++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 pkgs/os-specific/linux/dietlibc/pc.patch diff --git a/pkgs/os-specific/linux/dietlibc/builder.sh b/pkgs/os-specific/linux/dietlibc/builder.sh index e3e083eaf6a..ab20c8ea1b5 100644 --- a/pkgs/os-specific/linux/dietlibc/builder.sh +++ b/pkgs/os-specific/linux/dietlibc/builder.sh @@ -12,6 +12,9 @@ postInstall() { touch empty.c gcc -c empty.c -o $out/lib/crti.o gcc -c empty.c -o $out/lib/crtn.o + + # Copy from Glibc; binutils wants it. + cp $glibc/include/sys/user.h $out/include/sys/ } genericBuild diff --git a/pkgs/os-specific/linux/dietlibc/default.nix b/pkgs/os-specific/linux/dietlibc/default.nix index 3b1bea26a5a..67bdaf15c18 100644 --- a/pkgs/os-specific/linux/dietlibc/default.nix +++ b/pkgs/os-specific/linux/dietlibc/default.nix @@ -9,5 +9,10 @@ stdenv.mkDerivation { md5 = "2465d652fff6f1fad3da3b98e60e83c9"; }; builder = ./builder.sh; -# patches = [./dietlibc-install.patch]; + inherit (stdenv) glibc; + + # dietlibc's sigcontext.h provides a macro called PC(), which is + # rather intrusive (e.g., binutils fails to compile because of it). + # Rename it. + patches = [./pc.patch]; } diff --git a/pkgs/os-specific/linux/dietlibc/pc.patch b/pkgs/os-specific/linux/dietlibc/pc.patch new file mode 100644 index 00000000000..fd274d24f03 --- /dev/null +++ b/pkgs/os-specific/linux/dietlibc/pc.patch @@ -0,0 +1,78 @@ +diff -rc dietlibc-0.30-orig/include/asm/arm-sigcontext.h dietlibc-0.30/include/asm/arm-sigcontext.h +*** dietlibc-0.30-orig/include/asm/arm-sigcontext.h 2002-05-09 03:05:10.000000000 +0200 +--- dietlibc-0.30/include/asm/arm-sigcontext.h 2006-10-19 12:40:30.000000000 +0200 +*************** +*** 1,5 **** + +! #define PC(ctx) (ctx.arm_pc) + + /* + * Signal context structure - contains all info to do with the state +--- 1,5 ---- + +! #define __DIETLIBC_PC(ctx) (ctx.arm_pc) + + /* + * Signal context structure - contains all info to do with the state +diff -rc dietlibc-0.30-orig/include/asm/i386-sigcontext.h dietlibc-0.30/include/asm/i386-sigcontext.h +*** dietlibc-0.30-orig/include/asm/i386-sigcontext.h 2005-09-21 09:33:08.000000000 +0200 +--- dietlibc-0.30/include/asm/i386-sigcontext.h 2006-10-19 12:40:41.000000000 +0200 +*************** +*** 38,44 **** + }; + + #define X86_FXSR_MAGIC 0x0000 +! #define PC(ctx) (ctx.eip) + + struct sigcontext { + __u16 gs, __gsh; +--- 38,44 ---- + }; + + #define X86_FXSR_MAGIC 0x0000 +! #define __DIETLIBC_PC(ctx) (ctx.eip) + + struct sigcontext { + __u16 gs, __gsh; +diff -rc dietlibc-0.30-orig/include/asm/ia64-sigcontext.h dietlibc-0.30/include/asm/ia64-sigcontext.h +*** dietlibc-0.30-orig/include/asm/ia64-sigcontext.h 2002-07-20 18:47:48.000000000 +0200 +--- dietlibc-0.30/include/asm/ia64-sigcontext.h 2006-10-19 12:39:40.000000000 +0200 +*************** +*** 1,6 **** + #include + +! #define PC(ctx) (ctx.sc_ip) + + struct sigcontext { + unsigned long sc_flags; +--- 1,6 ---- + #include + +! #define __DIETLIBC_PC(ctx) (ctx.sc_ip) + + struct sigcontext { + unsigned long sc_flags; +diff -rc dietlibc-0.30-orig/profiling/profil.c dietlibc-0.30/profiling/profil.c +*** dietlibc-0.30-orig/profiling/profil.c 2002-04-08 00:13:53.000000000 +0200 +--- dietlibc-0.30/profiling/profil.c 2006-10-19 12:40:58.000000000 +0200 +*************** +*** 43,51 **** + static void + profiler (int signal, struct sigcontext ctx) + { +! size_t s = PC(ctx)-low_pc; + (void)signal; +! if ((PC(ctx)) < low_pc) return; + s >>= 1; + if (s < maxhits) + ++buffer[s]; +--- 43,51 ---- + static void + profiler (int signal, struct sigcontext ctx) + { +! size_t s = __DIETLIBC_PC(ctx)-low_pc; + (void)signal; +! if ((__DIETLIBC_PC(ctx)) < low_pc) return; + s >>= 1; + if (s < maxhits) + ++buffer[s];