https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100483

            Bug ID: 100483
           Summary: Extend -fno-semantic-interposition to global variables
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: i at maskray dot me
  Target Milestone: ---

% cat a.c
int var;
int foo() { return var; }


(I implemented this for clang 11 x86)
% clang -fpic -fno-semantic-interposition -O2 -S a.c
% cat a.s
...
foo:                                    # @foo
.Lfoo$local:
# %bb.0:                                # %entry
        movl    .Lvar$local(%rip), %eax
        retq
...
var:
.Lvar$local:
        .long   0                               # 0x0
        .size   var, 4


# On x86-64, because of R_X86_64_REX_GOTPCRELX, it isn't too bad without the
optimization.
# This is more useful on other architectures without GOT optimization.
# With my clang patch https://reviews.llvm.org/D101873
% clang -target aarch64 -fpic -fno-semantic-interposition
-fno-asynchronous-unwind-tables -O2 -S a.c
% cat a.s
...
foo:                                    // @foo
.Lfoo$local:
// %bb.0:                               // %entry
        adrp    x8, .Lvar$local
        ldr     w0, [x8, :lo12:.Lvar$local]
        ret

Reply via email to