[llvm-dev] How to objcopy via LLVM toolchain for armv7e-m ELF32LE?
Leslie Zhai via llvm-dev
llvm-dev at lists.llvm.org
Mon Nov 13 18:07:44 PST 2017
Hi James,
Thanks for your kind response!
Jake has already provided the great patch
https://reviews.llvm.org/D39977 The Flash Man :) so quick response to
cover ARMmbed usecase for armv7e-m!
Thanks again for your great job!
在 2017年11月13日 22:27, James Henderson 写道:
> Hi,
>
> At the moment, we've only added support for 64-bit Little Endian ELF
> to llvm-objcopy, but I'm pretty sure most of the code should be able
> to handle 32-bit ELF as well, with a patch such as the one you've
> attached. Jake Ehrlich (CC'ed), who is the main developer on
> llvm-objcopy should be able to give you a more complete answer.
>
> Regards,
>
> James
>
> On 13 November 2017 at 07:00, Leslie Zhai via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
> Testcase:
> https://github.com/xiangzhai/mini-arm-os/tree/llvm-toolchain/00-HelloWorld
> <https://github.com/xiangzhai/mini-arm-os/tree/llvm-toolchain/00-HelloWorld>
>
> $ make
> CC hello.c
> CC startup.c
> LD hello.elf
> READ -> hello.rd
> LIST -> hello.lst
> COPY -> hello.bin
> text data bss dec hex filename
> 190 14 0 204 cc hello.elf
>
> $ make qemu
> /data/project/qemu_stm32/arm-softmmu/qemu-system-arm -M stm32-p103
> -nographic -kernel hello.bin
>
> ...
> LED Off
> Hello World!
>
>
> 在 2017年11月13日 14:14, Leslie Zhai 写道:
>
> Is it able to just workaround add ELF32LE?
>
>
> diff --git a/tools/llvm-objcopy/llvm-objcopy.cpp
> b/tools/llvm-objcopy/llvm-objcopy.cpp
> index 54186f6..3234c65 100644
> --- a/tools/llvm-objcopy/llvm-objcopy.cpp
> +++ b/tools/llvm-objcopy/llvm-objcopy.cpp
> @@ -138,18 +138,19 @@ void SplitDWOToFile(const
> ELFObjectFile<ELFT> &ObjFile, StringRef File) {
> WriteObjectFile(DWOFile, File);
> }
>
> -void CopyBinary(const ELFObjectFile<ELF64LE> &ObjFile) {
> - std::unique_ptr<Object<ELF64LE>> Obj;
> +template <class ELFT = ELF64LE>
> +void CopyBinary(const ELFObjectFile<ELFT> &ObjFile) {
> + std::unique_ptr<Object<ELFT>> Obj;
>
> if (!OutputFormat.empty() && OutputFormat != "binary")
> error("invalid output format '" + OutputFormat + "'");
> if (!OutputFormat.empty() && OutputFormat == "binary")
> - Obj = llvm::make_unique<BinaryObject<ELF64LE>>(ObjFile);
> + Obj = llvm::make_unique<BinaryObject<ELFT>>(ObjFile);
> else
> - Obj = llvm::make_unique<ELFObject<ELF64LE>>(ObjFile);
> + Obj = llvm::make_unique<ELFObject<ELFT>>(ObjFile);
>
> if (!SplitDWO.empty())
> - SplitDWOToFile<ELF64LE>(ObjFile, SplitDWO.getValue());
> + SplitDWOToFile<ELFT>(ObjFile, SplitDWO.getValue());
>
> SectionPred RemovePred = [](const SectionBase &) { return
> false; };
>
> @@ -200,6 +201,9 @@ int main(int argc, char **argv) {
> if (ELFObjectFile<ELF64LE> *o =
> dyn_cast<ELFObjectFile<ELF64LE>>(&Binary)) {
> CopyBinary(*o);
> return 0;
> + } else if (ELFObjectFile<ELF32LE> *o =
> dyn_cast<ELFObjectFile<ELF32LE>>(&Binary)) {
> + CopyBinary(*o);
> + return 0;
> }
> reportError(InputFilename, object_error::invalid_file_type);
> }
>
>
>
> 在 2017年11月13日 11:32, Leslie Zhai 写道:
>
> Hi LLVM developers,
>
> As PR35281 mentioned:
>
> $ llvm-objcopy -O binary llvm-cortex-m7.elf llvm-cortex-m7.bin
> llvm-objcopy: 'llvm-cortex-m7.elf': The file was not
> recognized as a valid object file.
>
>
> if (ELFObjectFile<ELF64LE> *o =
> dyn_cast<ELFObjectFile<ELF64LE>>(&Binary))
> https://github.com/llvm-mirror/llvm/blob/master/tools/llvm-objcopy/llvm-objcopy.cpp#L200
> <https://github.com/llvm-mirror/llvm/blob/master/tools/llvm-objcopy/llvm-objcopy.cpp#L200>
>
>
> Please give me some hints about objcopy armv7e-m ELF32LE
> via LLVM toolchain, thanks a lot!
>
>
>
> --
> Regards,
> Leslie Zhai - https://reviews.llvm.org/p/xiangzhai/
> <https://reviews.llvm.org/p/xiangzhai/>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
--
Regards,
Leslie Zhai - https://reviews.llvm.org/p/xiangzhai/
More information about the llvm-dev
mailing list