由于错误,ld我需要将 ELF 部分从一个目标文件复制到另一个目标文件。我可以将所需的部分转储到文件中,但问题是该objcopy选项--add-section需要二进制文件,因此部分类型信息会丢失。据我所知,我无法使用 binutils 设置部分的类型,但我希望我错了:)
我可以手动编辑二进制文件以设置节类型并解决根本问题,但我很好奇是否有基于标准工具的解决方案。
对于好奇的人来说,潜在的问题是,当 GNUld链接没有该部分的 ARM 目标文件.ARM.attributes(例如在其自己的部分中只有一个二进制 blob 的文件)时,它会选择一些默认值,导致它甚至为 RAM 函数生成无效的胶合板当包含调用的文件有好的.ARM.attributes
部分时。我能想到的唯一解决方案(待定
https://sourceware.org/bugzilla/show_bug.cgi?id=11897.ARM.attributes )是向二进制 blob 对象文件添加一个部分。.ARM.attributes但是,只有当该部分的类型为时,这才有效ARM_ATTRIBUTES。
我正在尝试根据 gcc 生成的依赖信息在 make 中编写 etags 目标。有没有某种方法可以一次性获取所有依赖项?或者,如果做不到这一点,我将如何编写一个仅在创建“tags”目标时执行并将所有源文件和头文件传递给 etags 的规则?我只想索引实际编译的文件(包括标头)。我知道我可以自己在 .d 文件中查找,但我正在尝试找到一个更优雅且更不易损坏的解决方案。
我有以下内容(摘录)
DEPFILES = $(OBJFILES:.o=.d)
%.o : %.c
@echo "Compiling $<"
$(NO_ECHO) $(CC) $(CFLAGS) -MMD -MF $(@:.o=.d) -o $@ -c $<
%.o : %.S
@echo "Compiling $<"
$(NO_ECHO) $(CC) $(ASFLAGS) -MMD -MF $(@:.o=.d) -o $@ -c $<
$(TARGET) : $(OBJFILES)
@echo "Linking $@"
$(NO_ECHO) $(LD) $(LDFLAGS) -o $@ $(OBJFILES) $(LIBS:%=-l%)
.PHONY: clean
# Order-only dependency to make Dep/obj-directories if they are not
# present
$(OBJFILES) : | $(ALLPATHS)
$(ALLPATHS):
$(NO_ECHO) …Run Code Online (Sandbox Code Playgroud)