[LLVMdev] [lld] Verifying the Architecture of files read
Shankar Easwaran
shankare at codeaurora.org
Tue Apr 1 21:47:27 PDT 2014
Ruiu,
I am not sure if you looked at this thread
(http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-October/066155.html)
let me know if you still have questions.
As a short summary, we dont verify the architecture of files that are
being read. We could very well be passed in a hexagon input file while
the target specified was x86_64. we got to reject the input file as the
user has chosen the architecture to be x86_64.
Thanks
Shankar Easwaran
On 4/1/2014 11:34 PM, Rui Ueyama wrote:
> Could you elaborate a bit about the issue that you are trying to solve
> with this suggestion?
>
>
> On Tue, Apr 1, 2014 at 9:27 PM, Shankar Easwaran
> <shankare at codeaurora.org <mailto:shankare at codeaurora.org>> wrote:
>
> Hi Nick, Bigcheese,
>
> Resurrecting a old thread.
>
> Now since we have a Registry that models Readers, do we want to
> have a function in the Registry that evaluates whether a file
> should be parsed into atoms (or) raise an appropriate error ?
>
> I would think the output architecture could be chosen from the
> first file that was parsed, I think each flavor's LinkingContext
> should store a field pointing to the architecture of the first
> input file that was tried to be parsed.
>
> Thanks
>
> Shankar Easwaran
>
>
> On 10/7/2013 3:50 PM, Shankar Easwaran wrote:
>
> On 10/7/2013 3:23 PM, Nick Kledzik wrote:
>
> On Oct 4, 2013, at 8:50 PM, Shankar Easwaran
> <shankare at codeaurora.org <mailto:shankare at codeaurora.org>>
> wrote:
>
> It is needed that lld verifies the input to the linker.
>
> For example : a x86 ELF file can be given to lld when
> the target is x86_64. Similiarly with other flavors.
>
> I was thinking to have a varargs function in the
> LinkingContext that would be overridden by each of the
> LinkingContexts to verify files after being read.
>
> The reader would call the varargs function in the
> LinkingContext and raise an error if the input is not
> suitable with the current link mode.
>
> Yes. We need a way to error out if there is an
> architecture mismatch. But there are some interesting
> scenarios we need to support.
>
> Ok. will create a varArg function (verifyArch ?)
>
> I am trying to see if variadic functions would be another
> alternative too.
>
> * If linking with a static library, you may not know until
> you actually need to load one of the members if the
> architecture is wrong, and it may not be an error if the
> architecture is wrong, but nothing is loaded.
>
> * It might be a warning instead of an error to link
> against a shared library of the wrong architecture. That
> is, the linker may need to ignore (and warn) but continue
> and try to complete the link without it.
>
> * The mach-o linker also allows you to not specify the
> architecture on the command line. Instead the linker
> infers the architecture by looking at the first object
> file. This is mostly used in -r mode. So, where the
> check is done to see that the arch is correct, may
> actually cause the architecture in the LinkingContext to
> be set.
>
> For lld, I think the flavor also would need to be inferred
> from the first object, isnt it ?
>
>
> * mach-o also has “fat” files which can contain multiple
> architectures. So, the reader needs to know the arch to
> even try to parse. In other words, if the Reader is told
> the intended arch, the Reader could error out if the file
> is not of that arch (and for mach-o the Reader would
> select the right slice in a fat file).
>
> Since all of the code ends up within the parseFile function in
> the Reader, we should be able to query LinkingContext and
> return an actual error/warning on a need basis and only on
> valid scenarios.
>
> Thanks
>
> Shankar Easwaran
>
>
>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
> hosted by the Linux Foundation
>
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140401/bc214416/attachment.html>
More information about the llvm-dev
mailing list