This does *NOT* change the emitted section flags in any way. This only impacts the internal classification of sections. Extend the section classification in LLVM for ELF targets. This has one important change: we now classify sections as text by default rather than readonly. This matches the behaviour for GAS better. Ensure that any section that has a writable attribute set is not treated as readonly. We also special case any section named `.debug_` which is reserved for DWARF as metadata. In the case none of the attributes are set (or because no attributes were provided), consult the section name for classification. We match the well known names and classify the section accordingly. Any remaining section is now classified as text. This change allows us to classify sections in the MC layer more precisely which is needed for subsequent changes for handling target specific behaviour. Re-apply the change that was reverted with additional changes to classify section prefixes appropriately and differentiate the TLS sections, addressing the FIXME and post-commit review comments by @MaskRay. Differential Revision: https://reviews.llvm.org/D133456 Reviewed By: @MaskRay
16 lines
689 B
LLVM
16 lines
689 B
LLVM
; We run this test explicitly converting from `.ll` to `.s` to `.o` to test the
|
|
; classification of the section and the incorrect handling for the padding flag.
|
|
|
|
; RUN: llc -filetype asm -o - %s | llvm-mc -triple x86_64-unknown-linux-gnu -filetype obj -o /dev/null -
|
|
; REQUIRES: asserts
|
|
|
|
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
%struct.C = type { i32 }
|
|
|
|
$_ZZ6getRefvE8instance = comdat any
|
|
|
|
@_ZZ6getRefvE8instance = linkonce_odr dso_local global %struct.C zeroinitializer, comdat, align 4
|
|
@llvm.compiler.used = appending global [1 x ptr] [ptr @_ZZ6getRefvE8instance], section "llvm.metadata"
|