Re-introducing support for the amd64 architecture
This commit is contained in:
parent
f0e196b9e1
commit
53d6f4cbc3
3
Makefile
3
Makefile
@ -49,6 +49,7 @@ dist:
|
|||||||
$(PACKAGE)-$(VERSION)/src/parser.h \
|
$(PACKAGE)-$(VERSION)/src/parser.h \
|
||||||
$(PACKAGE)-$(VERSION)/src/token.h \
|
$(PACKAGE)-$(VERSION)/src/token.h \
|
||||||
$(PACKAGE)-$(VERSION)/src/project.conf \
|
$(PACKAGE)-$(VERSION)/src/project.conf \
|
||||||
|
$(PACKAGE)-$(VERSION)/src/arch/amd64.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/arch/dalvik.c \
|
$(PACKAGE)-$(VERSION)/src/arch/dalvik.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/arch/i386.c \
|
$(PACKAGE)-$(VERSION)/src/arch/i386.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/arch/i386_real.c \
|
$(PACKAGE)-$(VERSION)/src/arch/i386_real.c \
|
||||||
@ -59,6 +60,7 @@ dist:
|
|||||||
$(PACKAGE)-$(VERSION)/src/arch/sparc.c \
|
$(PACKAGE)-$(VERSION)/src/arch/sparc.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/arch/sparc64.c \
|
$(PACKAGE)-$(VERSION)/src/arch/sparc64.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/arch/Makefile \
|
$(PACKAGE)-$(VERSION)/src/arch/Makefile \
|
||||||
|
$(PACKAGE)-$(VERSION)/src/arch/amd64.reg \
|
||||||
$(PACKAGE)-$(VERSION)/src/arch/common.ins \
|
$(PACKAGE)-$(VERSION)/src/arch/common.ins \
|
||||||
$(PACKAGE)-$(VERSION)/src/arch/dalvik.ins \
|
$(PACKAGE)-$(VERSION)/src/arch/dalvik.ins \
|
||||||
$(PACKAGE)-$(VERSION)/src/arch/dalvik.reg \
|
$(PACKAGE)-$(VERSION)/src/arch/dalvik.reg \
|
||||||
@ -81,6 +83,7 @@ dist:
|
|||||||
$(PACKAGE)-$(VERSION)/src/format/pe.c \
|
$(PACKAGE)-$(VERSION)/src/format/pe.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/format/Makefile \
|
$(PACKAGE)-$(VERSION)/src/format/Makefile \
|
||||||
$(PACKAGE)-$(VERSION)/src/format/project.conf \
|
$(PACKAGE)-$(VERSION)/src/format/project.conf \
|
||||||
|
$(PACKAGE)-$(VERSION)/test/amd64.S \
|
||||||
$(PACKAGE)-$(VERSION)/test/dalvik.S \
|
$(PACKAGE)-$(VERSION)/test/dalvik.S \
|
||||||
$(PACKAGE)-$(VERSION)/test/i386.S \
|
$(PACKAGE)-$(VERSION)/test/i386.S \
|
||||||
$(PACKAGE)-$(VERSION)/test/i386_real.S \
|
$(PACKAGE)-$(VERSION)/test/i386_real.S \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
TARGETS = dalvik.so i386.so i386_real.so i486.so i586.so i686.so java.so sparc.so sparc64.so
|
TARGETS = amd64.so dalvik.so i386.so i386_real.so i486.so i586.so i686.so java.so sparc.so sparc64.so
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
LIBDIR = $(PREFIX)/lib
|
LIBDIR = $(PREFIX)/lib
|
||||||
@ -18,6 +18,13 @@ INSTALL = install
|
|||||||
|
|
||||||
all: $(TARGETS)
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
amd64_OBJS = amd64.o
|
||||||
|
amd64_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
|
amd64_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
|
|
||||||
|
amd64.so: $(amd64_OBJS)
|
||||||
|
$(LD) -o amd64.so $(amd64_OBJS) $(amd64_LDFLAGS)
|
||||||
|
|
||||||
dalvik_OBJS = dalvik.o
|
dalvik_OBJS = dalvik.o
|
||||||
dalvik_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
dalvik_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
dalvik_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
dalvik_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
@ -81,6 +88,9 @@ sparc64_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
|||||||
sparc64.so: $(sparc64_OBJS)
|
sparc64.so: $(sparc64_OBJS)
|
||||||
$(LD) -o sparc64.so $(sparc64_OBJS) $(sparc64_LDFLAGS)
|
$(LD) -o sparc64.so $(sparc64_OBJS) $(sparc64_LDFLAGS)
|
||||||
|
|
||||||
|
amd64.o: amd64.c amd64.reg common.ins null.ins i386.h i386.ins i386.reg i486.ins i686.ins i686.reg
|
||||||
|
$(CC) $(amd64_CFLAGS) -c amd64.c
|
||||||
|
|
||||||
dalvik.o: dalvik.c common.ins null.ins dalvik.ins dalvik.reg
|
dalvik.o: dalvik.c common.ins null.ins dalvik.ins dalvik.reg
|
||||||
$(CC) $(dalvik_CFLAGS) -c dalvik.c
|
$(CC) $(dalvik_CFLAGS) -c dalvik.c
|
||||||
|
|
||||||
@ -109,12 +119,14 @@ sparc64.o: sparc64.c common.ins null.ins sparc.h sparc.ins sparc.reg
|
|||||||
$(CC) $(sparc64_CFLAGS) -c sparc64.c
|
$(CC) $(sparc64_CFLAGS) -c sparc64.c
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) -- $(dalvik_OBJS) $(i386_OBJS) $(i386_real_OBJS) $(i486_OBJS) $(i586_OBJS) $(i686_OBJS) $(java_OBJS) $(sparc_OBJS) $(sparc64_OBJS)
|
$(RM) -- $(amd64_OBJS) $(dalvik_OBJS) $(i386_OBJS) $(i386_real_OBJS) $(i486_OBJS) $(i586_OBJS) $(i686_OBJS) $(java_OBJS) $(sparc_OBJS) $(sparc64_OBJS)
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) -- $(TARGETS)
|
$(RM) -- $(TARGETS)
|
||||||
|
|
||||||
install: $(TARGETS)
|
install: $(TARGETS)
|
||||||
|
$(MKDIR) $(DESTDIR)$(LIBDIR)/asm/arch
|
||||||
|
$(INSTALL) -m 0644 -- amd64.so $(DESTDIR)$(LIBDIR)/asm/arch/amd64.so
|
||||||
$(MKDIR) $(DESTDIR)$(LIBDIR)/asm/arch
|
$(MKDIR) $(DESTDIR)$(LIBDIR)/asm/arch
|
||||||
$(INSTALL) -m 0644 -- dalvik.so $(DESTDIR)$(LIBDIR)/asm/arch/dalvik.so
|
$(INSTALL) -m 0644 -- dalvik.so $(DESTDIR)$(LIBDIR)/asm/arch/dalvik.so
|
||||||
$(MKDIR) $(DESTDIR)$(LIBDIR)/asm/arch
|
$(MKDIR) $(DESTDIR)$(LIBDIR)/asm/arch
|
||||||
@ -135,6 +147,7 @@ install: $(TARGETS)
|
|||||||
$(INSTALL) -m 0644 -- sparc64.so $(DESTDIR)$(LIBDIR)/asm/arch/sparc64.so
|
$(INSTALL) -m 0644 -- sparc64.so $(DESTDIR)$(LIBDIR)/asm/arch/sparc64.so
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
|
$(RM) -- $(DESTDIR)$(LIBDIR)/asm/arch/amd64.so
|
||||||
$(RM) -- $(DESTDIR)$(LIBDIR)/asm/arch/dalvik.so
|
$(RM) -- $(DESTDIR)$(LIBDIR)/asm/arch/dalvik.so
|
||||||
$(RM) -- $(DESTDIR)$(LIBDIR)/asm/arch/i386.so
|
$(RM) -- $(DESTDIR)$(LIBDIR)/asm/arch/i386.so
|
||||||
$(RM) -- $(DESTDIR)$(LIBDIR)/asm/arch/i386_real.so
|
$(RM) -- $(DESTDIR)$(LIBDIR)/asm/arch/i386_real.so
|
||||||
|
84
src/arch/amd64.c
Normal file
84
src/arch/amd64.c
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/* Copyright (c) 2011 Pierre Pronchery <khorben@defora.org> */
|
||||||
|
/* This file is part of DeforaOS Devel asm */
|
||||||
|
/* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "Asm.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* amd64 */
|
||||||
|
/* private */
|
||||||
|
/* types */
|
||||||
|
/* register sizes */
|
||||||
|
#define REG(name, size, id) REG_ ## name ## _size = size,
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
#include "i386.reg"
|
||||||
|
REG_size_count
|
||||||
|
};
|
||||||
|
#undef REG
|
||||||
|
|
||||||
|
/* register ids */
|
||||||
|
#define REG(name, size, id) REG_ ## name ## _id = id,
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
#include "i386.reg"
|
||||||
|
#include "i686.reg"
|
||||||
|
#include "amd64.reg"
|
||||||
|
REG_id_count
|
||||||
|
};
|
||||||
|
#undef REG
|
||||||
|
|
||||||
|
|
||||||
|
/* variables */
|
||||||
|
#define REG(name, size, id) { "" # name, size, id },
|
||||||
|
static ArchRegister _amd64_registers[] =
|
||||||
|
{
|
||||||
|
#include "i386.reg"
|
||||||
|
#include "i686.reg"
|
||||||
|
#include "amd64.reg"
|
||||||
|
{ NULL, 0, 0 }
|
||||||
|
};
|
||||||
|
#undef REG
|
||||||
|
|
||||||
|
static ArchInstruction _amd64_instructions[] =
|
||||||
|
{
|
||||||
|
#include "i386.ins"
|
||||||
|
#include "i486.ins"
|
||||||
|
#include "i686.ins"
|
||||||
|
#include "common.ins"
|
||||||
|
#include "null.ins"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* functions */
|
||||||
|
#include "i386.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* public */
|
||||||
|
/* variables */
|
||||||
|
/* plug-in */
|
||||||
|
ArchPlugin arch_plugin =
|
||||||
|
{
|
||||||
|
NULL,
|
||||||
|
"amd64",
|
||||||
|
NULL,
|
||||||
|
_amd64_registers,
|
||||||
|
_amd64_instructions,
|
||||||
|
_i386_write,
|
||||||
|
NULL
|
||||||
|
};
|
16
src/arch/amd64.reg
Normal file
16
src/arch/amd64.reg
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
REG(rax,64, 0x00)
|
||||||
|
REG(rcx,64, 0x01)
|
||||||
|
REG(rdx,64, 0x02)
|
||||||
|
REG(rbx,64, 0x03)
|
||||||
|
REG(rsp,64, 0x04)
|
||||||
|
REG(rbp,64, 0x05)
|
||||||
|
REG(rsi,64, 0x06)
|
||||||
|
REG(rdi,64, 0x07)
|
||||||
|
REG(r8, 64, 0x08)
|
||||||
|
REG(r9, 64, 0x09)
|
||||||
|
REG(r10, 64, 0x0a)
|
||||||
|
REG(r11, 64, 0x0b)
|
||||||
|
REG(r12, 64, 0x0c)
|
||||||
|
REG(r13, 64, 0x0d)
|
||||||
|
REG(r14, 64, 0x0e)
|
||||||
|
REG(r15, 64, 0x0f)
|
@ -1,8 +1,16 @@
|
|||||||
targets=dalvik,i386,i386_real,i486,i586,i686,java,sparc,sparc64
|
targets=amd64,dalvik,i386,i386_real,i486,i586,i686,java,sparc,sparc64
|
||||||
cppflags_force=-I ../../include
|
cppflags_force=-I ../../include
|
||||||
cflags_force=-W `pkg-config --cflags libSystem`
|
cflags_force=-W `pkg-config --cflags libSystem`
|
||||||
cflags=-Wall -fPIC -pedantic
|
cflags=-Wall -fPIC -pedantic
|
||||||
dist=Makefile,common.ins,dalvik.ins,dalvik.reg,i386.h,i386.ins,i386.reg,i486.ins,i586.ins,i686.ins,i686.reg,null.ins,sparc.h,sparc.ins,sparc.reg
|
dist=Makefile,amd64.reg,common.ins,dalvik.ins,dalvik.reg,i386.h,i386.ins,i386.reg,i486.ins,i586.ins,i686.ins,i686.reg,null.ins,sparc.h,sparc.ins,sparc.reg
|
||||||
|
|
||||||
|
[amd64]
|
||||||
|
type=plugin
|
||||||
|
sources=amd64.c
|
||||||
|
install=$(LIBDIR)/asm/arch
|
||||||
|
|
||||||
|
[amd64.c]
|
||||||
|
depends=amd64.reg,common.ins,null.ins,i386.h,i386.ins,i386.reg,i486.ins,i686.ins,i686.reg
|
||||||
|
|
||||||
[dalvik]
|
[dalvik]
|
||||||
type=plugin
|
type=plugin
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
TARGETS = dalvik.o i386.o i386_real.o i486.o i586.o i686.o java.o sparc.o sparc64.o
|
TARGETS = amd64.o dalvik.o i386.o i386_real.o i486.o i586.o i686.o java.o sparc.o sparc64.o
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
BINDIR = $(PREFIX)/bin
|
BINDIR = $(PREFIX)/bin
|
||||||
@ -12,6 +12,9 @@ INSTALL = install
|
|||||||
|
|
||||||
all: $(TARGETS)
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
amd64.o_OBJS = amd64.o
|
||||||
|
amd64.o_ASFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(ASFLAGS) -a amd64
|
||||||
|
|
||||||
dalvik.o_OBJS = dalvik.o
|
dalvik.o_OBJS = dalvik.o
|
||||||
dalvik.o_ASFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(ASFLAGS) -a dalvik -f flat
|
dalvik.o_ASFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(ASFLAGS) -a dalvik -f flat
|
||||||
|
|
||||||
@ -39,6 +42,9 @@ sparc.o_ASFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(ASFLAGS) -a sparc
|
|||||||
sparc64.o_OBJS = sparc64.o
|
sparc64.o_OBJS = sparc64.o
|
||||||
sparc64.o_ASFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(ASFLAGS) -a sparc64
|
sparc64.o_ASFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(ASFLAGS) -a sparc64
|
||||||
|
|
||||||
|
amd64.o: amd64.S ../src/asm
|
||||||
|
$(AS) $(amd64.o_ASFLAGS) -o amd64.o amd64.S
|
||||||
|
|
||||||
dalvik.o: dalvik.S ../src/asm
|
dalvik.o: dalvik.S ../src/asm
|
||||||
$(AS) $(dalvik.o_ASFLAGS) -o dalvik.o dalvik.S
|
$(AS) $(dalvik.o_ASFLAGS) -o dalvik.o dalvik.S
|
||||||
|
|
||||||
@ -67,7 +73,7 @@ sparc64.o: sparc64.S ../src/asm
|
|||||||
$(AS) $(sparc64.o_ASFLAGS) -o sparc64.o sparc64.S
|
$(AS) $(sparc64.o_ASFLAGS) -o sparc64.o sparc64.S
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) -- $(dalvik.o_OBJS) $(i386.o_OBJS) $(i386_real.o_OBJS) $(i486.o_OBJS) $(i586.o_OBJS) $(i686.o_OBJS) $(java.o_OBJS) $(sparc.o_OBJS) $(sparc64.o_OBJS)
|
$(RM) -- $(amd64.o_OBJS) $(dalvik.o_OBJS) $(i386.o_OBJS) $(i386_real.o_OBJS) $(i486.o_OBJS) $(i586.o_OBJS) $(i686.o_OBJS) $(java.o_OBJS) $(sparc.o_OBJS) $(sparc64.o_OBJS)
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) -- $(TARGETS)
|
$(RM) -- $(TARGETS)
|
||||||
|
3
test/amd64.S
Normal file
3
test/amd64.S
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
.text
|
||||||
|
nop
|
@ -1,7 +1,15 @@
|
|||||||
targets=dalvik.o,i386.o,i386_real.o,i486.o,i586.o,i686.o,java.o,sparc.o,sparc64.o
|
targets=amd64.o,dalvik.o,i386.o,i386_real.o,i486.o,i586.o,i686.o,java.o,sparc.o,sparc64.o
|
||||||
as=../src/asm
|
as=../src/asm
|
||||||
dist=Makefile
|
dist=Makefile
|
||||||
|
|
||||||
|
[amd64.o]
|
||||||
|
type=object
|
||||||
|
sources=amd64.S
|
||||||
|
|
||||||
|
[amd64.S]
|
||||||
|
asflags=-a amd64
|
||||||
|
depends=../src/asm
|
||||||
|
|
||||||
[dalvik.o]
|
[dalvik.o]
|
||||||
type=object
|
type=object
|
||||||
sources=dalvik.S
|
sources=dalvik.S
|
||||||
|
Loading…
Reference in New Issue
Block a user