Skip to content

Commit e3d71e1

Browse files
author
Dan Gohman
committed
[WebAssembly] Enable -fvisibility=hidden by default.
This, along with many things in the WebAssembly target, is experimental. Feedback is welcome. llvm-svn: 257006
1 parent a5b804b commit e3d71e1

File tree

5 files changed

+43
-23
lines changed

5 files changed

+43
-23
lines changed

clang/lib/Driver/Tools.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2069,6 +2069,16 @@ void Clang::AddHexagonTargetArgs(const ArgList &Args,
20692069
CmdArgs.push_back("-machine-sink-split=0");
20702070
}
20712071

2072+
void Clang::AddWebAssemblyTargetArgs(const ArgList &Args,
2073+
ArgStringList &CmdArgs) const {
2074+
// Default to "hidden" visibility.
2075+
if (!Args.hasArg(options::OPT_fvisibility_EQ,
2076+
options::OPT_fvisibility_ms_compat)) {
2077+
CmdArgs.push_back("-fvisibility");
2078+
CmdArgs.push_back("hidden");
2079+
}
2080+
}
2081+
20722082
// Decode AArch64 features from string like +[no]featureA+[no]featureB+...
20732083
static bool DecodeAArch64Features(const Driver &D, StringRef text,
20742084
std::vector<const char *> &Features) {
@@ -4015,6 +4025,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
40154025
case llvm::Triple::hexagon:
40164026
AddHexagonTargetArgs(Args, CmdArgs);
40174027
break;
4028+
4029+
case llvm::Triple::wasm32:
4030+
case llvm::Triple::wasm64:
4031+
AddWebAssemblyTargetArgs(Args, CmdArgs);
4032+
break;
40184033
}
40194034

40204035
// The 'g' groups options involve a somewhat intricate sequence of decisions

clang/lib/Driver/Tools.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ class LLVM_LIBRARY_VISIBILITY Clang : public Tool {
8282
llvm::opt::ArgStringList &CmdArgs) const;
8383
void AddHexagonTargetArgs(const llvm::opt::ArgList &Args,
8484
llvm::opt::ArgStringList &CmdArgs) const;
85+
void AddWebAssemblyTargetArgs(const llvm::opt::ArgList &Args,
86+
llvm::opt::ArgStringList &CmdArgs) const;
8587

8688
enum RewriteKind { RK_None, RK_Fragile, RK_NonFragile };
8789

clang/test/Driver/wasm-toolchain.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
// A basic clang -cc1 command-line.
1+
// A basic clang -cc1 command-line. WebAssembly is somewhat special in
2+
// enabling -ffunction-sections, -fdata-sections, and -fvisibility=hidden by
3+
// default.
24

35
// RUN: %clang %s -### -target wasm32-unknown-unknown 2>&1 | FileCheck -check-prefix=CC1 %s
4-
// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} "-ffunction-sections" "-fdata-sections"
6+
// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} "-fvisibility" "hidden" {{.*}} "-ffunction-sections" "-fdata-sections"
57

68
// Ditto, but ensure that a user -fno-function-sections disables the
79
// default -ffunction-sections.
@@ -21,7 +23,8 @@
2123
// LINK: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"
2224
// LINK: lld{{.*}}" "-flavor" "ld" "[[temp]]" "-o" "a.out"
2325

24-
// A basic C link command-line with optimization.
26+
// A basic C link command-line with optimization. WebAssembly is somewhat
27+
// special in enabling --gc-sections by default.
2528

2629
// RUN: %clang -### -O2 -no-canonical-prefixes -target wasm32-unknown-unknown %s 2>&1 | FileCheck -check-prefix=LINK_OPT %s
2730
// LINK_OPT: clang{{.*}}" "-cc1" {{.*}} "-o" "[[temp:[^"]*]]"

clang/test/Driver/wasm32-unknown-unknown.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,34 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
1313

1414
extern "C" {
1515

16-
// CHECK: @align_c = global i32 1
16+
// CHECK: @align_c = hidden global i32 1
1717
int align_c = __alignof(char);
1818

19-
// CHECK: @align_s = global i32 2
19+
// CHECK: @align_s = hidden global i32 2
2020
int align_s = __alignof(short);
2121

22-
// CHECK: @align_i = global i32 4
22+
// CHECK: @align_i = hidden global i32 4
2323
int align_i = __alignof(int);
2424

25-
// CHECK: @align_l = global i32 4
25+
// CHECK: @align_l = hidden global i32 4
2626
int align_l = __alignof(long);
2727

28-
// CHECK: @align_ll = global i32 8
28+
// CHECK: @align_ll = hidden global i32 8
2929
int align_ll = __alignof(long long);
3030

31-
// CHECK: @align_p = global i32 4
31+
// CHECK: @align_p = hidden global i32 4
3232
int align_p = __alignof(void*);
3333

34-
// CHECK: @align_f = global i32 4
34+
// CHECK: @align_f = hidden global i32 4
3535
int align_f = __alignof(float);
3636

37-
// CHECK: @align_d = global i32 8
37+
// CHECK: @align_d = hidden global i32 8
3838
int align_d = __alignof(double);
3939

40-
// CHECK: @align_ld = global i32 16
40+
// CHECK: @align_ld = hidden global i32 16
4141
int align_ld = __alignof(long double);
4242

43-
// CHECK: @align_vl = global i32 4
43+
// CHECK: @align_vl = hidden global i32 4
4444
int align_vl = __alignof(va_list);
4545

4646
// CHECK: _GNU_SOURCEdefined

clang/test/Driver/wasm64-unknown-unknown.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,34 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
1313

1414
extern "C" {
1515

16-
// CHECK: @align_c = global i32 1
16+
// CHECK: @align_c = hidden global i32 1
1717
int align_c = __alignof(char);
1818

19-
// CHECK: @align_s = global i32 2
19+
// CHECK: @align_s = hidden global i32 2
2020
int align_s = __alignof(short);
2121

22-
// CHECK: @align_i = global i32 4
22+
// CHECK: @align_i = hidden global i32 4
2323
int align_i = __alignof(int);
2424

25-
// CHECK: @align_l = global i32 8
25+
// CHECK: @align_l = hidden global i32 8
2626
int align_l = __alignof(long);
2727

28-
// CHECK: @align_ll = global i32 8
28+
// CHECK: @align_ll = hidden global i32 8
2929
int align_ll = __alignof(long long);
3030

31-
// CHECK: @align_p = global i32 8
31+
// CHECK: @align_p = hidden global i32 8
3232
int align_p = __alignof(void*);
3333

34-
// CHECK: @align_f = global i32 4
34+
// CHECK: @align_f = hidden global i32 4
3535
int align_f = __alignof(float);
3636

37-
// CHECK: @align_d = global i32 8
37+
// CHECK: @align_d = hidden global i32 8
3838
int align_d = __alignof(double);
3939

40-
// CHECK: @align_ld = global i32 16
40+
// CHECK: @align_ld = hidden global i32 16
4141
int align_ld = __alignof(long double);
4242

43-
// CHECK: @align_vl = global i32 8
43+
// CHECK: @align_vl = hidden global i32 8
4444
int align_vl = __alignof(va_list);
4545

4646
// CHECK: _GNU_SOURCEdefined

0 commit comments

Comments
 (0)