Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SPARC][IAS] Set correct ELF flag values for VIS & VIS2-enabled objects #130966

Conversation

koachan
Copy link
Contributor

@koachan koachan commented Mar 12, 2025

No description provided.

Created using spr 1.3.5
@llvmbot llvmbot added backend:Sparc mc Machine (object) code labels Mar 12, 2025
@llvmbot
Copy link
Member

llvmbot commented Mar 12, 2025

@llvm/pr-subscribers-backend-sparc

Author: Koakuma (koachan)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/130966.diff

2 Files Affected:

  • (modified) llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp (+8)
  • (added) llvm/test/MC/Sparc/elf-sparc-feature.s (+11)
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp
index 3205d06b295ee..6dd89849a2b71 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp
@@ -27,6 +27,14 @@ static unsigned getEFlagsForFeatureSet(const MCSubtargetInfo &STI) {
   if (STI.hasFeature(Sparc::FeatureV8Plus))
     EFlags |= ELF::EF_SPARC_32PLUS;
 
+  if (STI.hasFeature(Sparc::FeatureVIS))
+    EFlags |= ELF::EF_SPARC_SUN_US1;
+
+  if (STI.hasFeature(Sparc::FeatureVIS2))
+    EFlags |= ELF::EF_SPARC_SUN_US3;
+
+  // VIS 3 and other ISA extensions doesn't set any flags.
+
   return EFlags;
 }
 
diff --git a/llvm/test/MC/Sparc/elf-sparc-feature.s b/llvm/test/MC/Sparc/elf-sparc-feature.s
new file mode 100644
index 0000000000000..db30396c950f1
--- /dev/null
+++ b/llvm/test/MC/Sparc/elf-sparc-feature.s
@@ -0,0 +1,11 @@
+## Emit correct SPARC v9 ELF flags depending on feature options.
+## - `-mattr=+vis` sets the EF_SPARC_SUN_US1 flag; and
+## - `-mattr=+vis2` sets the EF_SPARC_SUN_US3 flag.
+
+# RUN: llvm-mc -filetype=obj -triple sparcv9              %s -o - | llvm-readobj -h - | FileCheck --check-prefixes=COMMON      -DFLAG_VALUE=0x0                                %s
+# RUN: llvm-mc -filetype=obj -triple sparcv9 -mattr=+vis  %s -o - | llvm-readobj -h - | FileCheck --check-prefixes=COMMON,FLAG -DFLAG_VALUE=0x200 -DFLAG_NAME=EF_SPARC_SUN_US1 %s
+# RUN: llvm-mc -filetype=obj -triple sparcv9 -mattr=+vis2 %s -o - | llvm-readobj -h - | FileCheck --check-prefixes=COMMON,FLAG -DFLAG_VALUE=0x800 -DFLAG_NAME=EF_SPARC_SUN_US3 %s
+
+# COMMON:      Flags [ ([[FLAG_VALUE]])
+# FLAG:          [[FLAG_NAME]]
+# COMMON-NEXT: ]

@llvmbot
Copy link
Member

llvmbot commented Mar 12, 2025

@llvm/pr-subscribers-mc

Author: Koakuma (koachan)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/130966.diff

2 Files Affected:

  • (modified) llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp (+8)
  • (added) llvm/test/MC/Sparc/elf-sparc-feature.s (+11)
diff --git a/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp b/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp
index 3205d06b295ee..6dd89849a2b71 100644
--- a/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp
+++ b/llvm/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp
@@ -27,6 +27,14 @@ static unsigned getEFlagsForFeatureSet(const MCSubtargetInfo &STI) {
   if (STI.hasFeature(Sparc::FeatureV8Plus))
     EFlags |= ELF::EF_SPARC_32PLUS;
 
+  if (STI.hasFeature(Sparc::FeatureVIS))
+    EFlags |= ELF::EF_SPARC_SUN_US1;
+
+  if (STI.hasFeature(Sparc::FeatureVIS2))
+    EFlags |= ELF::EF_SPARC_SUN_US3;
+
+  // VIS 3 and other ISA extensions doesn't set any flags.
+
   return EFlags;
 }
 
diff --git a/llvm/test/MC/Sparc/elf-sparc-feature.s b/llvm/test/MC/Sparc/elf-sparc-feature.s
new file mode 100644
index 0000000000000..db30396c950f1
--- /dev/null
+++ b/llvm/test/MC/Sparc/elf-sparc-feature.s
@@ -0,0 +1,11 @@
+## Emit correct SPARC v9 ELF flags depending on feature options.
+## - `-mattr=+vis` sets the EF_SPARC_SUN_US1 flag; and
+## - `-mattr=+vis2` sets the EF_SPARC_SUN_US3 flag.
+
+# RUN: llvm-mc -filetype=obj -triple sparcv9              %s -o - | llvm-readobj -h - | FileCheck --check-prefixes=COMMON      -DFLAG_VALUE=0x0                                %s
+# RUN: llvm-mc -filetype=obj -triple sparcv9 -mattr=+vis  %s -o - | llvm-readobj -h - | FileCheck --check-prefixes=COMMON,FLAG -DFLAG_VALUE=0x200 -DFLAG_NAME=EF_SPARC_SUN_US1 %s
+# RUN: llvm-mc -filetype=obj -triple sparcv9 -mattr=+vis2 %s -o - | llvm-readobj -h - | FileCheck --check-prefixes=COMMON,FLAG -DFLAG_VALUE=0x800 -DFLAG_NAME=EF_SPARC_SUN_US3 %s
+
+# COMMON:      Flags [ ([[FLAG_VALUE]])
+# FLAG:          [[FLAG_NAME]]
+# COMMON-NEXT: ]

@koachan koachan requested review from brad0, rorth and s-barannikov March 12, 2025 14:02
@koachan
Copy link
Contributor Author

koachan commented Mar 19, 2025

Ping?

@koachan koachan merged commit da01a18 into main Mar 23, 2025
14 checks passed
@koachan koachan deleted the users/koachan/spr/sparcias-set-correct-elf-flag-values-for-vis-vis2-enabled-objects branch March 23, 2025 14:02
llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Mar 23, 2025
…abled objects

Reviewers: brad0, s-barannikov, rorth

Reviewed By: s-barannikov

Pull Request: llvm/llvm-project#130966
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:Sparc mc Machine (object) code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants