mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-15 08:10:07 +02:00
- Relocation patch needed some rework for SDCC 4.2 - Backport an upstream bugfix to fix a compiler crash in one of my projects - Clean up the other parts of the patchset to prepare for upstream submission
717 lines
19 KiB
Plaintext
717 lines
19 KiB
Plaintext
From 66447125e5dfb95c8dd070ef443c1d2f0e640e88 Mon Sep 17 00:00:00 2001
|
|
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
|
|
Date: Sun, 14 Sep 2014 12:25:39 +0200
|
|
Subject: Add Haiku to sdbinutils conig.bfd
|
|
|
|
So we don't get an "unknown operating system" during build.
|
|
|
|
diff --git a/support/sdbinutils/bfd/config.bfd b/support/sdbinutils/bfd/config.bfd
|
|
index 6d34c6d..52c91b0 100644
|
|
--- a/support/sdbinutils/bfd/config.bfd
|
|
+++ b/support/sdbinutils/bfd/config.bfd
|
|
@@ -811,6 +811,10 @@ case "${targ}" in
|
|
want64=true
|
|
targ_underscore=no
|
|
;;
|
|
+ x86_64-*-haiku*)
|
|
+ targ_defvec=x86_64_elf64_vec
|
|
+ want64=true
|
|
+ ;;
|
|
x86_64-*-rdos*)
|
|
targ_defvec=x86_64_elf64_vec
|
|
want64=true
|
|
@@ -853,6 +857,9 @@ case "${targ}" in
|
|
targ_defvec=i386_elf32_vec
|
|
targ_selvecs="iamcu_elf32_vec 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.37.3
|
|
|
|
|
|
From aa4c0980ba7455e3d78f31fe3998348cc98c62a6 Mon Sep 17 00:00:00 2001
|
|
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
|
|
Date: Sun, 14 Sep 2014 12:26:14 +0200
|
|
Subject: Missing includes.
|
|
|
|
These are not needed on Linux, but they are on Haiku
|
|
|
|
diff --git a/sim/ucsim/cmd.src/newcmdposixcl.h b/sim/ucsim/cmd.src/newcmdposixcl.h
|
|
index bba26c5..edb2db7 100644
|
|
--- a/sim/ucsim/cmd.src/newcmdposixcl.h
|
|
+++ b/sim/ucsim/cmd.src/newcmdposixcl.h
|
|
@@ -33,6 +33,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|
#include "newcmdcl.h"
|
|
#include "cmdutil.h"
|
|
|
|
+#include <sys/select.h>
|
|
|
|
/*
|
|
* Command fd console
|
|
diff --git a/sim/ucsim/pobj.cc b/sim/ucsim/pobj.cc
|
|
index 84d8861..cbe486d 100644
|
|
--- a/sim/ucsim/pobj.cc
|
|
+++ b/sim/ucsim/pobj.cc
|
|
@@ -33,6 +33,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
+#include <strings.h>
|
|
|
|
#include "pstr.h"
|
|
/*#include "pobjt.h"*/
|
|
--
|
|
2.37.3
|
|
|
|
|
|
From f442eebd423e92de5acb950fd58c74b0459efd6c Mon Sep 17 00:00:00 2001
|
|
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
|
|
Date: Sun, 15 Jan 2017 20:50:32 +0100
|
|
Subject: sdcpp: add missing include path
|
|
|
|
|
|
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.37.3
|
|
|
|
|
|
From dd799e32d1e14eaebba8c6c6a91615f24695f8aa Mon Sep 17 00:00:00 2001
|
|
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
|
|
Date: Fri, 22 Jan 2016 21:01:19 +0100
|
|
Subject: Kevin Thacker's patch for runtime relocation support.
|
|
|
|
This patch is used to build the Contiki operating system for Z80
|
|
machines.
|
|
|
|
This version is modified for SDCC 4.2, the addresses are now internally
|
|
stored on 24 bits instead of 16 bits (to help support banked code), and
|
|
the code in the patch was adjusted for that.
|
|
|
|
diff --git a/sdas/linksrc/Makefile.in b/sdas/linksrc/Makefile.in
|
|
index 43e16f5..e37b167 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 94c2b7b..f898a19 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 169e8c1..8686631 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 daf5515..d690d46 100644
|
|
--- a/sdas/linksrc/lkmain.c
|
|
+++ b/sdas/linksrc/lkmain.c
|
|
@@ -212,6 +212,7 @@ main(int argc, char *argv[])
|
|
startp->f_idp = "";
|
|
|
|
pflag = 1;
|
|
+ hflag = 0;
|
|
|
|
for(i=1; i<argc; i++) {
|
|
ip = ib;
|
|
@@ -979,6 +980,11 @@ parse()
|
|
}
|
|
return(0);
|
|
|
|
+ case 'h':
|
|
+ case 'H':
|
|
+ hflag = 1;
|
|
+ break;
|
|
+
|
|
case 'I':
|
|
if (is_sdld() && !(TARGET_IS_Z80 || TARGET_IS_GB)) {
|
|
iramsav();
|
|
diff --git a/sdas/linksrc/lkrloc3.c b/sdas/linksrc/lkrloc3.c
|
|
index b330184..0a83e0f 100644
|
|
--- a/sdas/linksrc/lkrloc3.c
|
|
+++ b/sdas/linksrc/lkrloc3.c
|
|
@@ -31,6 +31,7 @@
|
|
*/
|
|
|
|
#include "aslink.h"
|
|
+#include "lkrrel.h"
|
|
|
|
/*)Module lkrloc3.c
|
|
*
|
|
@@ -332,6 +333,9 @@ relr3(void)
|
|
* Do remaining relocations
|
|
*/
|
|
while (more()) {
|
|
+ int output_relocation_record;
|
|
+ int raddr;
|
|
+
|
|
error = 0;
|
|
mode = (int) eval();
|
|
|
|
@@ -390,6 +394,93 @@ relr3(void)
|
|
reli -= paga + pags;
|
|
}
|
|
|
|
+ /* KevT 28-05-2005 */
|
|
+
|
|
+ if (hflag)
|
|
+ {
|
|
+ output_relocation_record = 0;
|
|
+ if (mode & R3_SYM)
|
|
+ {
|
|
+ /* If the symbol is defined in a absolute area, then we do not
|
|
+ output a record. This allows us to reference absolute addresses
|
|
+ in our code, but it can still be relocated */
|
|
+
|
|
+ /* If the symbol is relative, it is within our relocatable program */
|
|
+
|
|
+ /* printf("Symbol: %s\n",s[rindex]->s_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);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ }
|
|
|
|
/* pdk instruction fusion */
|
|
if (TARGET_IS_PDK) {
|
|
@@ -856,6 +947,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..0d9f943
|
|
--- /dev/null
|
|
+++ b/sdas/linksrc/lkrrel.c
|
|
@@ -0,0 +1,256 @@
|
|
+/* (c) Kevin Thacker, May 2005 */
|
|
+#include <stdio.h>
|
|
+#include <string.h>
|
|
+#include <stdlib.h>
|
|
+#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] = (addr>>16)&0x0ff;
|
|
+
|
|
+ rtval[3] = byte&0x0ff;
|
|
+ addr+=1;
|
|
+ rtflg[0] = 1;
|
|
+ rtflg[1] = 1;
|
|
+ rtflg[2] = 1;
|
|
+ rtflg[3] = 1;
|
|
+ rtcnt = 4;
|
|
+ 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; i<list->count; 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; i<list->count; 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] = 0;
|
|
+ rtval[3] = areasize&0x0ff;
|
|
+ rtval[4] = (areasize>>8)&0x0ff;
|
|
+ rtflg[0] = 1;
|
|
+ rtflg[1] = 1;
|
|
+ rtflg[2] = 1;
|
|
+ rtflg[3] = 1;
|
|
+ rtflg[4] = 1;
|
|
+ rtcnt = 5;
|
|
+ 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.37.3
|
|
|
|
|
|
From 02b6fcf8a92f183f742e1a55ab579dcd40ba1bdf Mon Sep 17 00:00:00 2001
|
|
From: PulkoMandy <pulkomandy@pulkomandy.tk>
|
|
Date: Mon, 1 May 2023 12:21:48 +0200
|
|
Subject: configure.ac: use -gdwarf-3 instead of -ggdb
|
|
|
|
This works better with Haiku's Debugger
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index cc5309e..7d3d1b8 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -388,10 +388,10 @@ if test "$ac_cv_c_compiler_gnu" = "yes"; then
|
|
rm -f _test_.*)
|
|
|
|
# This is the first time when CFLAGS are set/modified!!
|
|
- sdcc_IS_VALID_OPTION(-ggdb)
|
|
- if test "$sdcc_cv_c_ggdb" = "yes"; then
|
|
- CFLAGS="-ggdb ${CFLAGS}"
|
|
- CXXFLAGS="-ggdb ${CXXFLAGS}"
|
|
+ sdcc_IS_VALID_OPTION(-gdwarf-3)
|
|
+ if test "$sdcc_cv_c_gdwarf_3" = "yes"; then
|
|
+ CFLAGS="-gdwarf-3 ${CFLAGS}"
|
|
+ CXXFLAGS="-gdwarf-3 ${CXXFLAGS}"
|
|
fi
|
|
|
|
sdcc_IS_VALID_OPTION(-pipe)
|
|
--
|
|
2.37.3
|
|
|
|
|
|
From 970de68df98a204b81aa1eacd33ca24a9a1be6eb Mon Sep 17 00:00:00 2001
|
|
From: PulkoMandy <pulkomandy@pulkomandy.tk>
|
|
Date: Mon, 1 May 2023 12:23:55 +0200
|
|
Subject: Do not strip binaries when installing them
|
|
|
|
This is done already by Haiku packaging when creating the debuginfo
|
|
package.
|
|
|
|
diff --git a/sdas/linksrc/Makefile.in b/sdas/linksrc/Makefile.in
|
|
index e37b167..7e7f9ea 100644
|
|
--- a/sdas/linksrc/Makefile.in
|
|
+++ b/sdas/linksrc/Makefile.in
|
|
@@ -87,28 +87,22 @@ $(ASLINK): $(LKOBJECTS)
|
|
# ----------------------------------------------------
|
|
install: all installdirs
|
|
$(INSTALL) $(top_builddir)/bin/sdld$(EXEEXT) $(DESTDIR)$(bindir)/`echo 'sdld' | sed '$(transform)'`$(EXEEXT)
|
|
- $(STRIP) $(DESTDIR)$(bindir)/`echo 'sdld' | sed '$(transform)'`$(EXEEXT)
|
|
if [ "`grep stm8 $(top_builddir)/ports.build`" = "stm8" ]; \
|
|
then \
|
|
$(INSTALL) $(top_builddir)/bin/sdldstm8$(EXEEXT) $(DESTDIR)$(bindir)/`echo 'sdldstm8' | sed '$(transform)'`$(EXEEXT); \
|
|
- $(STRIP) $(DESTDIR)$(bindir)/`echo 'sdldstm8' | sed '$(transform)'`$(EXEEXT); \
|
|
fi
|
|
if [ "`grep hc08 $(top_builddir)/ports.build`" = "hc08" ]; \
|
|
then \
|
|
$(INSTALL) $(top_builddir)/bin/sdld6808$(EXEEXT) $(DESTDIR)$(bindir)/`echo 'sdld6808' | sed '$(transform)'`$(EXEEXT); \
|
|
- $(STRIP) $(DESTDIR)$(bindir)/`echo 'sdld6808' | sed '$(transform)'`$(EXEEXT); \
|
|
fi
|
|
if [ "`grep z80 $(top_builddir)/ports.build`" = "z80" ]; \
|
|
then \
|
|
$(INSTALL) $(top_builddir)/bin/sdldz80$(EXEEXT) $(DESTDIR)$(bindir)/`echo 'sdldz80' | sed '$(transform)'`$(EXEEXT); \
|
|
- $(STRIP) $(DESTDIR)$(bindir)/`echo 'sdldz80' | sed '$(transform)'`$(EXEEXT); \
|
|
$(INSTALL) $(top_builddir)/bin/sdldgb$(EXEEXT) $(DESTDIR)$(bindir)/`echo 'sdldgb' | sed '$(transform)'`$(EXEEXT); \
|
|
- $(STRIP) $(DESTDIR)$(bindir)/`echo 'sdldgb' | sed '$(transform)'`$(EXEEXT); \
|
|
fi
|
|
if [ "`grep pdk $(top_builddir)/ports.build`" = "pdk" ]; \
|
|
then \
|
|
$(INSTALL) $(top_builddir)/bin/sdldpdk$(EXEEXT) $(DESTDIR)$(bindir)/`echo 'sdldpdk' | sed '$(transform)'`$(EXEEXT); \
|
|
- $(STRIP) $(DESTDIR)$(bindir)/`echo 'sdldpdk' | sed '$(transform)'`$(EXEEXT); \
|
|
fi
|
|
|
|
# Deleting all the installed files
|
|
diff --git a/src/Makefile.in b/src/Makefile.in
|
|
index 1533d1f..8f2c2c6 100644
|
|
--- a/src/Makefile.in
|
|
+++ b/src/Makefile.in
|
|
@@ -69,7 +69,6 @@ $(top_builddir)/support/gc/libgc.a:
|
|
# ---------------------------------------------------
|
|
install: all installdirs
|
|
$(INSTALL) $(TARGET) $(DESTDIR)$(bindir)/`echo sdcc|sed '$(transform)'`$(EXEEXT)
|
|
- $(STRIP) $(DESTDIR)$(bindir)/`echo sdcc|sed '$(transform)'`$(EXEEXT)
|
|
|
|
|
|
# Deleting all the installed files
|
|
--
|
|
2.37.3
|
|
|
|
|
|
From ed45ed6c696d9f250c427d65379ddd1d7e37c52c Mon Sep 17 00:00:00 2001
|
|
From: PulkoMandy <pulkomandy@pulkomandy.tk>
|
|
Date: Mon, 1 May 2023 14:19:47 +0200
|
|
Subject: Backport upstream bugfix r13588
|
|
|
|
Fix for https://sourceforge.net/p/sdcc/bugs/3401
|
|
|
|
diff --git a/src/SDCCast.c b/src/SDCCast.c
|
|
index 04f2cc1..1dab15c 100644
|
|
--- a/src/SDCCast.c
|
|
+++ b/src/SDCCast.c
|
|
@@ -4060,10 +4060,11 @@ decorateType (ast *tree, RESULT_TYPE resultType, bool reduceTypeAllowed)
|
|
if (reduceTypeAllowed &&
|
|
IS_LITERAL (RTYPE (tree)) &&
|
|
IS_BOOLEAN (LTYPE (tree)) &&
|
|
- IS_INTEGRAL (RTYPE (tree)) &&
|
|
+ IS_AST_LIT_VALUE (tree->right) &&
|
|
resultType == RESULT_TYPE_BOOL &&
|
|
tree->opval.op == '^') /* the same source is used by 'bitwise or' */
|
|
{
|
|
+ wassert (tree->right->type == EX_VALUE);
|
|
unsigned long litval = AST_ULONG_VALUE (tree->right);
|
|
if (litval == 0 || litval == 1)
|
|
{
|
|
@@ -4077,11 +4078,11 @@ decorateType (ast *tree, RESULT_TYPE resultType, bool reduceTypeAllowed)
|
|
return decorateType (tree, resultType, reduceTypeAllowed);
|
|
}
|
|
}
|
|
-
|
|
+
|
|
/* OR / XOR char with literal integral, try to reduce integral to CHAR if it fits in a CHAR */
|
|
if (reduceTypeAllowed &&
|
|
!TARGET_PDK_LIKE && // Temporary fix to avoid bug #3259 - Wrong opcodes
|
|
- IS_LITERAL (RTYPE (tree)) &&
|
|
+ IS_AST_LIT_VALUE (tree->right) &&
|
|
IS_INTEGRAL (RTYPE (tree)) &&
|
|
!IS_CHAR (RTYPE (tree)) &&
|
|
IS_CHAR(LTYPE(tree)))
|
|
--
|
|
2.37.3
|
|
|