From a95501e57f35c71394748a6656e52581ab2a4932 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 14 Sep 2014 12:25:39 +0200 Subject: let sdbinutils know about Haiku. diff --git a/support/sdbinutils/bfd/config.bfd b/support/sdbinutils/bfd/config.bfd index a1a8311..2e2f99d 100644 --- a/support/sdbinutils/bfd/config.bfd +++ b/support/sdbinutils/bfd/config.bfd @@ -725,6 +725,9 @@ case "${targ}" in targ_defvec=i386_elf32_vec targ_selvecs="i386_pe_vec i386_pei_vec" ;; + i[3-7]86-*-haiku*) + targ_defvec=i386_elf32_vec + ;; i[3-7]86-*-interix*) targ_defvec=i386_pei_vec targ_selvecs="i386_pe_vec" -- 2.7.0 From 33d4dfa0af15f64b9ef9313f53fd1594907814e7 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 14 Sep 2014 12:26:14 +0200 Subject: Missing include. diff --git a/sim/ucsim/cmd.src/newcmdposixcl.h b/sim/ucsim/cmd.src/newcmdposixcl.h index 5050d2f..ef3ed70 100644 --- a/sim/ucsim/cmd.src/newcmdposixcl.h +++ b/sim/ucsim/cmd.src/newcmdposixcl.h @@ -32,6 +32,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "newcmdcl.h" #include "cmdutil.h" +#include /* * Command fd console -- 2.7.0 From 75bb84c28fb9bcee9236d5490112e5a5a0edb3be Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 14 Sep 2014 12:59:31 +0200 Subject: strings.h fix. diff --git a/sim/ucsim/pobj.cc b/sim/ucsim/pobj.cc index e809980..166d8b1 100644 --- a/sim/ucsim/pobj.cc +++ b/sim/ucsim/pobj.cc @@ -29,6 +29,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include +#include #include "pstr.h" /*#include "pobjt.h"*/ -- 2.7.0 From aa034f022a15f189c4d20c36578e8423b77ba5ea Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 14 Sep 2014 12:59:16 +0200 Subject: Remove hardcoded -lm diff --git a/sdas/as6808/Makefile.in b/sdas/as6808/Makefile.in index 9ed2faf..407699d 100644 --- a/sdas/as6808/Makefile.in +++ b/sdas/as6808/Makefile.in @@ -37,7 +37,7 @@ VPATH = @srcdir@ CPPFLAGS = @CPPFLAGS@ -DSDCDB -DNOICE -DINDEXLIB -I. -I$(srcdir) -I$(srcdir)/../asxxsrc -I$(srcdir)/../../support/util CFLAGS = @CFLAGS@ @WALL_FLAG@ $(CPPFLAGS) LDFLAGS = @LDFLAGS@ -LIBS = -lm +LIBS = OBJDIR = obj diff --git a/sdas/as8051/Makefile.in b/sdas/as8051/Makefile.in index 121110b..5df8be3 100644 --- a/sdas/as8051/Makefile.in +++ b/sdas/as8051/Makefile.in @@ -37,7 +37,7 @@ VPATH = @srcdir@ CPPFLAGS = @CPPFLAGS@ -DSDCDB -DNOICE -DINDEXLIB -I. -I$(srcdir) -I$(srcdir)/../asxxsrc -I$(srcdir)/../../support/util CFLAGS = @CFLAGS@ @WALL_FLAG@ $(CPPFLAGS) LDFLAGS = @LDFLAGS@ -LIBS = -lm +LIBS = OBJDIR = obj diff --git a/sdas/as8xcxxx/Makefile.in b/sdas/as8xcxxx/Makefile.in index 5dbfade..2070d1f 100644 --- a/sdas/as8xcxxx/Makefile.in +++ b/sdas/as8xcxxx/Makefile.in @@ -37,7 +37,7 @@ VPATH = @srcdir@ CPPFLAGS = @CPPFLAGS@ -DSDCDB -DNOICE -DINDEXLIB -I. -I$(srcdir) -I$(srcdir)/../asxxsrc -I$(srcdir)/../../support/util CFLAGS = @CFLAGS@ @WALL_FLAG@ $(CPPFLAGS) LDFLAGS = @LDFLAGS@ -LIBS = -lm +LIBS = OBJDIR = obj diff --git a/sdas/asgb/Makefile.in b/sdas/asgb/Makefile.in index e6da6ac..fe65407 100644 --- a/sdas/asgb/Makefile.in +++ b/sdas/asgb/Makefile.in @@ -37,7 +37,7 @@ VPATH = @srcdir@ CPPFLAGS = @CPPFLAGS@ -DSDCDB -DNOICE -DINDEXLIB -I. -I$(srcdir) -I$(srcdir)/../asxxsrc -I$(srcdir)/../../support/util CFLAGS = @CFLAGS@ @WALL_FLAG@ $(CPPFLAGS) LDFLAGS = @LDFLAGS@ -LIBS = -lm +LIBS = OBJDIR = obj diff --git a/sdas/asrab/Makefile.in b/sdas/asrab/Makefile.in index 2924ab4..fa52fe2 100644 --- a/sdas/asrab/Makefile.in +++ b/sdas/asrab/Makefile.in @@ -37,7 +37,7 @@ VPATH = @srcdir@ CPPFLAGS = @CPPFLAGS@ -DSDCDB -DNOICE -DINDEXLIB -I. -I$(srcdir) -I$(srcdir)/../asxxsrc -I$(srcdir)/../../support/util CFLAGS = @CFLAGS@ @WALL_FLAG@ $(CPPFLAGS) LDFLAGS = @LDFLAGS@ -LIBS = -lm +LIBS = OBJDIR = obj diff --git a/sdas/asstm8/Makefile.in b/sdas/asstm8/Makefile.in index 812b484..4a056f7 100755 --- a/sdas/asstm8/Makefile.in +++ b/sdas/asstm8/Makefile.in @@ -37,7 +37,7 @@ VPATH = @srcdir@ CPPFLAGS = @CPPFLAGS@ -DSDCDB -DNOICE -DINDEXLIB -I. -I$(srcdir) -I$(srcdir)/../asxxsrc -I$(srcdir)/../../support/util CFLAGS = @CFLAGS@ @WALL_FLAG@ $(CPPFLAGS) LDFLAGS = @LDFLAGS@ -LIBS = -lm +LIBS = OBJDIR = obj diff --git a/sdas/astlcs90/Makefile.in b/sdas/astlcs90/Makefile.in index c3e6a21..e50587b 100644 --- a/sdas/astlcs90/Makefile.in +++ b/sdas/astlcs90/Makefile.in @@ -37,7 +37,7 @@ VPATH = @srcdir@ CPPFLAGS = @CPPFLAGS@ -DSDCDB -DNOICE -DINDEXLIB -I. -I$(srcdir) -I$(srcdir)/../asxxsrc -I$(srcdir)/../../support/util CFLAGS = @CFLAGS@ @WALL_FLAG@ $(CPPFLAGS) LDFLAGS = @LDFLAGS@ -LIBS = -lm +LIBS = OBJDIR = obj diff --git a/sdas/asz80/Makefile.in b/sdas/asz80/Makefile.in index d8cc0e1..6aa7532 100644 --- a/sdas/asz80/Makefile.in +++ b/sdas/asz80/Makefile.in @@ -37,7 +37,7 @@ VPATH = @srcdir@ CPPFLAGS = @CPPFLAGS@ -DSDCDB -DNOICE -DINDEXLIB -I. -I$(srcdir) -I$(srcdir)/../asxxsrc -I$(srcdir)/../../support/util CFLAGS = @CFLAGS@ @WALL_FLAG@ $(CPPFLAGS) LDFLAGS = @LDFLAGS@ -LIBS = -lm +LIBS = OBJDIR = obj diff --git a/src/Makefile.in b/src/Makefile.in index fc22c22..ebf63f1 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -15,7 +15,7 @@ PORTS = $(shell cat ../ports.build) ALLPORTS = $(shell cat ../ports.all) PORT_LIBS = $(PORTS:%=%/port.a) -LIBS = -lm @LIBS@ +LIBS = @LIBS@ CFLAGS = @CFLAGS@ @WALL_FLAG@ CXXFLAGS = @CXXFLAGS@ @WALL_FLAG@ -- 2.7.0 From f28f97241c95b6434d9a326d8349f25cd16bebfb Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Fri, 22 Jan 2016 21:01:19 +0100 Subject: Import Kevin Thacker patch for runtime relocation support. diff --git a/sdas/linksrc/Makefile.in b/sdas/linksrc/Makefile.in index 56537a5..35f1922 100644 --- a/sdas/linksrc/Makefile.in +++ b/sdas/linksrc/Makefile.in @@ -47,7 +47,7 @@ ASXXLIBSRC = strcmpi.c SRC = lk_readnl.c lkaomf51.c lkar.c lkarea.c lkdata.c lkelf.c lkeval.c \ lkhead.c lklex.c lklib.c lklibr.c lklist.c lkmain.c lkmem.c \ lknoice.c lkout.c lkrel.c lkrloc.c lkrloc3.c lks19.c lksdcclib.c \ - lksym.c sdld.c lksdcdb.c lkbank.c + lksym.c sdld.c lksdcdb.c lkbank.c lkrrel.c LKSOURCES = $(SRC) $(ASXXLIBSRC:%.c=$(ASXXLIB)/%.c) diff --git a/sdas/linksrc/aslink.h b/sdas/linksrc/aslink.h index e0865f8..d9f6316 100644 --- a/sdas/linksrc/aslink.h +++ b/sdas/linksrc/aslink.h @@ -1033,6 +1033,8 @@ extern int yflag; /* -y, enable SDCC Debug output */ #endif +extern int hflag; /* Generate relocatable executable + */ extern int pflag; /* print linker command file flag */ extern int uflag; /* Listing relocation flag diff --git a/sdas/linksrc/lkdata.c b/sdas/linksrc/lkdata.c index bb83900..bfaa197 100644 --- a/sdas/linksrc/lkdata.c +++ b/sdas/linksrc/lkdata.c @@ -66,6 +66,9 @@ int oflag; /* Output file type flag int objflg; /* Linked file/library object output flag */ +int hflag; /* Generate relocatable executable + */ + #if NOICE int jflag; /* NoICE output flag */ diff --git a/sdas/linksrc/lkmain.c b/sdas/linksrc/lkmain.c index 1cc7a45..9d6f916 100644 --- a/sdas/linksrc/lkmain.c +++ b/sdas/linksrc/lkmain.c @@ -233,6 +233,7 @@ main(int argc, char *argv[]) startp->f_idp = ""; pflag = 1; + hflag = 0; for(i=1; is_id); */ + if ((s[rindex]->s_axp->a_bap->a_flag & A4_ABS)==0) + { + output_relocation_record=1; + } + } + else + { + /* If the area is absolute then we do not output a record. + This allows us to reference absolute memory, but still the code + can be relocated. */ + /* If the area is relative, it refers to data that is part of the + relocatable program */ + + /* printf("Area: %s\n",a[rindex]->a_bap->a_id); */ + if ((a[rindex]->a_bap->a_flag & A4_ABS)==0) + { + output_relocation_record=1; + } + } + + if (output_relocation_record) + { + a_uint relocate_address = pc+(rtp-rtofst); + if (hilo) + { + raddr = reli + ((rtval[rtp]&0x0ff)<<8) + (rtval[rtp+1]&0x0ff); + } + else + { + raddr = reli + ((rtval[rtp+1]&0x0ff)<<8) + (rtval[rtp]&0x0ff); + } + /*printf("Relocation modify address: %04x\n",relocate_address); */ + /*printf("Relocation address: %04x\n",raddr); */ + if (mode & R3_BYTE) + { + if (mode & R3_BYTX) + { + if (mode & R3_MSB) + { + +relrec8hi(relocate_address,raddr); + } + else + { + +relrec8lo(relocate_address,raddr); + } + } + else + { + printf("not supported"); + } + } + else + { + if (mode & R3_BYTX) + { + if (mode & R3_MSB) + { + printf("not supported"); + } + else + { + printf("not supported"); + } + } + else + { + relrec16(relocate_address); + } + } + } + } + + /* * R3_BYTE or R3_WORD operation */ @@ -755,6 +848,12 @@ rele3() if (uflag != 0) { lkulist(0); } + + /* output relocation data */ + if (hflag) { + relrecwrite(); + } + if (oflag != 0) { lkflush(); lkfclose(); diff --git a/sdas/linksrc/lkrrel.c b/sdas/linksrc/lkrrel.c new file mode 100644 index 0000000..e9e8383 --- /dev/null +++ b/sdas/linksrc/lkrrel.c @@ -0,0 +1,251 @@ +/* (c) Kevin Thacker, May 2005 */ +#include +#include +#include +#include "aslink.h" +#include "lkrrel.h" + +struct relrechead +{ + int count; + struct relrec *head; +}; + +/* 16-bit values, add full 16-bit base address */ + +static struct relrechead head16= {0,NULL}; +/* 8-bit, but add high byte of 16-bit base address */ +static struct relrechead head8hi = {0,NULL}; +/* 8-bit, but add low byte of 16-bit base address */ +static struct relrechead head8lo = {0,NULL}; + +/* internal; free's list */ +static void relrecfree(struct relrechead *head) +{ + struct relrec *cur = head->head; + + while (cur!=NULL) + { + struct relrec *next = cur->next; + free(cur); + + cur = next; + } +} + +/* free relocation record list; e.g. on exit */ +void freerelrec() +{ + relrecfree(&head16); + relrecfree(&head8hi); + relrecfree(&head8lo); +} + +/* internal; allocate a relocation record */ +static void newrelrec(struct relrechead *head, a_uint addr, a_uint symaddr) +{ + struct relrec *rec; + + rec = (struct relrec *) malloc(sizeof(struct relrec)); + + /* error if allocation failed */ + if (rec==NULL) + return; + + rec->addr = addr; + rec->symaddr = symaddr; + + /* add to start of list */ + rec->next = head->head; + head->head = rec; + head->count++; +} + +/* add item to 16-bit relocation record list */ +void relrec16(a_uint addr) +{ + newrelrec(&head16, addr,0); +} + +/* add item to 8-bit (high) relocation record list */ +void relrec8hi(a_uint addr, a_uint symaddr) +{ + newrelrec(&head8hi, addr,symaddr); +} + +/* add address to 8-bit (low) relocation list */ +void relrec8lo(a_uint addr, a_uint symaddr) +{ + newrelrec(&head8lo, addr,symaddr); +} + +/* internal; compare two addresses within two relocate records */ +static int relreccompare(const void *a, const void *b) +{ + const struct relrec *relreca = (const struct relrec *)a; + const struct relrec *relrecb = (const struct relrec *)b; + + return (relreca->addr-relrecb->addr); +} + +/* sort a list of relocate records and return an array of the records */ +static struct relrec *relrecsort(struct relrechead *head) +{ + int count; + struct relrec *reclist; + struct relrec *cur; + + if (head->count==0) + return NULL; + + /* allocate list to hold all items */ + reclist = (struct relrec *)malloc(sizeof(struct relrec)*head->count); + + if (reclist==NULL) + return NULL; + + /* fill list */ + count = 0; + cur = head->head; + while (cur!=NULL) + { + memcpy(&reclist[count],cur,sizeof(struct relrec)); + count++; + cur = cur->next; + } + + /* sort into ascending address order */ + qsort(reclist, count, sizeof(struct relrec),relreccompare); + + return reclist; +} + +int outbyte(int addr, char byte) +{ + rtval[0] = addr&0x0ff; + rtval[1] = (addr>>8)&0x0ff; + rtval[2] = byte&0x0ff; + addr+=1; + rtflg[0] = 1; + rtflg[1] = 1; + rtflg[2] = 1; + rtcnt = 3; + ixx(1); + return addr; +} + +void relrecwritelist1(struct relrechead *list,int *addrptr) +{ + int i; + struct relrec *relreclist; + int addr; + + addr = *addrptr; + + relreclist = relrecsort(list); + + if (relreclist!=NULL) + { + int prevaddr = 0; + for (i=0; icount; i++) + { + struct relrec *cur = &relreclist[i]; + + int delta = cur->addr-prevaddr; + + if (delta>254) + { + int largedelta = delta-1; + addr = outbyte(addr,0x0ff); + addr = outbyte(addr,largedelta&0x0ff); + addr = outbyte(addr,(largedelta>>8)&0x0ff); + delta = 1; + } + prevaddr = cur->addr; + addr = outbyte(addr,delta&0x0ff); + } + + free(relreclist); + } + + addr = outbyte(addr, 0); + + *addrptr = addr; + +} + +void relrecwritelist2(struct relrechead *list,int *addrptr) +{ + int i; + struct relrec *relreclist; + int addr; + + addr = *addrptr; + + relreclist = relrecsort(list); + + if (relreclist!=NULL) + { + int prevaddr = 0; + for (i=0; icount; i++) + { + struct relrec *cur = &relreclist[i]; + int delta = cur->addr-prevaddr; + prevaddr = cur->addr; + + if (delta>254) + { + int largedelta = delta-1; + addr = outbyte(addr,0x0ff); + addr = outbyte(addr,largedelta&0x0ff); + addr = outbyte(addr,(largedelta>>8)&0x0ff); + delta = 1; + } + + addr = outbyte(addr,delta&0x0ff); + addr = outbyte(addr,cur->symaddr&0x0ff); + } + + free(relreclist); + } + + addr = outbyte(addr,0); + + *addrptr = addr; + +} + + +void relrecwrite() +{ + int areasize = 0; + + struct area *cur = areap; + while (cur!=NULL) + { + areasize+=cur->a_size; + cur=cur->a_ap; + } + + //printf("total length before relocation records: %04x\n",areasize); + + /* re-write offset to relocation records */ + rtval[0] = 0; + rtval[1] = 0; + rtval[2] = areasize&0x0ff; + rtval[3] = (areasize>>8)&0x0ff; + rtflg[0] = 1; + rtflg[1] = 1; + rtflg[2] = 1; + rtflg[3] = 1; + rtcnt = 4; + ixx(1); + + + int addr = areasize; + + + relrecwritelist1(&head16,&addr); + relrecwritelist1(&head8lo,&addr); + relrecwritelist2(&head8hi,&addr); +} diff --git a/sdas/linksrc/lkrrel.h b/sdas/linksrc/lkrrel.h new file mode 100644 index 0000000..ca1cfd4 --- /dev/null +++ b/sdas/linksrc/lkrrel.h @@ -0,0 +1,17 @@ +/* relocation record */ +struct relrec +{ + /* next item */ + struct relrec *next; + + /* address of relocate */ + a_uint addr; + + a_uint symaddr; +}; + +void relrec16(a_uint addr); +void relrec8lo(a_uint addr, a_uint symaddr); +void relrec8hi(a_uint addr, a_uint symaddr); +void freerelrec(); +void relrecwrite(); -- 2.7.0 From b56f61aea4312e943ecf79e65846f55f4a83827e Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 15 Jan 2017 20:50:32 +0100 Subject: sdcpp: add missing include path This prevents the configure script from detecting some things, and later on the build fails. diff --git a/support/cpp/configure.ac b/support/cpp/configure.ac index cbf4e07..34435cb 100644 --- a/support/cpp/configure.ac +++ b/support/cpp/configure.ac @@ -217,7 +217,7 @@ AC_FUNC_MMAP_FILE # We will need to find libiberty.h and ansidecl.h saved_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -I${srcdir} -I${srcdir}/libiberty -I${srcdir}/libcpp/include" +CFLAGS="$CFLAGS -I${srcdir} -I${srcdir}/../libiberty -I${srcdir}/libcpp/include -I${srcdir}/../sdbinutils/include" gcc_AC_CHECK_DECLS(getenv abort strsignal errno \ malloc realloc calloc free clock, , ,[ #include "ansidecl.h" -- 2.7.0