Skip to content

Commit 1d381ac

Browse files
[MC][BPF] Avoid generating .note.GNU-stack section (#159960)
The kernel libbpf does not need .note.GNU-stack section. If not filtering out in llvm, the section will be filtered out in libbpf. So let us filter it out as early as possible which is in llvm. Change function getNonexecutableStackSection() in MCAsmInfoELF.h from 'final' to 'override' so target (e.g. BPF) can decide whether '.note.GNU-stack' section should be emitted or not. The following is an example. $ cat t.c int test() { return 5; } Without this change: $ llvm-readelf -S t.o [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 [ 1] .strtab STRTAB 0000000000000000 000110 000047 00 0 0 1 [ 2] .text PROGBITS 0000000000000000 000040 000010 00 AX 0 0 8 [ 3] .comment PROGBITS 0000000000000000 000050 000072 01 MS 0 0 1 [ 4] .note.GNU-stack PROGBITS 0000000000000000 0000c2 000000 00 0 0 1 [ 5] .llvm_addrsig LLVM_ADDRSIG 0000000000000000 000110 000000 00 E 6 0 1 [ 6] .symtab SYMTAB 0000000000000000 0000c8 000048 18 1 2 8 $ llvm-readelf -S t.o [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 [ 1] .strtab STRTAB 0000000000000000 000110 000037 00 0 0 1 [ 2] .text PROGBITS 0000000000000000 000040 000010 00 AX 0 0 8 [ 3] .comment PROGBITS 0000000000000000 000050 000072 01 MS 0 0 1 [ 4] .llvm_addrsig LLVM_ADDRSIG 0000000000000000 000110 000000 00 E 5 0 1 [ 5] .symtab SYMTAB 0000000000000000 0000c8 000048 18 1 2 8
1 parent 218898e commit 1d381ac

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

llvm/include/llvm/MC/MCAsmInfoELF.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace llvm {
1515

1616
class MCAsmInfoELF : public MCAsmInfo {
1717
virtual void anchor();
18-
MCSection *getNonexecutableStackSection(MCContext &Ctx) const final;
18+
MCSection *getNonexecutableStackSection(MCContext &Ctx) const override;
1919
void printSwitchToSection(const MCSection &, uint32_t, const Triple &,
2020
raw_ostream &) const final;
2121
bool useCodeAlign(const MCSection &Sec) const final;

llvm/lib/Target/BPF/MCTargetDesc/BPFMCAsmInfo.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ class BPFMCAsmInfo : public MCAsmInfoELF {
4848
void setDwarfUsesRelocationsAcrossSections(bool enable) {
4949
DwarfUsesRelocationsAcrossSections = enable;
5050
}
51+
52+
MCSection *getNonexecutableStackSection(MCContext &Ctx) const override {
53+
return nullptr;
54+
}
5155
};
5256
}
5357

0 commit comments

Comments
 (0)