dpaoliello wrote:

> > * Add an unwind v3 pass to chain unwind info if there are too many epilogs 
> > in a function and raise a fatal error if there are too many instructions in 
> > a prolog or epilog.
> 
> Is this expected limitation of unwindv3, or is it some workaround?
> 
> I encountered this problem when trying unwindv3 in an actual codebase:
> 
> ```
> ld.lld: error: <unknown>:0: value of 308819 is too large for field of 2 bytes
> 
> 
> ld.lld: error: undefined symbol: typeinfo for MediaInfoLib::File_Adm
> >>> referenced by mediainfo.exe.lto.obj:(vtable for MediaInfoLib::File_Adm)
> ```

This is a fundamental limitation on unwind v3 - the encoding limits only 
provides so many bits to store counts and offsets.

Do you happen to have a reliable repro for that?

That error happens to be a generic "too big for a fixup" error:
https://github.com/llvm/llvm-project/blob/652915c8bb58dc5e8370fe417f64949207c0f593/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp#L710-L717

We need to know which of the various offsets is too large. Given the size of 
that, I wonder if it is because we're using the offset from the beginning of 
the function to the first epilog and should switch to using the offset from the 
end of the function to the last instead.

https://github.com/llvm/llvm-project/pull/200249
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to