While I agree this is bad design, GNU ld assumes the situation is a valid situation when deciding what veneer to choose. In this case, you are branching to something which is not marked as being a function and GNU ld do something stupid (choose a default veneer that does interworking) instead of giving an error. I suppose when you strip the symbol GNU ld will try to detect the type of the symbol instead of relying on what the symbol table says.
Hi,
While I agree this is bad design, GNU ld assumes the situation is a valid situation when deciding what veneer to choose. In this case, you are branching to something which is not marked as being a function and GNU ld do something stupid (choose a default veneer that does interworking) instead of giving an error. I suppose when you strip the symbol GNU ld will try to detect the type of the symbol instead of relying on what the symbol table says.