[lld/mac] Support -data_in_code_info, -function_starts flags

These are on by default, but there's also an explicit flag for them.

Differential Revision: https://reviews.llvm.org/D104543
This commit is contained in:
Nico Weber 2021-06-18 11:47:49 -04:00
parent 8120c9e379
commit f7366890c2
4 changed files with 21 additions and 11 deletions

View File

@ -1073,9 +1073,11 @@ bool macho::link(ArrayRef<const char *> argsArr, bool canExitEarly,
config->deadStripDylibs = args.hasArg(OPT_dead_strip_dylibs);
config->demangle = args.hasArg(OPT_demangle);
config->implicitDylibs = !args.hasArg(OPT_no_implicit_dylibs);
config->emitFunctionStarts = !args.hasArg(OPT_no_function_starts);
config->emitFunctionStarts =
args.hasFlag(OPT_function_starts, OPT_no_function_starts, true);
config->emitBitcodeBundle = args.hasArg(OPT_bitcode_bundle);
config->emitDataInCodeInfo = !args.hasArg(OPT_no_data_in_code_info);
config->emitDataInCodeInfo =
args.hasFlag(OPT_data_in_code_info, OPT_no_data_in_code_info, true);
config->dedupLiterals = args.hasArg(OPT_deduplicate_literals);
// FIXME: Add a commandline flag for this too.

View File

@ -904,7 +904,7 @@ def interposable_list : Separate<["-"], "interposable_list">,
Flags<[HelpHidden]>,
Group<grp_rare>;
def no_function_starts : Flag<["-"], "no_function_starts">,
HelpText<"Do not create a table of function start addresses">,
HelpText<"Do not create table of function start addresses">,
Group<grp_rare>;
def no_objc_category_merging : Flag<["-"], "no_objc_category_merging">,
HelpText<"Do not merge Objective-C categories into their classes">,
@ -1169,8 +1169,7 @@ def classic_linker : Flag<["-"], "classic_linker">,
Flags<[HelpHidden]>,
Group<grp_undocumented>;
def data_in_code_info : Flag<["-"], "data_in_code_info">,
HelpText<"This option is undocumented in ld64">,
Flags<[HelpHidden]>,
HelpText<"Emit data-in-code information (default)">,
Group<grp_undocumented>;
def no_data_in_code_info : Flag<["-"], "no_data_in_code_info">,
HelpText<"Do not emit data-in-code information">,
@ -1228,8 +1227,7 @@ def force_symbol_weak : Flag<["-"], "force_symbol_weak">,
Flags<[HelpHidden]>,
Group<grp_undocumented>;
def function_starts : Flag<["-"], "function_starts">,
HelpText<"This option is undocumented in ld64">,
Flags<[HelpHidden]>,
HelpText<"Create table of function start addresses (default)">,
Group<grp_undocumented>;
def i : Flag<["-"], "i">,
HelpText<"This option is undocumented in ld64">,

View File

@ -4,7 +4,7 @@
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/bar.s -o %t/bar.o
# RUN: %lld %t/foo.o %t/bar.o -o %t/main.exe
# RUN: %lld -lSystem %t/foo.o %t/bar.o -o %t/main.exe
# RUN: llvm-otool -l %t/main.exe > %t/objdump
# RUN: llvm-objdump --macho --data-in-code %t/main.exe >> %t/objdump
# RUN: FileCheck %s < %t/objdump
@ -25,11 +25,16 @@
# CHECK-NEXT: [[#%x,TEXT + 28]] 24 JUMP_TABLE32
# CHECK-NEXT: [[#%x,TEXT + 68]] 12 JUMP_TABLE32
# RUN: %lld %t/foo.o %t/bar.o -no_data_in_code_info -o %t/main.exe
# RUN: %lld -lSystem %t/foo.o %t/bar.o -no_data_in_code_info -o %t/main.exe
# RUN: llvm-otool -l %t/main.exe | FileCheck --check-prefix=OMIT %s
# OMIT-NOT: LC_DATA_IN_CODE
# RUN: %lld -lSystem %t/foo.o %t/bar.o -no_data_in_code_info -data_in_code_info -o %t/main.exe
# RUN: llvm-otool -l %t/main.exe > %t/objdump
# RUN: llvm-objdump --macho --data-in-code %t/main.exe >> %t/objdump
# RUN: FileCheck %s < %t/objdump
#--- foo.s
.text
.globl _main

View File

@ -3,7 +3,7 @@
# RUN: rm -rf %t; split-file %s %t
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/basic.s -o %t/basic.o
# RUN: %lld %t/basic.o -o %t/basic
# RUN: %lld -lSystem %t/basic.o -o %t/basic
# RUN: llvm-objdump --syms %t/basic > %t/objdump
# RUN: llvm-objdump --macho --function-starts %t/basic >> %t/objdump
# RUN: FileCheck %s --check-prefix=BASIC < %t/objdump
@ -18,7 +18,7 @@
# BASIC: [[#MAIN]]
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/alias.s -o %t/alias.o
# RUN: %lld %t/alias.o -o %t/alias
# RUN: %lld -lSystem %t/alias.o -o %t/alias
# RUN: llvm-objdump --syms %t/alias > %t/objdump
# RUN: llvm-objdump --macho --function-starts %t/alias >> %t/objdump
# RUN: FileCheck %s --check-prefix=ALIAS < %t/objdump
@ -36,6 +36,11 @@
# NO-FUNCTION-STARTS: basic-no-function-starts:
# NO-FUNCTION-STARTS-EMPTY:
# RUN: %lld -lSystem %t/basic.o -no_function_starts -function_starts -o %t/basic-explicit
# RUN: llvm-objdump --syms %t/basic > %t/objdump
# RUN: llvm-objdump --macho --function-starts %t/basic >> %t/objdump
# RUN: FileCheck %s --check-prefix=BASIC < %t/objdump
#--- basic.s
.section __TEXT,__text,regular,pure_instructions
.globl _f1