sim: Fix nuttx.rel for macOS

* ld doesn't have --start-groupi/--end-group things.  As far as I know,
  it works that way by default.

* objcopy with Mach-O support is not widely available.
  (GNU binutils seem to claim the support but it didn't actually work
  for me.  llvm-objcopy --redefine-syms explicitly rejects Mach-O.)
  Instead, use -unexported_symbols_list linker flag to hide symbols
  to avoid conflicts with host symbols.
This commit is contained in:
YAMAMOTO Takashi 2020-01-28 00:00:52 +09:00 committed by Alin Jerpelea
parent b879b9b908
commit b5573c5b51

View File

@ -195,8 +195,15 @@ endif
# Override in Make.defs if linker is not 'ld' # Override in Make.defs if linker is not 'ld'
ifeq ($(HOSTOS),Darwin)
LDSTARTGROUP ?=
LDENDGROUP ?=
LDUNEXPORTSYMBOLS ?= -unexported_symbols_list $(HOSTOS)-names.dat
else
LDSTARTGROUP ?= --start-group LDSTARTGROUP ?= --start-group
LDENDGROUP ?= --end-group LDENDGROUP ?= --end-group
LDUNEXPORTSYMBOLS ?=
endif
EXTRA_LIBS ?= EXTRA_LIBS ?=
EXTRA_LIBPATHS ?= EXTRA_LIBPATHS ?=
@ -292,10 +299,15 @@ else
$(Q) cp nuttx-names.dat $@ $(Q) cp nuttx-names.dat $@
endif endif
Darwin-names.dat: nuttx-names.dat
$(Q) cat $^ | sed -e "s/^\([^[:space:]][^[:space:]]*\)[[:space:]].*/_\1/g" >$@
nuttx.rel : libarch$(LIBEXT) board/libboard$(LIBEXT) $(HOSTOS)-names.dat $(LINKOBJS) nuttx.rel : libarch$(LIBEXT) board/libboard$(LIBEXT) $(HOSTOS)-names.dat $(LINKOBJS)
$(Q) echo "LD: nuttx.rel" $(Q) echo "LD: nuttx.rel"
$(Q) $(LD) -r $(LDLINKFLAGS) $(RELPATHS) $(EXTRA_LIBPATHS) -o $@ $(REQUIREDOBJS) $(LDSTARTGROUP) $(RELLIBS) $(EXTRA_LIBS) $(LDENDGROUP) $(Q) $(LD) -r $(LDLINKFLAGS) $(RELPATHS) $(EXTRA_LIBPATHS) -o $@ $(REQUIREDOBJS) $(LDSTARTGROUP) $(RELLIBS) $(EXTRA_LIBS) $(LDENDGROUP) $(LDUNEXPORTSYMBOLS)
ifneq ($(HOSTOS),Darwin)
$(Q) $(OBJCOPY) --redefine-syms=$(HOSTOS)-names.dat $@ $(Q) $(OBJCOPY) --redefine-syms=$(HOSTOS)-names.dat $@
endif
# Generate the final NuttX binary by linking the host-specific objects with the NuttX # Generate the final NuttX binary by linking the host-specific objects with the NuttX
# specific objects (with munged names) # specific objects (with munged names)
@ -327,7 +339,7 @@ export_startup: board/libboard$(LIBEXT) up_head.o $(HOSTOBJS)
depend: .depend depend: .depend
cleanrel: cleanrel:
$(Q) rm -f nuttx.rel GNU/Linux-names.dat Cygwin-names.dat $(Q) rm -f nuttx.rel $(HOSTOS)-names.dat
clean: cleanrel clean: cleanrel
$(Q) if [ -e board/Makefile ]; then \ $(Q) if [ -e board/Makefile ]; then \