Handle pack_relocations in linker.cc

When pack_relocations is false and clang lld is used,
pass --pack-dyn-relocs=none to lld.

Bug: 80093890
Test: build and boot with USE_CLANG_LLD=true
Change-Id: I0ffe77a111d7fbab5afaa1395d09734a8a390e09
This commit is contained in:
Chih-Hung Hsieh
2018-05-23 18:30:46 -07:00
parent 4a789b1c3d
commit 8681471e70
3 changed files with 14 additions and 1 deletions

View File

@@ -122,6 +122,13 @@ type BaseLinkerProperties struct {
Use_version_lib *bool `android:"arch_variant"`
}
// TODO(http://b/80437643): BaseLinkerProperties is getting too big,
// more than 2^16 bytes. New properties are defined in MoreBaseLinkerProperties.
type MoreBaseLinkerProperties struct {
// Generate compact dynamic relocation table, default true.
Pack_relocations *bool `android:"arch_variant"`
}
func NewBaseLinker() *baseLinker {
return &baseLinker{}
}
@@ -129,6 +136,7 @@ func NewBaseLinker() *baseLinker {
// baseLinker provides support for shared_libs, static_libs, and whole_static_libs properties
type baseLinker struct {
Properties BaseLinkerProperties
MoreProperties MoreBaseLinkerProperties
dynamicProperties struct {
RunPaths []string `blueprint:"mutated"`
}
@@ -147,7 +155,7 @@ func (linker *baseLinker) linkerInit(ctx BaseModuleContext) {
}
func (linker *baseLinker) linkerProps() []interface{} {
return []interface{}{&linker.Properties, &linker.dynamicProperties}
return []interface{}{&linker.Properties, &linker.MoreProperties, &linker.dynamicProperties}
}
func (linker *baseLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
@@ -256,6 +264,9 @@ func (linker *baseLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
if flags.Clang && linker.useClangLld(ctx) {
flags.LdFlags = append(flags.LdFlags, fmt.Sprintf("${config.%sGlobalLldflags}", hod))
if !BoolDefault(linker.MoreProperties.Pack_relocations, true) {
flags.LdFlags = append(flags.LdFlags, "-Wl,--pack-dyn-relocs=none")
}
} else {
flags.LdFlags = append(flags.LdFlags, fmt.Sprintf("${config.%sGlobalLdflags}", hod))
}