[llvm-dev] Handling of section vs global name conflicts

Evgenii Stepanov via llvm-dev llvm-dev at lists.llvm.org
Fri Mar 18 13:25:17 PDT 2016


Hi,

currently LLVM does not handle the conflict between a section and a
global _definition_ with the same name well. A section defines a local
symbol with the same name (pointing to the start of the section).
Depending on the order of declarations, LLVM either silently overrides
the section symbol with the global, or crashes with
fatal error: error in backend: symbol 'xxx' is already defined
The latter happens when the conflicting global is emitted when the
section is already created.

See https://llvm.org/bugs/show_bug.cgi?id=26941 for more details and motivation.

I think it would make sense to disallow global definitions with the
same name as a section. Unfortunately, sections are not values, and it
makes it hard to track them (ValueSymbolTable could implement value
renaming in case of conflicts, but there is no direct way of knowing
if the section name is currently in use or not without rescanning the
module). Changing IR representation of sections just for this sounds
like overkill.

Another option is to allow the conflict, and make the global always
override the section symbol. This is easy to do in the integrated
assembler, but it appears that GAS simply does not work this way.


More information about the llvm-dev mailing list