HomePhabricator

[MC] Emit unused undefined symbol even if its binding is not set
Audit RequiredrL373168

Description

[MC] Emit unused undefined symbol even if its binding is not set

For the following two cases, we currently suppress the symbols. This
patch emits them (compatible with GNU as).

  • test2_a = undef: if undef is otherwise unused.
  • .hidden hidden: if hidden is unused. This is the main point of the patch, because omitting the symbol would cause a linker semantic difference.

It causes a behavior change that is not compatible with GNU as:

.weakref foo1, bar1

When neither foo1 nor bar1 is used, we now emit bar1, which is arguably
more consistent.

Another change is that we will emit .TOC. for .TOC.@tocbase . For this
directive, suppressing .TOC. can be seen as a size optimization, but we
choose to drop it for simplicity and consistency.

Details

Auditors
grosbach
Bigcheese
Committed
MaskRaySep 29 2019, 8:26 AM
Parents
rL373167: [DivRemPairs] Don't assert that we won't ever get expanded-form rem pairs in…
Branches
Unknown
Tags
Unknown

Event Timeline

This commit now requires audit.Sep 29 2019, 8:25 AM

Heads up: This is causing an error when building Chrome on ARM32 (Thumb2):

File: https://cs.chromium.org/chromium/src/third_party/boringssl/linux-arm/crypto/fipsmodule/vpaes-armv7.S
clang -cc1as: fatal error: error in backend: Size expression must be absolute.

Opened PR43518 with repro instructions.

Heads up: This is causing an error when building Chrome on ARM32 (Thumb2):

File: https://cs.chromium.org/chromium/src/third_party/boringssl/linux-arm/crypto/fipsmodule/vpaes-armv7.S
clang -cc1as: fatal error: error in backend: Size expression must be absolute.

Hi, I think this patch is correct, the boringssl file has a bug. See https://bugs.llvm.org/show_bug.cgi?id=43511#c3