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

Reply via email to