diff options
Diffstat (limited to 'src/libmach/6obj.c')
| -rw-r--r-- | src/libmach/6obj.c | 173 | 
1 files changed, 0 insertions, 173 deletions
| diff --git a/src/libmach/6obj.c b/src/libmach/6obj.c deleted file mode 100644 index 1921c9e4c..000000000 --- a/src/libmach/6obj.c +++ /dev/null @@ -1,173 +0,0 @@ -// Inferno libmach/6obj.c -// http://code.google.com/p/inferno-os/source/browse/utils/libmach/6obj.c -// -// 	Copyright © 1994-1999 Lucent Technologies Inc. -// 	Power PC support Copyright © 1995-2004 C H Forsyth (forsyth@terzarima.net). -// 	Portions Copyright © 1997-1999 Vita Nuova Limited. -// 	Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com). -// 	Revisions Copyright © 2000-2004 Lucent Technologies Inc. and others. -//	Portions Copyright © 2009 The Go Authors.  All rights reserved. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -/* - * 6obj.c - identify and parse an amd64 object file - */ -#include <u.h> -#include <libc.h> -#include <bio.h> -#include <mach.h> -#include "../cmd/6l/6.out.h" -#include "obj.h" - -typedef struct Addr	Addr; -struct Addr -{ -	char	sym; -	char	flags; -	char gotype; -}; -static	Addr	addr(Biobuf*); -static	char	type2char(int); -static	void	skip(Biobuf*, int); - -int -_is6(char *t) -{ -	uchar *s = (uchar*)t; - -	return  s[0] == (ANAME&0xff)			/* also = ANAME */ -		&& s[1] == ((ANAME>>8)&0xff) -		&& s[2] == D_FILE			/* type */ -		&& s[3] == 1				/* sym */ -		&& s[4] == '<';				/* name of file */ -} - -int -_read6(Biobuf *bp, Prog* p) -{ -	int as, n, c; -	Addr a; - -	as = BGETC(bp);		/* as(low) */ -	if(as < 0) -		return 0; -	c = BGETC(bp);		/* as(high) */ -	if(c < 0) -		return 0; -	as |= ((c & 0xff) << 8); -	p->kind = aNone; -	p->sig = 0; -	if(as == ANAME || as == ASIGNAME){ -		if(as == ASIGNAME){ -			Bread(bp, &p->sig, 4); -			p->sig = leswal(p->sig); -		} -		p->kind = aName; -		p->type = type2char(BGETC(bp));		/* type */ -		p->sym = BGETC(bp);			/* sym */ -		n = 0; -		for(;;) { -			as = BGETC(bp); -			if(as < 0) -				return 0; -			n++; -			if(as == 0) -				break; -		} -		p->id = malloc(n); -		if(p->id == 0) -			return 0; -		Bseek(bp, -n, 1); -		if(Bread(bp, p->id, n) != n) -			return 0; -		return 1; -	} -	if(as == ATEXT) -		p->kind = aText; -	if(as == AGLOBL) -		p->kind = aData; -	skip(bp, 4);		/* lineno(4) */ -	a = addr(bp); -	addr(bp); -	if(!(a.flags & T_SYM)) -		p->kind = aNone; -	p->sym = a.sym; -	return 1; -} - -static Addr -addr(Biobuf *bp) -{ -	Addr a; -	int t; -	int32 l; -	vlong off; - -	off = 0; -	a.sym = -1; -	a.flags = BGETC(bp);			/* flags */ -	a.gotype = 0; -	if(a.flags & T_INDEX) -		skip(bp, 2); -	if(a.flags & T_OFFSET){ -		l = BGETLE4(bp); -		off = l; -		if(a.flags & T_64){ -			l = BGETLE4(bp); -			off = ((vlong)l << 32) | (off & 0xFFFFFFFF); -		} -		if(off < 0) -			off = -(uvlong)off; -	} -	if(a.flags & T_SYM) -		a.sym = BGETC(bp); -	if(a.flags & T_FCONST) -		skip(bp, 8); -	else -	if(a.flags & T_SCONST) -		skip(bp, NSNAME); -	if(a.flags & T_TYPE) { -		t = BGETC(bp); -		if(a.sym > 0 && (t==D_PARAM || t==D_AUTO)) -			_offset(a.sym, off); -	} -	if(a.flags & T_GOTYPE) -		a.gotype = BGETC(bp); -	return a; -} - -static char -type2char(int t) -{ -	switch(t){ -	case D_EXTERN:		return 'U'; -	case D_STATIC:		return 'b'; -	case D_AUTO:		return 'a'; -	case D_PARAM:		return 'p'; -	default:		return UNKNOWN; -	} -} - -static void -skip(Biobuf *bp, int n) -{ -	while (n-- > 0) -		Bgetc(bp); -} | 
