fixed missing COMMON from .bss zeroing, using new toolchain and link
authorJohn Tsiombikas <nuclear@member.fsf.org>
Fri, 5 Jan 2024 17:34:02 +0000 (19:34 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Fri, 5 Jan 2024 17:34:02 +0000 (19:34 +0200)
with gcc instead of trying to add the path to libgcc

Makefile
megadrive.ld
src/libc/gcc.S [deleted file]
src/libc/gcc.c [deleted file]

index 266226b..107e9d9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,11 +14,12 @@ bin = $(name).bin
 
 warn = -pedantic -Wall
 dbg = -g
 
 warn = -pedantic -Wall
 dbg = -g
-opt = -O2
+opt = -O3
 def = -D__NO_CTYPE
 inc = -I. -Isrc -Isrc/libc
 
 def = -D__NO_CTYPE
 inc = -I. -Isrc -Isrc/libc
 
-TC = m68k-elf-
+ARCH = m68k-elf
+TC = $(ARCH)-
 
 CC = $(TC)gcc
 AS = $(TC)as
 
 CC = $(TC)gcc
 AS = $(TC)as
@@ -29,7 +30,7 @@ OBJDUMP = $(TC)objdump
 CFLAGS = -m68000 -ffreestanding -fno-builtin -fcommon $(warn) $(dbg) $(opt) $(def) $(inc) -MMD
 CPPFLAGS = $(def)
 ASFLAGS = -m68000 $(inc)
 CFLAGS = -m68000 -ffreestanding -fno-builtin -fcommon $(warn) $(dbg) $(opt) $(def) $(inc) -MMD
 CPPFLAGS = $(def)
 ASFLAGS = -m68000 $(inc)
-LDFLAGS = -T megadrive.ld -print-gc-sections
+LDFLAGS = -T megadrive.ld -Wl,-print-gc-sections -nostdlib -lgcc
 
 Z80AS = vasmz80_oldstyle
 Z80ASFLAGS = -Fvobj
 
 Z80AS = vasmz80_oldstyle
 Z80ASFLAGS = -Fvobj
@@ -41,7 +42,7 @@ $(bin): $(elf)
        $(OBJCOPY) -O binary $< $@
 
 $(elf): $(obj)
        $(OBJCOPY) -O binary $< $@
 
 $(elf): $(obj)
-       $(LD) -o $@ $(obj) -Map link.map $(LDFLAGS)
+       $(CC) -o $@ $(obj) -Wl,-Map,link.map $(LDFLAGS)
 
 $(z80bin): $(z80obj)
        $(Z80LD) -o $@ $(Z80LDFLAGS) $(z80obj)
 
 $(z80bin): $(z80obj)
        $(Z80LD) -o $@ $(Z80LDFLAGS) $(z80obj)
index dce3828..19e0153 100644 (file)
@@ -40,6 +40,7 @@ SECTIONS {
        .bss ALIGN(4): {
                _bss_start = .;
                * (.bss);
        .bss ALIGN(4): {
                _bss_start = .;
                * (.bss);
+               * (COMMON);
                . = ALIGN(4);
                _bss_end = .;
        } >ram
                . = ALIGN(4);
                _bss_end = .;
        } >ram
diff --git a/src/libc/gcc.S b/src/libc/gcc.S
deleted file mode 100644 (file)
index add726d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* libgcc routines for 68000 w/o floating-point hardware.
-   Copyright (C) 1994-2019 Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC 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; either version 3, or (at your option) any
-later version.
-
-This file 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.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-/* Use this one for any 680x0; assumes no floating point hardware.
-   The trailing " '" appearing on some lines is for ANSI preprocessors.  Yuk.
-   Some of this code comes from MINIX, via the folks at ericsson.
-   D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
-*/
-
-
-       .text
-       .globl  __mulsi3
-__mulsi3:
-       move.w  4(%sp), %d0     /* x0 -> d0 */
-       mulu.w  10(%sp), %d0    /* x0*y1 */
-       move.w  6(%sp), %d1     /* x1 -> d1 */
-       mulu.w  8(%sp), %d1     /* x1*y0 */
-       add.w   %d1, %d0
-       swap    %d0
-       clr.w   %d0
-       move.w  6(%sp), %d1     /* x1 -> d1 */
-       mulu.w  10(%sp), %d1    /* x1*y1 */
-       add.l   %d1, %d0
-       rts
diff --git a/src/libc/gcc.c b/src/libc/gcc.c
deleted file mode 100644 (file)
index 890678f..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Copyright (C) 2000-2019 Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC 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; either version 3, or (at your option) any later
-version.
-
-GCC 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.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
-<http://www.gnu.org/licenses/>.  */
-
-unsigned long
-__udivmodsi4(unsigned long num, unsigned long den, int modwanted)
-{
-  unsigned long bit = 1;
-  unsigned long res = 0;
-
-  while (den < num && bit && !(den & (1L<<31)))
-    {
-      den <<=1;
-      bit <<=1;
-    }
-  while (bit)
-    {
-      if (num >= den)
-       {
-         num -= den;
-         res |= bit;
-       }
-      bit >>=1;
-      den >>=1;
-    }
-  if (modwanted) return num;
-  return res;
-}
-
-long
-__divsi3 (long a, long b)
-{
-  int neg = 0;
-  long res;
-
-  if (a < 0)
-    {
-      a = -a;
-      neg = !neg;
-    }
-
-  if (b < 0)
-    {
-      b = -b;
-      neg = !neg;
-    }
-
-  res = __udivmodsi4 (a, b, 0);
-
-  if (neg)
-    res = -res;
-
-  return res;
-}
-
-long
-__modsi3 (long a, long b)
-{
-  int neg = 0;
-  long res;
-
-  if (a < 0)
-    {
-      a = -a;
-      neg = 1;
-    }
-
-  if (b < 0)
-    b = -b;
-
-  res = __udivmodsi4 (a, b, 1);
-
-  if (neg)
-    res = -res;
-
-  return res;
-}
-
-
-long
-__udivsi3 (long a, long b)
-{
-  return __udivmodsi4 (a, b, 0);
-}
-
-long
-__umodsi3 (long a, long b)
-{
-  return __udivmodsi4 (a, b, 1);
-}
-