On 7/26/06, Samuel Korpi <[EMAIL PROTECTED]> wrote: > On 7/13/06, Jeff Dike <[EMAIL PROTECTED]> wrote: > > > > Instead of the patch mentioned earlier, you might also try the one > > below - it depends on klibc, so you need to apply it to a recent -mm > > UML. I'm thinking about sending this to Andrew, despite it's > > nastinesses. > > > > It applies on top of (and backs out) the other jmpbuf patch. > > > > Is there any drawbacks in applying this directly on top of a pure > vanilla kernel (2.6.17.7) or do I need to apply the other jmpbuf patch > before this one? >
Well, it didn't work in any case. Just says patching file arch/um/os-Linux/sys-i386/registers.c patch: **** malformed patch at line 5: --- 6,5 ---- So, what would be the proper way (i.e. the recommended patch) to get rid of the jmpbuf problem? /Samuel > > > > Index: linux-2.6.17/arch/um/os-Linux/sys-i386/registers.c > > =================================================================== > > --- linux-2.6.17.orig/arch/um/os-Linux/sys-i386/registers.c 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/os-Linux/sys-i386/registers.c 2006-07-12 > > 11:51:17.000000000 -0400 > > @@ -5,12 +5,12 @@ > > > > #include <errno.h> > > #include <string.h> > > -#include <setjmp.h> > > #include "sysdep/ptrace_user.h" > > #include "sysdep/ptrace.h" > > #include "uml-config.h" > > #include "skas_ptregs.h" > > #include "registers.h" > > +#include "longjmp.h" > > #include "user.h" > > > > /* These are set once at boot time and not changed thereafter */ > > @@ -130,17 +130,11 @@ void get_safe_registers(unsigned long *r > > HOST_FP_SIZE * sizeof(unsigned long)); > > } > > > > -#ifndef JB_PC > > -#define JB_PC 5 > > -#define JB_SP 4 > > -#define JB_BP 3 > > -#endif > > - > > void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer) > > { > > - struct __jmp_buf_tag *jmpbuf = buffer; > > + struct __jmp_buf *jmpbuf = buffer; > > > > - UPT_SET(uml_regs, EIP, jmpbuf->__jmpbuf[JB_PC]); > > - UPT_SET(uml_regs, UESP, jmpbuf->__jmpbuf[JB_SP]); > > - UPT_SET(uml_regs, EBP, jmpbuf->__jmpbuf[JB_BP]); > > + UPT_SET(uml_regs, EIP, jmpbuf->__eip); > > + UPT_SET(uml_regs, UESP, jmpbuf->__esp); > > + UPT_SET(uml_regs, EBP, jmpbuf->__ebp); > > } > > Index: linux-2.6.17/arch/um/os-Linux/sys-x86_64/registers.c > > =================================================================== > > --- linux-2.6.17.orig/arch/um/os-Linux/sys-x86_64/registers.c 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/os-Linux/sys-x86_64/registers.c 2006-07-12 > > 11:51:17.000000000 -0400 > > @@ -5,11 +5,11 @@ > > > > #include <errno.h> > > #include <string.h> > > -#include <setjmp.h> > > #include "ptrace_user.h" > > #include "uml-config.h" > > #include "skas_ptregs.h" > > #include "registers.h" > > +#include "longjmp.h" > > #include "user.h" > > > > /* These are set once at boot time and not changed thereafter */ > > @@ -78,17 +78,11 @@ void get_safe_registers(unsigned long *r > > HOST_FP_SIZE * sizeof(unsigned long)); > > } > > > > -#ifndef JB_PC > > -#define JB_PC 7 > > -#define JB_RSP 6 > > -#define JB_RBP 1 > > -#endif > > - > > void get_thread_regs(union uml_pt_regs *uml_regs, void *buffer) > > { > > - struct __jmp_buf_tag *jmpbuf = buffer; > > + struct __jmp_buf *jmpbuf = buffer; > > > > - UPT_SET(uml_regs, RIP, jmpbuf->__jmpbuf[JB_PC]); > > - UPT_SET(uml_regs, RSP, jmpbuf->__jmpbuf[JB_RSP]); > > - UPT_SET(uml_regs, RBP, jmpbuf->__jmpbuf[JB_RBP]); > > + UPT_SET(uml_regs, RIP, jmpbuf->__rip); > > + UPT_SET(uml_regs, RSP, jmpbuf->__rsp); > > + UPT_SET(uml_regs, RBP, jmpbuf->__rbp); > > } > > Index: linux-2.6.17/arch/um/Makefile > > =================================================================== > > --- linux-2.6.17.orig/arch/um/Makefile 2006-07-12 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/Makefile 2006-07-12 11:51:17.000000000 -0400 > > @@ -29,7 +29,8 @@ SYMLINK_HEADERS := $(foreach header,$(SY > > # These are cleaned up during mrproper. Please DO NOT fix it again, this is > > # the Correct Thing(tm) to do! > > ARCH_SYMLINKS = include/asm-um/arch $(ARCH_DIR)/include/sysdep > > $(ARCH_DIR)/os \ > > - $(SYMLINK_HEADERS) $(ARCH_DIR)/include/uml-config.h > > + $(ARCH_DIR)/include/klibc $(SYMLINK_HEADERS) \ > > + $(ARCH_DIR)/include/uml-config.h > > > > um-modes-$(CONFIG_MODE_TT) += tt > > um-modes-$(CONFIG_MODE_SKAS) += skas > > @@ -52,6 +53,12 @@ SYS_DIR := $(ARCH_DIR)/include/sysdep-$ > > > > KLIBCARCH := $(SUBARCH) > > > > +ifneq ($(KBUILD_SRC),) > > +KLIBC_ARCH_INCLUDE := -I$(srctree)/usr/include/arch/$(SUBARCH) > > +else > > +KLIBC_ARCH_INCLUDE := -Iusr/include/arch/$(SUBARCH) > > +endif > > + > > # -Dvmap=kernel_vmap prevents anything from referencing the libpcap.o > > symbol so > > # named - it's a common symbol in libpcap, so we get a binary which > > crashes. > > # > > @@ -68,7 +75,7 @@ AFLAGS += $(ARCH_INCLUDE) > > > > USER_CFLAGS := $(patsubst -I%,,$(CFLAGS)) > > USER_CFLAGS := $(patsubst -D__KERNEL__,,$(USER_CFLAGS)) $(ARCH_INCLUDE) \ > > - $(MODE_INCLUDE) -D_FILE_OFFSET_BITS=64 > > + $(MODE_INCLUDE) $(KLIBC_ARCH_INCLUDE) -D_FILE_OFFSET_BITS=64 > > > > # -Derrno=kernel_errno - This turns all kernel references to errno into > > # kernel_errno to separate them from the libc errno. This allows > > -fno-common > > @@ -202,6 +209,14 @@ else > > $(Q)cd $(ARCH_DIR) && ln -sf os-$(OS) os > > endif > > > > +$(ARCH_DIR)/include/klibc: > > + @echo ' SYMLINK $@' > > +ifneq ($(KBUILD_SRC),) > > + $(Q)ln -fsn $(srctree)/usr/include/klibc $(ARCH_DIR)/include/klibc > > +else > > + $(Q)ln -sf usr/include/klibc $(ARCH_DIR)/include/klibc > > +endif > > + > > # Generated files > > define filechk_umlconfig > > sed 's/ CONFIG/ UML_CONFIG/' > > Index: linux-2.6.17/arch/um/include/longjmp.h > > =================================================================== > > --- linux-2.6.17.orig/arch/um/include/longjmp.h 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/include/longjmp.h 2006-07-12 > > 11:51:17.000000000 -0400 > > @@ -1,7 +1,7 @@ > > #ifndef __UML_LONGJMP_H > > #define __UML_LONGJMP_H > > > > -#include <setjmp.h> > > +#include "../../../usr/include/setjmp.h" > > #include "os.h" > > > > #define UML_LONGJMP(buf, val) do { \ > > Index: linux-2.6.17/arch/um/os-Linux/trap.c > > =================================================================== > > --- linux-2.6.17.orig/arch/um/os-Linux/trap.c 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/os-Linux/trap.c 2006-07-12 > > 11:51:17.000000000 -0400 > > @@ -5,7 +5,6 @@ > > > > #include <stdlib.h> > > #include <signal.h> > > -#include <setjmp.h> > > #include "kern_util.h" > > #include "user_util.h" > > #include "os.h" > > Index: linux-2.6.17/arch/um/os-Linux/uaccess.c > > =================================================================== > > --- linux-2.6.17.orig/arch/um/os-Linux/uaccess.c 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/os-Linux/uaccess.c 2006-07-12 > > 11:51:17.000000000 -0400 > > @@ -4,8 +4,7 @@ > > * Licensed under the GPL > > */ > > > > -#include <setjmp.h> > > -#include <string.h> > > +#include <stddef.h> > > #include "longjmp.h" > > > > unsigned long __do_user_copy(void *to, const void *from, int n, > > Index: linux-2.6.17/arch/um/os-Linux/util.c > > =================================================================== > > --- linux-2.6.17.orig/arch/um/os-Linux/util.c 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/os-Linux/util.c 2006-07-12 > > 12:04:38.000000000 -0400 > > @@ -7,7 +7,6 @@ > > #include <stdlib.h> > > #include <unistd.h> > > #include <limits.h> > > -#include <setjmp.h> > > #include <sys/mman.h> > > #include <sys/stat.h> > > #include <sys/utsname.h> > > @@ -107,11 +106,11 @@ int setjmp_wrapper(void (*proc)(void *, > > jmp_buf buf; > > int n; > > > > - n = sigsetjmp(buf, 1); > > + n = UML_SETJMP(&buf); > > if(n == 0){ > > va_start(args, proc); > > (*proc)(&buf, &args); > > } > > va_end(args); > > - return(n); > > + return n; > > } > > Index: linux-2.6.17/arch/um/os-Linux/process.c > > =================================================================== > > --- linux-2.6.17.orig/arch/um/os-Linux/process.c 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/os-Linux/process.c 2006-07-12 > > 12:04:41.000000000 -0400 > > @@ -7,7 +7,6 @@ > > #include <stdio.h> > > #include <errno.h> > > #include <signal.h> > > -#include <setjmp.h> > > #include <linux/unistd.h> > > #include <sys/mman.h> > > #include <sys/wait.h> > > Index: linux-2.6.17/arch/um/os-Linux/skas/process.c > > =================================================================== > > --- linux-2.6.17.orig/arch/um/os-Linux/skas/process.c 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/os-Linux/skas/process.c 2006-07-12 > > 12:04:41.000000000 -0400 > > @@ -8,7 +8,6 @@ > > #include <unistd.h> > > #include <errno.h> > > #include <signal.h> > > -#include <setjmp.h> > > #include <sched.h> > > #include "ptrace_user.h" > > #include <sys/wait.h> > > @@ -470,7 +469,7 @@ void thread_wait(void *sw, void *fb) > > *switch_buf = &buf; > > fork_buf = fb; > > if(UML_SETJMP(&buf) == 0) > > - siglongjmp(*fork_buf, INIT_JMP_REMOVE_SIGSTACK); > > + UML_LONGJMP(fork_buf, INIT_JMP_REMOVE_SIGSTACK); > > } > > > > void switch_threads(void *me, void *next) > > Index: linux-2.6.17/arch/um/os-Linux/Makefile > > =================================================================== > > --- linux-2.6.17.orig/arch/um/os-Linux/Makefile 2006-07-12 > > 11:51:15.000000000 -0400 > > +++ linux-2.6.17/arch/um/os-Linux/Makefile 2006-07-12 > > 11:51:17.000000000 -0400 > > @@ -5,7 +5,8 @@ > > > > obj-y = aio.o elf_aux.o file.o helper.o irq.o main.o mem.o process.o > > sigio.o \ > > signal.o start_up.o time.o trap.o tt.o tty.o uaccess.o umid.o tls.o > > \ > > - user_syms.o util.o drivers/ sys-$(SUBARCH)/ > > + user_syms.o util.o setjmp.o \ > > + drivers/ sys-$(SUBARCH)/ > > > > obj-$(CONFIG_MODE_SKAS) += skas/ > > obj-$(CONFIG_TTY_LOG) += tty_log.o > > @@ -22,3 +23,6 @@ HAVE_AIO_ABI := $(shell [ -r /usr/includ > > CFLAGS_aio.o += $(HAVE_AIO_ABI) > > > > include arch/um/scripts/Makefile.rules > > + > > +arch/um/os-Linux/setjmp.o : > > + ln -sf $(objtree)/usr/klibc/arch/$(SUBARCH)/setjmp.o $@ > > > > > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ User-mode-linux-user mailing list User-mode-linux-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user