tRemove libthread_db nonsense. - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ed9fe82834e2546bff03bef38644de95ffbeaba0
 (DIR) parent 281c90a5be6b1ab2280ffa23885fe41e7af80bce
 (HTM) Author: rsc <devnull@localhost>
       Date:   Fri, 11 Feb 2005 02:02:56 +0000
       
       Remove libthread_db nonsense.
       
       Diffstat:
         M include/mach.h                      |      12 ------------
         M src/libmach/Linux.c                 |      95 ------------------------------
         M src/libmach/mkfile                  |       1 -
         D src/libmach/pthread.c               |     238 -------------------------------
       
       4 files changed, 0 insertions(+), 346 deletions(-)
       ---
 (DIR) diff --git a/include/mach.h b/include/mach.h
       t@@ -535,18 +535,6 @@ int                loccmp(Loc*, Loc*);
        int                locsimplify(Map *map, Regs *regs, Loc loc, Loc *newloc);
        Regdesc*        regdesc(char*);
        
       -struct ps_prochandle
       -{
       -        int pid;
       -};
       -
       -int                sys_ps_lgetregs(struct ps_prochandle*, uint, void*);
       -int                sys_ps_lgetfpregs(struct ps_prochandle*, uint, void*);
       -int                sys_ps_lsetregs(struct ps_prochandle*, uint, void*);
       -int                sys_ps_lsetfpregs(struct ps_prochandle*, uint, void*);
       -Regs*        threadregs(uint);
       -int                pthreaddbinit(void);
       -
        extern int machdebug;
        #if defined(__cplusplus)
        }
 (DIR) diff --git a/src/libmach/Linux.c b/src/libmach/Linux.c
       t@@ -447,98 +447,3 @@ proctextfile(int pid)
                return nil;
        }
        
       -int
       -sys_ps_lgetregs(struct ps_prochandle *ph, uint tid, void *regs)
       -{
       -        int i, oldpid;
       -        uint u, *uregs;
       -        
       -        oldpid = corpid;
       -        ptraceattach(tid);
       -        uregs = (uint*)regs;
       -        for(i=0; i<sizeof(UregLinux386)/sizeof(uint); i++){
       -                errno = 0;
       -                u = ptrace(PTRACE_PEEKUSER, tid, 4*i, 0);
       -                if(errno)
       -                        return 1;
       -                uregs[i] = u;
       -        }
       -        ptraceattach(oldpid);
       -        return 0;
       -}
       -
       -int
       -sys_ps_lsetregs(struct ps_prochandle *ph, uint tid, void *regs)
       -{
       -        return 1;
       -}
       -
       -int
       -sys_ps_lgetfpregs(struct ps_prochandle *ph, uint tid, void *regs)
       -{
       -        return 1;
       -}
       -
       -
       -int
       -sys_ps_lsetfpregs(struct ps_prochandle *ph, uint tid, void *regs)
       -{
       -        return 1;
       -}
       -
       -
       -
       -
       -#if 0
       -        snprint(buf, sizeof buf, "/proc/%d/maps", pid);
       -        if((b = Bopen(buf, OREAD)) == nil){
       -                werrstr("open %s: %r", buf);
       -                return -1;
       -        }
       -
       -/*
       -        08048000-08056000 r-xp 00000000 03:0c 64593      /usr/sbin/gpm
       -        08056000-08058000 rw-p 0000d000 03:0c 64593      /usr/sbin/gpm
       -        08058000-0805b000 rwxp 00000000 00:00 0
       -        40000000-40013000 r-xp 00000000 03:0c 4165       /lib/ld-2.2.4.so
       -        40013000-40015000 rw-p 00012000 03:0c 4165       /lib/ld-2.2.4.so
       -        4001f000-40135000 r-xp 00000000 03:0c 45494      /lib/libc-2.2.4.so
       -        40135000-4013e000 rw-p 00115000 03:0c 45494      /lib/libc-2.2.4.so
       -        4013e000-40142000 rw-p 00000000 00:00 0
       -        bffff000-c0000000 rwxp 00000000 00:00 0
       -*/
       -
       -        file = nil;
       -        while((p = Brdline(b, '\n')) != nil){
       -                p[Blinelen(b)-1] = 0;
       -                memset(f, 0, sizeof f);
       -                if((nf = getfields(p, f, 6, 1, " ")) < 5)
       -                        continue;
       -                base = strtoul(f[0], &p, 16);
       -                if(*p != '-')
       -                        continue;
       -                end = strtoul(p+1, &p, 16);
       -                if(*p != 0)
       -                        continue;
       -                offset = strtoul(f[2], &p, 16);
       -                if(*p != 0)
       -                        continue;
       -                if(nf == 6)
       -                        file = f[5];
       -                zero = atoi(f[4]) == 0;
       -                print("%lux-%lux %lux %s %s\n", base, end, offset, zero ? "data" : "text", file ? file : "");
       -                s.base = base;
       -                s.size = end - base;
       -                s.offset = offset;
       -                s.name = zero ? "data" : "text";
       -                s.file = strdup(file);
       -                s.rw = ptracerw;
       -                s.pid = pid;
       -                if(addseg(map, s) < 0){
       -                        Bterm(b);
       -                        ptrace(PTRACE_DETACH, pid, 0, 0);
       -                        return -1;
       -                }
       -        }
       -        Bterm(b);
       -#endif
 (DIR) diff --git a/src/libmach/mkfile b/src/libmach/mkfile
       t@@ -33,7 +33,6 @@ OFILES=\
                machocorepower.$O\
                machpower.$O\
                map.$O\
       -        pthread.$O\
                regs.$O\
                stabs.$O\
                swap.$O\
 (DIR) diff --git a/src/libmach/pthread.c b/src/libmach/pthread.c
       t@@ -1,238 +0,0 @@
       -#include <u.h>
       -#include <thread_db.h>
       -#include <sys/ptrace.h>
       -#include <errno.h>
       -#include <sys/procfs.h>        /* psaddr_t */
       -#include <libc.h>
       -#include <mach.h>
       -#include "ureg386.h"
       -#include "elf.h"
       -
       -static char *terr(int);
       -
       -static char *tderrstr[] =
       -{
       -[TD_OK]                        "no error",
       -[TD_ERR]                "some error",
       -[TD_NOTHR]                "no matching thread found",
       -[TD_NOSV]                "no matching synchronization handle found",
       -[TD_NOLWP]                "no matching light-weight process found",
       -[TD_BADPH]                "invalid process handle",
       -[TD_BADTH]                "invalid thread handle",
       -[TD_BADSH]                "invalid synchronization handle",
       -[TD_BADTA]                "invalid thread agent",
       -[TD_BADKEY]                "invalid key",
       -[TD_NOMSG]                "no event available",
       -[TD_NOFPREGS]        "no floating-point register content available",
       -[TD_NOLIBTHREAD]        "application not linked with thread library",
       -[TD_NOEVENT]        "requested event is not supported",
       -[TD_NOEVENT]        "requested event is not supported",
       -[TD_NOCAPAB]        "capability not available",
       -[TD_DBERR]                "internal debug library error",
       -[TD_NOAPLIC]        "operation is not applicable",
       -[TD_NOTSD]                "no thread-specific data available",
       -[TD_MALLOC]                "out of memory",
       -[TD_PARTIALREG]        "not entire register set was read or written",
       -[TD_NOXREGS]        "X register set not available for given threads",
       -[TD_TLSDEFER]        "thread has not yet allocated TLS for given module",
       -[TD_VERSION]        "version mismatch twixt libpthread and libthread_db",
       -[TD_NOTLS]                "there is no TLS segment in the given module",
       -};
       -
       -static td_thragent_t *ta;
       -
       -static char*
       -terr(int e)
       -{
       -        static char buf[50];
       -
       -        if(e < 0 || e >= nelem(tderrstr) || tderrstr[e] == nil){
       -                snprint(buf, sizeof buf, "thread err %d", e);
       -                return buf;
       -        }
       -        return tderrstr[e];
       -}
       -
       -int
       -pthreaddbinit(void)
       -{
       -        int e;
       -        struct ps_prochandle p;
       -        
       -        p.pid = 0;
       -        if((e = td_ta_new(&p, &ta)) != TD_OK){
       -                werrstr("%s", terr(e));
       -                return -1;
       -        }
       -        return 0;
       -}
       -
       -Regs*
       -threadregs(uint tid)
       -{
       -        int e;
       -        static UregRegs r;
       -        static Ureg u;
       -        td_thrhandle_t th;
       -        prgregset_t regs;
       -
       -        if(tid == 0)
       -                return correg;
       -        if(!ta)
       -                pthreaddbinit();
       -        if((e = td_ta_map_id2thr(ta, tid, &th)) != TD_OK
       -        || (e = td_thr_getgregs(&th, regs)) != TD_OK){
       -                werrstr("reading thread registers: %s", terr(e));
       -                return nil;
       -        }
       -        linux2ureg386((UregLinux386*)regs, &u);
       -        r.r.rw = _uregrw;
       -        r.ureg = (uchar*)&u;
       -        return &r.r;
       -}
       -
       -
       -/*
       - * bottom-end functions for libthread_db to call
       - */
       -enum
       -{
       -        PS_OK,
       -        PS_ERR,
       -        PS_BADPID,
       -        PS_BADLWPID,
       -        PS_BADADDR,
       -        PS_NOSYM,
       -        PS_NOFPREGS,
       -};
       -
       -pid_t
       -ps_getpid(struct ps_prochandle *ph)
       -{
       -        return ph->pid;
       -}
       -
       -int
       -ps_pstop(const struct ps_prochandle *ph)
       -{
       -        return PS_ERR;
       -}
       -
       -int
       -ps_pcontinue(const struct ps_prochandle *ph)
       -{
       -        return PS_ERR;
       -}
       -
       -int
       -ps_lstop(const struct ps_prochandle *ph)
       -{
       -        return PS_ERR;
       -}
       -
       -int
       -ps_lcontinue(const struct ps_prochandle *ph)
       -{
       -        return PS_ERR;
       -}
       -
       -/* read/write data or text memory */
       -int
       -ps_pdread(struct ps_prochandle *ph, psaddr_t addr, void *v, size_t sz)
       -{
       -        if(get1(cormap, (ulong)addr, v, sz) < 0)
       -                return PS_ERR;
       -        return PS_OK;
       -}
       -
       -int
       -ps_pdwrite(struct ps_prochandle *ph, psaddr_t addr, void *v, size_t sz)
       -{
       -        if(put1(cormap, (ulong)addr, v, sz) < 0)
       -                return PS_ERR;
       -        return PS_OK;
       -}
       -
       -int
       -ps_ptread(struct ps_prochandle *ph, psaddr_t addr, void *v, size_t sz)
       -{
       -        return ps_pdread(ph, addr, v, sz);
       -}
       -
       -int
       -ps_ptwrite(struct ps_prochandle *ph, psaddr_t addr, void *v, size_t sz)
       -{
       -        return ps_pdwrite(ph, addr, v, sz);
       -}
       -
       -int
       -ps_lgetregs(struct ps_prochandle *ph, lwpid_t lwp, prgregset_t regs)
       -{
       -        int i;
       -
       -        USED(ph);
       -        if(corhdr == nil)
       -                return sys_ps_lgetregs(ph, lwp, regs);
       -        for(i=0; i<corhdr->nthread; i++){
       -                if(corhdr->thread[i].id == lwp){
       -                        ureg2linux386(corhdr->thread[i].ureg, (UregLinux386*)regs);
       -                        return PS_OK;
       -                }
       -        }
       -        return PS_ERR;
       -}
       -
       -int
       -ps_lsetregs(struct ps_prochandle *ph, lwpid_t lwp, prgregset_t regs)
       -{
       -        if(corhdr == nil)
       -                return sys_ps_lsetregs(ph, lwp, regs);
       -        return PS_ERR;
       -}
       -
       -int
       -ps_lgetfpregs(struct ps_prochandle *ph, lwpid_t lwp, prfpregset_t *fpregs)
       -{
       -        if(corhdr == nil)
       -                return sys_ps_lgetfpregs(ph, lwp, fpregs);
       -        /* BUG - Look in core dump. */
       -        return PS_ERR;
       -}
       -
       -int
       -ps_lsetfpregs(struct ps_prochandle *ph, lwpid_t lwp, prfpregset_t *fpregs)
       -{
       -        if(corhdr == nil)
       -                return sys_ps_lsetfpregs(ph, lwp, fpregs);
       -        return PS_ERR;
       -}
       -
       -/* Fetch the special per-thread address associated with the given LWP.
       -   This call is only used on a few platforms (most use a normal register).
       -   The meaning of the `int' parameter is machine-dependent.  */
       -int
       -ps_get_thread_area(struct ps_prochandle *ph, lwpid_t lwp, int xxx, psaddr_t *addr)
       -{
       -        return PS_ERR;
       -//        return sys_ps_get_thread_area(ph, lwp, xxx, addr);
       -}
       -
       -int
       -ps_pglobal_lookup(struct ps_prochandle *ph, char *object_name, char *sym_name, psaddr_t *sym_addr)
       -{
       -        Fhdr *fp;
       -        ulong addr;
       -
       -        if((fp = findhdr(object_name)) == nil){
       -                print("libmach pthread: lookup %d %s %s => no such hdr\n", ph->pid, object_name, sym_name);
       -                return PS_NOSYM;
       -        }
       -        if(elfsymlookup(fp->elf, sym_name, &addr) < 0){
       -                print("libmach pthread: lookup %d %s %s => name not found\n", ph->pid, object_name, sym_name);
       -                return PS_NOSYM;
       -        }
       -        /* print("libmach pthread: lookup %d %s %s => 0x%lux\n", ph->pid, object_name, sym_name, addr); */
       -        *sym_addr = (void*)(addr+fp->base);
       -        return PS_OK;
       -}
       -