Hi Rich,

Sorry, I should perhaps mention that I am looking to "build for bare metal", if that matters? Im not a particular expert in all of this. :-)

Basically, my situation is that Im a hobbyist, and have plans to build a computer around the m68k. Not looking to run Linux or anything on it, but dont want to be stuck with writing assembly. I was hoping to have libc available just to have access to some standard functions if needed.

Or, perhaps Im complicating things for my intended use? The older CPUs might not be supported due to lack of MMU, and libc is really only meant for use within an OS environment? Could I perhaps be better off writing my own implementations of libc things if/when I need them?


On Thu, 23 Apr 2020 at 12:32, Rich Felker <dalias@libc.org> wrote:
On Thu, Apr 23, 2020 at 12:05:27PM +1000, Tom Storey wrote:
> Hi all.
>
> Is anyone out there particularly familiar with building musl for the m68k?
>
> I was able to successfully build it, but then later discovered that it
> would appear to be targeting 68020+ processors more specifically. I would
> like to build for the earlier 680[01]0's.
>
> Specific examples are to do with (at least) aio where some atomic
> instructions are used (e.g. cas - compare and swap) which only exist for
> the 68020 and later, but not for earlier processors.
>
> https://git.musl-libc.org/cgit/musl/tree/src/aio/aio.c#n375
> https://git.musl-libc.org/cgit/musl/tree/arch/m68k/atomic_arch.h
>
> Thus, adding -m68000 to the CFLAGS env variable when trying to do a rebuild
> results in a failure complaining that the 68020+ is required. I dont know
> what else is hiding away in the rest of it that will also be
> incompatible... :-)
>
> Any suggestions, pointers, tips would be greatly appreciated.

To answer this I think we need to know how Linux support for these
models is meant to work (if it even is meant to). If Linux does
trap-and-emulate (I'm not aware of any other mechanism it has by which
it could make this work) then it might just amount to passing the
right -Wa,... to make the assembler accept instructions not supported
in the target ISA level. But it could mean there are missing
prerequisites that have to be fixed on the kernel side before anything
can actually work.

Rich