aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorYiFei Zhu <zhuyifei1999@gmail.com>2021-04-22 05:05:57 -0500
committerDavid Faust <david.faust@oracle.com>2021-04-23 09:56:21 -0700
commit886b6c1e8af502b69e3f318b9830b73b88215878 (patch)
treef0c571bf02002a92edeb420d9c6d8b0724c80f95 /gcc/config
parent0a662e103e911af935aa5c601051c135986ce3de (diff)
downloadgcc-886b6c1e8af502b69e3f318b9830b73b88215878.zip
gcc-886b6c1e8af502b69e3f318b9830b73b88215878.tar.gz
gcc-886b6c1e8af502b69e3f318b9830b73b88215878.tar.bz2
bpf: allow BSS symbols to be global symbols
Prior to this, a BSS declaration such as: int foo; static int bar; Generates: .global foo .local foo .comm foo,4,4 .local bar .comm bar,4,4 Creating symbols: 0000000000000000 b foo 0000000000000004 b bar Both symbols are local. However, libbpf bpf_object__variable_offset rquires symbols to be STB_GLOBAL & STT_OBJECT for data section lookup. This patch makes the same declaration generate: .global foo .type foo, @object .lcomm foo,4,4 .local bar .comm bar,4,4 Creating symbols: 0000000000000000 B foo 0000000000000004 b bar And libbpf will be okay with looking up the global symbol "foo". 2021-04-22 YiFei Zhu <zhuyifei1999@gmail.com> gcc/ * config/bpf/bpf.h (ASM_OUTPUT_ALIGNED_BSS): Use .type and .lcomm.
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/bpf/bpf.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/config/bpf/bpf.h b/gcc/config/bpf/bpf.h
index 6a3907f..4c5b19e 100644
--- a/gcc/config/bpf/bpf.h
+++ b/gcc/config/bpf/bpf.h
@@ -422,9 +422,15 @@ enum reg_class
Try to use asm_output_aligned_bss to implement this macro. */
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
- do { \
- ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \
- } while (0)
+ do \
+ { \
+ ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \
+ fprintf ((FILE), "%s", "\t.lcomm\t"); \
+ assemble_name ((FILE), (NAME)); \
+ fprintf ((FILE), "," HOST_WIDE_INT_PRINT_UNSIGNED ",%u\n", \
+ (SIZE), (ALIGN) / BITS_PER_UNIT); \
+ } \
+ while (0)
/*** Output and Generation of Labels. */